PR22374, PowerPC unnecessary PLT entries

We don't need a PLT entry when function pointer initialization in a
read/write section is the only reference to a given function symbol.
This patch prevents the unnecessary PLT entry, and ensures no dynamic
relocs are emitted when UNDEFWEAK_NO_DYNAMIC_RELOC says so.

bfd/
	PR 22374
	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't create a plt
	entry when just a dynamic reloc can serve.  Ensure no dynamic
	relocations when UNDEFWEAK_NO_DYNAMIC_RELOC by setting non_got_ref.
	Expand and move the non_got_ref comment.
	* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise.
ld/
	* testsuite/ld-powerpc/ambiguousv2.d: Remove FIXME.
This commit is contained in:
Alan Modra
2017-10-31 22:13:21 +10:30
parent e48f0c8f1b
commit 3988aed54a
5 changed files with 58 additions and 13 deletions

View File

@@ -1,3 +1,7 @@
2017-11-01 Alan Modra <amodra@gmail.com>
* testsuite/ld-powerpc/ambiguousv2.d: Remove FIXME.
2017-11-01 Alan Modra <amodra@gmail.com>
PR 22374

View File

@@ -8,16 +8,11 @@
# anything to mark it as ELFv1 or ELFv2. We should get a dynamic
# reloc on the function address, not have a global entry stub, and
# my_func should be undefined dynamic with value zero.
# FIXME someday: No need for a plt entry.
Relocation section .* contains 1 entries:
.*
.* R_PPC64_ADDR64 .* my_func \+ 0
Relocation section .* contains 1 entries:
.*
.* R_PPC64_JMP_SLOT .* my_func \+ 0
Symbol table '\.dynsym' contains 5 entries:
.*
0: .*