forked from OSchip/llvm-project
Find .plt section in object files generated by recent ld
Code in ObjectFileELF::ParseTrampolineSymbols assumes that the sh_info field of the .rel(a).plt section identifies the .plt section. However, with recent GNU ld this is no longer true. As a result of this: https://sourceware.org/bugzilla/show_bug.cgi?id=18169 in object files generated with current linkers the sh_info field of .rel(a).plt now points to the .got.plt section (or .got on some targets). This causes LLDB to fail to identify any PLT stubs, causing a number of test case failures. This patch changes LLDB to simply always look for the .plt section by name. This should be safe across all linkers and targets. Differential Revision: http://reviews.llvm.org/D18973 llvm-svn: 266316
This commit is contained in:
parent
7e8de59b90
commit
bd5262629d
|
@ -2611,17 +2611,17 @@ ObjectFileELF::ParseTrampolineSymbols(Symtab *symbol_table,
|
|||
{
|
||||
assert(rel_hdr->sh_type == SHT_RELA || rel_hdr->sh_type == SHT_REL);
|
||||
|
||||
// The link field points to the associated symbol table. The info field
|
||||
// points to the section holding the plt.
|
||||
// The link field points to the associated symbol table.
|
||||
user_id_t symtab_id = rel_hdr->sh_link;
|
||||
user_id_t plt_id = rel_hdr->sh_info;
|
||||
|
||||
// If the link field doesn't point to the appropriate symbol name table then
|
||||
// try to find it by name as some compiler don't fill in the link fields.
|
||||
if (!symtab_id)
|
||||
symtab_id = GetSectionIndexByName(".dynsym");
|
||||
if (!plt_id)
|
||||
plt_id = GetSectionIndexByName(".plt");
|
||||
|
||||
// Get PLT section. We cannot use rel_hdr->sh_info, since current linkers
|
||||
// point that to the .got.plt or .got section instead of .plt.
|
||||
user_id_t plt_id = GetSectionIndexByName(".plt");
|
||||
|
||||
if (!symtab_id || !plt_id)
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue