and replace current_gdbarch by gdbarch.
(store_register): Update call for exec_one_dummy_insn.
(fetch_register, store_register): Update call of regmap.
* ppcnbsd-nat.c (getregs_supplies, getfpregs_supplies): Add gdbarch as
parameter and replace current_gdbarch by gdbarch.
(ppcnbsd_store_inferior_registers): Use get_regcache_arch to get at
the current architecture. Update call for getregs_supplies and
getfpregs_supplies.
(ppcnbsd_fetch_inferior_registers): Likewise.
* ppcobsd-nat.c (getfpregs_supplies): Add gdbarch as parameter and
replace current_gdbarch by gdbarch.
(ppcobsd_fetch_registers, ppcobsd_store_registers): Use
get_regcache_arch to get at the current architecture. Update call for
getfpregs_supplies.
+2008-02-18 Markus Deuling <deuling@de.ibm.com>
+
+ * rs6000-nat.c (exec_one_dummy_insn, regmap): Add gdbarch as parameter
+ and replace current_gdbarch by gdbarch.
+
+ (store_register): Update call for exec_one_dummy_insn.
+ (fetch_register, store_register): Update call of regmap.
+
+ * ppcnbsd-nat.c (getregs_supplies, getfpregs_supplies): Add gdbarch as
+ parameter and replace current_gdbarch by gdbarch.
+
+ (ppcnbsd_store_inferior_registers): Use get_regcache_arch to get at
+ the current architecture. Update call for getregs_supplies and
+ getfpregs_supplies.
+ (ppcnbsd_fetch_inferior_registers): Likewise.
+
+ * ppcobsd-nat.c (getfpregs_supplies): Add gdbarch as parameter and
+ replace current_gdbarch by gdbarch.
+ (ppcobsd_fetch_registers, ppcobsd_store_registers): Use
+ get_regcache_arch to get at the current architecture. Update call for
+ getfpregs_supplies.
+
2008-02-18 Markus Deuling <deuling@de.ibm.com>
* arch-utils.c (gdbarch_from_bfd): Remove unnecessary {old,new}_gdbarch
/* Returns true if PT_GETREGS fetches this register. */
static int
-getregs_supplies (int regnum)
+getregs_supplies (struct gdbarch *gdbarch, int regnum)
{
- struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
return ((regnum >= tdep->ppc_gp0_regnum
&& regnum < tdep->ppc_gp0_regnum + ppc_num_gprs)
|| regnum == tdep->ppc_cr_regnum
|| regnum == tdep->ppc_xer_regnum
|| regnum == tdep->ppc_ctr_regnum
- || regnum == gdbarch_pc_regnum (current_gdbarch));
+ || regnum == gdbarch_pc_regnum (gdbarch));
}
/* Like above, but for PT_GETFPREGS. */
static int
-getfpregs_supplies (int regnum)
+getfpregs_supplies (struct gdbarch *gdbarch, int regnum)
{
- struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
/* FIXME: jimb/2004-05-05: Some PPC variants don't have floating
point registers. Traditionally, GDB's register set has still
It's not clear to me how best to update this code, so this assert
will alert the first person to encounter the NetBSD/E500
combination to the problem. */
- gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
+ gdb_assert (ppc_floating_point_unit_p (gdbarch));
return ((regnum >= tdep->ppc_fp0_regnum
&& regnum < tdep->ppc_fp0_regnum + ppc_num_fprs)
static void
ppcnbsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
{
- if (regnum == -1 || getregs_supplies (regnum))
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+
+ if (regnum == -1 || getregs_supplies (gdbarch, regnum))
{
struct reg regs;
regnum, ®s, sizeof regs);
}
- if (regnum == -1 || getfpregs_supplies (regnum))
+ if (regnum == -1 || getfpregs_supplies (gdbarch, regnum))
{
struct fpreg fpregs;
static void
ppcnbsd_store_inferior_registers (struct regcache *regcache, int regnum)
{
- if (regnum == -1 || getregs_supplies (regnum))
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+
+ if (regnum == -1 || getregs_supplies (gdbarch, regnum))
{
struct reg regs;
perror_with_name (_("Couldn't write registers"));
}
- if (regnum == -1 || getfpregs_supplies (regnum))
+ if (regnum == -1 || getfpregs_supplies (gdbarch, regnum))
{
struct fpreg fpregs;
/* Returns true if PT_GETFPREGS fetches this register. */
static int
-getfpregs_supplies (int regnum)
+getfpregs_supplies (struct gdbarch *gdbarch, int regnum)
{
- struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
/* FIXME: jimb/2004-05-05: Some PPC variants don't have floating
point registers. Traditionally, GDB's register set has still
It's not clear to me how best to update this code, so this assert
will alert the first person to encounter the NetBSD/E500
combination to the problem. */
- gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
+ gdb_assert (ppc_floating_point_unit_p (gdbarch));
return ((regnum >= tdep->ppc_fp0_regnum
&& regnum < tdep->ppc_fp0_regnum + ppc_num_fprs)
#endif
#ifdef PT_GETFPREGS
- if (regnum == -1 || getfpregs_supplies (regnum))
+ if (regnum == -1
+ || getfpregs_supplies (get_regcache_arch (regcache), regnum))
{
struct fpreg fpregs;
perror_with_name (_("Couldn't write registers"));
#ifdef PT_GETFPREGS
- if (regnum == -1 || getfpregs_supplies (regnum))
+ if (regnum == -1
+ || getfpregs_supplies (get_regcache_arch (regcache), regnum))
{
struct fpreg fpregs;
static void vmap_symtab (struct vmap *);
-static void exec_one_dummy_insn (void);
+static void exec_one_dummy_insn (struct gdbarch *);
extern void fixup_breakpoints (CORE_ADDR low, CORE_ADDR high, CORE_ADDR delta);
ISFLOAT to indicate whether REGNO is a floating point register. */
static int
-regmap (int regno, int *isfloat)
+regmap (struct gdbarch *gdbarch, int regno, int *isfloat)
{
- struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
*isfloat = 0;
if (tdep->ppc_gp0_regnum <= regno
*isfloat = 1;
return regno - tdep->ppc_fp0_regnum + FPR0;
}
- else if (regno == gdbarch_pc_regnum (current_gdbarch))
+ else if (regno == gdbarch_pc_regnum (gdbarch))
return IAR;
else if (regno == tdep->ppc_ps_regnum)
return MSR;
/* Retrieved values may be -1, so infer errors from errno. */
errno = 0;
- nr = regmap (regno, &isfloat);
+ nr = regmap (gdbarch, regno, &isfloat);
/* Floating-point registers. */
if (isfloat)
/* -1 can be a successful return value, so infer errors from errno. */
errno = 0;
- nr = regmap (regno, &isfloat);
+ nr = regmap (gdbarch, regno, &isfloat);
/* Floating-point registers. */
if (isfloat)
Otherwise the following ptrace(2) calls will mess up user stack
since kernel will get confused about the bottom of the stack
(%sp). */
- exec_one_dummy_insn ();
+ exec_one_dummy_insn (gdbarch);
/* The PT_WRITE_GPR operation is rather odd. For 32-bit inferiors,
the register's value is passed by value, but for 64-bit inferiors,
including u_area. */
static void
-exec_one_dummy_insn (void)
+exec_one_dummy_insn (struct gdbarch *gdbarch)
{
-#define DUMMY_INSN_ADDR gdbarch_tdep (current_gdbarch)->text_segment_base+0x200
+#define DUMMY_INSN_ADDR gdbarch_tdep (gdbarch)->text_segment_base+0x200
int ret, status, pid;
CORE_ADDR prev_pc;