#include "xcoffsolib.h"
#include "symfile.h"
#include "objfiles.h"
-#include "libbfd.h" /* For bfd_cache_lookup (FIXME) */
+#include "libbfd.h" /* For bfd_default_set_arch_mach (FIXME) */
#include "bfd.h"
#include "gdb-stabs.h"
#include "regcache.h"
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
*isfloat = 0;
- if (tdep->ppc_gp0_regnum <= regno && regno <= tdep->ppc_gplast_regnum)
+ if (tdep->ppc_gp0_regnum <= regno
+ && regno < tdep->ppc_gp0_regnum + ppc_num_gprs)
return regno;
- else if (FP0_REGNUM <= regno && regno < FP0_REGNUM + ppc_num_fprs)
+ else if (tdep->ppc_fp0_regnum >= 0
+ && tdep->ppc_fp0_regnum <= regno
+ && regno < tdep->ppc_fp0_regnum + ppc_num_fprs)
{
*isfloat = 1;
- return regno - FP0_REGNUM + FPR0;
+ return regno - tdep->ppc_fp0_regnum + FPR0;
}
else if (regno == PC_REGNUM)
return IAR;
return CTR;
else if (regno == tdep->ppc_xer_regnum)
return XER;
- else if (regno == tdep->ppc_fpscr_regnum)
+ else if (tdep->ppc_fpscr_regnum >= 0
+ && regno == tdep->ppc_fpscr_regnum)
return FPSCR;
else if (tdep->ppc_mq_regnum >= 0 && regno == tdep->ppc_mq_regnum)
return MQ;
/* Read 32 general purpose registers. */
for (regno = tdep->ppc_gp0_regnum;
- regno <= tdep->ppc_gplast_regnum;
+ regno < tdep->ppc_gp0_regnum + ppc_num_gprs;
regno++)
{
fetch_register (regno);
}
/* Read general purpose floating point registers. */
- for (regno = FP0_REGNUM; regno < FP0_REGNUM + ppc_num_fprs; regno++)
- fetch_register (regno);
+ if (tdep->ppc_fp0_regnum >= 0)
+ for (regno = 0; regno < ppc_num_fprs; regno++)
+ fetch_register (tdep->ppc_fp0_regnum + regno);
/* Read special registers. */
fetch_register (PC_REGNUM);
fetch_register (tdep->ppc_lr_regnum);
fetch_register (tdep->ppc_ctr_regnum);
fetch_register (tdep->ppc_xer_regnum);
- fetch_register (tdep->ppc_fpscr_regnum);
+ if (tdep->ppc_fpscr_regnum >= 0)
+ fetch_register (tdep->ppc_fpscr_regnum);
if (tdep->ppc_mq_regnum >= 0)
fetch_register (tdep->ppc_mq_regnum);
}
/* Write general purpose registers first. */
for (regno = tdep->ppc_gp0_regnum;
- regno <= tdep->ppc_gplast_regnum;
+ regno < tdep->ppc_gp0_regnum + ppc_num_gprs;
regno++)
{
store_register (regno);
}
/* Write floating point registers. */
- for (regno = FP0_REGNUM; regno < FP0_REGNUM + ppc_num_fprs; regno ++)
- store_register (regno);
+ if (tdep->ppc_fp0_regnum >= 0)
+ for (regno = 0; regno < ppc_num_fprs; regno++)
+ store_register (tdep->ppc_fp0_regnum + regno);
/* Write special registers. */
store_register (PC_REGNUM);
store_register (tdep->ppc_lr_regnum);
store_register (tdep->ppc_ctr_regnum);
store_register (tdep->ppc_xer_regnum);
- store_register (tdep->ppc_fpscr_regnum);
+ if (tdep->ppc_fpscr_regnum >= 0)
+ store_register (tdep->ppc_fpscr_regnum);
if (tdep->ppc_mq_regnum >= 0)
store_register (tdep->ppc_mq_regnum);
}
if (ARCH64 ())
{
- for (regi = 0; regi < 32; regi++)
- supply_register (regi, (char *) ®s->r64.gpr[regi]);
+ for (regi = 0; regi < ppc_num_gprs; regi++)
+ supply_register (tdep->ppc_gp0_regnum + regi,
+ (char *) ®s->r64.gpr[regi]);
- for (regi = 0; regi < 32; regi++)
- supply_register (FP0_REGNUM + regi, (char *) ®s->r64.fpr[regi]);
+ if (tdep->ppc_fp0_regnum >= 0)
+ for (regi = 0; regi < ppc_num_fprs; regi++)
+ supply_register (tdep->ppc_fp0_regnum + regi,
+ (char *) ®s->r64.fpr[regi]);
supply_register (PC_REGNUM, (char *) ®s->r64.iar);
supply_register (tdep->ppc_ps_regnum, (char *) ®s->r64.msr);
supply_register (tdep->ppc_lr_regnum, (char *) ®s->r64.lr);
supply_register (tdep->ppc_ctr_regnum, (char *) ®s->r64.ctr);
supply_register (tdep->ppc_xer_regnum, (char *) ®s->r64.xer);
- supply_register (tdep->ppc_fpscr_regnum, (char *) ®s->r64.fpscr);
+ if (tdep->ppc_fpscr_regnum >= 0)
+ supply_register (tdep->ppc_fpscr_regnum, (char *) ®s->r64.fpscr);
}
else
{
- for (regi = 0; regi < 32; regi++)
- supply_register (regi, (char *) ®s->r32.gpr[regi]);
+ for (regi = 0; regi < ppc_num_gprs; regi++)
+ supply_register (tdep->ppc_gp0_regnum + regi,
+ (char *) ®s->r32.gpr[regi]);
- for (regi = 0; regi < 32; regi++)
- supply_register (FP0_REGNUM + regi, (char *) ®s->r32.fpr[regi]);
+ if (tdep->ppc_fp0_regnum >= 0)
+ for (regi = 0; regi < ppc_num_fprs; regi++)
+ supply_register (tdep->ppc_fp0_regnum + regi,
+ (char *) ®s->r32.fpr[regi]);
supply_register (PC_REGNUM, (char *) ®s->r32.iar);
supply_register (tdep->ppc_ps_regnum, (char *) ®s->r32.msr);
supply_register (tdep->ppc_lr_regnum, (char *) ®s->r32.lr);
supply_register (tdep->ppc_ctr_regnum, (char *) ®s->r32.ctr);
supply_register (tdep->ppc_xer_regnum, (char *) ®s->r32.xer);
- supply_register (tdep->ppc_fpscr_regnum, (char *) ®s->r32.fpscr);
+ if (tdep->ppc_fpscr_regnum >= 0)
+ supply_register (tdep->ppc_fpscr_regnum, (char *) ®s->r32.fpscr);
if (tdep->ppc_mq_regnum >= 0)
supply_register (tdep->ppc_mq_regnum, (char *) ®s->r32.mq);
}