PR20744, Incorrect PowerPC VLE relocs
authorAlan Modra <amodra@gmail.com>
Tue, 22 Nov 2016 08:15:29 +0000 (18:45 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 22 Nov 2016 09:49:29 +0000 (20:19 +1030)
commit08dc996fedde9143cda25720961684087b133640
tree9bb48db13193c8e0839bc213eb2fc9ca8a73adb8
parent95f0d0d2338f8eba18d2b3c8cbe15b1d584b885c
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.
12 files changed:
bfd/ChangeLog
bfd/elf32-ppc.c
bfd/elf32-ppc.h
binutils/ChangeLog
binutils/NEWS
gas/ChangeLog
gas/config/tc-ppc.c
gas/testsuite/gas/ppc/vle-reloc.d
include/ChangeLog
include/opcode/ppc.h
ld/ChangeLog
ld/emultempl/ppc32elf.em