This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Patch for iWMMXt invalid register name crash
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: binutils at sourceware dot org
- Date: Wed, 26 Jul 2006 21:13:13 +0000 (UTC)
- Subject: 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