Merge tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux
Pull module updates from Rusty Russell: "Nothing exciting, minor tweaks and cleanups" * tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux: scripts: [modpost] add new sections to white list modpost: Add flag -E for making section mismatches fatal params: don't ignore the rest of cmdline if parse_one() fails modpost: abort if a module symbol is too long
This commit is contained in:
@@ -77,6 +77,7 @@ modpost = scripts/mod/modpost \
|
||||
$(if $(KBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS))) \
|
||||
$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
|
||||
$(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \
|
||||
$(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
|
||||
$(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w)
|
||||
|
||||
MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
|
||||
|
@@ -38,6 +38,7 @@ static int warn_unresolved = 0;
|
||||
/* How a symbol is exported */
|
||||
static int sec_mismatch_count = 0;
|
||||
static int sec_mismatch_verbose = 1;
|
||||
static int sec_mismatch_fatal = 0;
|
||||
/* ignore missing files */
|
||||
static int ignore_missing_files;
|
||||
|
||||
@@ -833,6 +834,8 @@ static const char *const section_white_list[] =
|
||||
".xt.lit", /* xtensa */
|
||||
".arcextmap*", /* arc */
|
||||
".gnu.linkonce.arcext*", /* arc : modules */
|
||||
".cmem*", /* EZchip */
|
||||
".fmt_slot*", /* EZchip */
|
||||
".gnu.lto*",
|
||||
NULL
|
||||
};
|
||||
@@ -2133,6 +2136,11 @@ static void add_staging_flag(struct buffer *b, const char *name)
|
||||
buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
|
||||
}
|
||||
|
||||
/* In kernel, this size is defined in linux/module.h;
|
||||
* here we use Elf_Addr instead of long for covering cross-compile
|
||||
*/
|
||||
#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
|
||||
|
||||
/**
|
||||
* Record CRCs for unresolved symbols
|
||||
**/
|
||||
@@ -2177,6 +2185,12 @@ static int add_versions(struct buffer *b, struct module *mod)
|
||||
s->name, mod->name);
|
||||
continue;
|
||||
}
|
||||
if (strlen(s->name) >= MODULE_NAME_LEN) {
|
||||
merror("too long symbol \"%s\" [%s.ko]\n",
|
||||
s->name, mod->name);
|
||||
err = 1;
|
||||
break;
|
||||
}
|
||||
buf_printf(b, "\t{ %#8x, __VMLINUX_SYMBOL_STR(%s) },\n",
|
||||
s->crc, s->name);
|
||||
}
|
||||
@@ -2374,7 +2388,7 @@ int main(int argc, char **argv)
|
||||
struct ext_sym_list *extsym_iter;
|
||||
struct ext_sym_list *extsym_start = NULL;
|
||||
|
||||
while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) {
|
||||
switch (opt) {
|
||||
case 'i':
|
||||
kernel_read = optarg;
|
||||
@@ -2415,6 +2429,9 @@ int main(int argc, char **argv)
|
||||
case 'w':
|
||||
warn_unresolved = 1;
|
||||
break;
|
||||
case 'E':
|
||||
sec_mismatch_fatal = 1;
|
||||
break;
|
||||
default:
|
||||
exit(1);
|
||||
}
|
||||
@@ -2464,14 +2481,20 @@ int main(int argc, char **argv)
|
||||
sprintf(fname, "%s.mod.c", mod->name);
|
||||
write_if_changed(&buf, fname);
|
||||
}
|
||||
|
||||
if (dump_write)
|
||||
write_dump(dump_write);
|
||||
if (sec_mismatch_count && !sec_mismatch_verbose)
|
||||
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);
|
||||
if (sec_mismatch_count) {
|
||||
if (!sec_mismatch_verbose) {
|
||||
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);
|
||||
}
|
||||
if (sec_mismatch_fatal) {
|
||||
fatal("modpost: Section mismatches detected.\n"
|
||||
"Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
Reference in New Issue
Block a user