提交 9209aed0 编写于 作者: S Sam Ravnborg

kbuild: kill false positives from section mismatch warnings for powerpc

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: NSam Ravnborg <sam@ravnborg.org>
上级 62070fa4
...@@ -483,7 +483,7 @@ static int strrcmp(const char *s, const char *sub) ...@@ -483,7 +483,7 @@ static int strrcmp(const char *s, const char *sub)
* this pattern. * this pattern.
* The pattern is identified by: * The pattern is identified by:
* tosec = .init.data * tosec = .init.data
* fromsec = .data * fromsec = .data*
* atsym =__param* * atsym =__param*
* *
* Pattern 2: * Pattern 2:
...@@ -512,7 +512,7 @@ static int secref_whitelist(const char *tosec, const char *fromsec, ...@@ -512,7 +512,7 @@ static int secref_whitelist(const char *tosec, const char *fromsec,
/* Check for pattern 1 */ /* Check for pattern 1 */
if (strcmp(tosec, ".init.data") != 0) if (strcmp(tosec, ".init.data") != 0)
f1 = 0; f1 = 0;
if (strcmp(fromsec, ".data") != 0) if (strncmp(fromsec, ".data", strlen(".data")) != 0)
f1 = 0; f1 = 0;
if (strncmp(atsym, "__param", strlen("__param")) != 0) if (strncmp(atsym, "__param", strlen("__param")) != 0)
f1 = 0; f1 = 0;
...@@ -743,9 +743,12 @@ static int init_section_ref_ok(const char *name) ...@@ -743,9 +743,12 @@ static int init_section_ref_ok(const char *name)
/* Absolute section names */ /* Absolute section names */
const char *namelist1[] = { const char *namelist1[] = {
".init", ".init",
".opd", /* see comment [OPD] at exit_section_ref_ok() */
".toc1", /* used by ppc64 */
".stab", ".stab",
".rodata", ".rodata",
".text.lock", ".text.lock",
"__bug_table", /* used by powerpc for BUG() */
".pci_fixup_header", ".pci_fixup_header",
".pci_fixup_final", ".pci_fixup_final",
".pdr", ".pdr",
...@@ -812,8 +815,10 @@ static int exit_section_ref_ok(const char *name) ...@@ -812,8 +815,10 @@ static int exit_section_ref_ok(const char *name)
".exit.data", ".exit.data",
".init.text", ".init.text",
".opd", /* See comment [OPD] */ ".opd", /* See comment [OPD] */
".toc1", /* used by ppc64 */
".altinstructions", ".altinstructions",
".pdr", ".pdr",
"__bug_table", /* used by powerpc for BUG() */
".exitcall.exit", ".exitcall.exit",
".eh_frame", ".eh_frame",
".stab", ".stab",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册