Properly decode MODRM byte for 64-bit
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 19 Dec 2013 22:24:34 +0000 (14:24 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 19 Dec 2013 22:24:34 +0000 (14:24 -0800)
64-bit mode doesn't use 16-bit address.  We should always check SIB byte
for address in 64-bit mode.

PR gdb/16304
* i386-tdep.c (i386_record_lea_modrm_addr): Don't use 16-bit
address in 64-bit mode.

gdb/ChangeLog
gdb/i386-tdep.c

index c12e90766af24062e1b9e68bdf1deb0f94524820..76cedd74594f340b4356ae7f9bae569aba17ab5b 100644 (file)
@@ -1,3 +1,9 @@
+2013-12-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gdb/16304
+       * i386-tdep.c (i386_record_lea_modrm_addr): Don't use 16-bit
+       address in 64-bit mode.
+
 2013-12-19  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR gdb/16304
index ff378517817c3e0a9fa72bcb1ee2e4ecf7e93f4d..8992088ea0f75070829511f4832b0094d456a560 100644 (file)
@@ -4209,9 +4209,9 @@ i386_record_lea_modrm_addr (struct i386_record_s *irp, uint64_t *addr)
   ULONGEST offset64;
 
   *addr = 0;
-  if (irp->aflag)
+  if (irp->aflag || irp->regmap[X86_RECORD_R8_REGNUM])
     {
-      /* 32 bits */
+      /* 32/64 bits */
       int havesib = 0;
       uint8_t scale = 0;
       uint8_t byte;