* 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.
This commit is contained in:
Markus Deuling 2008-02-18 11:00:02 +00:00
parent f642be6b2e
commit 206988c434
4 changed files with 52 additions and 24 deletions

View file

@ -1,3 +1,25 @@
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

View file

@ -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, &regs, 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;

View file

@ -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;

View file

@ -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;