aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2013-03-18 05:08:56 -0400
committerRusty Russell <rusty@rustcorp.com.au>2013-03-19 20:57:26 -0400
commita4b6a77b77ba4f526392612c2365797fab956014 (patch)
tree66d475d67327edfe822fff5436c6df8281a94426
parentb92021b09df70c1609e3547f3d6128dd560be97f (diff)
module: fix symbol versioning with symbol prefixes
Fix symbol versioning on architectures with symbol prefixes. Although the build was free from warnings the actual modules still wouldn't load as the ____versions table contained unprefixed symbol names, which were being compared against the prefixed symbol names when checking the symbol versions. This is fixed by modifying modpost to add the symbol prefix to the ____versions table it outputs (Modules.symvers still contains unprefixed symbol names). The check_modstruct_version() function is also fixed as it checks the version of the unprefixed "module_layout" symbol which would no longer work. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Michal Marek <mmarek@suse.cz> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jonathan Kliegman <kliegs@chromium.org> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (use VMLINUX_SYMBOL_STR)
-rw-r--r--kernel/module.c3
-rw-r--r--scripts/mod/modpost.c3
2 files changed, 4 insertions, 2 deletions
diff --git a/kernel/module.c b/kernel/module.c
index cfd4a3f68d7d..3c2c72d3bf84 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1212,7 +1212,8 @@ static inline int check_modstruct_version(Elf_Shdr *sechdrs,
1212 if (!find_symbol(VMLINUX_SYMBOL_STR(module_layout), NULL, 1212 if (!find_symbol(VMLINUX_SYMBOL_STR(module_layout), NULL,
1213 &crc, true, false)) 1213 &crc, true, false))
1214 BUG(); 1214 BUG();
1215 return check_version(sechdrs, versindex, "module_layout", mod, crc, 1215 return check_version(sechdrs, versindex,
1216 VMLINUX_SYMBOL_STR(module_layout), mod, crc,
1216 NULL); 1217 NULL);
1217} 1218}
1218 1219
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 282decfa29ae..f6913db77627 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -1928,7 +1928,8 @@ static int add_versions(struct buffer *b, struct module *mod)
1928 s->name, mod->name); 1928 s->name, mod->name);
1929 continue; 1929 continue;
1930 } 1930 }
1931 buf_printf(b, "\t{ %#8x, \"%s\" },\n", s->crc, s->name); 1931 buf_printf(b, "\t{ %#8x, VMLINUX_SYMBOL_STR(%s) },\n",
1932 s->crc, s->name);
1932 } 1933 }
1933 1934
1934 buf_printf(b, "};\n"); 1935 buf_printf(b, "};\n");