Implement support for largetoc on XCOFF. R_TOCU and R_TOCL are referenced by the new BFD defines: BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO. A new toc storage class is added XMC_TE. In order to correctly handle R_TOCU, the logic behind xcoff_reloc_type_toc is changed to compute the whole TOC offset instead of just the difference between the "link" offset and the "assembly" offset. In gas, add a function to transform addis format used by AIX "addis RT, D(RA)" into the ELF format "addis RT, RA, SI". bfd/ * reloc.c (BFD_RELOC_PPC_TOC16_HI, BFD_RELOC_PPC_TOC16_LO): New relocations. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. * coff-rs6000.c (xcoff_calculate_relocation): Call xcoff_reloc_type_toc for R_TOCU and R_TOCL. (xcoff_howto_table): Remove src_mask for TOC relocations. Add R_TOCU and R_TOCL howtos. (_bfd_xcoff_reloc_type_lookup): Add cases for BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO. (xcoff_reloc_type_toc): Compute the whole offset. Implement R_TOCU and R_TOCL. * coff64-rs6000.c (xcoff64_calculate_relocation): Likewise. (xcoff64_howto_table): Likewise. (xcoff64_reloc_type_lookup): Likewise. gas/ * config/tc-ppc.c (ppc_xcoff_suffix): New function. (MAP, MAP32, MAP64): New macros for XCOFF. (ppc_xcoff_fixup_addis): New function. (ppc_is_toc_sym): Handle XMC_TE. (fixup_size): Add cases for BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO. (md_assemble): Call ppc_xcoff_fixup_addis for XCOFF. (ppc_change_csect): Handle XMC_TE. (ppc_tc): Enable .tc symbols to have only a XMC_TC or XMC_TE storage class. (ppc_symbol_new_hook): Handle XMC_TE. (ppc_frob_symbol): Likewise. (ppc_fix_adjustable): Likewise. (md_apply_fix): Handle BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO. ld/ * scripttempl/aix.sc: Add .te to .data section. * testsuite/ld-powerpc/aix52.exp: Add test structure for AIX7+. Add aix-largetoc-1 test. * testsuite/ld-powerpc/aix-largetoc-1-32.d: New test. * testsuite/ld-powerpc/aix-largetoc-1-64.d: New test. * testsuite/ld-powerpc/aix-largetoc-1.ex: New test. * testsuite/ld-powerpc/aix-largetoc-1.s: New test.
77 lines
1.6 KiB
Scala
77 lines
1.6 KiB
Scala
# AIX linker script.
|
|
# AIX always uses shared libraries. The section VMA appears to be
|
|
# unimportant. The native linker aligns the sections on boundaries
|
|
# specified by the -H option.
|
|
#
|
|
# Copyright (C) 2014-2021 Free Software Foundation, Inc.
|
|
#
|
|
# Copying and distribution of this file, with or without modification,
|
|
# are permitted in any medium without royalty provided the copyright
|
|
# notice and this notice are preserved.
|
|
|
|
cat <<EOF
|
|
/* Copyright (C) 2014-2021 Free Software Foundation, Inc.
|
|
|
|
Copying and distribution of this script, with or without modification,
|
|
are permitted in any medium without royalty provided the copyright
|
|
notice and this notice are preserved. */
|
|
|
|
OUTPUT_ARCH(${ARCH})
|
|
${RELOCATING+${LIB_SEARCH_DIRS}}
|
|
${RELOCATING+ENTRY (__start)}
|
|
SECTIONS
|
|
{
|
|
.pad 0 : { *(.pad) }
|
|
|
|
. = ALIGN (0x10000000 + SIZEOF_HEADERS, 32);
|
|
.text ${RELOCATING-0} : {
|
|
${RELOCATING+PROVIDE (_text = .);}
|
|
*(.text)
|
|
*(.pr)
|
|
*(.ro)
|
|
*(.db)
|
|
*(.gl)
|
|
*(.xo)
|
|
*(.ti)
|
|
*(.tb)
|
|
${RELOCATING+PROVIDE (_etext = .);}
|
|
}
|
|
|
|
. = ALIGN (ALIGN (0x10000000) + (. & 0xfff), 32);
|
|
.data . : {
|
|
${RELOCATING+PROVIDE (_data = .);}
|
|
*(.data)
|
|
*(.rw)
|
|
*(.sv)
|
|
*(.sv64)
|
|
*(.sv3264)
|
|
*(.ua)
|
|
. = ALIGN(4);
|
|
${CONSTRUCTING+CONSTRUCTORS}
|
|
*(.ds)
|
|
*(.tc0)
|
|
*(.tc)
|
|
*(.td)
|
|
*(.te)
|
|
${RELOCATING+PROVIDE (_edata = .);}
|
|
}
|
|
.bss : {
|
|
*(.tocbss)
|
|
*(.bss)
|
|
*(.bs)
|
|
*(.uc)
|
|
*(COMMON)
|
|
${RELOCATING+PROVIDE (_end = .);}
|
|
${RELOCATING+PROVIDE (end = .);}
|
|
}
|
|
|
|
.loader : {
|
|
*(.loader)
|
|
}
|
|
|
|
.debug : {
|
|
*(.debug)
|
|
}
|
|
}
|
|
EOF
|