Remove regmap from i386-linux-nat.c.

2010-04-22  H.J. Lu  <hongjiu.lu@intel.com>

	* i386-linux-nat.c (regmap): Removed.
	(fetch_register): Replace regmap with
	i386_linux_gregset_reg_offset.
	(store_register): Likewise.
	(supply_gregset): Likewise.
	(fill_gregset): Likewise.

	* i386-linux-tdep.c (i386_linux_gregset_reg_offset): Make it
	global.

	* i386-linux-tdep.h (i386_linux_gregset_reg_offset): New.
This commit is contained in:
H.J. Lu 2010-04-22 20:35:28 +00:00
parent f56dcb8879
commit be0d295484
4 changed files with 31 additions and 31 deletions

View file

@ -1,3 +1,17 @@
2010-04-22 H.J. Lu <hongjiu.lu@intel.com>
* i386-linux-nat.c (regmap): Removed.
(fetch_register): Replace regmap with
i386_linux_gregset_reg_offset.
(store_register): Likewise.
(supply_gregset): Likewise.
(fill_gregset): Likewise.
* i386-linux-tdep.c (i386_linux_gregset_reg_offset): Make it
global.
* i386-linux-tdep.h (i386_linux_gregset_reg_offset): New.
2010-04-22 Chris Moller <cmoller@redhat.com> 2010-04-22 Chris Moller <cmoller@redhat.com>
* cp-valprint.c (cp_print_value_fields): Replaced obstack_base() * cp-valprint.c (cp_print_value_fields): Replaced obstack_base()

View file

