PowerPC64 ELFv2 symbols defined in plt
authorAlan Modra <amodra@gmail.com>
Fri, 1 Nov 2013 08:54:20 +0000 (19:24 +1030)
committerAlan Modra <amodra@gmail.com>
Sun, 3 Nov 2013 23:50:09 +0000 (10:20 +1030)
commita345bc8d317a159e3e887632d80c5a8282d34f07
treeb715139c77d1b610f9e6a79dad21767bae1adeae
parent4115bfc68301edaca4dd1fd83eddeaafeda4c63c
PowerPC64 ELFv2 symbols defined in plt

In a non-pic executable, ELFv2 like other targets, needs to emit a plt
entry even for non-call references to functions defined in shared
libraries, and define the function on the plt code.

* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Copy
pointer_equality_needed flag.
(ppc64_elf_check_relocs): For ELFv2 arrange to emit plt
entries for references to functions in shared libraries on
non-call relocs.
(readonly_dynrelocs): Split into function of the same name and..
(maybe_set_textrel): ..this new function.  Update call.
(ppc64_elf_adjust_dynamic_symbol): Don't emit dynrelocs for
ELFv2 in most cases if we have a plt entry.  Use new
readonly_relocs.
(allocate_dynrelocs): For ELFv2, don't allocate dynreloc space
for ifunc in static executables.
(size_global_entry_stubs): New function.
(ppc64_elf_size_dynamic_sections): Call size_global_entry_stubs.
Save end of glink branch table.
(ppc64_elf_hash_symbol): New function.
(build_global_entry_stubs): New function.
(ppc64_elf_build_stubs): Call build_global_entry_stubs.  Adjust
glink sizing.
(ppc64_elf_relocate_section): Tidy plt16/32/64 reloc code.
(ppc64_elf_finish_dynamic_symbol): For ELFv2, adjust symbols
defined on plt code.
bfd/ChangeLog
bfd/elf64-ppc.c