aboutsummaryrefslogtreecommitdiff
path: root/scripts/mod/modpost.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/mod/modpost.c')
-rw-r--r--scripts/mod/modpost.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 33122ca04e7..cd104afcc5f 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -790,6 +790,7 @@ static const char *section_white_list[] =
{
".comment*",
".debug*",
+ ".zdebug*", /* Compressed debug sections. */
".GCC-command-line", /* mn10300 */
".mdebug*", /* alpha, score, mips etc. */
".pdr", /* alpha, score, mips etc. */
@@ -1247,6 +1248,19 @@ static int is_function(Elf_Sym *sym)
return -1;
}
+static void print_section_list(const char * const list[20])
+{
+ const char *const *s = list;
+
+ while (*s) {
+ fprintf(stderr, "%s", *s);
+ s++;
+ if (*s)
+ fprintf(stderr, ", ");
+ }
+ fprintf(stderr, "\n");
+}
+
/*
* Print a warning about a section mismatch.
* Try to find symbols near it so user can find it.
@@ -1303,7 +1317,6 @@ static void report_sec_mismatch(const char *modname,
break;
case DATA_TO_ANY_INIT: {
prl_to = sec2annotation(tosec);
- const char *const *s = mismatch->symbol_white_list;
fprintf(stderr,
"The variable %s references\n"
"the %s %s%s%s\n"
@@ -1311,9 +1324,7 @@ static void report_sec_mismatch(const char *modname,
"variable with __init* or __refdata (see linux/init.h) "
"or name the variable:\n",
fromsym, to, prl_to, tosym, to_p);
- while (*s)
- fprintf(stderr, "%s, ", *s++);
- fprintf(stderr, "\n");
+ print_section_list(mismatch->symbol_white_list);
free(prl_to);
break;
}
@@ -1328,7 +1339,6 @@ static void report_sec_mismatch(const char *modname,
break;
case DATA_TO_ANY_EXIT: {
prl_to = sec2annotation(tosec);
- const char *const *s = mismatch->symbol_white_list;
fprintf(stderr,
"The variable %s references\n"
"the %s %s%s%s\n"
@@ -1336,9 +1346,7 @@ static void report_sec_mismatch(const char *modname,
"variable with __exit* (see linux/init.h) or "
"name the variable:\n",
fromsym, to, prl_to, tosym, to_p);
- while (*s)
- fprintf(stderr, "%s, ", *s++);
- fprintf(stderr, "\n");
+ print_section_list(mismatch->symbol_white_list);
free(prl_to);
break;
}
@@ -1441,7 +1449,7 @@ static unsigned int *reloc_location(struct elf_info *elf,
int section = shndx2secindex(sechdr->sh_info);
return (void *)elf->hdr + sechdrs[section].sh_offset +
- r->r_offset - sechdrs[section].sh_addr;
+ r->r_offset;
}
static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
@@ -1614,7 +1622,7 @@ static void section_rel(const char *modname, struct elf_info *elf,
* A module includes a number of sections that are discarded
* either when loaded or when used as built-in.
* For loaded modules all functions marked __init and all data
- * marked __initdata will be discarded when the module has been intialized.
+ * marked __initdata will be discarded when the module has been initialized.
* Likewise for modules used built-in the sections marked __exit
* are discarded because __exit marked function are supposed to be called
* only when a module is unloaded which never happens for built-in modules.