From 4a357820add595557dcd08d275288a4bcf43cbcb Mon Sep 17 00:00:00 2001 From: Michael Zolotukhin Date: Tue, 17 Dec 2013 09:06:57 -0800 Subject: Properly handle ljmp/lcall with invalid MODRM byte gas/testsuite/ 2013-12-17 Michael Zolotukhin * gas/i386/disassem.s: New. * gas/i386/disassem.d: Likewise. * gas/i386/x86-64-disassem.s: Likewise. * gas/i386/x86-64-disassem.d: Likewise. * gas/i386/i386.exp: Run disassem and x86-64-disassem. opcodes/ 2013-12-17 Michael Zolotukhin * i386-dis.c (MOD_FF_REG_3): New. (MOD_FF_REG_5): Likewise. (mod_table): Add MOD_FF_REG_3 and MOD_FF_REG_5. (reg_table): Use MOD_FF_REG_3 and MOD_FF_REG_5. --- gas/testsuite/ChangeLog | 8 ++++++++ gas/testsuite/gas/i386/disassem.d | 14 ++++++++++++++ gas/testsuite/gas/i386/disassem.s | 3 +++ gas/testsuite/gas/i386/i386.exp | 2 ++ gas/testsuite/gas/i386/x86-64-disassem.d | 14 ++++++++++++++ gas/testsuite/gas/i386/x86-64-disassem.s | 3 +++ 6 files changed, 44 insertions(+) create mode 100644 gas/testsuite/gas/i386/disassem.d create mode 100644 gas/testsuite/gas/i386/disassem.s create mode 100644 gas/testsuite/gas/i386/x86-64-disassem.d create mode 100644 gas/testsuite/gas/i386/x86-64-disassem.s (limited to 'gas') diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index be61299..194a47a 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2013-12-17 Michael Zolotukhin + + * gas/i386/disassem.s: New. + * gas/i386/disassem.d: Likewise. + * gas/i386/x86-64-disassem.s: Likewise. + * gas/i386/x86-64-disassem.d: Likewise. + * gas/i386/i386.exp: Run disassem and x86-64-disassem. + 2013-12-16 Andrew Bennett * gas/mips/mips.exp: Add CP1 register name tests. diff --git a/gas/testsuite/gas/i386/disassem.d b/gas/testsuite/gas/i386/disassem.d new file mode 100644 index 0000000..d8c6d61 --- /dev/null +++ b/gas/testsuite/gas/i386/disassem.d @@ -0,0 +1,14 @@ +#objdump: -drw +#name: opcodes with invalid modrm byte + +.*: +file format .* + + +Disassembly of section \.text: + +0+ <\.text>: +[ ]*[a-f0-9]+:[ ]*ff[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*ef[ ]*out %eax,\(%dx\) +[ ]*[a-f0-9]+:[ ]*ff[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*d8[ ]*\.byte 0xd8 +#pass diff --git a/gas/testsuite/gas/i386/disassem.s b/gas/testsuite/gas/i386/disassem.s new file mode 100644 index 0000000..81b0ef3 --- /dev/null +++ b/gas/testsuite/gas/i386/disassem.s @@ -0,0 +1,3 @@ +.text +.byte 0xFF, 0xEF +.byte 0xFF, 0xD8 diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 1fb2795..4326838 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -269,6 +269,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]] run_list_test "mpx-inval-1" "-al" run_dump_test "mpx-add-bnd-prefix" run_dump_test "sha" + run_dump_test "disassem" # These tests require support for 8 and 16 bit relocs, # so we only run them for ELF and COFF targets. @@ -557,6 +558,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t run_dump_test "x86-64-mpx-addr32" run_dump_test "x86-64-mpx-add-bnd-prefix" run_dump_test "x86-64-sha" + run_dump_test "x86-64-disassem" if { ![istarget "*-*-aix*"] && ![istarget "*-*-beos*"] diff --git a/gas/testsuite/gas/i386/x86-64-disassem.d b/gas/testsuite/gas/i386/x86-64-disassem.d new file mode 100644 index 0000000..8662af9 --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-disassem.d @@ -0,0 +1,14 @@ +#objdump: -drw +#name: x86-64 opcodes with invalid modrm byte + +.*: +file format .* + + +Disassembly of section \.text: + +0+ <\.text>: +[ ]*[a-f0-9]+:[ ]*ff[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*ef[ ]*out %eax,\(%dx\) +[ ]*[a-f0-9]+:[ ]*ff[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*d8[ ]*\.byte 0xd8 +#pass diff --git a/gas/testsuite/gas/i386/x86-64-disassem.s b/gas/testsuite/gas/i386/x86-64-disassem.s new file mode 100644 index 0000000..81b0ef3 --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-disassem.s @@ -0,0 +1,3 @@ +.text +.byte 0xFF, 0xEF +.byte 0xFF, 0xD8 -- cgit v1.1