aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2013-03-27 18:49:10 +0000
committerH.J. Lu <hjl.tools@gmail.com>2013-03-27 18:49:10 +0000
commit55cf16e10ce64a8696137d2ce50092b4559561e7 (patch)
treea001d19198e7351572910eef6b15ef0b97b33c73
parentec21308c432bb90610474eedeb47b2335b12a735 (diff)
downloadfsf-binutils-gdb-55cf16e10ce64a8696137d2ce50092b4559561e7.zip
fsf-binutils-gdb-55cf16e10ce64a8696137d2ce50092b4559561e7.tar.gz
fsf-binutils-gdb-55cf16e10ce64a8696137d2ce50092b4559561e7.tar.bz2
Properly check address mode for SIB
gas/testsuite/ * gas/i386/addr32.s: Add an SIB test. * gas/i386/addr32.d: Updated. opcodes/ * i386-dis.c (get_sib): Add the sizeflag argument. Properly check address mode. (print_insn): Pass sizeflag to get_sib.
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/i386/addr32.d1
-rw-r--r--gas/testsuite/gas/i386/addr32.s1
-rw-r--r--opcodes/ChangeLog6
-rw-r--r--opcodes/i386-dis.c8
5 files changed, 17 insertions, 4 deletions
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 58fb22f..8206282 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-03-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/addr32.s: Add an SIB test.
+ * gas/i386/addr32.d: Updated.
+
2013-03-27 Alexis Deruelle <alexis.deruelle@gmail.com>
PR binutils/15068
diff --git a/gas/testsuite/gas/i386/addr32.d b/gas/testsuite/gas/i386/addr32.d
index 5866a30..8553fc3 100644
--- a/gas/testsuite/gas/i386/addr32.d
+++ b/gas/testsuite/gas/i386/addr32.d
@@ -12,4 +12,5 @@ Disassembly of section .text:
[ ]*13:[ ]+67 a2 98 08 60 00[ ]+addr32[ ]+mov[ ]+%al,0x600898
[ ]*19:[ ]+67 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+%ax,0x600898
[ ]*1f:[ ]+67 66 a3 98 08 60 00[ ]+addr32[ ]+mov[ ]+%eax,0x600898
+[ ]*26:[ ]+67 66 c7 04 24 01 00 00 00[ ]+movl[ ]+\$0x1,\(%esp\)
#pass
diff --git a/gas/testsuite/gas/i386/addr32.s b/gas/testsuite/gas/i386/addr32.s
index 3dab339..b899ebd 100644
--- a/gas/testsuite/gas/i386/addr32.s
+++ b/gas/testsuite/gas/i386/addr32.s
@@ -6,3 +6,4 @@
addr32 mov %al,0x600898
addr32 mov %ax,0x600898
addr32 mov %eax,0x600898
+ addr32 movl $0x1,(%esp)
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 533c4a3..39c256e 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,9 @@
+2013-03-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (get_sib): Add the sizeflag argument. Properly
+ check address mode.
+ (print_insn): Pass sizeflag to get_sib.
+
2013-03-27 Alexis Deruelle <alexis.deruelle@gmail.com>
PR binutils/15068
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 5a77255..eeaf22e 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -11285,11 +11285,11 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
}
static void
-get_sib (disassemble_info *info)
+get_sib (disassemble_info *info, int sizeflag)
{
/* If modrm.mod == 3, operand must be register. */
if (need_modrm
- && address_mode != mode_16bit
+ && ((sizeflag & AFLAG) || address_mode == mode_64bit)
&& modrm.mod != 3
&& modrm.rm == 4)
{
@@ -11574,7 +11574,7 @@ print_insn (bfd_vma pc, disassemble_info *info)
if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
{
- get_sib (info);
+ get_sib (info, sizeflag);
dofloat (sizeflag);
}
else
@@ -11582,7 +11582,7 @@ print_insn (bfd_vma pc, disassemble_info *info)
dp = get_valid_dis386 (dp, info);
if (dp != NULL && putop (dp->name, sizeflag) == 0)
{
- get_sib (info);
+ get_sib (info, sizeflag);
for (i = 0; i < MAX_OPERANDS; ++i)
{
obufp = op_out[i];