Commit b5064654 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

scripts/mod/modpost.c: handle non ABS crc symbols

For some reason I managed to trick gcc into create CRC symbols that are
not absolute anymore, but weak.

Make modpost handle this case.
Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 83460ec8
...@@ -599,18 +599,17 @@ static void handle_modversions(struct module *mod, struct elf_info *info, ...@@ -599,18 +599,17 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
else else
export = export_from_sec(info, get_secindex(info, sym)); export = export_from_sec(info, get_secindex(info, sym));
/* CRC'd symbol */
if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
crc = (unsigned int) sym->st_value;
sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
export);
}
switch (sym->st_shndx) { switch (sym->st_shndx) {
case SHN_COMMON: case SHN_COMMON:
warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name); warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
break; break;
case SHN_ABS:
/* CRC'd symbol */
if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
crc = (unsigned int) sym->st_value;
sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
export);
}
break;
case SHN_UNDEF: case SHN_UNDEF:
/* undefined symbol */ /* undefined symbol */
if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL && if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment