Fix powerpc gas abort on invalid instruction fixups

* config/tc-ppc.c (md_assemble): Don't abort on 8 byte insn fixups.
	(md_apply_fix): Report an error on data-only fixups used with insns.
This commit is contained in:
Alan Modra 2015-03-11 17:53:50 +10:30
parent 1079403cc0
commit f728387b9a
2 changed files with 28 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2015-03-11 Alan Modra <amodra@gmail.com>
* config/tc-ppc.c (md_assemble): Don't abort on 8 byte insn fixups.
(md_apply_fix): Report an error on data-only fixups used with insns.
2015-03-10 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/tc-s390.c (md_gather_operands): Check for valid

View File

@ -3431,9 +3431,6 @@ md_assemble (char *str)
size = bfd_get_reloc_size (reloc_howto);
offset = target_big_endian ? (insn_length - size) : 0;
if (size < 1 || size > 4)
abort ();
fixP = fix_new_exp (frag_now,
f - frag_now->fr_literal + offset,
size,
@ -6774,6 +6771,29 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)
break;
#endif
case BFD_RELOC_VTABLE_INHERIT:
case BFD_RELOC_VTABLE_ENTRY:
case BFD_RELOC_PPC_DTPMOD:
case BFD_RELOC_PPC_TPREL:
case BFD_RELOC_PPC_DTPREL:
case BFD_RELOC_PPC_COPY:
case BFD_RELOC_PPC_GLOB_DAT:
case BFD_RELOC_32_PLT_PCREL:
case BFD_RELOC_PPC_EMB_NADDR32:
case BFD_RELOC_PPC64_TOC:
case BFD_RELOC_CTOR:
case BFD_RELOC_32:
case BFD_RELOC_32_PCREL:
case BFD_RELOC_RVA:
case BFD_RELOC_64:
case BFD_RELOC_64_PCREL:
case BFD_RELOC_PPC64_ADDR64_LOCAL:
as_bad_where (fixP->fx_file, fixP->fx_line,
_("%s unsupported as instruction fixup"),
bfd_get_reloc_code_name (fixP->fx_r_type));
fixP->fx_done = 1;
return;
default:
break;
}