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] Segfault on bas iwmmxt register name


The patch below fixed a gas segfault when it fails to parse an iwmmxt register 
operand.

Tested with cross to arm-none-eabi.
Ok?

Paul

2006-01-31  Paul Brook  <paul@codesourcery.com>

gas/
	* config/tc-arm.c (arm_reg_parse): Check if reg is non-NULL.
gas/testsuite/
	* gas/testsuite/gas/arm/iwmmxt-bad.s: Add check for bad register name.
	* gas/testsuite/gas/arm/iwmmxt-bad.l: Ditto.

Index: gas/config/tc-arm.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/config/tc-arm.c,v
retrieving revision 1.237
diff -u -p -r1.237 tc-arm.c
--- gas/config/tc-arm.c	31 Jan 2006 14:11:13 -0000	1.237
+++ gas/config/tc-arm.c	31 Jan 2006 14:42:00 -0000
@@ -928,7 +928,7 @@ arm_reg_parse (char **ccp, enum arm_reg_
     case REG_TYPE_MVFX:
     case REG_TYPE_MVDX:
       /* Generic coprocessor register names are allowed for these.  */
-      if (reg->type == REG_TYPE_CN)
+      if (reg && reg->type == REG_TYPE_CN)
 	return reg->number;
       break;
 
@@ -943,7 +943,7 @@ arm_reg_parse (char **ccp, enum arm_reg_
     case REG_TYPE_MMXWC:
       /* WC includes WCG.  ??? I'm not sure this is true for all
 	 instructions that take WC registers.  */
-      if (reg->type == REG_TYPE_MMXWCG)
+      if (reg && reg->type == REG_TYPE_MMXWCG)
 	return reg->number;
       break;
 
Index: gas/testsuite/gas/arm/iwmmxt-bad.l
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/testsuite/gas/arm/iwmmxt-bad.l,v
retrieving revision 1.2
diff -u -p -r1.2 iwmmxt-bad.l
--- gas/testsuite/gas/arm/iwmmxt-bad.l	18 May 2005 05:40:09 -0000	1.2
+++ gas/testsuite/gas/arm/iwmmxt-bad.l	31 Jan 2006 14:55:58 -0000
@@ -7,3 +7,4 @@
 [^:]*:6: Error: iWMMXt data register expected -- `wstrb wcgr0,\[r1\]'
 [^:]*: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'
Index: gas/testsuite/gas/arm/iwmmxt-bad.s
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/testsuite/gas/arm/iwmmxt-bad.s,v
retrieving revision 1.1
diff -u -p -r1.1 iwmmxt-bad.s
--- gas/testsuite/gas/arm/iwmmxt-bad.s	17 Oct 2003 22:45:29 -0000	1.1
+++ gas/testsuite/gas/arm/iwmmxt-bad.s	31 Jan 2006 14:52:18 -0000
@@ -6,3 +6,4 @@
 	wstrb	wcgr0,[r1]
 	wstrh	wcgr0,[r1]
 	wstrd	wcgr0,[r1]
+	tmcr	wibble,r1


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