forked from Imagelibrary/binutils-gdb
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.
This commit is contained in:
@@ -203,12 +203,12 @@ if test -z "${NO_SMALL_DATA}"; then
|
||||
else
|
||||
NO_SMALL_DATA=" "
|
||||
fi
|
||||
if test -z "${DATA_GOT}"; then
|
||||
if test -z "${SDATA_GOT}${DATA_GOT}"; then
|
||||
if test -n "${NO_SMALL_DATA}"; then
|
||||
DATA_GOT=" "
|
||||
fi
|
||||
fi
|
||||
if test -z "${SDATA_GOT}"; then
|
||||
if test -z "${SDATA_GOT}${DATA_GOT}"; then
|
||||
if test -z "${NO_SMALL_DATA}"; then
|
||||
SDATA_GOT=" "
|
||||
fi
|
||||
@@ -574,11 +574,15 @@ cat <<EOF
|
||||
${OTHER_RELRO_SECTIONS}
|
||||
${TEXT_DYNAMIC-${DYNAMIC}}
|
||||
${OTHER_RELRO_SECTIONS_2}
|
||||
${DATA_GOT+${RELRO_NOW+${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}}}
|
||||
${DATA_GOT+${RELRO_NOW+${GOT}}}
|
||||
${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
|
||||
${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
|
||||
${RELOCATING+${DATA_SEGMENT_RELRO_END}}
|
||||
${INITIAL_READWRITE_SECTIONS}
|
||||
${DATA_SDATA+${SDATA}}
|
||||
${DATA_SDATA+${OTHER_SDATA_SECTIONS}}
|
||||
${DATA_GOT+${RELRO_NOW-${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}}}
|
||||
${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
|
||||
${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
|
||||
|
||||
@@ -595,12 +599,12 @@ cat <<EOF
|
||||
${OTHER_READWRITE_SECTIONS}
|
||||
${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
|
||||
${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
|
||||
${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
|
||||
${SDATA_GOT+${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}}
|
||||
${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS+. = .; ${OTHER_GOT_SYMBOLS}}}}
|
||||
${SDATA_GOT+${GOT}}
|
||||
${SDATA_GOT+${OTHER_GOT_SECTIONS}}
|
||||
${SDATA}
|
||||
${OTHER_SDATA_SECTIONS}
|
||||
${DATA_SDATA-${SDATA}}
|
||||
${DATA_SDATA-${OTHER_SDATA_SECTIONS}}
|
||||
${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
|
||||
${RELOCATING+. = .;}
|
||||
${RELOCATING+${USER_LABEL_PREFIX}__bss_start = .;}
|
||||
|
||||
Reference in New Issue
Block a user