diff options
author | Linsen Zhou <i@lin.moe> | 2025-07-08 06:34:18 +0800 |
---|---|---|
committer | Nelson Chu <nelson@rivosinc.com> | 2025-07-08 11:10:25 +0800 |
commit | 39c7793ba8bef5aab358511b22764081959cb2ff (patch) | |
tree | cf5b4783093abbe2091a5d8577df0b0466f78970 | |
parent | 4f0271f2ef492de9dd50cb0b693f54a4a930c9b8 (diff) | |
download | binutils-39c7793ba8bef5aab358511b22764081959cb2ff.zip binutils-39c7793ba8bef5aab358511b22764081959cb2ff.tar.gz binutils-39c7793ba8bef5aab358511b22764081959cb2ff.tar.bz2 |
RISC-V: Bind defined symbol locally in PIE
Reference commit 1dcb9720d62cd053a72c31881b7724ce9f74332c
bfd/
* elfnn-riscv.c (RISCV_COPY_INPUT_RELOC): Bind defined symbol
locally in PIE.
ld/
* testsuite/ld-riscv-elf/pie-bind-locally-a.s: New test source.
* testsuite/ld-riscv-elf/pie-bind-locally-b.s: Likewise.
* testsuite/ld-riscv-elf/pie-bind-locally-rv32.d: New testcase.
* testsuite/ld-riscv-elf/pie-bind-locally-rv64.d: Likewise.
Signed-off-by: Linsen Zhou <i@lin.moe>
-rw-r--r-- | bfd/elfnn-riscv.c | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-riscv-elf/pie-bind-locally-a.s | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-riscv-elf/pie-bind-locally-b.s | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-riscv-elf/pie-bind-locally-rv32.d | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-riscv-elf/pie-bind-locally-rv64.d | 10 |
6 files changed, 37 insertions, 1 deletions
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 790f0397..2fd0129 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -99,7 +99,7 @@ ((H) != NULL \ && (H)->dynindx != -1 \ && (!bfd_link_pic (INFO) \ - || !SYMBOLIC_BIND ((INFO), (H)) \ + || !(bfd_link_pie ((INFO)) || SYMBOLIC_BIND ((INFO), (H))) \ || !(H)->def_regular)) /* True if this is actually a static link, or it is a -Bsymbolic link diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp index e103df6..70c9aa7 100644 --- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp +++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp @@ -235,6 +235,9 @@ if [istarget "riscv*-*-*"] { run_dump_test "zicfilp-unlabeled-plt" + run_dump_test "pie-bind-locally-rv32" + run_dump_test "pie-bind-locally-rv64" + # IFUNC testcases. # Check IFUNC by single type relocs. run_dump_test_ifunc "ifunc-reloc-call-01" rv32 exe diff --git a/ld/testsuite/ld-riscv-elf/pie-bind-locally-a.s b/ld/testsuite/ld-riscv-elf/pie-bind-locally-a.s new file mode 100644 index 0000000..c1ff19b --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/pie-bind-locally-a.s @@ -0,0 +1,5 @@ + .text + .global _start +_start: + .option pic + la a0, _start diff --git a/ld/testsuite/ld-riscv-elf/pie-bind-locally-b.s b/ld/testsuite/ld-riscv-elf/pie-bind-locally-b.s new file mode 100644 index 0000000..e5f16cd --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/pie-bind-locally-b.s @@ -0,0 +1,8 @@ + .section .data.rel,"aw",%progbits + .type q, %object +q: +.ifdef __64_bit__ + .quad _start +.else + .word _start +.endif diff --git a/ld/testsuite/ld-riscv-elf/pie-bind-locally-rv32.d b/ld/testsuite/ld-riscv-elf/pie-bind-locally-rv32.d new file mode 100644 index 0000000..0133995 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/pie-bind-locally-rv32.d @@ -0,0 +1,10 @@ +#source: pie-bind-locally-a.s +#source: pie-bind-locally-b.s +#as: -march=rv32i -mabi=ilp32 +#ld: -m[riscv_choose_ilp32_emul] -pie +#readelf: -Wr + +Relocation section '\.rela\.dyn' at offset .* contains 2 entries: +[ ]+Offset[ ]+Info[ ]+Type[ ]+.* +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_RISCV_RELATIVE[ ].* +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_RISCV_RELATIVE[ ].* diff --git a/ld/testsuite/ld-riscv-elf/pie-bind-locally-rv64.d b/ld/testsuite/ld-riscv-elf/pie-bind-locally-rv64.d new file mode 100644 index 0000000..6ae627a --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/pie-bind-locally-rv64.d @@ -0,0 +1,10 @@ +#source: pie-bind-locally-a.s +#source: pie-bind-locally-b.s +#as: -march=rv64i -mabi=lp64 -defsym __64_bit__=1 +#ld: -m[riscv_choose_lp64_emul] -pie +#readelf: -Wr + +Relocation section '\.rela\.dyn' at offset .* contains 2 entries: +[ ]+Offset[ ]+Info[ ]+Type[ ]+.* +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_RISCV_RELATIVE[ ].* +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_RISCV_RELATIVE[ ].* |