kbuild: kill false positives from section mismatch warnings for powerpc
authorSam Ravnborg <sam@mars.ravnborg.org>
Sat, 4 Mar 2006 23:16:26 +0000 (00:16 +0100)
committerSam Ravnborg <sam@mars.ravnborg.org>
Sat, 4 Mar 2006 23:16:26 +0000 (00:16 +0100)
Building an allmodconfig kernel for ppc64 revealed a number of false
positives - originally reported by Andrew Morton.
This patch removes most if not all false positives for ppc64:

Section .opd
The .opd section contains function descriptors at least for ppc64.
So ignore it for .init.text (was ignored for .exit.text).
See description of function descriptors here:
http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi-1.7.html

Section .toc1
ppc64 places some static variables in .toc1 - ignore the.

Section __bug_tabe
BUG() and friends uses __bug_table. Ignore warnings from that section.

Module parameters are placed in .data.rel for ppc64, for adjust pattern to
match on section named .data*

Tested with gcc: 3.4.0 and binutils 2.15.90.0.3

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
scripts/mod/modpost.c

index 5de3c63091e9fb9a001de0b50789fde7a4c01d42..c4dc1d72d02efad6d21a943a66fd79f4154d8934 100644 (file)
@@ -483,7 +483,7 @@ static int strrcmp(const char *s, const char *sub)
  *   this pattern.
  *   The pattern is identified by:
  *   tosec   = .init.data
- *   fromsec = .data
+ *   fromsec = .data*
  *   atsym   =__param*
  *
  * Pattern 2:
@@ -512,7 +512,7 @@ static int secref_whitelist(const char *tosec, const char *fromsec,
        /* Check for pattern 1 */
        if (strcmp(tosec, ".init.data") != 0)
                f1 = 0;
-       if (strcmp(fromsec, ".data") != 0)
+       if (strncmp(fromsec, ".data", strlen(".data")) != 0)
                f1 = 0;
        if (strncmp(atsym, "__param", strlen("__param")) != 0)
                f1 = 0;
@@ -743,9 +743,12 @@ static int init_section_ref_ok(const char *name)
        /* Absolute section names */
        const char *namelist1[] = {
                ".init",
+               ".opd",   /* see comment [OPD] at exit_section_ref_ok() */
+               ".toc1",  /* used by ppc64 */
                ".stab",
                ".rodata",
                ".text.lock",
+               "__bug_table", /* used by powerpc for BUG() */
                ".pci_fixup_header",
                ".pci_fixup_final",
                ".pdr",
@@ -812,8 +815,10 @@ static int exit_section_ref_ok(const char *name)
                ".exit.data",
                ".init.text",
                ".opd", /* See comment [OPD] */
+               ".toc1",  /* used by ppc64 */
                ".altinstructions",
                ".pdr",
+               "__bug_table", /* used by powerpc for BUG() */
                ".exitcall.exit",
                ".eh_frame",
                ".stab",