2013-09-24 06:29:39 +00:00
|
|
|
. ${srcdir}/emulparams/elf32ppccommon.sh
|
2011-07-26 01:57:18 +00:00
|
|
|
. ${srcdir}/emulparams/plt_unwind.sh
|
2002-01-16 05:52:38 +00:00
|
|
|
EXTRA_EM_FILE=ppc64elf
|
2001-08-27 10:45:55 +00:00
|
|
|
ELFSIZE=64
|
|
|
|
OUTPUT_FORMAT="elf64-powerpc"
|
|
|
|
TEXT_START_ADDR=0x10000000
|
2002-11-20 01:02:44 +00:00
|
|
|
#SEGMENT_SIZE=0x10000000
|
2002-07-12 06:48:54 +00:00
|
|
|
ARCH=powerpc:common64
|
2001-08-27 10:45:55 +00:00
|
|
|
NOP=0x60000000
|
2013-09-24 06:29:39 +00:00
|
|
|
unset EXECUTABLE_SYMBOLS
|
|
|
|
unset SDATA_START_SYMBOLS
|
|
|
|
unset SDATA2_START_SYMBOLS
|
|
|
|
unset SBSS_START_SYMBOLS
|
|
|
|
unset SBSS_END_SYMBOLS
|
|
|
|
unset OTHER_END_SYMBOLS
|
|
|
|
unset OTHER_RELRO_SECTIONS
|
2002-02-18 12:40:28 +00:00
|
|
|
OTHER_TEXT_SECTIONS="*(.sfpr .glink)"
|
2001-08-27 10:45:55 +00:00
|
|
|
OTHER_BSS_SYMBOLS="
|
2005-11-18 04:26:29 +00:00
|
|
|
.tocbss ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.tocbss)}"
|
2001-08-27 10:45:55 +00:00
|
|
|
OTHER_PLT_RELOC_SECTIONS="
|
|
|
|
.rela.tocbss ${RELOCATING-0} : { *(.rela.tocbss) }"
|
2003-07-28 03:33:48 +00:00
|
|
|
|
|
|
|
if test x${RELOCATING+set} = xset; then
|
|
|
|
GOT="
|
2005-11-18 04:26:29 +00:00
|
|
|
.got : ALIGN(8) { *(.got .toc) }"
|
2003-07-28 03:33:48 +00:00
|
|
|
else
|
|
|
|
GOT="
|
|
|
|
.got 0 : { *(.got) }
|
|
|
|
.toc 0 : { *(.toc) }"
|
|
|
|
fi
|
2009-12-09 01:26:03 +00:00
|
|
|
# Put .opd relocs first so ld.so will process them before any ifunc relocs.
|
|
|
|
INITIAL_RELOC_SECTIONS="
|
|
|
|
.rela.opd ${RELOCATING-0} : { *(.rela.opd) }"
|
2001-08-27 10:45:55 +00:00
|
|
|
OTHER_GOT_RELOC_SECTIONS="
|
2008-09-30 15:04:34 +00:00
|
|
|
.rela.toc ${RELOCATING-0} : { *(.rela.toc) }
|
|
|
|
.rela.branch_lt ${RELOCATING-0} : { *(.rela.branch_lt) }"
|
2001-08-27 10:45:55 +00:00
|
|
|
OTHER_READWRITE_SECTIONS="
|
Reorder more powerpc64 sections for -z relro
This moves .got too, which requires .sdata and .sbss to move with it,
because these sections share addressing via the toc pointer and with
small-model code must be within a 16-bit signed offset. .plt, .iplt
and .branch_lt must also be moved since they are addressed via a
32-bit offset from the toc pointer, and we might have a very large
.data section.
This change means we may have some bss style sections before the data
segment, necessitating another PT_LOAD header. Also, since _edata is
defined at the end of the data segment it's possible with an empty
.data to have _edata at the end of .plt which looks a little unusual
since .plt is a bss style section. That should only happen rarely in
real world binaries, but does occur in the ld testsuite.
ld/
* emulparams/elf64ppc.sh (BSS_PLT): Don't define.
(OTHER_READWRITE_SECTIONS): Move .branch_lt to..
(OTHER_RELRO_SECTIONS_2): ..here.
(DATA_GOT, SEPARATE_GOTPLT, DATA_SDATA, DATA_PLT,
PLT_BEFORE_GOT): Define.
* scripttempl/elf.sc: Handle DATA_SDATA and DATA_GOT/DATA_PLT/
PLT_BEFORE_GOT combination.
(DATA_GOT, SDATA_GOT): Don't define if either is already defined.
ld/testsuite/
* ld-powerpc/ambiguousv1.d,
* ld-powerpc/ambiguousv1b.d,
* ld-powerpc/ambiguousv2.d,
* ld-powerpc/ambiguousv2b.d,
* ld-powerpc/elfv2exe.d,
* ld-powerpc/elfv2so.d,
* ld-powerpc/tlsexe.r,
* ld-powerpc/tlsexetoc.r,
* ld-powerpc/tlsso.r,
* ld-powerpc/tlstocso.r: Update.
2015-01-20 06:49:15 +00:00
|
|
|
.toc1 ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.toc1) }"
|
2015-01-20 06:41:21 +00:00
|
|
|
OTHER_RELRO_SECTIONS_2="
|
Reorder more powerpc64 sections for -z relro
This moves .got too, which requires .sdata and .sbss to move with it,
because these sections share addressing via the toc pointer and with
small-model code must be within a 16-bit signed offset. .plt, .iplt
and .branch_lt must also be moved since they are addressed via a
32-bit offset from the toc pointer, and we might have a very large
.data section.
This change means we may have some bss style sections before the data
segment, necessitating another PT_LOAD header. Also, since _edata is
defined at the end of the data segment it's possible with an empty
.data to have _edata at the end of .plt which looks a little unusual
since .plt is a bss style section. That should only happen rarely in
real world binaries, but does occur in the ld testsuite.
ld/
* emulparams/elf64ppc.sh (BSS_PLT): Don't define.
(OTHER_READWRITE_SECTIONS): Move .branch_lt to..
(OTHER_RELRO_SECTIONS_2): ..here.
(DATA_GOT, SEPARATE_GOTPLT, DATA_SDATA, DATA_PLT,
PLT_BEFORE_GOT): Define.
* scripttempl/elf.sc: Handle DATA_SDATA and DATA_GOT/DATA_PLT/
PLT_BEFORE_GOT combination.
(DATA_GOT, SDATA_GOT): Don't define if either is already defined.
ld/testsuite/
* ld-powerpc/ambiguousv1.d,
* ld-powerpc/ambiguousv1b.d,
* ld-powerpc/ambiguousv2.d,
* ld-powerpc/ambiguousv2b.d,
* ld-powerpc/elfv2exe.d,
* ld-powerpc/elfv2so.d,
* ld-powerpc/tlsexe.r,
* ld-powerpc/tlsexetoc.r,
* ld-powerpc/tlsso.r,
* ld-powerpc/tlstocso.r: Update.
2015-01-20 06:49:15 +00:00
|
|
|
.opd ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { KEEP (*(.opd)) }
|
|
|
|
.branch_lt ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.branch_lt) }"
|
|
|
|
# Put .got before .data
|
|
|
|
DATA_GOT=" "
|
|
|
|
# Always make .got read-only after relocation
|
|
|
|
SEPARATE_GOTPLT=0
|
|
|
|
# Also put .sdata before .data
|
|
|
|
DATA_SDATA=" "
|
|
|
|
# and .plt/.iplt before .data
|
|
|
|
DATA_PLT=
|
|
|
|
PLT_BEFORE_GOT=" "
|