> -----Original Message-----
> From: Stuart Hughes [SMTP:[EMAIL PROTECTED]]
> Sent: Wednesday, February 23, 2000 6:39 AM
> To:   David Schleef
> Cc:   rtlinux
> Subject:      Re: [rtl] Problem loading modules
> 
> David Schleef wrote:
> > 
> > On Tue, Feb 22, 2000 at 12:51:11PM +0000, Stuart Hughes wrote:
> > >
> > > Note also the following compiler feature:
> > >
> > > If have in your RT code:
> > >
> > >       char buf[12] = "mystring";
> > >
> > > You get an error, due to an implicit call to memset.
> > 
> > Nope.  gcc-2.7.2.3 outputs assembly instructions that perform
> > the memcpy, even with very long strings.
> 
> Hi Dave, 
> 
> That's weird, this is what I get (gcc version 2.7.2.3).  If I compile
> the code below using:
> 
> cc -O2 -g -D__KERNEL__ -DMODULE -c -o para_mod.o para.c
> 
> and then try to insmod para_mod.o, I get the following:
> 
> ./para_mod.o: unresolved symbol memset
> 
> If I comment out the first version and uncomment the second, everything
> works ???
> 
> Any ideas ??
> 
        [Norm Says:]  
        The first form ( char buff[12]="test"; ) creates the string "test"
somewhere in memory and then when the function init_module is entered, space
is made on the stack for the buf[] array and the string is copied from the
string to the array.

        The second form ( char *buff="test";) also creates the string "test"
in memory -- probably in the same place as the first -- but when the
function init_module is entered, just the space for a char-pointer is made
on the stack and the pointer is initialized with the addess of the string;
no copying is done, just the storing of a "numeric" data item on the stack
(possibly even a push of immediate data).

        It's all perfectly logical.

                Norm

> Regards, Stuart
> 
> 
> // System headers.
> #include <linux/module.h>
> #include <asm/io.h>
> 
> int init_module(void)
> {
>     char buf[12] = "test";              // fails, calls implicit memset
> //    char *buf = "test";               // Okay
>     printk(buf);
> 
>     return 0;
> }
> 
> void cleanup_module(void)
> {
> }
> 
> 
> -- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
> echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
> ---
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/~rtlinux/
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/~rtlinux/

Reply via email to