* RFA: fix register numbering on PPC
@ 2004-05-28 2:28 Jim Blandy
2004-05-28 15:36 ` Kevin Buettner
0 siblings, 1 reply; 2+ messages in thread
From: Jim Blandy @ 2004-05-28 2:28 UTC (permalink / raw)
To: gdb-patches
This addresses the FIXME at the end of the current
rs6000_dwarf2_stab_reg_to_regnum function.
2004-05-26 Jim Blandy <jimb@redhat.com>
* rs6000-tdep.c (rs6000_dwarf2_stab_reg_to_regnum): Deleted.
(rs6000_stab_reg_to_regnum, rs6000_dwarf2_reg_to_regnum): New
functions, updated to match the register numberings used in GCC.
(rs6000_gdbarch_init): Register rs6000_stab_reg_to_regnum and
rs6000_dwarf2_reg_to_regnum as register number conversions
functions for STABS and Dwarf2.
Index: gdb/rs6000-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v
retrieving revision 1.208
diff -c -p -r1.208 rs6000-tdep.c
*** gdb/rs6000-tdep.c 22 May 2004 06:03:26 -0000 1.208
--- gdb/rs6000-tdep.c 26 May 2004 16:42:33 -0000
*************** e500_pseudo_register_write (struct gdbar
*** 1829,1838 ****
}
}
! /* Convert a dbx stab or Dwarf 2 register number (from `r'
! declaration) to a gdb REGNUM. */
static int
! rs6000_dwarf2_stab_reg_to_regnum (int num)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
--- 1829,1837 ----
}
}
! /* Convert a DBX STABS register number to a GDB register number. */
static int
! rs6000_stab_reg_to_regnum (int num)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
*************** rs6000_dwarf2_stab_reg_to_regnum (int nu
*** 1843,1848 ****
--- 1842,1849 ----
specifies registers the architecture doesn't have? Our
callers don't check the value we return. */
return tdep->ppc_fp0_regnum + (num - 32);
+ else if (77 <= num && num <= 108)
+ return tdep->ppc_vr0_regnum + (num - 77);
else if (1200 <= num && num < 1200 + 32)
return tdep->ppc_ev0_regnum + (num - 1200);
else
*************** rs6000_dwarf2_stab_reg_to_regnum (int nu
*** 1858,1884 ****
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;
}
- /* FIXME: jimb/2004-03-28: Doesn't something need to be done here
- for the Altivec registers, too?
! Looking at GCC, the headers in config/rs6000 never define a
! DBX_REGISTER_NUMBER macro, so the debug info uses the same
! numbers GCC does internally. Then, looking at the REGISTER_NAMES
! macro defined in config/rs6000/rs6000.h, it seems that GCC gives
! v0 -- v31 the numbers 77 -- 108. But we number them 119 -- 150.
! I don't have a way to test this ready to hand, but I noticed it
! and thought I should include a note. */
}
static void
rs6000_store_return_value (struct type *type, char *valbuf)
{
--- 1859,1918 ----
return tdep->ppc_xer_regnum;
case 109:
return tdep->ppc_vrsave_regnum;
+ case 110:
+ return tdep->ppc_vrsave_regnum - 1; /* vscr */
case 111:
! return tdep->ppc_acc_regnum;
case 112:
! return tdep->ppc_spefscr_regnum;
default:
return num;
}
+ }
! /* Convert a Dwarf 2 register number to a GDB register number. */
! static int
! rs6000_dwarf2_reg_to_regnum (int num)
! {
! struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
! if (0 <= num && num <= 31)
! return tdep->ppc_gp0_regnum + num;
! else if (32 <= num && num <= 63)
! /* FIXME: jimb/2004-05-05: What should we do when the debug info
! specifies registers the architecture doesn't have? Our
! callers don't check the value we return. */
! return tdep->ppc_fp0_regnum + (num - 32);
! else if (1124 <= num && num < 1124 + 32)
! return tdep->ppc_vr0_regnum + (num - 1124);
! else if (1200 <= num && num < 1200 + 32)
! return tdep->ppc_ev0_regnum + (num - 1200);
! else
! switch (num)
! {
! case 67:
! return tdep->ppc_vrsave_regnum - 1; /* vscr */
! case 99:
! return tdep->ppc_acc_regnum;
! case 100:
! return tdep->ppc_mq_regnum;
! case 101:
! return tdep->ppc_xer_regnum;
! case 108:
! return tdep->ppc_lr_regnum;
! case 109:
! return tdep->ppc_ctr_regnum;
! case 356:
! return tdep->ppc_vrsave_regnum;
! case 612:
! return tdep->ppc_spefscr_regnum;
! default:
! return num;
! }
}
+
static void
rs6000_store_return_value (struct type *type, char *valbuf)
{
*************** rs6000_gdbarch_init (struct gdbarch_info
*** 2970,2977 ****
set_gdbarch_deprecated_register_convertible (gdbarch, rs6000_register_convertible);
set_gdbarch_deprecated_register_convert_to_virtual (gdbarch, rs6000_register_convert_to_virtual);
set_gdbarch_deprecated_register_convert_to_raw (gdbarch, rs6000_register_convert_to_raw);
! set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_dwarf2_stab_reg_to_regnum);
! set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_stab_reg_to_regnum);
/* Note: kevinb/2002-04-12: I'm not convinced that rs6000_push_arguments()
is correct for the SysV ABI when the wordsize is 8, but I'm also
fairly certain that ppc_sysv_abi_push_arguments() will give even
--- 3004,3011 ----
set_gdbarch_deprecated_register_convertible (gdbarch, rs6000_register_convertible);
set_gdbarch_deprecated_register_convert_to_virtual (gdbarch, rs6000_register_convert_to_virtual);
set_gdbarch_deprecated_register_convert_to_raw (gdbarch, rs6000_register_convert_to_raw);
! set_gdbarch_stab_reg_to_regnum (gdbarch, rs6000_stab_reg_to_regnum);
! set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rs6000_dwarf2_reg_to_regnum);
/* Note: kevinb/2002-04-12: I'm not convinced that rs6000_push_arguments()
is correct for the SysV ABI when the wordsize is 8, but I'm also
fairly certain that ppc_sysv_abi_push_arguments() will give even
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: RFA: fix register numbering on PPC
2004-05-28 2:28 RFA: fix register numbering on PPC Jim Blandy
@ 2004-05-28 15:36 ` Kevin Buettner
0 siblings, 0 replies; 2+ messages in thread
From: Kevin Buettner @ 2004-05-28 15:36 UTC (permalink / raw)
To: Jim Blandy; +Cc: gdb-patches
On 27 May 2004 21:27:08 -0500
Jim Blandy <jimb@redhat.com> wrote:
> This addresses the FIXME at the end of the current
> rs6000_dwarf2_stab_reg_to_regnum function.
>
> 2004-05-26 Jim Blandy <jimb@redhat.com>
>
> * rs6000-tdep.c (rs6000_dwarf2_stab_reg_to_regnum): Deleted.
> (rs6000_stab_reg_to_regnum, rs6000_dwarf2_reg_to_regnum): New
> functions, updated to match the register numberings used in GCC.
> (rs6000_gdbarch_init): Register rs6000_stab_reg_to_regnum and
> rs6000_dwarf2_reg_to_regnum as register number conversions
> functions for STABS and Dwarf2.
Okay.
Kevin
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-05-28 15:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-28 2:28 RFA: fix register numbering on PPC Jim Blandy
2004-05-28 15:36 ` Kevin Buettner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox