2002-09-26 22:44:47

by Shaya Potter

[permalink] [raw]
Subject: using memset in a module

I have a problem using memset in a module.

I've tried including <linux/string.h> or <asm/string.h> but whenever I
compile with gcc 2.95, the resulting object has memset being an
undefined symbol. When I compile with gcc-3.2 it works right as is
inline in the code and there's no symbol.

has anyone seen this b4? Is this a gcc bug? a kernel header bug? a bug
in my coding (i.e. does one have to do anything else besides include
<linux or asm/string.h> or have special gcc cmd line options that are
different from whats normally needed for a module).

if it matters, I'm using the debian gcc's

spotter@zaphod:~/cvs/zap/virtualization$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)

and (cutting the cruft)
gcc version 3.2.1 20020924 (Debian prerelease)

thanks,

shaya potter (tearing his hair out)


2002-09-26 22:55:39

by Shaya Potter

[permalink] [raw]
Subject: Re: using memset in a module

On Thu, 2002-09-26 at 18:49, David S. Miller wrote:
> From: Shaya Potter <[email protected]>
> Date: 26 Sep 2002 18:49:22 -0400
>
> I have a problem using memset in a module.
>
> You cannot use different compilers to build modules than
> were used to build the kernel itself.
>
> If 2.95 was used to build the kernel, and you then try to
> use gcc-3.{0,1,2} to build a module that resulting module
> will have little chance of working.

I know that, gcc-3.2 was an act of desperation after gcc-2.95 wasn't
working at all. I just wanted to see if it made a diff and it did,
didnt even bother try loading the resulting .o

shaya

2002-09-26 22:52:29

by Randy.Dunlap

[permalink] [raw]
Subject: Re: using memset in a module

On 26 Sep 2002, Shaya Potter wrote:

| I have a problem using memset in a module.
|
| I've tried including <linux/string.h> or <asm/string.h> but whenever I
| compile with gcc 2.95, the resulting object has memset being an
| undefined symbol. When I compile with gcc-3.2 it works right as is
| inline in the code and there's no symbol.
|
| has anyone seen this b4? Is this a gcc bug? a kernel header bug? a bug
| in my coding (i.e. does one have to do anything else besides include
| <linux or asm/string.h> or have special gcc cmd line options that are
| different from whats normally needed for a module).
|
| if it matters, I'm using the debian gcc's
|
| spotter@zaphod:~/cvs/zap/virtualization$ gcc -v
| Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
| gcc version 2.95.4 20011002 (Debian prerelease)
|
| and (cutting the cruft)
| gcc version 3.2.1 20020924 (Debian prerelease)

What gcc options are you using?
You need -O2 at least.
^ upper-case letter O

--
~Randy

2002-09-26 22:51:10

by David Miller

[permalink] [raw]
Subject: Re: using memset in a module

From: Shaya Potter <[email protected]>
Date: 26 Sep 2002 18:49:22 -0400

I have a problem using memset in a module.

You cannot use different compilers to build modules than
were used to build the kernel itself.

If 2.95 was used to build the kernel, and you then try to
use gcc-3.{0,1,2} to build a module that resulting module
will have little chance of working.

2002-09-26 22:57:55

by Shaya Potter

[permalink] [raw]
Subject: Re: using memset in a module

On Thu, 2002-09-26 at 18:51, Randy.Dunlap wrote:
> On 26 Sep 2002, Shaya Potter wrote:
>
> | I have a problem using memset in a module.
> |
> | I've tried including <linux/string.h> or <asm/string.h> but whenever I
> | compile with gcc 2.95, the resulting object has memset being an
> | undefined symbol. When I compile with gcc-3.2 it works right as is
> | inline in the code and there's no symbol.
> |
> | has anyone seen this b4? Is this a gcc bug? a kernel header bug? a bug
> | in my coding (i.e. does one have to do anything else besides include
> | <linux or asm/string.h> or have special gcc cmd line options that are
> | different from whats normally needed for a module).
> |
> | if it matters, I'm using the debian gcc's
> |
> | spotter@zaphod:~/cvs/zap/virtualization$ gcc -v
> | Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
> | gcc version 2.95.4 20011002 (Debian prerelease)
> |
> | and (cutting the cruft)
> | gcc version 3.2.1 20020924 (Debian prerelease)
>
> What gcc options are you using?
> You need -O2 at least.
> ^ upper-case letter O


yes, using it.

gcc -Wall -DMODULE -DMODVERSIONS -D__KERNEL__ -DLINUX -DEXPORT_SYMTAB
-I/usr/src/linux/include/ -I`pwd`/../migration
-I`pwd`/..//virtualization -O2 -fomit-frame-pointer -pipe
-fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2
-o fs1.o -c virtualizers/fs1.c


2002-09-27 15:15:59

by Dan Aloni

[permalink] [raw]
Subject: Re: using memset in a module

On Thu, Sep 26, 2002 at 07:02:26PM -0400, Shaya Potter wrote:
> On Thu, 2002-09-26 at 18:51, Randy.Dunlap wrote:
> > On 26 Sep 2002, Shaya Potter wrote:
> >
> > | I have a problem using memset in a module.
> > |
[snio]
> > What gcc options are you using?
> > You need -O2 at least.
> > ^ upper-case letter O
>
>
> yes, using it.
>
> gcc -Wall -DMODULE -DMODVERSIONS -D__KERNEL__ -DLINUX -DEXPORT_SYMTAB
> -I/usr/src/linux/include/ -I`pwd`/../migration
> -I`pwd`/..//virtualization -O2 -fomit-frame-pointer -pipe
> -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2
> -o fs1.o -c virtualizers/fs1.c

Try adding -nostdinc. Prehaps memset is picked up as 'extern' somehow.
If that doesn't work, compile with -E instead of -c and grep the
preprocessing output for memset, that may give a clue.

--
Dan Aloni
[email protected]

2002-09-27 16:55:22

by Shaya Potter

[permalink] [raw]
Subject: Re: using memset in a module

the problem was I was trying to use some gcc specific behavior.

i.e.

char devpts[15] = "/dev/pts";

under 2.95 since memset isn't a builtin there has to be a reference to
it, while under 2.96/3.2 there is a builtin, so there's no symbol
needed.

On Fri, 2002-09-27 at 11:20, Dan Aloni wrote:
> On Thu, Sep 26, 2002 at 07:02:26PM -0400, Shaya Potter wrote:
> > On Thu, 2002-09-26 at 18:51, Randy.Dunlap wrote:
> > > On 26 Sep 2002, Shaya Potter wrote:
> > >
> > > | I have a problem using memset in a module.
> > > |
> [snio]
> > > What gcc options are you using?
> > > You need -O2 at least.
> > > ^ upper-case letter O
> >
> >
> > yes, using it.
> >
> > gcc -Wall -DMODULE -DMODVERSIONS -D__KERNEL__ -DLINUX -DEXPORT_SYMTAB
> > -I/usr/src/linux/include/ -I`pwd`/../migration
> > -I`pwd`/..//virtualization -O2 -fomit-frame-pointer -pipe
> > -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2
> > -o fs1.o -c virtualizers/fs1.c
>
> Try adding -nostdinc. Prehaps memset is picked up as 'extern' somehow.
> If that doesn't work, compile with -E instead of -c and grep the
> preprocessing output for memset, that may give a clue.
>
> --
> Dan Aloni
> [email protected]
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/