diff options
Diffstat (limited to 'scripts/mod/modpost.c')
-rw-r--r-- | scripts/mod/modpost.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 5d546466e6b..dbe1fb5e8cc 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -613,7 +613,7 @@ static const char *sym_name(struct elf_info *elf, Elf_Sym *sym) if (sym) return elf->strtab + sym->st_name; else - return ""; + return "(unknown)"; } static const char *sec_name(struct elf_info *elf, int shndx) @@ -1102,7 +1102,7 @@ static int is_function(Elf_Sym *sym) if (sym) return ELF_ST_TYPE(sym->st_info) == STT_FUNC; else - return 0; + return -1; } /* @@ -1120,24 +1120,31 @@ static void report_sec_mismatch(const char *modname, enum mismatch mismatch, { const char *from, *from_p; const char *to, *to_p; - from = from_is_func ? "function" : "variable"; - from_p = from_is_func ? "()" : ""; - to = to_is_func ? "function" : "variable"; - to_p = to_is_func ? "()" : ""; + + switch (from_is_func) { + case 0: from = "variable"; from_p = ""; break; + case 1: from = "function"; from_p = "()"; break; + default: from = "(unknown reference)"; from_p = ""; break; + } + switch (to_is_func) { + case 0: to = "variable"; to_p = ""; break; + case 1: to = "function"; to_p = "()"; break; + default: to = "(unknown reference)"; to_p = ""; break; + } sec_mismatch_count++; if (!sec_mismatch_verbose) return; - fprintf(stderr, "WARNING: %s(%s+0x%llx): Section mismatch in" - " reference from the %s %s%s to the %s %s:%s%s\n", - modname, fromsec, fromaddr, from, fromsym, from_p, - to, tosec, tosym, to_p); + warn("%s(%s+0x%llx): Section mismatch in reference from the %s %s%s " + "to the %s %s:%s%s\n", + modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec, + tosym, to_p); switch (mismatch) { case TEXT_TO_INIT: fprintf(stderr, - "The function %s %s() references\n" + "The function %s%s() references\n" "the %s %s%s%s.\n" "This is often because %s lacks a %s\n" "annotation or the annotation of %s is wrong.\n", @@ -1938,10 +1945,10 @@ int main(int argc, char **argv) if (dump_write) write_dump(dump_write); if (sec_mismatch_count && !sec_mismatch_verbose) - fprintf(stderr, "modpost: Found %d section mismatch(es).\n" - "To see full details build your kernel with:\n" - "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n", - sec_mismatch_count); + warn("modpost: Found %d section mismatch(es).\n" + "To see full details build your kernel with:\n" + "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n", + sec_mismatch_count); return err; } |