From: Jim Wilson Date: Mon, 15 Oct 2018 23:00:28 +0000 (-0700) Subject: RISC-V: Adjust __global_pointer$ value to reduce code size. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=640be958cd6bdc339211f29851e69a297033e172;p=binutils-gdb.git RISC-V: Adjust __global_pointer$ value to reduce code size. ld/ * emulparams/elf32lriscv-defs.sh (DATA_START_SYMBOLS): New. (SDATA_START_SYMBOLS): Define __SDATA_BEGIN__. Don't define __global_pointer$. (OTHER_END_SYMBOLS): New. Define __global_pointer$. * testsuite/ld-riscv-elf/pcrel-lo-addend-2.d (#ld): Add --no-relax. --- diff --git a/ld/ChangeLog b/ld/ChangeLog index 3043096e36a..8f8880e1bf8 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2018-10-15 Jim Wilson + + * emulparams/elf32lriscv-defs.sh (DATA_START_SYMBOLS): New. + (SDATA_START_SYMBOLS): Define __SDATA_BEGIN__. Don't define + __global_pointer$. + (OTHER_END_SYMBOLS): New. Define __global_pointer$. + * testsuite/ld-riscv-elf/pcrel-lo-addend-2.d (#ld): Add --no-relax. + 2018-10-15 Alan Modra PR 23534 diff --git a/ld/emulparams/elf32lriscv-defs.sh b/ld/emulparams/elf32lriscv-defs.sh index 91015d44714..5ac3b6023dc 100644 --- a/ld/emulparams/elf32lriscv-defs.sh +++ b/ld/emulparams/elf32lriscv-defs.sh @@ -30,8 +30,19 @@ TEXT_START_ADDR=0x10000 MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" -SDATA_START_SYMBOLS="${CREATE_SHLIB-__global_pointer$ = . + 0x800;} +DATA_START_SYMBOLS="${CREATE_SHLIB-__DATA_BEGIN__ = .;}" + +SDATA_START_SYMBOLS="${CREATE_SHLIB-__SDATA_BEGIN__ = .;} *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*)" INITIAL_READONLY_SECTIONS=".interp : { *(.interp) } ${CREATE_PIE-${INITIAL_READONLY_SECTIONS}}" INITIAL_READONLY_SECTIONS="${RELOCATING+${CREATE_SHLIB-${INITIAL_READONLY_SECTIONS}}}" + +# We must cover as much of sdata as possible if it exists. If sdata+bss is +# smaller than 0x1000 then we should start from bss end to cover as much of +# the program as possible. But we can't allow gp to cover any of rodata, as +# the address of variables in rodata may change during relaxation, so we start +# from data in that case. +OTHER_END_SYMBOLS="${CREATE_SHLIB-__BSS_END__ = .; + __global_pointer$ = MIN(__SDATA_BEGIN__ + 0x800, + MAX(__DATA_BEGIN__ + 0x800, __BSS_END__ - 0x800));}" diff --git a/ld/testsuite/ld-riscv-elf/pcrel-lo-addend-2.d b/ld/testsuite/ld-riscv-elf/pcrel-lo-addend-2.d index 9e94c5c3990..039de102c3a 100644 --- a/ld/testsuite/ld-riscv-elf/pcrel-lo-addend-2.d +++ b/ld/testsuite/ld-riscv-elf/pcrel-lo-addend-2.d @@ -1,5 +1,5 @@ #name: %pcrel_lo overflow with an addend #source: pcrel-lo-addend-2.s #as: -march=rv32ic -#ld: -melf32lriscv +#ld: -melf32lriscv --no-relax #error: .*dangerous relocation: %pcrel_lo overflow with an addend