diff options
author | Alan Modra <amodra@gmail.com> | 2018-08-03 16:41:22 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2018-08-05 12:11:51 +0930 |
commit | 05d0e962f08af24f18cc79b890a68176b42bcb78 (patch) | |
tree | 2c8f894a6415dfe2260ff0e9bd7a9b46f7451b8a /bfd/ChangeLog | |
parent | 3f6ff4799bc50e6030bb707b2b2b525fcfdd2216 (diff) | |
download | gdb-05d0e962f08af24f18cc79b890a68176b42bcb78.zip gdb-05d0e962f08af24f18cc79b890a68176b42bcb78.tar.gz gdb-05d0e962f08af24f18cc79b890a68176b42bcb78.tar.bz2 |
R_PPC64_REL24_NOTOC support
R_PPC64_REL24_NOTOC is used on calls like "bl foo@notoc" to tell the
linker that linkage stubs for PLT calls or long branches can't use r2
for pic addressing. Instead, new stubs that generate pc-relative
addresses are used. One complication is that pc-relative offsets to
the PLT may need to be 64-bit in large programs, in contrast to the
toc-relative addressing used by older PLT linkage stubs where a 32-bit
offset is sufficient until the PLT itself exceeds 2G in size.
.eh_frame info to cover the _notoc stubs is yet to be implemented.
bfd/
* elf64-ppc.c (ADDI_R12_R11, ADDI_R12_R12, LIS_R12),
(ADDIS_R12_R11, ORIS_R12_R12_0, ORI_R12_R12_0),
(SLDI_R12_R12_32, LDX_R12_R11_R12, ADD_R12_R11_R12): Define.
(ppc64_elf_howto_raw): Add R_PPC64_REL24_NOTOC entry.
(ppc64_elf_reloc_type_lookup): Support R_PPC64_REL24_NOTOC.
(ppc_stub_type): Add ppc_stub_long_branch_notoc,
ppc_stub_long_branch_both, ppc_stub_plt_branch_notoc,
ppc_stub_plt_branch_both, ppc_stub_plt_call_notoc, and
ppc_stub_plt_call_both.
(is_branch_reloc): Add R_PPC64_REL24_NOTOC.
(build_offset, size_offset): New functions.
(plt_stub_size): Support plt_call_notoc and plt_call_both.
(ppc_build_one_stub, ppc_size_one_stub): Support new stubs.
(toc_adjusting_stub_needed): Handle R_PPC64_REL24_NOTOC.
(ppc64_elf_size_stubs): Likewise, and new stubs.
(ppc64_elf_build_stubs, ppc64_elf_relocate_section): Likewise.
* reloc.c: Add BFD_RELOC_PPC64_REL24_NOTOC.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
gas/
* config/tc-ppc.c (ppc_elf_suffix): Support @notoc.
(ppc_force_relocation, ppc_fix_adjustable): Handle REL24_NOTOC.
ld/
* testsuite/ld-powerpc/ext.d,
* testsuite/ld-powerpc/ext.s,
* testsuite/ld-powerpc/ext.lnk,
* testsuite/ld-powerpc/notoc.d,
* testsuite/ld-powerpc/notoc.s: New tests.
* testsuite/ld-powerpc/powerpc.exp: Run them.
Diffstat (limited to 'bfd/ChangeLog')
-rw-r--r-- | bfd/ChangeLog | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e23f747..95fe0ee 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,27 @@ 2018-08-05 Alan Modra <amodra@gmail.com> + * elf64-ppc.c (ADDI_R12_R11, ADDI_R12_R12, LIS_R12), + (ADDIS_R12_R11, ORIS_R12_R12_0, ORI_R12_R12_0), + (SLDI_R12_R12_32, LDX_R12_R11_R12, ADD_R12_R11_R12): Define. + (ppc64_elf_howto_raw): Add R_PPC64_REL24_NOTOC entry. + (ppc64_elf_reloc_type_lookup): Support R_PPC64_REL24_NOTOC. + (ppc_stub_type): Add ppc_stub_long_branch_notoc, + ppc_stub_long_branch_both, ppc_stub_plt_branch_notoc, + ppc_stub_plt_branch_both, ppc_stub_plt_call_notoc, and + ppc_stub_plt_call_both. + (is_branch_reloc): Add R_PPC64_REL24_NOTOC. + (build_offset, size_offset): New functions. + (plt_stub_size): Support plt_call_notoc and plt_call_both. + (ppc_build_one_stub, ppc_size_one_stub): Support new stubs. + (toc_adjusting_stub_needed): Handle R_PPC64_REL24_NOTOC. + (ppc64_elf_size_stubs): Likewise, and new stubs. + (ppc64_elf_build_stubs, ppc64_elf_relocate_section): Likewise. + * reloc.c: Add BFD_RELOC_PPC64_REL24_NOTOC. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + +2018-08-05 Alan Modra <amodra@gmail.com> + * elf64-ppc.c (ppc_build_one_stub): Lose "_r2off" in stub symbols. 2018-08-02 Jim Wilson <jimw@sifive.com> |