aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2011-06-13 09:57:35 +0000
committerNick Clifton <nickc@redhat.com>2011-06-13 09:57:35 +0000
commit94342ec38bc47cba884a975e37c74f20b598ca25 (patch)
tree661569bd82994e1699220ba6c9490e02050fec3f /gas
parentf9e53abc4afe20d97606c6898a9a465b69920066 (diff)
downloadfsf-binutils-gdb-94342ec38bc47cba884a975e37c74f20b598ca25.zip
fsf-binutils-gdb-94342ec38bc47cba884a975e37c74f20b598ca25.tar.gz
fsf-binutils-gdb-94342ec38bc47cba884a975e37c74f20b598ca25.tar.bz2
PR gas/12854
* gas/arm/shift-bad.s: New test. * gas/arm/shift-bad.l: Expcted error output. * gas/arm/shift-bad.s: New control file. * config/tc-arm.c (do_shift): Do not allow shift operations at the end of a register based shift insn. (do_t_shift): Likewise.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-arm.c7
-rw-r--r--gas/testsuite/ChangeLog7
-rw-r--r--gas/testsuite/gas/arm/shift-bad.d3
-rw-r--r--gas/testsuite/gas/arm/shift-bad.l6
-rw-r--r--gas/testsuite/gas/arm/shift-bad.s10
6 files changed, 40 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index d265730..90c585f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,12 @@
2011-06-13 Nick Clifton <nickc@redhat.com>
+ PR gas/12854
+ * config/tc-arm.c (do_shift): Do not allow shift operations at the
+ end of a register based shift insn.
+ (do_t_shift): Likewise.
+
+2011-06-13 Nick Clifton <nickc@redhat.com>
+
* config/tc-score.c (s3_my_get_expression): Delete unused local
variable 'seg'.
(s3_do_ldst_insn): Delete unused local variable 'strbak'.
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index d4262a9..a34dcec 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -8343,6 +8343,9 @@ do_shift (void)
{
inst.instruction |= inst.operands[2].reg << 8;
inst.instruction |= SHIFT_BY_REG;
+ /* PR 12854: Error on extraneous shifts. */
+ constraint (inst.operands[2].shifted,
+ _("extraneous shift as part of operand to shift insn"));
}
else
inst.reloc.type = BFD_RELOC_ARM_SHIFT_IMM;
@@ -11535,6 +11538,10 @@ do_t_shift (void)
inst.instruction |= inst.operands[0].reg << 8;
inst.instruction |= inst.operands[1].reg << 16;
inst.instruction |= inst.operands[2].reg;
+
+ /* PR 12854: Error on extraneous shifts. */
+ constraint (inst.operands[2].shifted,
+ _("extraneous shift as part of operand to shift insn"));
}
else
{
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index db2ff76..8932f9a 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2011-06-13 Nick Clifton <nickc@redhat.com>
+
+ PR gas/12854
+ * gas/arm/shift-bad.s: New test.
+ * gas/arm/shift-bad.l: Expcted error output.
+ * gas/arm/shift-bad.s: New control file.
+
2011-06-12 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/arch-10-lzcnt.d: Updated.
diff --git a/gas/testsuite/gas/arm/shift-bad.d b/gas/testsuite/gas/arm/shift-bad.d
new file mode 100644
index 0000000..7d4cac1
--- /dev/null
+++ b/gas/testsuite/gas/arm/shift-bad.d
@@ -0,0 +1,3 @@
+# name: PR 12854: Extraneous shifts
+# as:
+# error-output: shift-bad.l
diff --git a/gas/testsuite/gas/arm/shift-bad.l b/gas/testsuite/gas/arm/shift-bad.l
new file mode 100644
index 0000000..6db9583
--- /dev/null
+++ b/gas/testsuite/gas/arm/shift-bad.l
@@ -0,0 +1,6 @@
+.*shift-bad.s: Assembler messages:
+.*shift-bad.s:3: Error: extraneous shift as part of operand to shift insn -- `asr r0,r1,r2,ror#5'
+.*shift-bad.s:4: Error: extraneous shift as part of operand to shift insn -- `ror r0,r1,r2,lsl r3'
+.*shift-bad.s:8: Error: extraneous shift as part of operand to shift insn -- `ror r0,r1,r2,lsl#1'
+.*shift-bad.s:9: Error: extraneous shift as part of operand to shift insn -- `lsl r0,r1,r2,lsl#1'
+.*shift-bad.s:10: Error: extraneous shift as part of operand to shift insn -- `lsl r0,r1,r2,asr r0'
diff --git a/gas/testsuite/gas/arm/shift-bad.s b/gas/testsuite/gas/arm/shift-bad.s
new file mode 100644
index 0000000..6e6a795
--- /dev/null
+++ b/gas/testsuite/gas/arm/shift-bad.s
@@ -0,0 +1,10 @@
+ .syntax unified
+
+ asr r0, r1, r2, ror #5
+ ror r0, r1, r2, lsl r3
+
+ .thumb_func
+foo:
+ ror r0, r1, r2, lsl #1
+ lsl r0, r1, r2, lsl #1
+ lsl r0, r1, r2, asr r0