forked from Minki/linux
Nothing exciting, minor tweaks and cleanups.
Cheers, Rusty. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJWP91+AAoJENkgDmzRrbjxBAAQAJDFEKrMmdhyX56R058RFW1q pYK3XrHrVMCrJRa80UH6MStvCzkR5yYU7q81XAOfl+/9TR3IIi6EPMIC6wYSyiXC JpfnUISEJAuDMYOT19xeFDt2c7oknJnkOM7QWQt6ypY5sGWVHQ3KQUmkqlzaxQ5C Oen9CfFttugmmpO6KDCfIxtMvxkQ1LM6SoTAKTu7LamcVsBCp5It2Me9UwGUxADj 1Phq14U8heJ9ScNYkroutEkWgyZLFJOZExUuNEIMwyooXmWQmZzBiwVwQ72WjstG 2jj3ZiLucVYvBM4k8qnGnlMR4IkymcYlXD1YJ0X7tvBFnp7UGXFKLt2NSqfOskLC 2fRPETf4PLHebZeNN/J/WKJ7qKzsBsS49KjFjJ2vm4+P6sScmcDGXw4eMyLTYfnJ dRbuRtZpnJV4S1vss/STjehOA8A8/fURXQwb80AUzzEEfmjujZWCMYVhfqO91+kx XsbtSciek+Abxyh9Ow9xHgVnMcsXgmZMkpODv4Gjc/4R6Uu6XRSVK04jvkuoLVi5 t4VC00NK0WY2PFVK3qGYE5ZejPTOu59UGRLwxDqZ0QmXF36Yun9f//hSDWpM10BO Ah92OybEnny4tij7/0xz7Krg7u8BQ+at0TAmxrw4Xu9VqbnRqcpJy9Q04e52mwTu G6ztYV2tOGMEh5lK2k0S =WtDm -----END PGP SIGNATURE----- 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:
commit
50c36504fc
@ -223,7 +223,7 @@ char *parse_args(const char *doing,
|
||||
int (*unknown)(char *param, char *val,
|
||||
const char *doing, void *arg))
|
||||
{
|
||||
char *param, *val;
|
||||
char *param, *val, *err = NULL;
|
||||
|
||||
/* Chew leading spaces */
|
||||
args = skip_spaces(args);
|
||||
@ -238,7 +238,7 @@ char *parse_args(const char *doing,
|
||||
args = next_arg(args, ¶m, &val);
|
||||
/* Stop at -- */
|
||||
if (!val && strcmp(param, "--") == 0)
|
||||
return args;
|
||||
return err ?: args;
|
||||
irq_was_disabled = irqs_disabled();
|
||||
ret = parse_one(param, val, doing, params, num,
|
||||
min_level, max_level, arg, unknown);
|
||||
@ -247,24 +247,25 @@ char *parse_args(const char *doing,
|
||||
doing, param);
|
||||
|
||||
switch (ret) {
|
||||
case 0:
|
||||
continue;
|
||||
case -ENOENT:
|
||||
pr_err("%s: Unknown parameter `%s'\n", doing, param);
|
||||
return ERR_PTR(ret);
|
||||
break;
|
||||
case -ENOSPC:
|
||||
pr_err("%s: `%s' too large for parameter `%s'\n",
|
||||
doing, val ?: "", param);
|
||||
return ERR_PTR(ret);
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: `%s' invalid for parameter `%s'\n",
|
||||
doing, val ?: "", param);
|
||||
return ERR_PTR(ret);
|
||||
break;
|
||||
}
|
||||
|
||||
err = ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/* All parsed OK. */
|
||||
return NULL;
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Lazy bastard, eh? */
|
||||
|
@ -312,6 +312,15 @@ config DEBUG_SECTION_MISMATCH
|
||||
- Enable verbose reporting from modpost in order to help resolve
|
||||
the section mismatches that are reported.
|
||||
|
||||
config SECTION_MISMATCH_WARN_ONLY
|
||||
bool "Make section mismatch errors non-fatal"
|
||||
default y
|
||||
help
|
||||
If you say N here, the build process will fail if there are any
|
||||
section mismatch, instead of just throwing warnings.
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
#
|
||||
# Select this config option from the architecture Kconfig, if it
|
||||
# is preferred to always offer frame pointers as a config
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user