/* Native-dependent code for modern i386 BSD's.
- Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GDB.
presence, and deal gracefully with their absence. */
/* Registers we shouldn't try to fetch. */
-#if !defined (CANNOT_FETCH_REGISTER)
-#define CANNOT_FETCH_REGISTER(regno) cannot_fetch_register (regno)
-#endif
+#undef CANNOT_FETCH_REGISTER
+#define CANNOT_FETCH_REGISTER(regnum) cannot_fetch_register (regnum)
/* Registers we shouldn't try to store. */
-#if !defined (CANNOT_STORE_REGISTER)
-#define CANNOT_STORE_REGISTER(regno) cannot_fetch_register (regno)
-#endif
+#undef CANNOT_STORE_REGISTER
+#define CANNOT_STORE_REGISTER(regnum) cannot_fetch_register (regnum)
/* Offset to the gregset_t location where REG is stored. */
#define REG_OFFSET(reg) offsetof (gregset_t, reg)
-/* At reg_offset[REGNO] you'll find the offset to the gregset_t
- location where the GDB register REGNO is stored. Unsupported
+/* At reg_offset[REGNUM] you'll find the offset to the gregset_t
+ location where the GDB register REGNUM is stored. Unsupported
registers are marked with `-1'. */
static int reg_offset[] =
{
#endif
};
-#define REG_ADDR(regset, regno) ((char *) (regset) + reg_offset[regno])
+#define REG_ADDR(regset, regnum) ((char *) (regset) + reg_offset[regnum])
/* Macro to determine if a register is fetched with PT_GETREGS. */
-#define GETREGS_SUPPLIES(regno) \
- ((0 <= (regno) && (regno) <= 15))
+#define GETREGS_SUPPLIES(regnum) \
+ ((0 <= (regnum) && (regnum) <= 15))
#ifdef HAVE_PT_GETXMMREGS
/* Set to 1 if the kernel supports PT_GETXMMREGS. Initialized to -1
static int have_ptrace_xmmregs = -1;
#endif
-/* Return nonzero if we shouldn't try to fetch register REGNO. */
+/* Return nonzero if we shouldn't try to fetch register REGNUM. */
static int
-cannot_fetch_register (int regno)
+cannot_fetch_register (int regnum)
{
- return (reg_offset[regno] == -1);
+ return (reg_offset[regnum] == -1);
}
\f
}
}
-/* Fill register REGNO (if it is a general-purpose register) in
- *GREGSETPS with the value in GDB's register array. If REGNO is -1,
+/* Fill register REGNUM (if it is a general-purpose register) in
+ *GREGSETPS with the value in GDB's register array. If REGNUM is -1,
do this for all registers. */
void
-fill_gregset (gregset_t *gregsetp, int regno)
+fill_gregset (gregset_t *gregsetp, int regnum)
{
int i;
for (i = 0; i < I386_NUM_GREGS; i++)
- if ((regno == -1 || regno == i) && ! CANNOT_STORE_REGISTER (i))
+ if ((regnum == -1 || regnum == i) && ! CANNOT_STORE_REGISTER (i))
regcache_collect (i, REG_ADDR (gregsetp, i));
}
void
supply_fpregset (fpregset_t *fpregsetp)
{
- i387_supply_fsave ((char *) fpregsetp);
+ i387_supply_fsave (current_regcache, -1, fpregsetp);
}
-/* Fill register REGNO (if it is a floating-point register) in
- *FPREGSETP with the value in GDB's register array. If REGNO is -1,
- do this for all registers. */
+/* Fill register REGNUM (if it is a floating-point register) in
+ *FPREGSETP with the value in GDB's register array. If REGNUM is
+ -1, do this for all registers. */
void
-fill_fpregset (fpregset_t *fpregsetp, int regno)
+fill_fpregset (fpregset_t *fpregsetp, int regnum)
{
- i387_fill_fsave ((char *) fpregsetp, regno);
+ i387_collect_fsave (current_regcache, regnum, fpregsetp);
}
-/* Fetch register REGNO from the inferior. If REGNO is -1, do this
+/* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
for all registers (including the floating point registers). */
void
-fetch_inferior_registers (int regno)
+fetch_inferior_registers (int regnum)
{
-
- if (regno == -1 || GETREGS_SUPPLIES (regno))
+ if (regnum == -1 || GETREGS_SUPPLIES (regnum))
{
gregset_t gregs;
perror_with_name ("Couldn't get registers");
supply_gregset (&gregs);
- if (regno != -1)
+ if (regnum != -1)
return;
}
- if (regno == -1 || regno >= FP0_REGNUM)
+ if (regnum == -1 || regnum >= I386_ST0_REGNUM)
{
fpregset_t fpregs;
#ifdef HAVE_PT_GETXMMREGS
(PTRACE_ARG3_TYPE) xmmregs, 0) == 0)
{
have_ptrace_xmmregs = 1;
- i387_supply_fxsave (xmmregs);
+ i387_supply_fxsave (current_regcache, -1, xmmregs);
}
else
{
(PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
perror_with_name ("Couldn't get floating point status");
- supply_fpregset (&fpregs);
+ i387_supply_fsave (current_regcache, -1, &fpregs);
}
#else
if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
perror_with_name ("Couldn't get floating point status");
- supply_fpregset (&fpregs);
+ i387_supply_fsave (current_regcache, -1, &fpregs);
#endif
}
}
-/* Store register REGNO back into the inferior. If REGNO is -1, do
+/* Store register REGNUM back into the inferior. If REGNUM is -1, do
this for all registers (including the floating point registers). */
void
-store_inferior_registers (int regno)
+store_inferior_registers (int regnum)
{
-
- if (regno == -1 || GETREGS_SUPPLIES (regno))
+ if (regnum == -1 || GETREGS_SUPPLIES (regnum))
{
gregset_t gregs;
(PTRACE_ARG3_TYPE) &gregs, 0) == -1)
perror_with_name ("Couldn't get registers");
- fill_gregset (&gregs, regno);
+ fill_gregset (&gregs, regnum);
if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) &gregs, 0) == -1)
perror_with_name ("Couldn't write registers");
- if (regno != -1)
+ if (regnum != -1)
return;
}
- if (regno == -1 || regno >= FP0_REGNUM)
+ if (regnum == -1 || regnum >= I386_ST0_REGNUM)
{
fpregset_t fpregs;
#ifdef HAVE_PT_GETXMMREGS
{
have_ptrace_xmmregs = 1;
- i387_fill_fxsave (xmmregs, regno);
+ i387_collect_fxsave (current_regcache, regnum, xmmregs);
if (ptrace (PT_SETXMMREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) xmmregs, 0) == -1)
(PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
perror_with_name ("Couldn't get floating point status");
- fill_fpregset (&fpregs, regno);
-
+ i387_collect_fsave (current_regcache, regnum, &fpregs);
+
if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) &fpregs, 0) == -1)
perror_with_name ("Couldn't write floating point status");
/* Support for the user struct. */
-/* Return the address register REGNO. BLOCKEND is the value of
+/* Return the address register REGNUM. BLOCKEND is the value of
u.u_ar0, which should point to the registers. */
CORE_ADDR
-register_u_addr (CORE_ADDR blockend, int regno)
+register_u_addr (CORE_ADDR blockend, int regnum)
{
- return (CORE_ADDR) REG_ADDR (blockend, regno);
+ return (CORE_ADDR) REG_ADDR (blockend, regnum);
}
#include <sys/param.h>
information. */
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400011
- extern int i386fbsd4_sc_reg_offset[];
#define SC_REG_OFFSET i386fbsd4_sc_reg_offset
#elif defined (__FreeBSD_version) && __FreeBSD_version >= 300005
- extern int i386fbsd_sc_reg_offset[];
#define SC_REG_OFFSET i386fbsd_sc_reg_offset
#elif defined (NetBSD) || defined (__NetBSD_Version__)
- extern int i386nbsd_sc_reg_offset[];
#define SC_REG_OFFSET i386nbsd_sc_reg_offset
#elif defined (OpenBSD)
- extern int i386obsd_sc_reg_offset[];
#define SC_REG_OFFSET i386obsd_sc_reg_offset
#else
- extern int i386bsd_sc_reg_offset[];
#define SC_REG_OFFSET i386bsd_sc_reg_offset
#endif