|
Mark Wielaard |
e86763b |
commit 3bdc16ce98295463c071192eab2ec611a8edc508
|
|
Mark Wielaard |
e86763b |
Author: Mark Wielaard <mjw@redhat.com>
|
|
Mark Wielaard |
e86763b |
Date: Wed Feb 6 16:20:17 2013 +0100
|
|
Mark Wielaard |
e86763b |
|
|
Mark Wielaard |
e86763b |
elflint: Add two more symbols to gnuld list of allowed bad values.
|
|
Mark Wielaard |
e86763b |
|
|
Mark Wielaard |
e86763b |
Add __bss_start and __TMC_END__ to the list of symbols allowed to have
|
|
Mark Wielaard |
e86763b |
out of section values because of the following GNU ld bug:
|
|
Mark Wielaard |
e86763b |
http://sourceware.org/bugzilla/show_bug.cgi?id=13621.
|
|
Mark Wielaard |
e86763b |
Allow them to appear in either .symtab or .dynsym, but only when they
|
|
Mark Wielaard |
e86763b |
are zero sized. It is impossible to define a general rule for this bug,
|
|
Mark Wielaard |
e86763b |
but this should catch most common issues that are mostly harmless
|
|
Mark Wielaard |
e86763b |
because the symbols signify the removed section was empty to being with.
|
|
Mark Wielaard |
e86763b |
This catches at least all symbols often flagged in the tests.
|
|
Mark Wielaard |
e86763b |
|
|
Mark Wielaard |
e86763b |
Signed-off-by: Mark Wielaard <mjw@redhat.com>
|
|
Mark Wielaard |
e86763b |
|
|
Mark Wielaard |
e86763b |
diff --git a/src/ChangeLog b/src/ChangeLog
|
|
Mark Wielaard |
e86763b |
index f3f9b51..7d7b66f 100644
|
|
Mark Wielaard |
e86763b |
--- a/src/ChangeLog
|
|
Mark Wielaard |
e86763b |
+++ b/src/ChangeLog
|
|
Mark Wielaard |
e86763b |
@@ -1,3 +1,10 @@
|
|
Mark Wielaard |
e86763b |
+2013-02-06 Mark Wielaard <mjw@redhat.com>
|
|
Mark Wielaard |
2a5e99f |
+
|
|
Mark Wielaard |
e86763b |
+ * elflint.c (check_symtab): Add __bss_start and __TMC_END__ to the
|
|
Mark Wielaard |
e86763b |
+ list of symbols allowed to have out of section values because of
|
|
Mark Wielaard |
e86763b |
+ GNU ld bugs in either .symtab or .dynsym, but only when they are
|
|
Mark Wielaard |
e86763b |
+ zero sized.
|
|
Mark Wielaard |
e86763b |
+
|
|
Mark Wielaard |
e86763b |
2012-08-27 Mark Wielaard <mjw@redhat.com>
|
|
Mark Wielaard |
e86763b |
|
|
Mark Wielaard |
e86763b |
* readelf.c (print_debug_macro_section): Print offset as PRIx64.
|
|
Mark Wielaard |
e86763b |
diff --git a/src/elflint.c b/src/elflint.c
|
|
Mark Wielaard |
e86763b |
index 4084987..bc5ed33 100644
|
|
Mark Wielaard |
e86763b |
--- a/src/elflint.c
|
|
Mark Wielaard |
e86763b |
+++ b/src/elflint.c
|
|
Mark Wielaard |
e86763b |
@@ -767,15 +767,22 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"),
|
|
Mark Wielaard |
e86763b |
{
|
|
Mark Wielaard |
e86763b |
/* GNU ld has severe bugs. When it decides to remove
|
|
Mark Wielaard |
e86763b |
empty sections it leaves symbols referencing them
|
|
Mark Wielaard |
e86763b |
- behind. These are symbols in .symtab. */
|
|
Mark Wielaard |
e86763b |
+ behind. These are symbols in .symtab or .dynsym
|
|
Mark Wielaard |
e86763b |
+ and for the named symbols have zero size. See
|
|
Mark Wielaard |
e86763b |
+ sourceware PR13621. */
|
|
Mark Wielaard |
e86763b |
if (!gnuld
|
|
Mark Wielaard |
e86763b |
- || strcmp (section_name (ebl, idx), ".symtab")
|
|
Mark Wielaard |
e86763b |
+ || (strcmp (section_name (ebl, idx), ".symtab")
|
|
Mark Wielaard |
e86763b |
+ && strcmp (section_name (ebl, idx),
|
|
Mark Wielaard |
e86763b |
+ ".dynsym"))
|
|
Mark Wielaard |
e86763b |
+ || sym->st_size != 0
|
|
Mark Wielaard |
e86763b |
|| (strcmp (name, "__preinit_array_start") != 0
|
|
Mark Wielaard |
e86763b |
&& strcmp (name, "__preinit_array_end") != 0
|
|
Mark Wielaard |
e86763b |
&& strcmp (name, "__init_array_start") != 0
|
|
Mark Wielaard |
e86763b |
&& strcmp (name, "__init_array_end") != 0
|
|
Mark Wielaard |
e86763b |
&& strcmp (name, "__fini_array_start") != 0
|
|
Mark Wielaard |
e86763b |
- && strcmp (name, "__fini_array_end") != 0))
|
|
Mark Wielaard |
e86763b |
+ && strcmp (name, "__fini_array_end") != 0
|
|
Mark Wielaard |
e86763b |
+ && strcmp (name, "__bss_start") != 0
|
|
Mark Wielaard |
e86763b |
+ && strcmp (name, "__TMC_END__") != 0))
|
|
Mark Wielaard |
e86763b |
ERROR (gettext ("\
|
|
Mark Wielaard |
e86763b |
section [%2d] '%s': symbol %zu: st_value out of bounds\n"),
|
|
Mark Wielaard |
e86763b |
idx, section_name (ebl, idx), cnt);
|
|
Mark Wielaard |
1974584 |
commit b94cceae503b56fb360cd597f154fa2b33552887
|
|
Mark Wielaard |
1974584 |
Author: Mark Wielaard <mjw@redhat.com>
|
|
Mark Wielaard |
1974584 |
Date: Sun Feb 24 22:58:49 2013 +0100
|
|
Mark Wielaard |
1974584 |
|
|
Mark Wielaard |
1974584 |
elflint.c (check_symtab): Add __bss_start__ to the list of allowed symbols.
|
|
Mark Wielaard |
1974584 |
|
|
Mark Wielaard |
1974584 |
Some architectures (ARM) use __bss_start__ instead of __bss_start.
|
|
Mark Wielaard |
1974584 |
|
|
Mark Wielaard |
1974584 |
Signed-off-by: Mark Wielaard <mjw@redhat.com>
|
|
Mark Wielaard |
1974584 |
|
|
Mark Wielaard |
1974584 |
diff --git a/src/ChangeLog b/src/ChangeLog
|
|
Mark Wielaard |
1974584 |
index 7d7b66f..6e219e6 100644
|
|
Mark Wielaard |
1974584 |
--- a/src/ChangeLog
|
|
Mark Wielaard |
1974584 |
+++ b/src/ChangeLog
|
|
Mark Wielaard |
1974584 |
@@ -1,3 +1,8 @@
|
|
Mark Wielaard |
1974584 |
+2013-02-24 Mark Wielaard <mjw@redhat.com>
|
|
Mark Wielaard |
1974584 |
+
|
|
Mark Wielaard |
1974584 |
+ * elflint.c (check_symtab): Add __bss_start__ to the list of symbols
|
|
Mark Wielaard |
1974584 |
+ allowed to have out of section values because of GNU ld bugs.
|
|
Mark Wielaard |
1974584 |
+
|
|
Mark Wielaard |
1974584 |
2013-02-06 Mark Wielaard <mjw@redhat.com>
|
|
Mark Wielaard |
1974584 |
|
|
Mark Wielaard |
1974584 |
* elflint.c (check_symtab): Add __bss_start and __TMC_END__ to the
|
|
Mark Wielaard |
1974584 |
diff --git a/src/elflint.c b/src/elflint.c
|
|
Mark Wielaard |
1974584 |
index bc5ed33..acd458b 100644
|
|
Mark Wielaard |
1974584 |
--- a/src/elflint.c
|
|
Mark Wielaard |
1974584 |
+++ b/src/elflint.c
|
|
Mark Wielaard |
1974584 |
@@ -782,6 +782,7 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"),
|
|
Mark Wielaard |
1974584 |
&& strcmp (name, "__fini_array_start") != 0
|
|
Mark Wielaard |
1974584 |
&& strcmp (name, "__fini_array_end") != 0
|
|
Mark Wielaard |
1974584 |
&& strcmp (name, "__bss_start") != 0
|
|
Mark Wielaard |
1974584 |
+ && strcmp (name, "__bss_start__") != 0
|
|
Mark Wielaard |
1974584 |
&& strcmp (name, "__TMC_END__") != 0))
|
|
Mark Wielaard |
1974584 |
ERROR (gettext ("\
|
|
Mark Wielaard |
1974584 |
section [%2d] '%s': symbol %zu: st_value out of bounds\n"),
|