diff options
-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 3043096..8f8880e 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 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 |