diff options
author | Jim Blandy <jimb@codesourcery.com> | 2004-05-22 06:03:26 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2004-05-22 06:03:26 +0000 |
commit | 867e2dc5ace860a0f3ed7abfd17331877976926d (patch) | |
tree | e88489f3da74670d65a42b8b4942000081b2229d | |
parent | 753731eef094e983fab58faf7c7c5e8090de6e1b (diff) | |
download | gdb-867e2dc5ace860a0f3ed7abfd17331877976926d.zip gdb-867e2dc5ace860a0f3ed7abfd17331877976926d.tar.gz gdb-867e2dc5ace860a0f3ed7abfd17331877976926d.tar.bz2 |
* 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.
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/ppc-tdep.h | 3 | ||||
-rw-r--r-- | gdb/rs6000-tdep.c | 35 |
3 files changed, 49 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 839d427..b2e6137 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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 diff --git a/gdb/ppc-tdep.h b/gdb/ppc-tdep.h index a47fdfc..68919b4 100644 --- a/gdb/ppc-tdep.h +++ b/gdb/ppc-tdep.h @@ -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. */ }; diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 9a318fe..0f6924d 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -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); |