diff options
author | Nelson Chu <nelson@rivosinc.com> | 2023-03-25 08:41:12 +0800 |
---|---|---|
committer | Nelson Chu <nelson@rivosinc.com> | 2023-03-30 07:40:14 +0800 |
commit | b679fb488a8c35e573d50f118a09f72c1f6289de (patch) | |
tree | 523872417472d0d54487e0ca668b3260c2b391ca /ld/ldemul.h | |
parent | 23068b02d3a6743658110c7662178fdebbe2ac6a (diff) | |
download | gdb-b679fb488a8c35e573d50f118a09f72c1f6289de.zip gdb-b679fb488a8c35e573d50f118a09f72c1f6289de.tar.gz gdb-b679fb488a8c35e573d50f118a09f72c1f6289de.tar.bz2 |
RISC-V: Clarify link behaviors of R_RISCV_32/64 relocations with ABS symbol.
There are two improvements, which are all referenced to aarch64,
* R_RISCV_32 with non ABS symbol cannot be used under RV64 when making
shard objects.
* Don't need dynamic relocation for R_RISCV_32/64 under RV32/RV64 when
making shared objects, if the referenced symbol is local ABS symbol.
However, considering this link,
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/341
Seems like we should makes all R_RISCV_32/64 relocs with ABS symbol
that don't need any dynamic relocations when making the shared objects.
But anyway, I just sync the current behavior as aarch64 ld, in case
there are any unexpected behaviors happen.
Passed the gcc/binutils regressions in riscv-gnu-toolchain.
bfd/
* elfnn-riscv.c (riscv_elf_check_relocs): Only allow R_RISCV_32 with ABS
symbol under RV64.
(riscv_elf_relocate_section): R_RISCV_32/64 with local ABS symbol under
RV32/RV64 doesn't need any dynamic relocation when making shared objects.
I just make the implementations similar to other targets, so that will be
more easy to mainatain.
ld/
* testsuite/ld-riscv-elf/data-reloc*: New testcases.
* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Added new data-reloc* testcases,
and need to make ifunc-seperate* testcases work for rv32.
* testsuite/ld-riscv-elf/ifunc-seperate-caller-nonplt.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-caller-plt.s: Likewise.
Diffstat (limited to 'ld/ldemul.h')
0 files changed, 0 insertions, 0 deletions