This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[patch] Segfault on bas iwmmxt register name
- From: Paul Brook <paul at codesourcery dot com>
- To: binutils at sourceware dot org
- Date: Tue, 31 Jan 2006 15:39:29 +0000
- Subject: [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