x86: Avoid abort on invalid broadcast

Print "{bad}" on invalid broadcast instead of abort.

gas/

	PR binutils/28247
	* testsuite/gas/i386/bad-bcast.d: New file.
	* testsuite/gas/i386/bad-bcast.s: Likewise.
	* testsuite/gas/i386/i386.exp: Run bad-bcast.

opcodes/

	PR binutils/28247
	* i386-dis.c (OP_E_memory): Print "{bad}" on invalid broadcast
	instead of abort.
This commit is contained in:
H.J. Lu 2021-08-19 06:38:21 -07:00
parent 8ddf46454a
commit 7e40d574be
4 changed files with 21 additions and 4 deletions

View file

@ -0,0 +1,14 @@
#objdump: -dw
#name: Disassemble bad broadcast
.*: +file format .*
Disassembly of section .text:
0+ <.text>:
+[a-f0-9]+: 62 .byte 0x62
+[a-f0-9]+: c3 ret
+[a-f0-9]+: 8c 1d 66 90 66 90 mov %ds,0x90669066
+[a-f0-9]+: 66 90 xchg %ax,%ax
#pass

View file

@ -0,0 +1,2 @@
.text
.byte 0x62, 0xc3, 0x8c, 0x1d, 0x66, 0x90, 0x66, 0x90, 0x66, 0x90

View file

@ -646,6 +646,7 @@ if [gas_32_check] then {
run_dump_test "dw2-compress-2"
run_dump_test "dw2-compressed-2"
run_dump_test "bad-bcast"
run_dump_test "bad-size"
run_dump_test "size-1"

View file

@ -11912,7 +11912,7 @@ OP_E_memory (int bytemode, int sizeflag)
{
if (vex.w)
{
abort ();
oappend ("{bad}");
}
else
{
@ -11928,7 +11928,7 @@ OP_E_memory (int bytemode, int sizeflag)
oappend ("{1to32}");
break;
default:
abort ();
oappend ("{bad}");
}
}
}
@ -11948,7 +11948,7 @@ OP_E_memory (int bytemode, int sizeflag)
oappend ("{1to8}");
break;
default:
abort ();
oappend ("{bad}");
}
}
else if (bytemode == x_mode
@ -11966,7 +11966,7 @@ OP_E_memory (int bytemode, int sizeflag)
oappend ("{1to16}");
break;
default:
abort ();
oappend ("{bad}");
}
}
else