psomu@pilot.njin.net (Prabhakar Somu) (02/18/91)
Hi,
I am trying to recompile a device driver on Irix 3.3.1 (4D70GT)
which used to compile and work just fine on Irix 3.2. I have the
following problems:
i) One of the modules in the driver uses the user structure
"u" defined in /usr/include/sys/user.h as : (beginning line 205)
#ifdef _KERNEL
/* comments */
#define u (*(struct user *)UADDR)
/* comments */
struct user *up;
#endif
The same structure was defined in the 3.2 include file
/usr/include/sys/user.h similarly except that "_KERNEL"
was "KERNEL" and the actual address was used instead of UADDR.
When I tried to compile this module the C compiler says u
is undefined:
ccom: Error: ./axioctl.c, line 199: u undefined
{ u.u_error = 22 ; return(22 ); }
-----^
Can I can explicitly define u in my source ? Do I have to explicitly
#define _KERNEL ? I didn't have to do either in Irix 3.2 .
ii) There also seems to be a name clash in the following two files
on Irix 3.3.1
In the file "/usr/include/sys/systm.h" line 34 reads:
extern time_t time;
and in the file "/usr/include/time.h" line 63 reads:
extern time_t time(time_t *);
Is that a bug/Feature ? Were the two files not supposed to be
used in conjuntion with each other ? Or, am I misunderstanding
something?
Any help/suggestions will be greatly appreciated.
Thanks,
/somu somu@mirage.umdnj.edu
or
psomu@pilot.njin.net
--
() __ _ _ _ _ __
/\ / ') ' ) ) ) ' ) /
/ ) / / / / / / /
/__/_ (__/ / ' (_ (__/olson@anchor.esd.sgi.com (Dave Olson) (02/19/91)
In <Feb.17.19.52.27.1991.19030@pilot.njin.net> psomu@pilot.njin.net (Prabhakar Somu) writes: | Hi, | | I am trying to recompile a device driver on Irix 3.3.1 (4D70GT) | which used to compile and work just fine on Irix 3.2. I have the | following problems: | | i) One of the modules in the driver uses the user structure | "u" defined in /usr/include/sys/user.h as : (beginning line 205) | Can I can explicitly define u in my source ? Do I have to explicitly | #define _KERNEL ? I didn't have to do either in Irix 3.2 . Do not redefine u if you expect your driver to keep working, as it may change in future releases... You should be defining _KERNEL, instead of KERNEL. 3.2 had KERNEL in some places, INKERNEL in others. To reduce name space pollution, it was changed to _KERNEL. Given the __ rules for ANSI C, we probably should have made it __KERNEL, and may in some future release. This might have made it into the release notes, I'm not sure. | ii) There also seems to be a name clash in the following two files | on Irix 3.3.1 | | In the file "/usr/include/sys/systm.h" line 34 reads: | extern time_t time; | and in the file "/usr/include/time.h" line 63 reads: | extern time_t time(time_t *); No problem here either, once you get your defines right. systm.h should be used in the kernel only. include/sys/time.h only includes <time.h> if _KERNEL is not defined. -- Dave Olson Life would be so much easier if we could just look at the source code.