scripts/mod/modpost.c: handle non ABS crc symbols
authorAndi Kleen <ak@linux.intel.com>
Tue, 12 Nov 2013 23:08:38 +0000 (15:08 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 13 Nov 2013 03:09:12 +0000 (12:09 +0900)
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: Andi 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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
scripts/mod/modpost.c

index 8247979e8f64dd2eef5671544d3b39e8ed3487fc..bfcea5d3b27d35d64a57990bba8a6be3d9f0feed 100644 (file)
@@ -599,18 +599,17 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
        else
                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) {
        case SHN_COMMON:
                warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
                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:
                /* undefined symbol */
                if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&