summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2016-08-12 20:36:20 +0100
committerNick Clifton <nickc@redhat.com>2016-08-12 20:36:20 +0100
commit52c3c391f4a4a38ca921e5e7b5dce92e62079f34 (patch)
tree7e7be53c70061a22d6904e07b53e2f5966ce538a
parent3785f51aa2454dba199db8aafa80019795d536ec (diff)
downloadbinutils-gdb-52c3c391f4a4a38ca921e5e7b5dce92e62079f34.tar.gz
Warn if the sh_info field of a symbol table does not index the first non-local symbol in the section.
* readelf.c (process_symbol_table): Generate a warning if a local symbol is found at and offste greater than or equal to the sh_info field of it's section header.
-rw-r--r--binutils/ChangeLog6
-rw-r--r--binutils/readelf.c5
2 files changed, 11 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index d21c299fac8..5018e43dd50 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2016-08-12 Nick Clifton <nickc@redhat.com>
+
+ * readelf.c (process_symbol_table): Generate a warning if a local
+ symbol is found at and offste greater than or equal to the sh_info
+ field of it's section header.
+
2016-08-08 Nick Clifton <nickc@redhat.com>
PR binutils/20440
diff --git a/binutils/readelf.c b/binutils/readelf.c
index e6674c2f5fc..586d13c7dea 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -11114,6 +11114,11 @@ process_symbol_table (FILE * file)
}
putchar ('\n');
+
+ if (ELF_ST_BIND (psym->st_info) == STB_LOCAL
+ && si >= section->sh_info)
+ warn (_("local symbol %u found at index >= %s's sh_info value of %u\n"),
+ si, printable_section_name (section), section->sh_info);
}
free (symtab);