diff options
author | Jim Wilson <jimw@sifive.com> | 2018-10-15 16:00:28 -0700 |
---|---|---|
committer | Jim Wilson <jimw@sifive.com> | 2018-10-15 16:00:28 -0700 |
commit | 640be958cd6bdc339211f29851e69a297033e172 (patch) | |
tree | e201af1bf07aa6e5bf4062e1333b7171caab7e93 /ld | |
parent | Re: BFD_INIT_MAGIC (diff) | |
download | binutils-gdb-640be958cd6bdc339211f29851e69a297033e172.tar.gz binutils-gdb-640be958cd6bdc339211f29851e69a297033e172.tar.bz2 binutils-gdb-640be958cd6bdc339211f29851e69a297033e172.zip |
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.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 8 | ||||
-rw-r--r-- | ld/emulparams/elf32lriscv-defs.sh | 13 | ||||
-rw-r--r-- | 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 3043096e36a..8f8880e1bf8 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2018-10-15 Jim Wilson <jimw@sifive.com> + + * 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 <amodra@gmail.com> 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 |