mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 15:15:42 +00:00
MIPS16/GAS: Reject instructions that end with a dot
Fix a regression from commit 3fb4970943 ("MIPS16/GAS: Fix forced size
suffixes with argumentless instructions") and reject MIPS16 instructions
that end with a dot and no forced size suffix following, e.g.:
$ cat test.s
.set mips16
foo:
break.
entry.
addiu. $2, 0x7fff
addiu. $3, $2, 0
.align 8, 0
$ as -32 -o test.o test.s
$ objdump -d test.o
test.o: file format elf32-tradbigmips
Disassembly of section .text:
00000000 <foo>:
0: e805 break
2: e809 entry
4: f7ef 4a1f addiu v0,32767
8: 4260 addiu v1,v0,0
...
$
Add a test accordingly, also verifying invalid forced size suffixes.
This commit is contained in:
@@ -14416,10 +14416,13 @@ mips16_ip (char *str, struct mips_cl_insn *insn)
|
|||||||
l = 4;
|
l = 4;
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
if (*s == '\0')
|
if (l != 0)
|
||||||
break;
|
{
|
||||||
else if (is_whitespace (*s++))
|
if (*s == '\0')
|
||||||
break;
|
break;
|
||||||
|
else if (is_whitespace (*s++))
|
||||||
|
break;
|
||||||
|
}
|
||||||
set_insn_error (0, _("unrecognized opcode"));
|
set_insn_error (0, _("unrecognized opcode"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1523,6 +1523,8 @@ if { [istarget mips*-*-vxworks*] } {
|
|||||||
run_dump_test "mips16-sprel-swap"
|
run_dump_test "mips16-sprel-swap"
|
||||||
run_dump_test "mips16-sdrasp"
|
run_dump_test "mips16-sdrasp"
|
||||||
run_dump_test "mips16-insn-length-noargs"
|
run_dump_test "mips16-insn-length-noargs"
|
||||||
|
run_dump_test_arches "mips16-insn-length-bad" \
|
||||||
|
[mips_arch_list_matching mips16-32]
|
||||||
|
|
||||||
run_dump_test "mips16-branch-unextended-1"
|
run_dump_test "mips16-branch-unextended-1"
|
||||||
run_dump_test "mips16-branch-unextended-2"
|
run_dump_test "mips16-branch-unextended-2"
|
||||||
|
|||||||
3
gas/testsuite/gas/mips/mips16-insn-length-bad.d
Normal file
3
gas/testsuite/gas/mips/mips16-insn-length-bad.d
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -32
|
||||||
|
#name: MIPS16 bad instruction size override
|
||||||
|
#error_output: mips16-insn-length-bad.l
|
||||||
11
gas/testsuite/gas/mips/mips16-insn-length-bad.l
Normal file
11
gas/testsuite/gas/mips/mips16-insn-length-bad.l
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*:3: Error: unrecognized opcode `break\.'
|
||||||
|
.*:4: Error: unrecognized opcode `entry\.'
|
||||||
|
.*:5: Error: unrecognized opcode `addiu\. \$2,0x7fff'
|
||||||
|
.*:6: Error: unrecognized opcode `addiu\. \$3,\$2,0'
|
||||||
|
.*:7: Error: unrecognized opcode `exit\.ex'
|
||||||
|
.*:8: Error: unrecognized opcode `exit\.tx'
|
||||||
|
.*:9: Error: unrecognized opcode `nop\.ey'
|
||||||
|
.*:10: Error: unrecognized opcode `nop\.ty'
|
||||||
|
.*:11: Error: unrecognized opcode `li\.ez \$2,0'
|
||||||
|
.*:12: Error: unrecognized opcode `li\.tz \$2,0'
|
||||||
16
gas/testsuite/gas/mips/mips16-insn-length-bad.s
Normal file
16
gas/testsuite/gas/mips/mips16-insn-length-bad.s
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
.set mips16
|
||||||
|
foo:
|
||||||
|
break.
|
||||||
|
entry.
|
||||||
|
addiu. $2, 0x7fff
|
||||||
|
addiu. $3, $2, 0
|
||||||
|
exit.ex
|
||||||
|
exit.tx
|
||||||
|
nop.ey
|
||||||
|
nop.ty
|
||||||
|
li.ez $2, 0
|
||||||
|
li.tz $2, 0
|
||||||
|
|
||||||
|
# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
|
||||||
|
.align 4, 0
|
||||||
|
.space 16
|
||||||
Reference in New Issue
Block a user