Skip to content
  • Alan Modra's avatar
    R_PPC64_REL24_NOTOC support · 05d0e962
    Alan Modra authored
    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.
    05d0e962