IPX and 2.1.5

Jordan Ritter (jpr5@res0752531033.res.lehigh.edu)
Tue, 29 Oct 1996 02:24:17 -0500 (EST)


Alright, I hacked around a little bit with the af_ipx.c stuff in net/ipx/.

My problem was the fact that, right off the bat, I couldn't compile the
2.1.5 kernel (as opposed to the 2.1.3) because when ipx.o was made, the
macros for get_fs_byte and get_fs_long (defined in asm/segment.h) were not
being recognized (and thusly being declared implicitly, so when ipx.o was
included in network.a, the symbol didn't match anything).

2.1.3 compiles fine, so I did a diff on the .3 version of af_ipx.c and the
.5 version.

Aside from the few changes of memcpy_fromfs() to copy_from_user() and all
likenesses, nothing referring to the two instances of get_fs_byte() and
get_fs_long() were changed.

Of course, asm/segment.h is included, and this is a problem I have had in
the past, in other situations - some symbols get clobbered or macros get
ignored. Will someone explain this to me?

I added (a direct cut from segment.h):

> #define put_user(x,ptr) do { (*(ptr)=(x)); } while (0)
> #define get_user(ptr) (*(ptr))
>
> #define get_fs_byte(addr) get_user((const unsigned char *)(addr))
> #define get_fs_long(addr) get_user((const unsigned int *)(addr))

to net/ipx/af_ipx.c.

This *did* generate a warning about where it was previously defined
(making me wonder why it didn't use the macro in the first place), but it
still plodded on and DID compile with no ERRORS.

All I have to say is, WHY was this necessary? I'm using the new gcc
(2.7.2.1.f.1). Any ideas?

Jordan Ritter
Human Touch Technologies