From 1e87984a63faf4378f6f71c407f7e969441b944e Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 19 Dec 2013 14:24:34 -0800 Subject: [PATCH] Properly decode MODRM byte for 64-bit 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 | 6 ++++++ gdb/i386-tdep.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c12e90766a..76cedd7459 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2013-12-19 H.J. Lu + + 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 PR gdb/16304 diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index ff37851781..8992088ea0 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -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; -- 2.34.1