diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/config/sh/tm-sh.h | 21 | ||||
-rw-r--r-- | gdb/sh-tdep.c | 70 |
3 files changed, 98 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c5c15d8..129d505a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +Mon May 15 21:27:27 2000 J"orn Rennecke <amylaar@cygnus.co.uk> + + * sh-tdep.c (sh_dsp_reg_names, sh3_dsp_reg_names): New arrays. + (sh_processor_type_table): Add entries for bfd_mach_sh_dsp and + bfd_mach_sh3_dsp. + (sh_show_regs): Floating point registers are called fr0-fr15. + For sh4, display fpul, fpscr and fr0-fr15 / dr0-dr14 as appropriate. + Handle sh-dsp and sh3-dsp. + config/sh/tm-sh.h (REGISTER_VIRTUAL_TYPE): sh-dsp / sh3-dsp + don't have floating point registers. + (DSR_REGNUM, A0G_REGNUM, A0_REGNUM, A1G_REGNUM, A1_REGNUM): Define. + (M0_REGNUM, M1_REGNUM, X0_REGNUM, X1_REGNUM, Y0_REGNUM): Likewise. + (Y1_REGNUM, MOD_REGNUM, RS_REGNUM, RE_REGNUM, R0B_REGNUM): Likewise. + 2000-05-15 Eli Zaretskii <eliz@is.elta.co.il> * Makefile.in (gdbtypes.o, varobj.o): Depend on wrapper.h. diff --git a/gdb/config/sh/tm-sh.h b/gdb/config/sh/tm-sh.h index ad26ec1..47256ae 100644 --- a/gdb/config/sh/tm-sh.h +++ b/gdb/config/sh/tm-sh.h @@ -101,8 +101,10 @@ extern CORE_ADDR sh_skip_prologue PARAMS ((CORE_ADDR)); of data in register N. */ #define REGISTER_VIRTUAL_TYPE(N) \ - ((((N) >= FP0_REGNUM && (N) <= FP15_REGNUM) \ - || (N) == FPUL_REGNUM) \ + (((((N) >= FP0_REGNUM && (N) <= FP15_REGNUM) \ + || (N) == FPUL_REGNUM) \ + && TARGET_ARCHITECTURE->mach != bfd_mach_sh_dsp \ + && TARGET_ARCHITECTURE->mach != bfd_mach_sh3_dsp) \ ? builtin_type_float : builtin_type_int) /* Initializer for an array of names of registers. @@ -135,12 +137,27 @@ extern char **sh_register_names; #define SR_REGNUM 22 #define FPUL_REGNUM 23 #define FPSCR_REGNUM 24 +#define DSR_REGNUM 24 #define FP0_REGNUM 25 #define FP15_REGNUM 40 +#define A0G_REGNUM 25 +#define A0_REGNUM 26 +#define A1G_REGNUM 27 +#define A1_REGNUM 28 +#define M0_REGNUM 29 +#define M1_REGNUM 30 +#define X0_REGNUM 31 +#define X1_REGNUM 32 +#define Y0_REGNUM 33 +#define Y1_REGNUM 34 +#define MOD_REGNUM 40 #define SSR_REGNUM 41 #define SPC_REGNUM 42 #define R0B0_REGNUM 43 #define R0B1_REGNUM 51 +#define RS_REGNUM 43 +#define RE_REGNUM 44 +#define R0B_REGNUM 51 #define NUM_REALREGS 59 diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index 1c98caf..941e13f 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -86,6 +86,30 @@ static char *sh3e_reg_names[] = { "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0", "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1", }; + +static char *sh_dsp_reg_names[] = { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "pc", "pr", "gbr", "vbr", "mach", "macl", "sr", + "", "dsr", + "a0g", "a0", "a1g", "a1", "m0", "m1", "x0", "x1", + "y0", "y1", "", "", "", "", "", "mod", + "", "", + "rs", "re", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", +}; + +static char *sh3_dsp_reg_names[] = { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "pc", "pr", "gbr", "vbr", "mach", "macl", "sr", + "", "dsr", + "a0g", "a0", "a1g", "a1", "m0", "m1", "x0", "x1", + "y0", "y1", "", "", "", "", "", "mod", + "ssr", "spc", + "rs", "re", "", "", "", "", "", "", + "r0b", "r1b", "r2b", "r3b", "r4b", "r5b", "r6b", "r7b", +}; /* *INDENT-ON* */ #ifdef _WIN32_WCE @@ -110,10 +134,18 @@ sh_processor_type_table[] = } , { + sh_dsp_reg_names, bfd_mach_sh_dsp + } + , + { sh3_reg_names, bfd_mach_sh3 } , { + sh3_dsp_reg_names, bfd_mach_sh3_dsp + } + , + { sh3e_reg_names, bfd_mach_sh3e } , @@ -648,18 +680,21 @@ sh_show_regs (args, from_tty) printf_filtered ("GBR=%08lx VBR=%08lx", (long) read_register (GBR_REGNUM), (long) read_register (VBR_REGNUM)); - if (cpu == bfd_mach_sh3 || cpu == bfd_mach_sh3e) + if (cpu == bfd_mach_sh3 || cpu == bfd_mach_sh3e || cpu == bfd_mach_sh3_dsp + || cpu == bfd_mach_sh4) { printf_filtered (" SSR=%08lx SPC=%08lx", (long) read_register (SSR_REGNUM), (long) read_register (SPC_REGNUM)); - if (cpu == bfd_mach_sh3e) + if (cpu == bfd_mach_sh3e || cpu == bfd_mach_sh4) { printf_filtered (" FPUL=%08lx FPSCR=%08lx", (long) read_register (FPUL_REGNUM), (long) read_register (FPSCR_REGNUM)); } } + if (cpu == bfd_mach_sh_dsp || cpu == bfd_mach_sh3_dsp) + printf_filtered (" DSR=%08lx", (long) read_register (DSR_REGNUM)); printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", (long) read_register (0), @@ -679,9 +714,13 @@ sh_show_regs (args, from_tty) (long) read_register (13), (long) read_register (14), (long) read_register (15)); - if (cpu == bfd_mach_sh3e) + if (cpu == bfd_mach_sh3e || cpu == bfd_mach_sh4) { - printf_filtered ("FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", + int pr = cpu == bfd_mach_sh4 && (read_register (FPSCR_REGNUM) & 0x80000); + + printf_filtered ((pr + ? "DR0-DR6 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n" + : "FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"), (long) read_register (FP0_REGNUM + 0), (long) read_register (FP0_REGNUM + 1), (long) read_register (FP0_REGNUM + 2), @@ -690,7 +729,9 @@ sh_show_regs (args, from_tty) (long) read_register (FP0_REGNUM + 5), (long) read_register (FP0_REGNUM + 6), (long) read_register (FP0_REGNUM + 7)); - printf_filtered ("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", + printf_filtered ((pr + ? "DR8-DR14 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n" + : "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"), (long) read_register (FP0_REGNUM + 8), (long) read_register (FP0_REGNUM + 9), (long) read_register (FP0_REGNUM + 10), @@ -700,6 +741,25 @@ sh_show_regs (args, from_tty) (long) read_register (FP0_REGNUM + 14), (long) read_register (FP0_REGNUM + 15)); } + /* FIXME: sh4 has more registers */ + if (cpu == bfd_mach_sh_dsp || cpu == bfd_mach_sh3_dsp) + { + printf_filtered ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n", + (long) read_register (A0G_REGNUM) & 0xff, + (long) read_register (A0_REGNUM), + (long) read_register (M0_REGNUM), + (long) read_register (X0_REGNUM), + (long) read_register (Y0_REGNUM), + (long) read_register (RS_REGNUM), + (long) read_register (MOD_REGNUM)); + printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n", + (long) read_register (A1G_REGNUM) & 0xff, + (long) read_register (A1_REGNUM), + (long) read_register (M1_REGNUM), + (long) read_register (X1_REGNUM), + (long) read_register (Y1_REGNUM), + (long) read_register (RE_REGNUM)); + } } /* Function: extract_return_value |