diff options
author | Ustyugov Roman <dr_unique@ymg.ru> | 2005-09-23 00:42:11 -0400 |
---|---|---|
committer | Sam Ravnborg <sam@mars.ravnborg.org> | 2005-12-25 18:33:41 -0500 |
commit | f83b5e323f57d6e1f35a839d663e91cebe985e54 (patch) | |
tree | 59e19500a8204abd8e77620b7e80138d5f7fda68 /scripts/mod/modpost.c | |
parent | 4d99f93bdaa1ab49188cac67b4aae9180f8e3960 (diff) |
kbuild: set correct KBUILD_MODNAME when using well known kernel symbols as module names
This patch fixes a problem when we use well known kernel symbols as module
names.
For example, if module source name is current.c, idle_stack.c or etc.,
we have a bad KBUILD_MODNAME value.
For example, KBUILD_MODNAME will be "get_current()" instead of "current", or
"(init_thread_union.stack)" instead of "idle_task".
The trick is to define a stringify macro on the commandline - named
KBUILD_STR for namespace reasons - and then to stringify the module
name.
There are a few uses of KBUILD_MODNAME throughout the tree but the usage
is for debug and will not be harmed by this change so left untouched for now.
While at it KBUILD_BASENAME was changed too. Any spinlock usage in the
unix module would have created wrong section names without it.
Usage in spinlock.h fixed so it no longer stringify KBUILD_BASENAME.
Original patch from Ustyogov Roman - all bugs introduced by me.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'scripts/mod/modpost.c')
-rw-r--r-- | scripts/mod/modpost.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 8ce5a6318684..f70ff13d4818 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
@@ -539,10 +539,9 @@ add_header(struct buffer *b, struct module *mod) | |||
539 | buf_printf(b, "\n"); | 539 | buf_printf(b, "\n"); |
540 | buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n"); | 540 | buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n"); |
541 | buf_printf(b, "\n"); | 541 | buf_printf(b, "\n"); |
542 | buf_printf(b, "#undef unix\n"); /* We have a module called "unix" */ | ||
543 | buf_printf(b, "struct module __this_module\n"); | 542 | buf_printf(b, "struct module __this_module\n"); |
544 | buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n"); | 543 | buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n"); |
545 | buf_printf(b, " .name = __stringify(KBUILD_MODNAME),\n"); | 544 | buf_printf(b, " .name = KBUILD_MODNAME,\n"); |
546 | if (mod->has_init) | 545 | if (mod->has_init) |
547 | buf_printf(b, " .init = init_module,\n"); | 546 | buf_printf(b, " .init = init_module,\n"); |
548 | if (mod->has_cleanup) | 547 | if (mod->has_cleanup) |