This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 4/5] Check bits_per_word instead of gdbarch_ptr_bit
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: GDB <gdb-patches at sourceware dot org>, Mark Kettenis <kettenis at gnu dot org>
- Date: Wed, 13 Jun 2012 16:07:04 -0700
- Subject: [PATCH 4/5] Check bits_per_word instead of gdbarch_ptr_bit
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
This is a repost of
http://sourceware.org/ml/gdb-patches/2012-04/msg00195.html
An x32 process is an x86-64 process with 32bit pointer. Checking
gdbarch_ptr_bit is not sufficient to identify ia32 process. However,
bits_per_word in bfd_arch_info is 32bits for ia32. This patch checks
bits_per_word instead of gdbarch_ptr_bit for identifying ia32 process.
Tested on Linux/x86-64. OK to install?
Thanks.
H.J.
----
* amd64-linux-nat.c (ps_get_thread_area): Check bits_per_word
instead of gdbarch_ptr_bit.
* amd64-nat.c (amd64_native_gregset_reg_offset): Likewise.
(amd64_supply_native_gregset): Likewise.
(amd64_collect_native_gregset): Likewise.
* amd64-tdep.c (amd64_supply_fxsave): Likewise.
(amd64_supply_xsave): Likewise.
(amd64_collect_fxsave): Likewise.
(amd64_collect_xsave): Likewise.
---
gdb/amd64-linux-nat.c | 2 +-
gdb/amd64-nat.c | 6 +++---
gdb/amd64-tdep.c | 10 ++++++----
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c
index 9c4026c..bc28d54 100644
--- a/gdb/amd64-linux-nat.c
+++ b/gdb/amd64-linux-nat.c
@@ -442,7 +442,7 @@ ps_err_e
ps_get_thread_area (const struct ps_prochandle *ph,
lwpid_t lwpid, int idx, void **base)
{
- if (gdbarch_ptr_bit (target_gdbarch) == 32)
+ if (gdbarch_bfd_arch_info (target_gdbarch)->bits_per_word == 32)
{
/* The full structure is found in <asm-i386/ldt.h>. The second
integer is the LDT's base_address and that is used to locate
diff --git a/gdb/amd64-nat.c b/gdb/amd64-nat.c
index 6865456..d79b71b 100644
--- a/gdb/amd64-nat.c
+++ b/gdb/amd64-nat.c
@@ -59,7 +59,7 @@ amd64_native_gregset_reg_offset (struct gdbarch *gdbarch, int regnum)
gdb_assert (regnum >= 0);
- if (gdbarch_ptr_bit (gdbarch) == 32)
+ if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
{
reg_offset = amd64_native_gregset32_reg_offset;
num_regs = amd64_native_gregset32_num_regs;
@@ -96,7 +96,7 @@ amd64_supply_native_gregset (struct regcache *regcache,
int num_regs = amd64_native_gregset64_num_regs;
int i;
- if (gdbarch_ptr_bit (gdbarch) == 32)
+ if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
num_regs = amd64_native_gregset32_num_regs;
if (num_regs > gdbarch_num_regs (gdbarch))
@@ -127,7 +127,7 @@ amd64_collect_native_gregset (const struct regcache *regcache,
int num_regs = amd64_native_gregset64_num_regs;
int i;
- if (gdbarch_ptr_bit (gdbarch) == 32)
+ if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
{
num_regs = amd64_native_gregset32_num_regs;
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index ac1d363..dd2da2f 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -2805,7 +2805,8 @@ amd64_supply_fxsave (struct regcache *regcache, int regnum,
i387_supply_fxsave (regcache, regnum, fxsave);
- if (fxsave && gdbarch_ptr_bit (gdbarch) == 64)
+ if (fxsave
+ && gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
{
const gdb_byte *regs = fxsave;
@@ -2827,7 +2828,8 @@ amd64_supply_xsave (struct regcache *regcache, int regnum,
i387_supply_xsave (regcache, regnum, xsave);
- if (xsave && gdbarch_ptr_bit (gdbarch) == 64)
+ if (xsave
+ && gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
{
const gdb_byte *regs = xsave;
@@ -2855,7 +2857,7 @@ amd64_collect_fxsave (const struct regcache *regcache, int regnum,
i387_collect_fxsave (regcache, regnum, fxsave);
- if (gdbarch_ptr_bit (gdbarch) == 64)
+ if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
{
if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
regcache_raw_collect (regcache, I387_FISEG_REGNUM (tdep), regs + 12);
@@ -2876,7 +2878,7 @@ amd64_collect_xsave (const struct regcache *regcache, int regnum,
i387_collect_xsave (regcache, regnum, xsave, gcore);
- if (gdbarch_ptr_bit (gdbarch) == 64)
+ if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
{
if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
regcache_raw_collect (regcache, I387_FISEG_REGNUM (tdep),
--
1.7.6.5