PR20744, Incorrect PowerPC VLE relocs
VLE 16A and 16D relocs were functionally swapped. PR 20744 include/ * opcode/ppc.h: Define VLE insns using 16A and 16D relocs. bfd/ * elf32-ppc.h (struct ppc_elf_params): Add vle_reloc_fixup field. * elf32-ppc.c: Include opcode/ppc.h. (ppc_elf_howto_raw): Correct dst_mask for R_PPC_VLE_LO16A, R_PPC_VLE_LO16D, R_PPC_VLE_HI16A, R_PPC_VLE_HI16D, R_PPC_VLE_HA16A, R_PPC_VLE_HA16D, R_PPC_VLE_SDAREL_LO16A, R_PPC_VLE_SDAREL_LO16D, R_PPC_VLE_SDAREL_HI16A, R_PPC_VLE_SDAREL_HI16D, R_PPC_VLE_SDAREL_HA16A, and R_PPC_VLE_SDAREL_HA16D relocs. (ppc_elf_link_hash_table_create): Update default_params init. (ppc_elf_vle_split16): Correct shift and mask. Add params. Report or fix insn/reloc mismatches. (ppc_elf_relocate_section): Pass input_section, offset and fixup to ppc_elf_vle_split16. binutils/ * NEWS: Mention PowerPC VLE relocation error. gas/ * config/tc-ppc.c: Delete VLE insn defines. (md_assemble): Swap use_a_reloc and use_d_reloc. * testsuite/gas/ppc/vle-reloc.d: Update. ld/ * emultempl/ppc32elf.em (params): Update initializer. Handle --vle-reloc-fixup command line arg.
This commit is contained in:
parent
95f0d0d233
commit
08dc996fed
12 changed files with 257 additions and 135 deletions
|
@ -448,6 +448,23 @@ ppc_optional_operand_value (const struct powerpc_operand *operand)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* PowerPC VLE insns. */
|
||||
/* Form I16L, uses 16A relocs. */
|
||||
#define E_OR2I_INSN 0x7000C000
|
||||
#define E_AND2I_DOT_INSN 0x7000C800
|
||||
#define E_OR2IS_INSN 0x7000D000
|
||||
#define E_LIS_INSN 0x7000E000
|
||||
#define E_AND2IS_DOT_INSN 0x7000E800
|
||||
|
||||
/* Form I16A, uses 16D relocs. */
|
||||
#define E_ADD2I_DOT_INSN 0x70008800
|
||||
#define E_ADD2IS_INSN 0x70009000
|
||||
#define E_CMP16I_INSN 0x70009800
|
||||
#define E_MULL2I_INSN 0x7000A000
|
||||
#define E_CMPL16I_INSN 0x7000A800
|
||||
#define E_CMPH16I_INSN 0x7000B000
|
||||
#define E_CMPHL16I_INSN 0x7000B800
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue