diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-07-08 04:32:56 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-08 04:32:56 -0400 |
commit | 896395c290f902576270d84291c1f7f8bfbe339d (patch) | |
tree | 650114bff3a5f808ee1d713ecc443b0eaab2e1c3 /scripts/mod/modpost.c | |
parent | af1cf204ba2fd8135933a2e4df523fb1112dc0e2 (diff) | |
parent | 1b40a895df6c7d5a80e71f65674060b03d84bbef (diff) |
Merge branch 'linus' into tmp.x86.mpparse.new
Diffstat (limited to 'scripts/mod/modpost.c')
-rw-r--r-- | scripts/mod/modpost.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 508c5895c680..a07f91aac920 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
@@ -467,6 +467,25 @@ static void parse_elf_finish(struct elf_info *info) | |||
467 | release_file(info->hdr, info->size); | 467 | release_file(info->hdr, info->size); |
468 | } | 468 | } |
469 | 469 | ||
470 | static int ignore_undef_symbol(struct elf_info *info, const char *symname) | ||
471 | { | ||
472 | /* ignore __this_module, it will be resolved shortly */ | ||
473 | if (strcmp(symname, MODULE_SYMBOL_PREFIX "__this_module") == 0) | ||
474 | return 1; | ||
475 | /* ignore global offset table */ | ||
476 | if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0) | ||
477 | return 1; | ||
478 | if (info->hdr->e_machine == EM_PPC) | ||
479 | /* Special register function linked on all modules during final link of .ko */ | ||
480 | if (strncmp(symname, "_restgpr_", sizeof("_restgpr_") - 1) == 0 || | ||
481 | strncmp(symname, "_savegpr_", sizeof("_savegpr_") - 1) == 0 || | ||
482 | strncmp(symname, "_rest32gpr_", sizeof("_rest32gpr_") - 1) == 0 || | ||
483 | strncmp(symname, "_save32gpr_", sizeof("_save32gpr_") - 1) == 0) | ||
484 | return 1; | ||
485 | /* Do not ignore this symbol */ | ||
486 | return 0; | ||
487 | } | ||
488 | |||
470 | #define CRC_PFX MODULE_SYMBOL_PREFIX "__crc_" | 489 | #define CRC_PFX MODULE_SYMBOL_PREFIX "__crc_" |
471 | #define KSYMTAB_PFX MODULE_SYMBOL_PREFIX "__ksymtab_" | 490 | #define KSYMTAB_PFX MODULE_SYMBOL_PREFIX "__ksymtab_" |
472 | 491 | ||
@@ -493,11 +512,7 @@ static void handle_modversions(struct module *mod, struct elf_info *info, | |||
493 | if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL && | 512 | if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL && |
494 | ELF_ST_BIND(sym->st_info) != STB_WEAK) | 513 | ELF_ST_BIND(sym->st_info) != STB_WEAK) |
495 | break; | 514 | break; |
496 | /* ignore global offset table */ | 515 | if (ignore_undef_symbol(info, symname)) |
497 | if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0) | ||
498 | break; | ||
499 | /* ignore __this_module, it will be resolved shortly */ | ||
500 | if (strcmp(symname, MODULE_SYMBOL_PREFIX "__this_module") == 0) | ||
501 | break; | 516 | break; |
502 | /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */ | 517 | /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */ |
503 | #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER) | 518 | #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER) |