Zero-extend address from 32-bit to 64-bit for ADDR32 prefix
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 19 Dec 2013 22:22:30 +0000 (14:22 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 19 Dec 2013 22:22:30 +0000 (14:22 -0800)
When there is ADDR32 prefix in 64-bit mode, we should zero-extend
address from 32-bit to 64-bit.

PR gdb/16304
* i386-tdep.c (i386_record_lea_modrm_addr): Zero-extend 32-bit
address to 64-bit in 64-bit mode.

gdb/ChangeLog
gdb/i386-tdep.c

index c8cd42a7cb6d41b5e2cac9ac330d56f38c958715..c12e90766af24062e1b9e68bdf1deb0f94524820 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): Zero-extend 32-bit
+       address to 64-bit in 64-bit mode.
+
 2013-12-19  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR gdb/16304
index f876675c4d8aeb4144efaf8122bddfcdb3e736d0..ff378517817c3e0a9fa72bcb1ee2e4ecf7e93f4d 100644 (file)
@@ -4282,6 +4282,13 @@ i386_record_lea_modrm_addr (struct i386_record_s *irp, uint64_t *addr)
          else
            *addr = (uint32_t) (*addr + (offset64 << scale));
        }
+
+      if (!irp->aflag)
+       {
+         /* Since we are in 64-bit mode with ADDR32 prefix, zero-extend
+            address from 32-bit to 64-bit.  */
+           *addr = (uint32_t) *addr;
+       }
     }
   else
     {