mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
493ffac5aa
My original implementation for LDI32 pseudo does not conform to the TI ABI. I wrongly documented my TI PRU ELF object files inspection, which got propagated into my binutils implementation. Issue was exposed when running the GCC ABI testsuite against TI toolchain. According to TI ABI, LDI32 must use first LDI instruction to load the MSB 16bits, and second LDI instruction for the LSB 16bits. This patch will break binary compatibility with previously released binutils versions for PRU. Still, I think it is better to fix binutils to conform to the chip vendor ABI. bfd * elf32-pru.c (pru_elf32_do_ldi32_relocate): Make LDI32 relocation conformant to TI ABI. (pru_elf32_relax_section): Likewise. (pru_elf_relax_delete_bytes): Fix offsets for new LDI32 code. * elf32-pru.c (pru_elf32_do_ldi32_relocate): Ignore addend. (pru_elf32_pmem_relocate): Trap - should not get here. (pru_elf32_relocate_section): Add support for REL relocations. (elf_info_to_howto_rel): Enable REL. (elf_backend_may_use_rel_p): Likewise. (elf_backend_may_use_rela_p): Likewise. (elf_backend_default_use_rela_p): Likewise. gas * config/tc-pru.c (md_apply_fix): Make LDI32 relocation conformant to TI ABI. (pru_assemble_arg_i): Likewise. (output_insn_ldi32): Likewise. * testsuite/gas/pru/ldi.d: Update test for the now fixed LDI32. * gas/config/tc-pru.c (pru_assemble_arg_b): Check imm8 operand range. * gas/testsuite/gas/pru/illegal2.l: New test. * gas/testsuite/gas/pru/illegal2.s: New test. * gas/testsuite/gas/pru/pru.exp: Register new illegal2 test. ld * scripttempl/pru.sc: Add LD sections to allow linking TI toolchain object files. * scripttempl/pru.sc: Switch to init_array. * testsuite/ld-pru/ldi32.d: Update LDI32 test to conform to TI ABI. * testsuite/ld-pru/norelax_ldi32-data.d: Likewise. * testsuite/ld-pru/norelax_ldi32-dis.d: Likewise. * testsuite/ld-pru/relax_ldi32-data.d: Likewise. * testsuite/ld-pru/relax_ldi32-dis.d: Likewise.
21 lines
622 B
Makefile
21 lines
622 B
Makefile
#name: PRU LDI32 disabled-relaxation data
|
|
#source: relax_ldi32.s
|
|
#source: relax_ldi32_symbol.s
|
|
#as: --mlink-relax
|
|
#ld: --no-relax
|
|
#objdump: -s
|
|
|
|
# Note: default linker script should put a guard at DRAM address 0
|
|
|
|
.*: +file format elf32-pru
|
|
|
|
Contents of section .text:
|
|
[0-9a-f]+ d0adde24 90efbe24 0f00f630 d0adde24 .*
|
|
[0-9a-f]+ 90efbe24 d0000024 90cace24 e0cace24 .*
|
|
[0-9a-f]+ d0010024 90cace24 d0acde24 90efbe24 .*
|
|
[0-9a-f]+ d0341224 90785624 d0000024 90785624 .*
|
|
[0-9a-f]+ f0120024 f100007e .*
|
|
Contents of section .data:
|
|
0000 00000000 48000020 40000000 12004000 .*
|
|
0010 10000000 f0ffffff 100040aa .*
|