PR23123, PowerPC32 ifunc regression
Two of the gcc ifunc tests fail for ppc32, due to my pr22374 fix being a little too enthusiastic in trimming PLT entries. ppc64 doesn't have the same failures because ppc64_elf_check_relocs happens to set needs_plt for any ifunc reloc. PR 23123 PR 22374 * elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't drop plt relocs for ifuncs. * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Comment fixes.
This commit is contained in:
parent
ced8ce28a4
commit
04383fd15b
3 changed files with 15 additions and 7 deletions
|
@ -1,3 +1,11 @@
|
|||
2018-04-27 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 23123
|
||||
PR 22374
|
||||
* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't drop plt
|
||||
relocs for ifuncs.
|
||||
* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Comment fixes.
|
||||
|
||||
2018-04-26 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't consider
|
||||
|
|
|
@ -5899,9 +5899,9 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
|
|||
&& !readonly_dynrelocs (h))
|
||||
{
|
||||
h->pointer_equality_needed = 0;
|
||||
/* If we haven't seen a branch reloc then we don't need
|
||||
a plt entry. */
|
||||
if (!h->needs_plt)
|
||||
/* If we haven't seen a branch reloc and the symbol
|
||||
isn't an ifunc then we don't need a plt entry. */
|
||||
if (!h->needs_plt && h->type != STT_GNU_IFUNC)
|
||||
h->plt.plist = NULL;
|
||||
}
|
||||
else if (!bfd_link_pic (info))
|
||||
|
|
|
@ -7304,8 +7304,8 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
|
|||
if (!readonly_dynrelocs (h))
|
||||
{
|
||||
h->pointer_equality_needed = 0;
|
||||
/* If we haven't seen a branch reloc then we don't need
|
||||
a plt entry. */
|
||||
/* If we haven't seen a branch reloc and the symbol
|
||||
isn't an ifunc then we don't need a plt entry. */
|
||||
if (!h->needs_plt)
|
||||
h->plt.plist = NULL;
|
||||
}
|
||||
|
@ -7321,8 +7321,8 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
|
|||
else if (!h->needs_plt
|
||||
&& !readonly_dynrelocs (h))
|
||||
{
|
||||
/* If we haven't seen a branch reloc then we don't need a
|
||||
plt entry. */
|
||||
/* If we haven't seen a branch reloc and the symbol isn't an
|
||||
ifunc then we don't need a plt entry. */
|
||||
h->plt.plist = NULL;
|
||||
h->pointer_equality_needed = 0;
|
||||
return TRUE;
|
||||
|
|
Loading…
Add table
Reference in a new issue