Skip to content

Commit

Permalink
UPSTREAM: modpost: add flag -E for making section mismatches fatal
Browse files Browse the repository at this point in the history
The section mismatch warning can be easy to miss during the kernel build
process.  Allow it to be marked as fatal to be easily caught and prevent
bugs from slipping in.

Setting CONFIG_SECTION_MISMATCH_WARN_ONLY=y causes these warnings to be
non-fatal, since there are a number of section mismatches when using
allmodconfig on some architectures, and we do not want to break these
builds by default.

Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Cc: Michal Marek <mmarek@suse.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
(cherry picked from commit 6556a2ef03eb4f496d6cea3fd69084b4f3289bad)
Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>

BUG=chromium:534254
TEST=Tested on x86-64 allmodconfig, setting the option to =n, and
     creating a section mismatch by running
  sed -i -e 's/\(ssize_t soc_codec_reg_show\)/__init \1/' sound/soc/soc-core.c

Change-Id: Ic346706e3297c9f0d790e3552aa94e5cff9897a6
Reviewed-on: https://chromium-review.googlesource.com/303120
Commit-Ready: Nicolas Boichat <drinkcat@chromium.org>
Tested-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-by: Olof Johansson <olofj@chromium.org>
  • Loading branch information
Nicolas Boichat authored and chrome-bot committed Oct 12, 2015
1 parent 47b69c4 commit 90ed5e2
Showing 3 changed files with 27 additions and 7 deletions.
9 changes: 9 additions & 0 deletions lib/Kconfig.debug
Original file line number Diff line number Diff line change
@@ -284,6 +284,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
1 change: 1 addition & 0 deletions scripts/Makefile.modpost
Original file line number Diff line number Diff line change
@@ -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)))
24 changes: 17 additions & 7 deletions scripts/mod/modpost.c
Original file line number Diff line number Diff line change
@@ -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;

@@ -2140,7 +2141,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;
@@ -2181,6 +2182,9 @@ int main(int argc, char **argv)
case 'w':
warn_unresolved = 1;
break;
case 'E':
sec_mismatch_fatal = 1;
break;
default:
exit(1);
}
@@ -2230,14 +2234,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;
}

0 comments on commit 90ed5e2

Please sign in to comment.