On Sun, 24 Sep 2000 08:31:12 -0500 (CDT), 
Jeff Garzik <[EMAIL PROTECTED]> wrote:
>> On Sat, 23 Sep 2000 20:59:59 -0500 (CDT), 
>> Peter Samuelson <[EMAIL PROTECTED]> wrote:
>> >(A related question: __initdata *does* have to be initialized, right?)
>> 
>> If __initdata is not initialized then it ends up in the global .bss.
>> This would defeat the purpose of using __initdata.
>
>I am glad this was mentioned...  It is a valid use of __initdata for
>static variables which you want to go away after boot.  There might be
>some wasted space lurking here and there due to un-init'd __initdata
>vars.

Another case to look at.  I discovered that

char __initdata *cmd[] = {
        "command1",
        "command2",
        "command3",
        NULL
        };

Stores the 4 pointers of cmd in .init.data but the strings are down in
.rodata, i.e. they are not discarded after init.  I got around it by

static __initdata char str_command1[] = "command1";
static __initdata char str_command2[] = "command2";
static __initdata char str_command3[] = "command3";
char __initdata *cmd[] = {
        str_command1,
        str_command2,
        str_command3,
        NULL
        };

That put the strings in .init.data as well as the array.  This simpler
version might work but I have not tried it.

char __initdata *cmd[] = {
        __initdata "command1",
        __initdata "command2",
        __initdata "command3",
        NULL
        };

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to