This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Linker generating incorrect sh_info values for .dynsym section
- From: Nick Clifton <nickc at redhat dot com>
- To: binutils at sourceware dot org
- Date: Fri, 12 Aug 2016 12:58:56 +0100
- Subject: Linker generating incorrect sh_info values for .dynsym section
- Authentication-results: sourceware.org; auth=none
Hi Guys,
It appears that the linker is generating incorrect values for the
sh_info field of the .dynsym section. The field is meant to contain
the index of the first non-local symbol in the .dynsym section, but
often it does not.
I created a patch for readelf (see below) to report this problem,
but when I ran regression tests I found that it triggered for nearly
all the ELF based targets, including x86_64 and PowerPC. Two tests in
particular - PROVIDE HIDDEN test 4 and PROVIDE HIDDEN test 10 seem to
trigger this problem every time.
I have spent a day looking through the code in elflink.c but I am not
getting very far, so I am reaching out for help. Does anyone have an
idea as to what might be causing this problem ?
Cheers
Nick
diff --git a/binutils/readelf.c b/binutils/readelf.c
index e6674c2..586d13c 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);