mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
9d1da81b26
For the lui and auipc relaxations, since the symbol value of an undefined weak symbol is always be zero, we can optimize the patterns into a single LI/MV/ADDI instruction. bfd/ * elfnn-riscv.c (riscv_pcgp_hi_reloc): Add new field undefined_weak. (riscv_record_pcgp_hi_reloc): New parameter undefined_weak. Set undefined_weak field from it. (relax_func_t): New parameter undefined_weak. (_bfd_riscv_relax_call): New ignored parameter undefined_weak. (_bfd_riscv_relax_tls_le): Likewise. (_bfd_riscv_relax_align): Likewise. (_bfd_riscv_relax_delete): Likewise. (_bfd_riscv_relax_lui): New parameter undefined_weak. If true, allow relaxing. For LO12* relocs, set rs1 to x0 when undefined_weak. (_bfd_riscv_relax_pc): New parameter undefined_weak. For LO12* relocs, set undefined_weak from hi_reloc. If true, allow relaxing. For LO12* relocs, set rs1 to x0 when undefined_weak and change to non-pcrel reloc. (_bfd_riscv_relax_section): New local undefined_weak. Set for undef weak relocs that can be relaxed. Pass to relax_func call. ld/ * testsuite/ld-riscv-elf/weakref32.s: Add relaxable undef weak code. * testsuite/ld-riscv-elf/weakref64.s: Likewise. * testsuite/ld-riscv-elf/weakref32.d: Updated. * testsuite/ld-riscv-elf/weakref64.d: Updated.
21 lines
764 B
Makefile
21 lines
764 B
Makefile
|
|
.*: file format elf64-littleriscv
|
|
|
|
|
|
Disassembly of section \.text:
|
|
|
|
0000000090000000 <_start>:
|
|
90000000: 00000793 li a5,0
|
|
90000004: 02078663 beqz a5,90000030 <_start\+0x30>
|
|
90000008: 00000793 li a5,0
|
|
9000000c: 02078263 beqz a5,90000030 <_start\+0x30>
|
|
90000010: ff010113 addi sp,sp,-16
|
|
90000014: 00113423 sd ra,8\(sp\)
|
|
90000018: 00000097 auipc ra,0x0
|
|
9000001c: 000000e7 jalr zero # 0 <_start\-0x90000000>
|
|
90000020: 00813083 ld ra,8\(sp\)
|
|
90000024: 01010113 addi sp,sp,16
|
|
90000028: 00000317 auipc t1,0x0
|
|
9000002c: 00000067 jr zero # 0 <_start\-0x90000000>
|
|
90000030: 00008067 ret
|