From 206988c4346c46f6dd714432959cf0c2dfb3f797 Mon Sep 17 00:00:00 2001 From: Markus Deuling Date: Mon, 18 Feb 2008 11:00:02 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 22 ++++++++++++++++++++++ gdb/ppcnbsd-nat.c | 24 ++++++++++++++---------- gdb/ppcobsd-nat.c | 12 +++++++----- gdb/rs6000-nat.c | 18 +++++++++--------- 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ba94183..7a4182f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,27 @@ 2008-02-18 Markus Deuling + * 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 + * arch-utils.c (gdbarch_from_bfd): Remove unnecessary {old,new}_gdbarch variables. diff --git a/gdb/ppcnbsd-nat.c b/gdb/ppcnbsd-nat.c index c14d8ed..9c85181 100644 --- a/gdb/ppcnbsd-nat.c +++ b/gdb/ppcnbsd-nat.c @@ -41,9 +41,9 @@ /* 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) @@ -51,15 +51,15 @@ getregs_supplies (int regnum) || 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 @@ -71,7 +71,7 @@ getfpregs_supplies (int regnum) 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) @@ -81,7 +81,9 @@ getfpregs_supplies (int regnum) 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; @@ -93,7 +95,7 @@ ppcnbsd_fetch_inferior_registers (struct regcache *regcache, int regnum) regnum, ®s, sizeof regs); } - if (regnum == -1 || getfpregs_supplies (regnum)) + if (regnum == -1 || getfpregs_supplies (gdbarch, regnum)) { struct fpreg fpregs; @@ -109,7 +111,9 @@ ppcnbsd_fetch_inferior_registers (struct regcache *regcache, int regnum) 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; @@ -125,7 +129,7 @@ ppcnbsd_store_inferior_registers (struct regcache *regcache, int regnum) perror_with_name (_("Couldn't write registers")); } - if (regnum == -1 || getfpregs_supplies (regnum)) + if (regnum == -1 || getfpregs_supplies (gdbarch, regnum)) { struct fpreg fpregs; diff --git a/gdb/ppcobsd-nat.c b/gdb/ppcobsd-nat.c index ae0deb4..6203b50 100644 --- a/gdb/ppcobsd-nat.c +++ b/gdb/ppcobsd-nat.c @@ -45,9 +45,9 @@ /* 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 @@ -59,7 +59,7 @@ getfpregs_supplies (int regnum) 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) @@ -88,7 +88,8 @@ ppcobsd_fetch_registers (struct regcache *regcache, int regnum) #endif #ifdef PT_GETFPREGS - if (regnum == -1 || getfpregs_supplies (regnum)) + if (regnum == -1 + || getfpregs_supplies (get_regcache_arch (regcache), regnum)) { struct fpreg fpregs; @@ -126,7 +127,8 @@ ppcobsd_store_registers (struct regcache *regcache, int regnum) 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; diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c index 02a7946..2a180be 100644 --- a/gdb/rs6000-nat.c +++ b/gdb/rs6000-nat.c @@ -130,7 +130,7 @@ static int objfile_symbol_add (void *); 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); @@ -140,9 +140,9 @@ 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 @@ -155,7 +155,7 @@ regmap (int regno, int *isfloat) *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; @@ -218,7 +218,7 @@ fetch_register (struct regcache *regcache, int regno) /* 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) @@ -279,7 +279,7 @@ store_register (const struct regcache *regcache, int regno) /* -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) @@ -303,7 +303,7 @@ store_register (const struct regcache *regcache, int regno) 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, @@ -576,9 +576,9 @@ rs6000_wait (ptid_t ptid, struct target_waitstatus *ourstatus) 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; -- 2.7.4