* ppc-tdep.h (spe_register_p): New declaration.
(struct gdbarch_tdep): New members: ppc_acc_regnum and ppc_spefscr_regnum. * rs6000-tdep.c (spe_register_p): New function. (rs6000_dwarf2_stab_reg_to_regnum): Recognize numbers for acc and spefscr. (rs6000_gdbarch_init): Initialize the new members of the tdep structure.
This commit is contained in:
parent
753731eef0
commit
867e2dc5ac
3 changed files with 49 additions and 0 deletions
|
@ -1,3 +1,14 @@
|
|||
2004-05-22 Jim Blandy <jimb@redhat.com>
|
||||
|
||||
* ppc-tdep.h (spe_register_p): New declaration.
|
||||
(struct gdbarch_tdep): New members: ppc_acc_regnum and
|
||||
ppc_spefscr_regnum.
|
||||
* rs6000-tdep.c (spe_register_p): New function.
|
||||
(rs6000_dwarf2_stab_reg_to_regnum): Recognize numbers for acc and
|
||||
spefscr.
|
||||
(rs6000_gdbarch_init): Initialize the new members of the tdep
|
||||
structure.
|
||||
|
||||
2004-05-21 Jim Blandy <jimb@redhat.com>
|
||||
|
||||
* ppc-linux-nat.c (fetch_register): Move code back to be next
|
||||
|
|
|
@ -73,6 +73,7 @@ enum return_value_convention ppc64_sysv_abi_return_value (struct gdbarch *gdbarc
|
|||
|
||||
/* From rs6000-tdep.c... */
|
||||
int altivec_register_p (int regno);
|
||||
int spe_register_p (int regno);
|
||||
|
||||
/* Return non-zero if the architecture described by GDBARCH has
|
||||
floating-point registers (f0 --- f31 and fpscr). */
|
||||
|
@ -162,6 +163,8 @@ struct gdbarch_tdep
|
|||
int ppc_vrsave_regnum; /* Last AltiVec register */
|
||||
int ppc_ev0_regnum; /* First ev register */
|
||||
int ppc_ev31_regnum; /* Last ev register */
|
||||
int ppc_acc_regnum; /* SPE 'acc' register */
|
||||
int ppc_spefscr_regnum; /* SPE 'spefscr' register */
|
||||
int lr_frame_offset; /* Offset to ABI specific location where
|
||||
link register is saved. */
|
||||
};
|
||||
|
|
|
@ -141,6 +141,33 @@ altivec_register_p (int regno)
|
|||
}
|
||||
|
||||
|
||||
/* Return true if REGNO is an SPE register, false otherwise. */
|
||||
int
|
||||
spe_register_p (int regno)
|
||||
{
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
|
||||
|
||||
/* Is it a reference to EV0 -- EV31, and do we have those? */
|
||||
if (tdep->ppc_ev0_regnum >= 0
|
||||
&& tdep->ppc_ev31_regnum >= 0
|
||||
&& tdep->ppc_ev0_regnum <= regno && regno <= tdep->ppc_ev31_regnum)
|
||||
return 1;
|
||||
|
||||
/* Is it a reference to the 64-bit accumulator, and do we have that? */
|
||||
if (tdep->ppc_acc_regnum >= 0
|
||||
&& tdep->ppc_acc_regnum == regno)
|
||||
return 1;
|
||||
|
||||
/* Is it a reference to the SPE floating-point status and control register,
|
||||
and do we have that? */
|
||||
if (tdep->ppc_spefscr_regnum >= 0
|
||||
&& tdep->ppc_spefscr_regnum == regno)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Return non-zero if the architecture described by GDBARCH has
|
||||
floating-point registers (f0 --- f31 and fpscr). */
|
||||
int
|
||||
|
@ -1831,6 +1858,10 @@ rs6000_dwarf2_stab_reg_to_regnum (int num)
|
|||
return tdep->ppc_xer_regnum;
|
||||
case 109:
|
||||
return tdep->ppc_vrsave_regnum;
|
||||
case 111:
|
||||
return gdbarch_tdep (current_gdbarch)->ppc_acc_regnum;
|
||||
case 112:
|
||||
return gdbarch_tdep (current_gdbarch)->ppc_spefscr_regnum;
|
||||
default:
|
||||
return num;
|
||||
}
|
||||
|
@ -2827,6 +2858,8 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
tdep->ppc_vrsave_regnum = -1;
|
||||
tdep->ppc_ev0_regnum = -1;
|
||||
tdep->ppc_ev31_regnum = -1;
|
||||
tdep->ppc_acc_regnum = -1;
|
||||
tdep->ppc_spefscr_regnum = -1;
|
||||
|
||||
set_gdbarch_pc_regnum (gdbarch, 64);
|
||||
set_gdbarch_sp_regnum (gdbarch, 1);
|
||||
|
@ -2880,6 +2913,8 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
tdep->ppc_ev31_regnum = 38;
|
||||
tdep->ppc_fp0_regnum = -1;
|
||||
tdep->ppc_fpscr_regnum = -1;
|
||||
tdep->ppc_acc_regnum = 39;
|
||||
tdep->ppc_spefscr_regnum = 40;
|
||||
set_gdbarch_pc_regnum (gdbarch, 0);
|
||||
set_gdbarch_sp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
|
||||
set_gdbarch_deprecated_fp_regnum (gdbarch, tdep->ppc_gp0_regnum + 1);
|
||||
|
|
Loading…
Reference in a new issue