Messages in this thread |  | | From | Keith Owens <> | Subject | Re: how interesting are data->bss patches? | Date | Mon, 25 Sep 2000 00:43:16 +1100 |
| |
On Sun, 24 Sep 2000 08:31:12 -0500 (CDT), Jeff Garzik <jgarzik@mandrakesoft.mandrakesoft.com> wrote: >> On Sat, 23 Sep 2000 20:59:59 -0500 (CDT), >> Peter Samuelson <peter@cadcamlab.org> 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 majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |