This is the mail archive of the binutils@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]

Patch for iWMMXt invalid register name crash


In the course of implementing
<http://sourceware.org/ml/binutils/2006-07/msg00324.html> I noticed a
problem with the handling of OP_RIWR_RIWC that would crash the
assembler for invalid assembler names with the iWMMXt instructions
wldrw and wstrw.  This patch fixes this problem.  OK to commit?

gas:
2006-07-26  Joseph Myers  <joseph@codesourcery.com>

	* config/tc-arm.c (parse_operands): Handle invalid register name
	for OP_RIWR_RIWC. 

gas/testsuite:
2006-07-26  Joseph Myers  <joseph@codesourcery.com>

	* gas/arm/iwmmxt-bad.s: Test invalid register names for wldrw and
	wstrw.
	* gas/arm/iwmmxt-bad.l: Update.

Index: gas/config/tc-arm.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-arm.c,v
retrieving revision 1.280
diff -u -r1.280 tc-arm.c
--- gas/config/tc-arm.c	19 Jul 2006 12:53:33 -0000	1.280
+++ gas/config/tc-arm.c	26 Jul 2006 21:07:49 -0000
@@ -5748,9 +5749,10 @@
 	case OP_RIWR_RIWC:
 	  {
 	    struct reg_entry *rege = arm_reg_parse_multi (&str);
-	    if (rege->type != REG_TYPE_MMXWR
-		&& rege->type != REG_TYPE_MMXWC
-		&& rege->type != REG_TYPE_MMXWCG)
+	    if (!rege
+		|| (rege->type != REG_TYPE_MMXWR
+		    && rege->type != REG_TYPE_MMXWC
+		    && rege->type != REG_TYPE_MMXWCG))
 	      {
 		inst.error = _("iWMMXt data or control register expected");
 		goto failure;
Index: gas/testsuite/gas/arm/iwmmxt-bad.l
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/arm/iwmmxt-bad.l,v
retrieving revision 1.3
diff -u -r1.3 iwmmxt-bad.l
--- gas/testsuite/gas/arm/iwmmxt-bad.l	31 Jan 2006 16:19:41 -0000	1.3
+++ gas/testsuite/gas/arm/iwmmxt-bad.l	26 Jul 2006 21:07:49 -0000
@@ -8,3 +8,5 @@
 [^:]*:7: Error: iWMMXt data register expected -- `wstrh wcgr0,\[r1\]'
 [^:]*:8: Error: iWMMXt data register expected -- `wstrd wcgr0,\[r1\]'
 [^:]*:9: Error: iWMMXt control register expected -- `tmcr wibble,r1'
+[^:]*:10: Error: iWMMXt data or control register expected -- `wldrw wibble,\[r1\]'
+[^:]*:11: Error: iWMMXt data or control register expected -- `wstrw wibble,\[r1\]'
Index: gas/testsuite/gas/arm/iwmmxt-bad.s
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/arm/iwmmxt-bad.s,v
retrieving revision 1.2
diff -u -r1.2 iwmmxt-bad.s
--- gas/testsuite/gas/arm/iwmmxt-bad.s	31 Jan 2006 16:19:41 -0000	1.2
+++ gas/testsuite/gas/arm/iwmmxt-bad.s	26 Jul 2006 21:07:49 -0000
@@ -7,3 +7,5 @@
 	wstrh	wcgr0,[r1]
 	wstrd	wcgr0,[r1]
 	tmcr	wibble,r1
+	wldrw	wibble,[r1]
+	wstrw	wibble,[r1]

-- 
Joseph S. Myers
joseph@codesourcery.com


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