From: Sam Ravnborg <sam@ravnborg.org>
To: linux-kernel@vger.kernel.org
Cc: Sam Ravnborg <sam@ravnborg.org>
Subject: [PATCH 16/33] kbuild: refactor code in modpost to improve maintainability
Date: Tue, 17 Jul 2007 16:08:45 +0200 [thread overview]
Message-ID: <1184681344594-git-send-email-sam@ravnborg.org> (raw)
In-Reply-To: <11846813443387-git-send-email-sam@ravnborg.org>
There were a great deal of overlap between the two functions
that check which sections may reference .init.text and .exit.text.
Factor out common check to a separate function and
sort entries in the original functions.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
scripts/mod/modpost.c | 154 ++++++++++++++++++++++++-------------------------
1 files changed, 75 insertions(+), 79 deletions(-)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 9c35f30..f22c8b4 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -858,14 +858,6 @@ static void warn_sec_mismatch(const char *modname, const char *fromsec,
elf->strtab + before->st_name, refsymname))
return;
- /* fromsec whitelist - without a valid 'before'
- * powerpc has a GOT table in .got2 section
- * and also a .toc section */
- if (strcmp(fromsec, ".got2") == 0)
- return;
- if (strcmp(fromsec, ".toc") == 0)
- return;
-
if (before && after) {
warn("%s(%s+0x%llx): Section mismatch: reference to %s:%s "
"(between '%s' and '%s')\n",
@@ -1087,6 +1079,61 @@ static void check_sec_ref(struct module *mod, const char *modname,
}
}
+/*
+ * Identify sections from which references to either a
+ * .init or a .exit section is OK.
+ *
+ * [OPD] Keith Ownes <kaos@sgi.com> commented:
+ * For our future {in}sanity, add a comment that this is the ppc .opd
+ * section, not the ia64 .opd section.
+ * ia64 .opd should not point to discarded sections.
+ * [.rodata] like for .init.text we ignore .rodata references -same reason
+ **/
+static int initexit_section_ref_ok(const char *name)
+{
+ const char **s;
+ /* Absolute section names */
+ const char *namelist1[] = {
+ "__bug_table", /* used by powerpc for BUG() */
+ "__ex_table",
+ ".altinstructions",
+ ".cranges", /* used by sh64 */
+ ".fixup",
+ ".opd", /* See comment [OPD] */
+ ".parainstructions",
+ ".pdr",
+ ".plt", /* seen on ARCH=um build on x86_64. Harmless */
+ ".smp_locks",
+ ".stab",
+ NULL
+ };
+ /* Start of section names */
+ const char *namelist2[] = {
+ ".debug",
+ ".eh_frame",
+ ".note", /* ignore ELF notes - may contain anything */
+ ".got", /* powerpc - global offset table */
+ ".toc", /* powerpc - table of contents */
+ NULL
+ };
+ /* part of section name */
+ const char *namelist3 [] = {
+ ".unwind", /* Sample: IA_64.unwind.exit.text */
+ NULL
+ };
+
+ for (s = namelist1; *s; s++)
+ if (strcmp(*s, name) == 0)
+ return 1;
+ for (s = namelist2; *s; s++)
+ if (strncmp(*s, name, strlen(*s)) == 0)
+ return 1;
+ for (s = namelist3; *s; s++)
+ if (strstr(name, *s) != NULL)
+ return 1;
+ return 0;
+}
+
/**
* Functions used only during module init is marked __init and is stored in
* a .init.text section. Likewise data is marked __initdata and stored in
@@ -1103,7 +1150,7 @@ static int init_section(const char *name)
return 0;
}
-/**
+/*
* Identify sections from which references to a .init section is OK.
*
* Unfortunately references to read only data that referenced .init
@@ -1117,59 +1164,41 @@ static int init_section(const char *name)
*
* where vgacon_startup is __init. If you want to wade through the false
* positives, take out the check for rodata.
- **/
+ */
static int init_section_ref_ok(const char *name)
{
const char **s;
/* Absolute section names */
const char *namelist1[] = {
- ".init",
- ".opd", /* see comment [OPD] at exit_section_ref_ok() */
- ".toc1", /* used by ppc64 */
- ".stab",
- ".data.rel.ro", /* used by parisc64 */
- ".parainstructions",
- ".text.lock",
- "__bug_table", /* used by powerpc for BUG() */
- ".pci_fixup_header",
- ".pci_fixup_final",
- ".pdr",
- "__param",
- "__ex_table",
- ".fixup",
- ".smp_locks",
- ".plt", /* seen on ARCH=um build on x86_64. Harmless */
"__ftr_fixup", /* powerpc cpu feature fixup */
"__fw_ftr_fixup", /* powerpc firmware feature fixup */
- ".cranges", /* used by sh64 */
+ "__param",
+ ".data.rel.ro", /* used by parisc64 */
+ ".init",
+ ".text.lock",
NULL
};
/* Start of section names */
const char *namelist2[] = {
".init.",
- ".altinstructions",
- ".eh_frame",
- ".debug",
- ".parainstructions",
+ ".pci_fixup",
".rodata",
- ".note", /* ignore ELF notes - may contain anything */
- NULL
- };
- /* part of section name */
- const char *namelist3 [] = {
- ".unwind", /* sample: IA_64.unwind.init.text */
NULL
};
+ if (initexit_section_ref_ok(name))
+ return 1;
+
for (s = namelist1; *s; s++)
if (strcmp(*s, name) == 0)
return 1;
for (s = namelist2; *s; s++)
if (strncmp(*s, name, strlen(*s)) == 0)
return 1;
- for (s = namelist3; *s; s++)
- if (strstr(name, *s) != NULL)
- return 1;
+
+ /* If section name ends with ".init" we allow references
+ * as is the case with .initcallN.init, .early_param.init, .taglist.init etc
+ */
if (strrcmp(name, ".init") == 0)
return 1;
return 0;
@@ -1194,59 +1223,26 @@ static int exit_section(const char *name)
/*
* Identify sections from which references to a .exit section is OK.
- *
- * [OPD] Keith Ownes <kaos@sgi.com> commented:
- * For our future {in}sanity, add a comment that this is the ppc .opd
- * section, not the ia64 .opd section.
- * ia64 .opd should not point to discarded sections.
- * [.rodata] like for .init.text we ignore .rodata references -same reason
- **/
+ */
static int exit_section_ref_ok(const char *name)
{
const char **s;
/* Absolute section names */
const char *namelist1[] = {
- ".exit.text",
".exit.data",
+ ".exit.text",
+ ".exitcall.exit",
".init.text",
".rodata",
- ".opd", /* See comment [OPD] */
- ".toc1", /* used by ppc64 */
- ".altinstructions",
- ".pdr",
- "__bug_table", /* used by powerpc for BUG() */
- ".exitcall.exit",
- ".eh_frame",
- ".parainstructions",
- ".stab",
- "__ex_table",
- ".fixup",
- ".smp_locks",
- ".plt", /* seen on ARCH=um build on x86_64. Harmless */
- ".cranges", /* used by sh64 */
- NULL
- };
- /* Start of section names */
- const char *namelist2[] = {
- ".debug",
- ".note", /* ignore ELF notes - may contain anything */
- NULL
- };
- /* part of section name */
- const char *namelist3 [] = {
- ".unwind", /* Sample: IA_64.unwind.exit.text */
NULL
};
+ if (initexit_section_ref_ok(name))
+ return 1;
+
for (s = namelist1; *s; s++)
if (strcmp(*s, name) == 0)
return 1;
- for (s = namelist2; *s; s++)
- if (strncmp(*s, name, strlen(*s)) == 0)
- return 1;
- for (s = namelist3; *s; s++)
- if (strstr(name, *s) != NULL)
- return 1;
return 0;
}
--
1.5.0.6
next prev parent reply other threads:[~2007-07-17 14:12 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-17 14:08 [PATCH 01/33] kbuild: asm-offsets.h is now cleaned with O=.. builds Sam Ravnborg
2007-07-17 14:08 ` [PATCH 02/33] kbuild: New 'cc-fullversion' macro Sam Ravnborg
2007-07-17 14:08 ` [PATCH 03/33] powerpc: Refuse to build 64-bit with GCC-4.2.0 and CONFIG_MODULES Sam Ravnborg
2007-07-17 14:08 ` [PATCH 04/33] kbuild: document cc-fullversion Sam Ravnborg
2007-07-17 14:08 ` [PATCH 05/33] kbuild: avoid environment to set variables used by kbuild Sam Ravnborg
[not found] ` <11846813432072-git-send-email-sam@ravnborg.org>
2007-07-17 14:08 ` [PATCH 07/33] kconfig: use POSIX equality test in check-lxdialog.sh Sam Ravnborg
2007-07-17 14:08 ` [PATCH 08/33] kbuild: add support for reading stdin with gen_init_cpio Sam Ravnborg
2007-07-17 14:08 ` [PATCH 09/33] kbuild: add support for squashing uid/gid in gen_initramfs_list.sh Sam Ravnborg
2007-07-17 14:08 ` [PATCH 10/33] kconfig: fix update-po-config Sam Ravnborg
2007-07-17 14:08 ` [PATCH 11/33] kbuild: make better section mismatch reports on i386 and mips Sam Ravnborg
2007-07-17 14:08 ` [PATCH 12/33] kbuild: make better section mismatch reports on arm Sam Ravnborg
2007-07-17 14:08 ` [PATCH 13/33] kbuild: suppress modpost warnings for references from the .toc section as used by powerpc Sam Ravnborg
2007-07-17 14:08 ` [PATCH 14/33] kbuild: .paravirtprobe section is obsolete, so modpost doesn't need to handle it Sam Ravnborg
2007-07-17 14:08 ` [PATCH 15/33] kbuild: ignore section mismatch warnings originating from .note section Sam Ravnborg
2007-07-17 14:08 ` Sam Ravnborg [this message]
2007-07-17 14:08 ` [PATCH 17/33] kbuild: consolidate section checks Sam Ravnborg
2007-07-17 14:08 ` [PATCH 18/33] kbuild: warn about references from .init.text to .exit.text Sam Ravnborg
2007-07-17 14:08 ` [PATCH 19/33] kbuild: remove hardcoded apic_es7000 from modpost Sam Ravnborg
2007-07-17 14:08 ` [PATCH 20/33] kbuild: remove hardcoded _logo names " Sam Ravnborg
2007-07-17 14:08 ` [PATCH 21/33] kbuild: whitelist references from variables named _timer to .init.text Sam Ravnborg
2007-07-17 14:08 ` [PATCH 22/33] kbuild: do section mismatch check on full vmlinux Sam Ravnborg
2007-07-17 14:08 ` [PATCH 23/33] modpost white list pattern adjustment Sam Ravnborg
2007-07-17 14:08 ` [PATCH 24/33] Whitelist references from __dbe_table to .init Sam Ravnborg
2007-07-17 14:08 ` [PATCH 25/33] kbuild: use POSIX BRE in headers install target Sam Ravnborg
2007-07-17 14:08 ` [PATCH 26/33] kconfig: strip 'CONFIG_' automatically in kernel configuration search Sam Ravnborg
[not found] ` <11846813443988-git-send-email-sam@ravnborg.org>
2007-07-17 14:08 ` [PATCH 28/33] kconfig: reset generated values only if Kconfig and .config agree Sam Ravnborg
2007-07-17 14:08 ` [PATCH 29/33] kbuild: use -fno-optimize-sibling-calls unconditionally Sam Ravnborg
2007-07-17 14:08 ` [PATCH 30/33] kallsyms: remove usage of memmem and _GNU_SOURCE from scripts/kallsyms.c Sam Ravnborg
2007-07-17 14:09 ` [PATCH 31/33] cris: use DATA_DATA in cris Sam Ravnborg
2007-07-17 14:09 ` [PATCH 32/33] powerpc: add missing DATA_DATA to powerpc Sam Ravnborg
2007-07-17 14:09 ` [PATCH 33/33] xtensa: use DATA_DATA in xtensa Sam Ravnborg
2007-07-21 8:22 ` [PATCH 25/33] kbuild: use POSIX BRE in headers install target Oleg Verych
2007-07-21 8:23 ` Andreas Schwab
2007-07-21 8:39 ` Jan Engelhardt
2007-07-21 9:03 ` Andreas Schwab
2007-07-21 9:43 ` Oleg Verych
2007-07-21 8:27 ` [kbuild-devel] " Mike Frysinger
2007-07-21 10:04 ` Oleg Verych
2007-07-21 19:21 ` Mike Frysinger
2007-07-21 20:39 ` Sam Ravnborg
2007-07-21 22:03 ` Mike Frysinger
2007-07-21 22:11 ` Sam Ravnborg
2007-07-21 22:12 ` Mike Frysinger
2007-07-21 22:15 ` Robert P. J. Day
2007-07-21 22:16 ` More effective processing (Re: [PATCH 25/33] kbuild: use POSIX BRE in headers install target) Oleg Verych
2007-07-21 22:13 ` Sam Ravnborg
2007-07-21 22:39 ` Oleg Verych
2007-07-21 22:15 ` Mike Frysinger
2007-07-18 10:03 ` [PATCH 03/33] powerpc: Refuse to build 64-bit with GCC-4.2.0 and CONFIG_MODULES Clemens Koller
2007-07-19 15:55 ` Segher Boessenkool
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1184681344594-git-send-email-sam@ravnborg.org \
--to=sam@ravnborg.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox