aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Blandy <jimb@codesourcery.com>2004-05-22 06:03:26 +0000
committerJim Blandy <jimb@codesourcery.com>2004-05-22 06:03:26 +0000
commit867e2dc5ace860a0f3ed7abfd17331877976926d (patch)
treee88489f3da74670d65a42b8b4942000081b2229d
parent753731eef094e983fab58faf7c7c5e8090de6e1b (diff)
downloadgdb-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/ChangeLog11
-rw-r--r--gdb/ppc-tdep.h3
-rw-r--r--gdb/rs6000-tdep.c35
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);