mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
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,
|
int (*unknown)(char *param, char *val,
|
||||||
const char *doing, void *arg))
|
const char *doing, void *arg))
|
||||||
{
|
{
|
||||||
char *param, *val;
|
char *param, *val, *err = NULL;
|
||||||
|
|
||||||
/* Chew leading spaces */
|
/* Chew leading spaces */
|
||||||
args = skip_spaces(args);
|
args = skip_spaces(args);
|
||||||
|
@ -238,7 +238,7 @@ char *parse_args(const char *doing,
|
||||||
args = next_arg(args, ¶m, &val);
|
args = next_arg(args, ¶m, &val);
|
||||||
/* Stop at -- */
|
/* Stop at -- */
|
||||||
if (!val && strcmp(param, "--") == 0)
|
if (!val && strcmp(param, "--") == 0)
|
||||||
return args;
|
return err ?: args;
|
||||||
irq_was_disabled = irqs_disabled();
|
irq_was_disabled = irqs_disabled();
|
||||||
ret = parse_one(param, val, doing, params, num,
|
ret = parse_one(param, val, doing, params, num,
|
||||||
min_level, max_level, arg, unknown);
|
min_level, max_level, arg, unknown);
|
||||||
|
@ -247,24 +247,25 @@ char *parse_args(const char *doing,
|
||||||
doing, param);
|
doing, param);
|
||||||
|
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
|
case 0:
|
||||||
|
continue;
|
||||||
case -ENOENT:
|
case -ENOENT:
|
||||||
pr_err("%s: Unknown parameter `%s'\n", doing, param);
|
pr_err("%s: Unknown parameter `%s'\n", doing, param);
|
||||||
return ERR_PTR(ret);
|
break;
|
||||||
case -ENOSPC:
|
case -ENOSPC:
|
||||||
pr_err("%s: `%s' too large for parameter `%s'\n",
|
pr_err("%s: `%s' too large for parameter `%s'\n",
|
||||||
doing, val ?: "", param);
|
doing, val ?: "", param);
|
||||||
return ERR_PTR(ret);
|
|
||||||
case 0:
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pr_err("%s: `%s' invalid for parameter `%s'\n",
|
pr_err("%s: `%s' invalid for parameter `%s'\n",
|
||||||
doing, val ?: "", param);
|
doing, val ?: "", param);
|
||||||
return ERR_PTR(ret);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = ERR_PTR(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* All parsed OK. */
|
return err;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lazy bastard, eh? */
|
/* Lazy bastard, eh? */
|
||||||
|
|
|
@ -312,6 +312,15 @@ config DEBUG_SECTION_MISMATCH
|
||||||
- Enable verbose reporting from modpost in order to help resolve
|
- Enable verbose reporting from modpost in order to help resolve
|
||||||
the section mismatches that are reported.
|
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
|
# Select this config option from the architecture Kconfig, if it
|
||||||
# is preferred to always offer frame pointers as a config
|
# 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_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS))) \
|
||||||
$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
|
$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
|
||||||
$(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \
|
$(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \
|
||||||
|
$(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
|
||||||
$(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w)
|
$(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w)
|
||||||
|
|
||||||
MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
|
MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
|
||||||
|
|
|
@ -38,6 +38,7 @@ static int warn_unresolved = 0;
|
||||||
/* How a symbol is exported */
|
/* How a symbol is exported */
|
||||||
static int sec_mismatch_count = 0;
|
static int sec_mismatch_count = 0;
|
||||||
static int sec_mismatch_verbose = 1;
|
static int sec_mismatch_verbose = 1;
|
||||||
|
static int sec_mismatch_fatal = 0;
|
||||||
/* ignore missing files */
|
/* ignore missing files */
|
||||||
static int ignore_missing_files;
|
static int ignore_missing_files;
|
||||||
|
|
||||||
|
@ -833,6 +834,8 @@ static const char *const section_white_list[] =
|
||||||
".xt.lit", /* xtensa */
|
".xt.lit", /* xtensa */
|
||||||
".arcextmap*", /* arc */
|
".arcextmap*", /* arc */
|
||||||
".gnu.linkonce.arcext*", /* arc : modules */
|
".gnu.linkonce.arcext*", /* arc : modules */
|
||||||
|
".cmem*", /* EZchip */
|
||||||
|
".fmt_slot*", /* EZchip */
|
||||||
".gnu.lto*",
|
".gnu.lto*",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -2133,6 +2136,11 @@ static void add_staging_flag(struct buffer *b, const char *name)
|
||||||
buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
|
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
|
* Record CRCs for unresolved symbols
|
||||||
**/
|
**/
|
||||||
|
@ -2177,6 +2185,12 @@ static int add_versions(struct buffer *b, struct module *mod)
|
||||||
s->name, mod->name);
|
s->name, mod->name);
|
||||||
continue;
|
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",
|
buf_printf(b, "\t{ %#8x, __VMLINUX_SYMBOL_STR(%s) },\n",
|
||||||
s->crc, s->name);
|
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_iter;
|
||||||
struct ext_sym_list *extsym_start = NULL;
|
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) {
|
switch (opt) {
|
||||||
case 'i':
|
case 'i':
|
||||||
kernel_read = optarg;
|
kernel_read = optarg;
|
||||||
|
@ -2415,6 +2429,9 @@ int main(int argc, char **argv)
|
||||||
case 'w':
|
case 'w':
|
||||||
warn_unresolved = 1;
|
warn_unresolved = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'E':
|
||||||
|
sec_mismatch_fatal = 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -2464,14 +2481,20 @@ int main(int argc, char **argv)
|
||||||
sprintf(fname, "%s.mod.c", mod->name);
|
sprintf(fname, "%s.mod.c", mod->name);
|
||||||
write_if_changed(&buf, fname);
|
write_if_changed(&buf, fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dump_write)
|
if (dump_write)
|
||||||
write_dump(dump_write);
|
write_dump(dump_write);
|
||||||
if (sec_mismatch_count && !sec_mismatch_verbose)
|
if (sec_mismatch_count) {
|
||||||
warn("modpost: Found %d section mismatch(es).\n"
|
if (!sec_mismatch_verbose) {
|
||||||
"To see full details build your kernel with:\n"
|
warn("modpost: Found %d section mismatch(es).\n"
|
||||||
"'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n",
|
"To see full details build your kernel with:\n"
|
||||||
sec_mismatch_count);
|
"'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;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue