RFA: PowerPC: add segment register numbers
Jim Blandy
jimb@redhat.com
Wed Jul 14 23:37:00 GMT 2004
How's this?
2004-07-12 Jim Blandy <jimb@redhat.com>
* ppc-tdep.h (struct gdbarch_tdep): New member: ppc_sr0_regnum.
* rs6000-tdep.c (rs6000_gdbarch_init): Initialize it.
Index: gdb/ppc-tdep.h
===================================================================
RCS file: /cvs/src/src/gdb/ppc-tdep.h,v
retrieving revision 1.41
diff -c -p -r1.41 ppc-tdep.h
*** gdb/ppc-tdep.h 14 Jul 2004 23:18:09 -0000 1.41
--- gdb/ppc-tdep.h 14 Jul 2004 23:34:10 -0000
*************** struct gdbarch_tdep
*** 158,163 ****
--- 158,167 ----
int ppc_fpscr_regnum; /* Floating point status and condition
register */
+ int ppc_sr0_regnum; /* segment register 0, or -1 on
+ variants that have no segment
+ registers. */
+
int ppc_mq_regnum; /* Multiply/Divide extension register */
int ppc_vr0_regnum; /* First AltiVec register */
int ppc_vrsave_regnum; /* Last AltiVec register */
Index: gdb/rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.217
diff -c -p -r1.217 rs6000-tdep.c
*** gdb/rs6000-tdep.c 14 Jul 2004 23:00:59 -0000 1.217
--- gdb/rs6000-tdep.c 14 Jul 2004 23:34:12 -0000
*************** rs6000_gdbarch_init (struct gdbarch_info
*** 2879,2884 ****
--- 2879,2885 ----
tdep->ppc_mq_regnum = -1;
tdep->ppc_fp0_regnum = 32;
tdep->ppc_fpscr_regnum = power ? 71 : 70;
+ tdep->ppc_sr0_regnum = 71;
tdep->ppc_vr0_regnum = -1;
tdep->ppc_vrsave_regnum = -1;
tdep->ppc_ev0_regnum = -1;
*************** rs6000_gdbarch_init (struct gdbarch_info
*** 2907,2913 ****
else
tdep->lr_frame_offset = 8;
! if (v->arch == bfd_arch_powerpc)
switch (v->mach)
{
case bfd_mach_ppc:
--- 2908,2916 ----
else
tdep->lr_frame_offset = 8;
! if (v->arch == bfd_arch_rs6000)
! tdep->ppc_sr0_regnum = -1;
! else if (v->arch == bfd_arch_powerpc)
switch (v->mach)
{
case bfd_mach_ppc:
*************** rs6000_gdbarch_init (struct gdbarch_info
*** 2931,2936 ****
--- 2934,2940 ----
tdep->ppc_ev31_regnum = 38;
tdep->ppc_fp0_regnum = -1;
tdep->ppc_fpscr_regnum = -1;
+ tdep->ppc_sr0_regnum = -1;
tdep->ppc_acc_regnum = 39;
tdep->ppc_spefscr_regnum = 40;
set_gdbarch_pc_regnum (gdbarch, 0);
*************** rs6000_gdbarch_init (struct gdbarch_info
*** 2939,2945 ****
--- 2943,2963 ----
set_gdbarch_pseudo_register_read (gdbarch, e500_pseudo_register_read);
set_gdbarch_pseudo_register_write (gdbarch, e500_pseudo_register_write);
break;
+
+ case bfd_mach_ppc64:
+ case bfd_mach_ppc_620:
+ case bfd_mach_ppc_630:
+ case bfd_mach_ppc_a35:
+ case bfd_mach_ppc_rs64ii:
+ case bfd_mach_ppc_rs64iii:
+ /* These processor's register sets don't have segment registers. */
+ tdep->ppc_sr0_regnum = -1;
+ break;
}
+ else
+ internal_error (__FILE__, __LINE__,
+ "rs6000_gdbarch_init: "
+ "received unexpected BFD 'arch' value");
/* Sanity check on registers. */
gdb_assert (strcmp (tdep->regs[tdep->ppc_gp0_regnum].name, "r0") == 0);
More information about the Gdb-patches
mailing list