On Sat, 2012-12-22 at 01:00 +0100, Franck Jullien wrote: > In order to manipulate SPR registers with generic gdb functions, SPR > need to be part of the gdbarch register set. > > The size of the g/G packet is defined by the remote. Thus, the list of > registers reachable using a g/G packet is ajusted by the remote and all > our SPR will be reached using p/P packets. > > So having more than 2000 registers declared in gdbarch is not a problem.
Hi Franck, This is the work I am most interested in. You should allow for the OR1K architectural limit of 64K SPRs - then this version of GDB will be future proof. As noted before you need ChangeLog.or32 entries. You need to update the Doxygen descriptive comments at the head of each function. A key role of the OpenRISC tool chain is in tutorial material, so we have a particularly rich set of descriptive comments. We want as many people as possible to turn to OpenRISC, because it is known to have the definitive, documented, implementation. Best wishes, Jeremy > > Signed-off-by: Franck Jullien <[email protected]> > --- > gdb/or32-tdep.c | 6 +++--- > gdb/or32-tdep.h | 4 +++- > 2 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/gdb/or32-tdep.c b/gdb/or32-tdep.c > index a69bb20..aa0e953 100644 > --- a/gdb/or32-tdep.c > +++ b/gdb/or32-tdep.c > @@ -639,7 +639,7 @@ static const char * > or32_register_name (struct gdbarch *gdbarch, > int regnum) > { > - static char *or32_gdb_reg_names[OR32_TOTAL_NUM_REGS] = > + static char *or32_gdb_reg_names[OR32_NUM_REGS_CACHED] = > { > /* general purpose registers */ > "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", > @@ -739,7 +739,7 @@ or32_registers_info (struct gdbarch *gdbarch, > if (-1 == regnum) > { > /* Do all (valid) registers */ > - unsigned int lim = all ? OR32_NUM_REGS : OR32_MAX_GPR_REGS; > + unsigned int lim = all ? OR32_NUM_REGS_CACHED : OR32_MAX_GPR_REGS; > > for (regnum = 0; regnum < lim; regnum++) { > if ('\0' != *(or32_register_name (gdbarch, regnum))) > @@ -792,7 +792,7 @@ or32_register_reggroup_p (struct gdbarch *gdbarch, > if (group == all_reggroup) > { > return ((regnum >= 0) && > - (regnum < OR32_TOTAL_NUM_REGS) && > + (regnum < OR32_NUM_REGS_CACHED) && > (or32_register_name (gdbarch, regnum)[0] != '\0')); > } > > diff --git a/gdb/or32-tdep.h b/gdb/or32-tdep.h > index c4d38bd..557aeef 100644 > --- a/gdb/or32-tdep.h > +++ b/gdb/or32-tdep.h > @@ -320,8 +320,10 @@ > followed by the PPC, NPC and SR at the end. Red zone is the area past the > end of the stack reserved for exception handlers etc. */ > #define OR32_MAX_GPR_REGS 32 > +#define OR32_MAX_SPR_REGS 2300 > #define OR32_NUM_PSEUDO_REGS 0 > -#define OR32_NUM_REGS (OR32_MAX_GPR_REGS + 3) > +#define OR32_NUM_REGS_CACHED (OR32_MAX_GPR_REGS + 3) > +#define OR32_NUM_REGS (OR32_NUM_REGS_CACHED + > OR32_MAX_SPR_REGS) > #define OR32_TOTAL_NUM_REGS (OR32_NUM_REGS + OR32_NUM_PSEUDO_REGS) > #define OR32_MAX_MATCHPOINTS 8 > #define OR32_MAX_HW_WATCHES OR32_MAX_MATCHPOINTS -- Tel: +44 (1590) 610184 Cell: +44 (7970) 676050 SkypeID: jeremybennett Email: [email protected] Web: www.embecosm.com _______________________________________________ OpenRISC mailing list [email protected] http://lists.openrisc.net/listinfo/openrisc
