RISC-V: Protect .got with relro

Move .got before .data so that it can be protected with -zrelro.  Also
separate .got.plt from .got if -znow is not in effect; the first two words
of .got.plt are placed within the relro region.

ld:
	PR ld/30877
	* emulparams/elf32lriscv-defs.sh (DATA_GOT, SEPARATE_GOTPLT):
	Define.
	* emulparams/elf64lriscv-defs.sh (SEPARATE_GOTPLT): Define.
	* testsuite/ld-elf/binutils.exp (binutils_test): Remove riscv*-*-*
	from relro_got expression.
This commit is contained in:
Andreas Schwab 2023-09-21 16:49:41 +02:00
parent a47d304b12
commit 7345d05aaf
3 changed files with 5 additions and 1 deletions

View File

@ -47,3 +47,7 @@ INITIAL_READONLY_SECTIONS="${RELOCATING+${CREATE_SHLIB-${INITIAL_READONLY_SECTIO
OTHER_END_SYMBOLS="${CREATE_SHLIB-__BSS_END__ = .;
__global_pointer$ = MIN(__SDATA_BEGIN__ + 0x800,
MAX(__DATA_BEGIN__ + 0x800, __BSS_END__ - 0x800));}"
# Put .got before .data
DATA_GOT=" "
SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 8 ? 8 : 0"

View File

@ -1,2 +1,3 @@
source_sh ${srcdir}/emulparams/elf32lriscv-defs.sh
ELFSIZE=64
SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 16 ? 16 : 0"

View File

@ -95,7 +95,6 @@ proc binutils_test { prog_name ld_options test {test_name ""} {readelf_options "
|| [istarget "mips*-*-*"] \
|| [istarget "nios2*-*-*"] \
|| [istarget "or1k-*-*"] \
|| [istarget "riscv*-*-*"] \
|| [istarget "sh*-*-*"] \
|| [istarget "x86_64-*-rdos*"])]
# Check if GNU_RELRO segment is generated.