mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-13 13:49:00 +08:00
RISC-V: Relax tail/j to c.j for RV64.
2019-03-30 Andrew Waterman <andrew@sifive.com> bfd/ * elfnn-riscv.c (_bfd_riscv_relax_call): Only check ARCH_SIZE for rd == X_RA case.
This commit is contained in:
parent
7734102d6d
commit
ae2b14c73c
@ -1,3 +1,8 @@
|
||||
2019-03-30 Andrew Waterman <andrew@sifive.com>
|
||||
|
||||
* elfnn-riscv.c (_bfd_riscv_relax_call): Only check ARCH_SIZE for
|
||||
rd == X_RA case.
|
||||
|
||||
2019-03-29 Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
* elf32-xtensa.c (shrink_dynamic_reloc_sections): Add
|
||||
|
@ -3416,9 +3416,12 @@ _bfd_riscv_relax_call (bfd *abfd, asection *sec, asection *sym_sec,
|
||||
auipc = bfd_get_32 (abfd, contents + rel->r_offset);
|
||||
jalr = bfd_get_32 (abfd, contents + rel->r_offset + 4);
|
||||
rd = (jalr >> OP_SH_RD) & OP_MASK_RD;
|
||||
rvc = rvc && VALID_RVC_J_IMM (foff) && ARCH_SIZE == 32;
|
||||
rvc = rvc && VALID_RVC_J_IMM (foff);
|
||||
|
||||
if (rvc && (rd == 0 || rd == X_RA))
|
||||
/* C.J exists on RV32 and RV64, but C.JAL is RV32-only. */
|
||||
rvc = rvc && (rd == 0 || (rd == X_RA && ARCH_SIZE == 32));
|
||||
|
||||
if (rvc)
|
||||
{
|
||||
/* Relax to C.J[AL] rd, addr. */
|
||||
r_type = R_RISCV_RVC_JUMP;
|
||||
|
Loading…
x
Reference in New Issue
Block a user