RISC-V: Treat R_RISCV_CALL and R_RISCV_CALL_PLT as the same in check_relocs.
authorNelson Chu <nelson.chu@sifive.com>
Wed, 26 Aug 2020 08:19:13 +0000 (01:19 -0700)
committerNelson Chu <nelson.chu@sifive.com>
Fri, 28 Aug 2020 01:37:35 +0000 (09:37 +0800)
commit3b1450b38c644f99aa2e211747b428b9f8d15cca
treea75075ca5c25bb1bbe1b2e3a5138f6cb0d8f3280
parentf2f08254b11c2248dc3fd9440b2bad29c74357e4
RISC-V: Treat R_RISCV_CALL and R_RISCV_CALL_PLT as the same in check_relocs.

In fact, we can treate these two relocation as the same one in the
riscv_elf_check_relocs.  I have heard that RISC-V lld had made this
improvement, and so had GNU AARCH64, they only need R_AARCH64_CALL26
for calls rather than two seperate relocations.

Beside, the following PLT issue for RISC-V 32-bit glibc seems to be
fixed by applying at least this patch.

<https://sourceware.org/pipermail/libc-alpha/2020-August/117214.html>

I have ran the toolchain regression, and everything seems fine for now.

bfd/
* elfnn-riscv.c (riscv_elf_check_relocs): Treat R_RISCV_CALL
and R_RISCV_CALL_PLT as the same in the riscv_elf_check_relocs.
(riscv_elf_relocate_section): Remove the R_RISCV_CALL for the
unresolved reloc checks.

ld/
testsuite/ld-riscv-elf/lib-nopic-01a.s: Use R_RISCV_JAL rather
than R_RISCV_CALL.
testsuite/ld-riscv-elf/lib-nopic-01b.d: Likewise.
testsuite/ld-riscv-elf/lib-nopic-01b.s: Likewise.
bfd/ChangeLog
bfd/elfnn-riscv.c
ld/ChangeLog
ld/testsuite/ld-riscv-elf/lib-nopic-01a.s
ld/testsuite/ld-riscv-elf/lib-nopic-01b.d
ld/testsuite/ld-riscv-elf/lib-nopic-01b.s