__tls_get_addr_opt stubs and tocsave optimization
authorAlan Modra <amodra@gmail.com>
Sun, 5 Aug 2018 10:14:03 +0000 (19:44 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 7 Aug 2018 09:13:54 +0000 (18:43 +0930)
commite81b4c933c1b88e29f4b27627dd9ea0bf9189944
treec89195d2bf33cb1a0faf7c5e2afcea1f10d9248d
parent99f8774ccaca5b1bfa4a035c6c705bc7ef47e75f
__tls_get_addr_opt stubs and tocsave optimization

This patch fixes a bug in the handling of the __tls_get_addr_opt
stub.  Calls via this stub don't have a toc restoring instruction
following the "bl", and the stub itself doesn't have an initial toc
save instruction.  Thus it is incorrect to skip over the first
instruction when a __tls_get_addr call is marked with a tocsave
reloc.

* elf64-ppc.c (ppc64_elf_relocate_section): Don't skip first
instruction of __tls_get_addr_opt stub.
(plt_stub_size): Omit ALWAYS_EMIT_R2SAVE condition when
dealing with __tls_get_addr_opt stub.
(build_tls_get_addr_stub, ppc_size_one_stub): Likewise.
bfd/ChangeLog
bfd/elf64-ppc.c