This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb/binutils-2_25-branch] Fix powerpc gas abort on invalid instruction fixups


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9c5f5d8f2684eb6ef678e97fd902539671324eb5

commit 9c5f5d8f2684eb6ef678e97fd902539671324eb5
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Mar 11 17:53:50 2015 +1030

    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.

Diff:
---
 gas/ChangeLog       |  7 +++++++
 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;
 	}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]