* elf32-ppc.c (ppc_elf_check_relocs): Always set up sections
authorAlan Modra <amodra@gmail.com>
Wed, 29 Jul 2009 14:56:38 +0000 (14:56 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 29 Jul 2009 14:56:38 +0000 (14:56 +0000)
commit25f231068e4cddb11c8129980dc40cba1d42e4c5
treef5a4bb1509f59d2b57d85f7939111c3d47afdd10
parent28ec585feaa018f38c7c0fda2b833d91568d5745
* elf32-ppc.c (ppc_elf_check_relocs): Always set up sections
used by indirect function support.  Count dynamic relocs for
ifunc syms.
(ppc_elf_adjust_dynamic_symbol): Tweak for ifunc.
(allocate_dynrelocs): Allocate all non-dynamic ifunc plt entries
in iplt and their relocs in reliplt.  Don't make ifunc syms
dynamic.  Allocate got entry relocs for non-dynamic ifunc in
reliplt.  Handle other dynamic relocs for ifunc.
(ppc_elf_size_dynamic_sections): Alloc dyn relocs for static
ifunc in reliplt, likewise relocs for got against local ifunc.
Typo fix on reliplt size adjust.
(ppc_elf_relocate_section): Don't use plt scheme of allocating
relocs 1-1 with entries for iplt, instead just add using
reloc_count.  Write got relocs and dyn relocs for ifunc to reliplt.
Error on invalid ifunc dyn relocs.
(ppc_elf_finish_dynamic_symbol): Adjust for non-dynamic ifunc plt
in iplt/reliplt.
* elf64-ppc.c (ppc64_elf_howto_raw): Add R_PPC64_JMP_IREL,
R_PPC64_REL16, R_PPC64_REL16_LO, R_PPC64_REL16_HI, R_PPC64_REL16_HA.
(ppc64_elf_reloc_type_lookup): Handle new relocs.
(ppc64_elf_check_relocs): Likewise.  Count dyn relocs for ifunc.
(allocate_dynrelocs): As for elf32-ppc.c above.
(ppc64_elf_size_dynamic_sections): Likewise.
(ppc_build_one_stub): Put non-dynamic ifunc plt call stubs in iplt,
and their relocs in reliplt.  Use R_PPC64_JMP_IREL.
(ppc_size_one_stub): Similarly.
(ppc64_elf_relocate_section): As for elf32-ppc.c above.  Handle new
relocs too.
(ppc64_elf_finish_dynamic_symbol): As for elf32-ppc.c above.
bfd/ChangeLog
bfd/elf32-ppc.c
bfd/elf64-ppc.c