mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
PowerPC64 higher REL16 relocations
There are occasions where someone might want to build a 64-bit pc-relative offset from 16-bit pieces. This adds the necessary REL16 relocs corresponding to existing ADDR16 relocs that can be used to build 64-bit absolute values. include/ * elf/ppc64.h (R_PPC64_REL16_HIGH, R_PPC64_REL16_HIGHA), (R_PPC64_REL16_HIGHER, R_PPC64_REL16_HIGHERA), (R_PPC64_REL16_HIGHEST, R_PPC64_REL16_HIGHESTA): Define. (R_PPC64_LO_DS_OPT, R_PPC64_16DX_HA): Bump value. bfd/ * reloc.c (BFD_RELOC_PPC64_REL16_HIGH, BFD_RELOC_PPC64_REL16_HIGHA), (BFD_RELOC_PPC64_REL16_HIGHER, BFD_RELOC_PPC64_REL16_HIGHERA), (BFD_RELOC_PPC64_REL16_HIGHEST, BFD_RELOC_PPC64_REL16_HIGHESTA): Define. * elf64-ppc.c (ppc64_elf_howto_raw): Add new REL16 howtos. (ppc64_elf_reloc_type_lookup): Translate new REL16 relocs. (ppc64_elf_check_relocs, ppc64_elf_relocate_section): Handle them. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. gas/ * config/tc-ppc.h (TC_FORCE_RELOCATION_SUB_LOCAL): Allow ADDR16 HIGH, HIGHA, HIGHER, HIGHERA, HIGHEST, and HIGHESTA relocs. Group 16-bit relocs. * config/tc-ppc.c (md_apply_fix): Translate those ADDR16 relocs to REL16 when pcrel. Sort relocs.
This commit is contained in:
@ -159,14 +159,20 @@ START_RELOC_NUMBERS (elf_ppc64_reloc_type)
|
||||
RELOC_NUMBER (R_PPC64_PLTCALL, 120)
|
||||
|
||||
#ifndef RELOC_MACROS_GEN_FUNC
|
||||
/* Relocation only used internally by ld. If you need to use these
|
||||
reloc numbers, you can change them to some other unused value
|
||||
/* Relocation only used internally by gas or ld. If you need to use
|
||||
these reloc numbers, you can change them to some other unused value
|
||||
without affecting the ABI. They will never appear in object files. */
|
||||
RELOC_NUMBER (R_PPC64_LO_DS_OPT, 128)
|
||||
/* Reloc only used internally by gas. As above, value is unimportant. */
|
||||
RELOC_NUMBER (R_PPC64_16DX_HA, 129)
|
||||
RELOC_NUMBER (R_PPC64_LO_DS_OPT, 200)
|
||||
RELOC_NUMBER (R_PPC64_16DX_HA, 201)
|
||||
#endif
|
||||
|
||||
RELOC_NUMBER (R_PPC64_REL16_HIGH, 240)
|
||||
RELOC_NUMBER (R_PPC64_REL16_HIGHA, 241)
|
||||
RELOC_NUMBER (R_PPC64_REL16_HIGHER, 242)
|
||||
RELOC_NUMBER (R_PPC64_REL16_HIGHERA, 243)
|
||||
RELOC_NUMBER (R_PPC64_REL16_HIGHEST, 244)
|
||||
RELOC_NUMBER (R_PPC64_REL16_HIGHESTA, 245)
|
||||
|
||||
/* Power9 split rel16 for addpcis. */
|
||||
RELOC_NUMBER (R_PPC64_REL16DX_HA, 246)
|
||||
|
||||
|
Reference in New Issue
Block a user