mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 14:39:09 +08:00
Aligned vs. unaligned ppc32 relocs
Given R_PPC_ADDR32 or R_PPC_UADDR32 relocs, this patch generates R_PPC_ADDR32 or R_PPC_UADDR32 dynamic relocs from either type depending on whether r_offset is 4-byte aligned, and similarly for R_PPC_ADDR16/R_PPC_UADDR16. * elf32-ppc.c (ppc_elf_relocate_section): Optimize unaligned relocs.
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
2019-08-16 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* elf32-ppc.c (ppc_elf_relocate_section): Optimize unaligned relocs.
|
||||||
|
|
||||||
2019-08-15 Jim Wilson <jimw@sifive.com>
|
2019-08-15 Jim Wilson <jimw@sifive.com>
|
||||||
|
|
||||||
* elfnn-riscv.c (perform_relocation) <R_RISCV_RVC_LUI>: If
|
* elfnn-riscv.c (perform_relocation) <R_RISCV_RVC_LUI>: If
|
||||||
|
@ -8157,6 +8157,14 @@ ppc_elf_relocate_section (bfd *output_bfd,
|
|||||||
outrel.r_offset += (input_section->output_section->vma
|
outrel.r_offset += (input_section->output_section->vma
|
||||||
+ input_section->output_offset);
|
+ input_section->output_offset);
|
||||||
|
|
||||||
|
/* Optimize unaligned reloc use. */
|
||||||
|
if ((r_type == R_PPC_ADDR32 && (outrel.r_offset & 3) != 0)
|
||||||
|
|| (r_type == R_PPC_UADDR32 && (outrel.r_offset & 3) == 0))
|
||||||
|
r_type ^= R_PPC_ADDR32 ^ R_PPC_UADDR32;
|
||||||
|
if ((r_type == R_PPC_ADDR16 && (outrel.r_offset & 1) != 0)
|
||||||
|
|| (r_type == R_PPC_UADDR16 && (outrel.r_offset & 1) == 0))
|
||||||
|
r_type ^= R_PPC_ADDR16 ^ R_PPC_UADDR16;
|
||||||
|
|
||||||
if (skip)
|
if (skip)
|
||||||
memset (&outrel, 0, sizeof outrel);
|
memset (&outrel, 0, sizeof outrel);
|
||||||
else if (!SYMBOL_REFERENCES_LOCAL (info, h))
|
else if (!SYMBOL_REFERENCES_LOCAL (info, h))
|
||||||
|
Reference in New Issue
Block a user