@ -99,26 +99,6 @@ static int have_ptrace_getregset = -1;
those names are now used for the register sets used in the those names are now used for the register sets used in the
`mcontext_t' type, and have a different size and layout. */ `mcontext_t' type, and have a different size and layout. */
/* Mapping between the general-purpose registers in `struct user'
format and GDB's register array layout. */
static int regmap[] =
{
EAX, ECX, EDX, EBX,
UESP, EBP, ESI, EDI,
EIP, EFL, CS, SS,
DS, ES, FS, GS,
-1, -1, -1, -1, /* st0, st1, st2, st3 */
-1, -1, -1, -1, /* st4, st5, st6, st7 */
-1, -1, -1, -1, /* fctrl, fstat, ftag, fiseg */
-1, -1, -1, -1, /* fioff, foseg, fooff, fop */
-1, -1, -1, -1, /* xmm0, xmm1, xmm2, xmm3 */
-1, -1, -1, -1, /* xmm4, xmm5, xmm6, xmm6 */
-1, /* mxcsr */
-1, -1, -1, -1, /* ymm0h, ymm1h, ymm2h, ymm3h */
-1, -1, -1, -1, /* ymm4h, ymm5h, ymm6h, ymm6h */
ORIG_EAX
};
/* Which ptrace request retrieves which registers? /* Which ptrace request retrieves which registers?
These apply to the corresponding SET requests as well. */ These apply to the corresponding SET requests as well. */
@ -168,7 +148,7 @@ fetch_register (struct regcache *regcache, int regno)
int val; int val;
gdb_assert (!have_ptrace_getregs); gdb_assert (!have_ptrace_getregs);
if (regmap[regno] == -1) if (i386_linux_gregset_reg_offset[regno] == -1)
{ {
regcache_raw_supply (regcache, regno, NULL); regcache_raw_supply (regcache, regno, NULL);
return; return;
@ -180,7 +160,8 @@ fetch_register (struct regcache *regcache, int regno)
tid = PIDGET (inferior_ptid); /* Not a threaded program. */ tid = PIDGET (inferior_ptid); /* Not a threaded program. */
errno = 0; errno = 0;
val = ptrace (PTRACE_PEEKUSER, tid, 4 * regmap[regno], 0); val = ptrace (PTRACE_PEEKUSER, tid,
i386_linux_gregset_reg_offset[regno], 0);
if (errno != 0) if (errno != 0)
error (_("Couldn't read register %s (#%d): %s."), error (_("Couldn't read register %s (#%d): %s."),
gdbarch_register_name (get_regcache_arch (regcache), regno), gdbarch_register_name (get_regcache_arch (regcache), regno),
@ -198,7 +179,7 @@ store_register (const struct regcache *regcache, int regno)
int val; int val;
gdb_assert (!have_ptrace_getregs); gdb_assert (!have_ptrace_getregs);
if (regmap[regno] == -1) if (i386_linux_gregset_reg_offset[regno] == -1)
return; return;
/* GNU/Linux LWP ID's are process ID's. */ /* GNU/Linux LWP ID's are process ID's. */
@ -208,7 +189,8 @@ store_register (const struct regcache *regcache, int regno)
errno = 0; errno = 0;
regcache_raw_collect (regcache, regno, &val); regcache_raw_collect (regcache, regno, &val);
ptrace (PTRACE_POKEUSER, tid, 4 * regmap[regno], val); ptrace (PTRACE_POKEUSER, tid,
i386_linux_gregset_reg_offset[regno], val);
if (errno != 0) if (errno != 0)
error (_("Couldn't write register %s (#%d): %s."), error (_("Couldn't write register %s (#%d): %s."),
gdbarch_register_name (get_regcache_arch (regcache), regno), gdbarch_register_name (get_regcache_arch (regcache), regno),
@ -225,16 +207,17 @@ store_register (const struct regcache *regcache, int regno)
void void
supply_gregset (struct regcache *regcache, const elf_gregset_t *gregsetp) supply_gregset (struct regcache *regcache, const elf_gregset_t *gregsetp)
{ {
const elf_greg_t *regp = (const elf_greg_t *) gregsetp; const gdb_byte *regp = (const gdb_byte *) gregsetp;
int i; int i;
for (i = 0; i < I386_NUM_GREGS; i++) for (i = 0; i < I386_NUM_GREGS; i++)
regcache_raw_supply (regcache, i, regp + regmap[i]); regcache_raw_supply (regcache, i,
regp + i386_linux_gregset_reg_offset[i]);
if (I386_LINUX_ORIG_EAX_REGNUM if (I386_LINUX_ORIG_EAX_REGNUM
< gdbarch_num_regs (get_regcache_arch (regcache))) < gdbarch_num_regs (get_regcache_arch (regcache)))
regcache_raw_supply (regcache, I386_LINUX_ORIG_EAX_REGNUM, regcache_raw_supply (regcache, I386_LINUX_ORIG_EAX_REGNUM,
regp + ORIG_EAX); regp + i386_linux_gregset_reg_offset[I386_LINUX_ORIG_EAX_REGNUM]);
} }
/* Fill register REGNO (if it is a general-purpose register) in /* Fill register REGNO (if it is a general-purpose register) in
@ -245,18 +228,19 @@ void
fill_gregset (const struct regcache *regcache, fill_gregset (const struct regcache *regcache,
elf_gregset_t *gregsetp, int regno) elf_gregset_t *gregsetp, int regno)
{ {
elf_greg_t *regp = (elf_greg_t *) gregsetp; gdb_byte *regp = (gdb_byte *) gregsetp;
int i; int i;
for (i = 0; i < I386_NUM_GREGS; i++) for (i = 0; i < I386_NUM_GREGS; i++)
if (regno == -1 || regno == i) if (regno == -1 || regno == i)
regcache_raw_collect (regcache, i, regp + regmap[i]); regcache_raw_collect (regcache, i,
regp + i386_linux_gregset_reg_offset[i]);
if ((regno == -1 || regno == I386_LINUX_ORIG_EAX_REGNUM) if ((regno == -1 || regno == I386_LINUX_ORIG_EAX_REGNUM)
&& I386_LINUX_ORIG_EAX_REGNUM && I386_LINUX_ORIG_EAX_REGNUM
< gdbarch_num_regs (get_regcache_arch (regcache))) < gdbarch_num_regs (get_regcache_arch (regcache)))
regcache_raw_collect (regcache, I386_LINUX_ORIG_EAX_REGNUM, regcache_raw_collect (regcache, I386_LINUX_ORIG_EAX_REGNUM,
regp + ORIG_EAX); regp + i386_linux_gregset_reg_offset[I386_LINUX_ORIG_EAX_REGNUM]);
} }
#ifdef HAVE_PTRACE_GETREGS #ifdef HAVE_PTRACE_GETREGS

View file

@ -529,7 +529,7 @@ i386_linux_get_syscall_number (struct gdbarch *gdbarch,
format and GDB's register cache layout. */ format and GDB's register cache layout. */
/* From <sys/reg.h>. */ /* From <sys/reg.h>. */
static int i386_linux_gregset_reg_offset[] = int i386_linux_gregset_reg_offset[] =
{ {
6 * 4, /* %eax */ 6 * 4, /* %eax */
1 * 4, /* %ecx */ 1 * 4, /* %ecx */

View file

@ -65,4 +65,6 @@ extern struct target_desc *tdesc_i386_avx_linux;
the process/thread is in. */ the process/thread is in. */
#define I386_LINUX_XSAVE_XCR0_OFFSET 464 #define I386_LINUX_XSAVE_XCR0_OFFSET 464
extern int i386_linux_gregset_reg_offset[];
#endif /* i386-linux-tdep.h */ #endif /* i386-linux-tdep.h */