This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] PR binutils/16891: Handle prefixes before fwait
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Date: Thu, 1 May 2014 09:46:25 -0700
- Subject: [PATCH] PR binutils/16891: Handle prefixes before fwait
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
0x9b (fwait) is both an instruction and an opcode prefix. When 0x9b is
treated as an instruction, we need to handle any prefixes before it.
This patch handles it properly. I checked it in.
H.J.
---
gas/testsuite/
PR binutils/16891
* gas/i386/opcode.s: Add test for fwait with prefix.
* gas/i386/opcode-intel.d: Updated.
* gas/i386/opcode-suffix.d: Likewise.
* gas/i386/opcode.d: Likewise.
opcodes/
PR binutils/16891
* i386-dis.c (print_insn): Handle prefixes before fwait.
---
gas/testsuite/ChangeLog | 8 ++++++++
gas/testsuite/gas/i386/opcode-intel.d | 2 ++
gas/testsuite/gas/i386/opcode-suffix.d | 2 ++
gas/testsuite/gas/i386/opcode.d | 2 ++
gas/testsuite/gas/i386/opcode.s | 3 +++
opcodes/ChangeLog | 5 +++++
opcodes/i386-dis.c | 8 +++++++-
7 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index fac6a8b..d59d640 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2014-05-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/16891
+ * gas/i386/opcode.s: Add test for fwait with prefix.
+ * gas/i386/opcode-intel.d: Updated.
+ * gas/i386/opcode-suffix.d: Likewise.
+ * gas/i386/opcode.d: Likewise.
+
2014-04-23 Will Newton <will.newton@linaro.org>
* gas/arm/backslash-at.d: Fix dump output regexps for
diff --git a/gas/testsuite/gas/i386/opcode-intel.d b/gas/testsuite/gas/i386/opcode-intel.d
index 23b7afa..a1ebe45 100644
--- a/gas/testsuite/gas/i386/opcode-intel.d
+++ b/gas/testsuite/gas/i386/opcode-intel.d
@@ -592,4 +592,6 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp edx,DWORD PTR \[eax-0x6f6f6f70\]
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp dx,WORD PTR \[eax-0x6f6f6f70\]
[ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnp dx,WORD PTR \[eax-0x6f6f6f70\]
+[ ]*[a-f0-9]+: 26 9b [ ]*es fwait
+[ ]*[a-f0-9]+: 9b [ ]*fwait
#pass
diff --git a/gas/testsuite/gas/i386/opcode-suffix.d b/gas/testsuite/gas/i386/opcode-suffix.d
index 74e0adb..21ad22b 100644
--- a/gas/testsuite/gas/i386/opcode-suffix.d
+++ b/gas/testsuite/gas/i386/opcode-suffix.d
@@ -592,4 +592,6 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnpl -0x6f6f6f70\(%eax\),%edx
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovpw -0x6f6f6f70\(%eax\),%dx
[ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnpw -0x6f6f6f70\(%eax\),%dx
+[ ]*[a-f0-9]+: 26 9b [ ]*es fwait
+[ ]*[a-f0-9]+: 9b [ ]*fwait
#pass
diff --git a/gas/testsuite/gas/i386/opcode.d b/gas/testsuite/gas/i386/opcode.d
index 1a94fc8..371e40a 100644
--- a/gas/testsuite/gas/i386/opcode.d
+++ b/gas/testsuite/gas/i386/opcode.d
@@ -591,4 +591,6 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp -0x6f6f6f70\(%eax\),%edx
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp -0x6f6f6f70\(%eax\),%dx
[ ]*[a-f0-9]+: 66 0f 4b 90 90 90 90 90 cmovnp -0x6f6f6f70\(%eax\),%dx
+[ ]*[a-f0-9]+: 26 9b [ ]*es fwait
+[ ]*[a-f0-9]+: 9b [ ]*fwait
#pass
diff --git a/gas/testsuite/gas/i386/opcode.s b/gas/testsuite/gas/i386/opcode.s
index a07e423..72333a5 100644
--- a/gas/testsuite/gas/i386/opcode.s
+++ b/gas/testsuite/gas/i386/opcode.s
@@ -589,3 +589,6 @@ foo:
cmovpo 0x90909090(%eax),%edx
cmovpe 0x90909090(%eax),%dx
cmovpo 0x90909090(%eax),%dx
+
+ es fwait
+ fwait
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 05ad78a..747aa23 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,8 @@
+2014-05-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/16891
+ * i386-dis.c (print_insn): Handle prefixes before fwait.
+
2014-04-26 Alan Modra <amodra@gmail.com>
* po/POTFILES.in: Regenerate.
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 0e07606..c36c632 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -12548,8 +12548,14 @@ print_insn (bfd_vma pc, disassemble_info *info)
if (((prefixes & PREFIX_FWAIT)
&& ((*codep < 0xd8) || (*codep > 0xdf))))
{
+ /* Handle prefixes before fwait. */
+ for (i = 0;
+ i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
+ i++)
+ (*info->fprintf_func) (info->stream, "%s ",
+ prefix_name (all_prefixes[i], sizeflag));
(*info->fprintf_func) (info->stream, "fwait");
- return 1;
+ return i + 1;
}
if (*codep == 0x0f)
--
1.9.0