aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/config/sh/tm-sh.h21
-rw-r--r--gdb/sh-tdep.c70
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