mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-29 16:38:05 +08:00
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.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2020-08-28 Nelson Chu <nelson.chu@sifive.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2020-08-27 John David Anglin <danglin@gcc.gnu.org>
|
2020-08-27 John David Anglin <danglin@gcc.gnu.org>
|
||||||
|
|
||||||
PR 26356
|
PR 26356
|
||||||
|
@ -557,21 +557,23 @@ riscv_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case R_RISCV_CALL:
|
||||||
case R_RISCV_CALL_PLT:
|
case R_RISCV_CALL_PLT:
|
||||||
/* This symbol requires a procedure linkage table entry. We
|
/* These symbol requires a procedure linkage table entry. We
|
||||||
actually build the entry in adjust_dynamic_symbol,
|
actually build the entry in adjust_dynamic_symbol,
|
||||||
because this might be a case of linking PIC code without
|
because these might be a case of linking PIC code without
|
||||||
linking in any dynamic objects, in which case we don't
|
linking in any dynamic objects, in which case we don't
|
||||||
need to generate a procedure linkage table after all. */
|
need to generate a procedure linkage table after all. */
|
||||||
|
|
||||||
if (h != NULL)
|
/* If it is a local symbol, then we resolve it directly
|
||||||
{
|
without creating a PLT entry. */
|
||||||
|
if (h == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
h->needs_plt = 1;
|
h->needs_plt = 1;
|
||||||
h->plt.refcount += 1;
|
h->plt.refcount += 1;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_RISCV_CALL:
|
|
||||||
case R_RISCV_JAL:
|
case R_RISCV_JAL:
|
||||||
case R_RISCV_BRANCH:
|
case R_RISCV_BRANCH:
|
||||||
case R_RISCV_RVC_BRANCH:
|
case R_RISCV_RVC_BRANCH:
|
||||||
@ -2189,7 +2191,6 @@ riscv_elf_relocate_section (bfd *output_bfd,
|
|||||||
{
|
{
|
||||||
switch (r_type)
|
switch (r_type)
|
||||||
{
|
{
|
||||||
case R_RISCV_CALL:
|
|
||||||
case R_RISCV_JAL:
|
case R_RISCV_JAL:
|
||||||
case R_RISCV_RVC_JUMP:
|
case R_RISCV_RVC_JUMP:
|
||||||
if (asprintf (&msg_buf,
|
if (asprintf (&msg_buf,
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2020-08-28 Nelson Chu <nelson.chu@sifive.com>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
2020-08-27 Jozef Lawrynowicz <jozef.l@mittosystems.com>
|
2020-08-27 Jozef Lawrynowicz <jozef.l@mittosystems.com>
|
||||||
|
|
||||||
* emultempl/msp430.em: Remove unused variable "buf".
|
* emultempl/msp430.em: Remove unused variable "buf".
|
||||||
|
@ -4,6 +4,6 @@
|
|||||||
.globl func1
|
.globl func1
|
||||||
.type func1, @function
|
.type func1, @function
|
||||||
func1:
|
func1:
|
||||||
call func2
|
jal func2
|
||||||
jr ra
|
jr ra
|
||||||
.size func1, .-func1
|
.size func1, .-func1
|
||||||
|
@ -2,4 +2,4 @@
|
|||||||
#source: lib-nopic-01b.s
|
#source: lib-nopic-01b.s
|
||||||
#as:
|
#as:
|
||||||
#ld: -shared tmpdir/lib-nopic-01a.so
|
#ld: -shared tmpdir/lib-nopic-01a.so
|
||||||
#error: .*relocation R_RISCV_CALL against `func1' can not be used when making a shared object; recompile with -fPIC
|
#error: .*relocation R_RISCV_JAL against `func1' can not be used when making a shared object; recompile with -fPIC
|
||||||
|
@ -4,6 +4,6 @@
|
|||||||
.globl func2
|
.globl func2
|
||||||
.type func2, @function
|
.type func2, @function
|
||||||
func2:
|
func2:
|
||||||
call func1
|
jal func1
|
||||||
jr ra
|
jr ra
|
||||||
.size func2, .-func2
|
.size func2, .-func2
|
||||||
|
Reference in New Issue
Block a user