diff options
author | Sam Ravnborg <sam@mars.ravnborg.org> | 2004-08-15 15:54:27 +0200 |
---|---|---|
committer | Sam Ravnborg <sam@mars.ravnborg.org> | 2004-08-15 15:54:27 +0200 |
commit | 8f36d53f6f2b3a5758a0b6f894d76051cf94403c (patch) | |
tree | 2abc749b27efc8fa4449df369ff78e8740c0fced /scripts | |
parent | df9b2cbabd37daacece62bcd1be4593960d249d4 (diff) | |
download | history-8f36d53f6f2b3a5758a0b6f894d76051cf94403c.tar.gz |
kbuild: Bogus "has no CRC" in external module builds
From: Pavel Roskin <proski@gnu.org>
The recent fixes for the external module build have fixed the major
breakage, but they left one annoyance unfixed. If CONFIG_MODVERSIONS is
disabled, a warning is printed for every exported symbol that is has no
CRC. For instance, I see this when compiling the standalone Orinoco
driver on Linux 2.6.6-rc3:
*** Warning: "__orinoco_down" [/usr/local/src/orinoco/spectrum_cs.ko] has
no CRC!
*** Warning: "hermes_struct_init" [/usr/local/src/orinoco/spectrum_cs.ko]
has no CRC!
*** Warning: "free_orinocodev" [/usr/local/src/orinoco/spectrum_cs.ko] has
no CRC!
[further warnings skipped]
I have found that the "-i" option for modpost is used for external builds,
whereas the internal modules use "-o". The "-i" option causes read_dump()
in modpost.c to be called. This function sets "modversions" variable
under some conditions that I don't understand. The comment before the
modversions declarations says: "Are we using CONFIG_MODVERSIONS?"
Apparently modpost fails to answer this question. I think it's better to
use an explicit option rather than a kludge.
The attached patch adds a new option "-m" that is specified if and only if
CONFIG_MODVERSIONS is enabled. The patch has been successfully tested
both with and without CONFIG_MODVERSIONS.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Makefile.modpost | 3 | ||||
-rw-r--r-- | scripts/mod/modpost.c | 7 |
2 files changed, 6 insertions, 4 deletions
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 19f5345279ac56..c5d201f660c9fc 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -50,7 +50,8 @@ _modpost: $(modules) # Step 2), invoke modpost # Includes step 3,4 quiet_cmd_modpost = MODPOST - cmd_modpost = scripts/mod/modpost \ + cmd_modpost = scripts/mod/modpost \ + $(if $(CONFIG_MODVERSIONS),-m) \ $(if $(KBUILD_EXTMOD),-i,-o) $(symverfile) \ $(filter-out FORCE,$^) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 662e75b2f780bb..65072d76a101e3 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -343,7 +343,6 @@ handle_modversions(struct module *mod, struct elf_info *info, crc = (unsigned int) sym->st_value; add_exported_symbol(symname + strlen(CRC_PFX), mod, &crc); - modversions = 1; } break; case SHN_UNDEF: @@ -649,7 +648,6 @@ read_dump(const char *fname) if (!(mod = find_module(modname))) { if (is_vmlinux(modname)) { - modversions = 1; have_vmlinux = 1; } mod = new_module(NOFAIL(strdup(modname))); @@ -696,11 +694,14 @@ main(int argc, char **argv) char *dump_read = NULL, *dump_write = NULL; int opt; - while ((opt = getopt(argc, argv, "i:o:")) != -1) { + while ((opt = getopt(argc, argv, "i:mo:")) != -1) { switch(opt) { case 'i': dump_read = optarg; break; + case 'm': + modversions = 1; + break; case 'o': dump_write = optarg; break; |