diff options
author | Alan Modra <amodra@gmail.com> | 2015-03-11 17:53:50 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2015-07-10 19:57:30 +0930 |
commit | 9c5f5d8f2684eb6ef678e97fd902539671324eb5 (patch) | |
tree | 11a85b5e1cb2b54ae3198b48fd52ab6b7734e9c0 | |
parent | e629276ebbbd2caf837d7821474732af7dad35cc (diff) | |
download | gdb-9c5f5d8f2684eb6ef678e97fd902539671324eb5.zip gdb-9c5f5d8f2684eb6ef678e97fd902539671324eb5.tar.gz gdb-9c5f5d8f2684eb6ef678e97fd902539671324eb5.tar.bz2 |
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.
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-ppc.c | 26 |
2 files changed, 30 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 8aea852..68f5b7b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2015-07-10 Alan Modra <amodra@gmail.com> + + Apply from master + 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-06-19 Nick Clifton <nickc@redhat.com> PR gas/18541 diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index 189a22b..13d8dba 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -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; } |