From 640be958cd6bdc339211f29851e69a297033e172 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 15 Oct 2018 16:00:28 -0700 Subject: [PATCH] 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. --- ld/ChangeLog | 8 ++++++++ ld/emulparams/elf32lriscv-defs.sh | 13 ++++++++++++- ld/testsuite/ld-riscv-elf/pcrel-lo-addend-2.d | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 3043096..8f8880e 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 91015d4..5ac3b60 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 9e94c5c..039de10 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 -- 2.7.4