SH3-E support from Allan Tajii <atajii@hmsi.com>:

* sh-tdep.c (sh_reg_names, sh3_reg_names): Add empty names for
	float registers.
	(sh3e_reg_names): New register name array.
	(sh_processor_type_table): Add sh3e processor type.
	* config/sh/tm-sh.h (REGISTER_VIRTUAL_TYPE): Fix test.
	(REGISTER_NAMES, NUM_REGS, NUM_REALREGS, etc): Adjust for
	full set of registers.
	* remote-e7000.c (want_sh3, want_sh3_nopc): New globals.
	(e7000_fetch_registers, e7000_wait): Use them.
	* sh3-rom.c (sh3_regnames): Add float registers.
	(sh3e_cmds, sh3e_ops): New globals.
	(sh3e_open): New function.
	(_initialize_sh3_rom): Rename from _initialize_sh3, set up
	sh3e target vector.

	* gdbwin.c (reg_order) [TARGET_SH]: Update for SH3-E.
	* initfake.c: Call _initialize_sh3_rom instead of _initialize_sh3.
This commit is contained in:
Stan Shebs
1996-05-13 18:34:09 +00:00
parent 048668d355
commit 05535e79e9
4 changed files with 146 additions and 19 deletions

View File

@@ -146,24 +146,40 @@ sh3_load (desc, file, hashmark)
than does GDB, and don't necessarily support all the registers
either. So, typing "info reg sp" becomes a "r30". */
static char *sh3_regnames[NUM_REGS] = {
"R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",
"R8", "R9", "R10", "R11","R12", "R13", "R14", "R15",
"PC", "PR", "GBR", "VBR","MACH","MACL", "SR",
NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
"SSR", "SPC",
"R0_BANK0", "R1_BANK0", "R2_BANK0", "R3_BANK0",
"R4_BANK0", "R5_BANK0", "R6_BANK0", "R7_BANK0",
"R0_BANK1", "R1_BANK1", "R2_BANK1", "R3_BANK1",
"R4_BANK1", "R5_BANK1", "R6_BANK1", "R7_BANK1"
"R4_BANK1", "R5_BANK1", "R6_BANK1", "R7_BANK1",
NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
static char *sh3e_regnames[NUM_REGS] = {
"R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",
"R8", "R9", "R10", "R11","R12", "R13", "R14", "R15",
"PC", "PR", "GBR", "VBR","MACH","MACL", "SR",
"SSR","SPC",
"R0_BANK0", "R1_BANK0", "R2_BANK0", "R3_BANK0",
"R4_BANK0", "R5_BANK0", "R6_BANK0", "R7_BANK0",
"R0_BANK1", "R1_BANK1", "R2_BANK1", "R3_BANK1",
"R4_BANK1", "R5_BANK1", "R6_BANK1", "R7_BANK1",
"FPUL", "FPSCR",
"FR0", "FR1", "FR2", "FR3", "FR4", "FR5", "FR6", "FR7",
"FR8", "FR9", "FR10", "FR11", "FR12", "FR13", "FR14", "FR15"
};
/* Define the monitor command strings. Since these are passed directly
through to a printf style function, we may include formatting
strings. We also need a CR or LF on the end. */
static struct target_ops sh3_ops;
static struct target_ops sh3_ops, sh3e_ops;
static char *sh3_inits[] = {"\003", NULL}; /* Exits sub-command mode & download cmds */
@@ -225,6 +241,11 @@ static struct monitor_ops sh3_cmds =
MONITOR_OPS_MAGIC /* magic */
};
/* This monitor structure is identical except for a couple slots, so
we will fill it in from the base structure when needed. */
static struct monitor_ops sh3e_cmds;
static void
sh3_open (args, from_tty)
char *args;
@@ -267,6 +288,54 @@ sh3_open (args, from_tty)
}
static void
sh3e_open (args, from_tty)
char *args;
int from_tty;
{
char *serial_port_name = args;
char *parallel_port_name = 0;
if (args)
{
char *cursor = serial_port_name = strsave (args);
while (*cursor && *cursor != ' ')
cursor++;
if (*cursor)
*cursor++ = 0;
while (*cursor == ' ')
cursor++;
if (*cursor)
parallel_port_name = cursor;
}
/* Set up the SH-3E monitor commands structure. */
memcpy (&sh3e_cmds, &sh3_cmds, sizeof (struct monitor_ops));
sh3e_cmds.target = &sh3e_ops;
sh3e_cmds.regnames = sh3e_regnames;
monitor_open (serial_port_name, &sh3e_cmds, from_tty);
if (parallel_port_name)
{
parallel = SERIAL_OPEN (parallel_port_name);
if (!parallel)
perror_with_name ("Unable to open parallel port.");
parallel_in_use = 1;
}
/* If we connected successfully, we know the processor is an SH3E. */
sh_set_processor_type ("sh3e");
}
static void
sh3_close (quitting)
int quitting;
@@ -279,7 +348,7 @@ sh3_close (quitting)
}
void
_initialize_sh3 ()
_initialize_sh3_rom ()
{
init_monitor_ops (&sh3_ops);
@@ -302,4 +371,28 @@ Specify the serial device it is connected to (e.g. /dev/ttya).";
sh3_ops.to_close = sh3_close;
add_target (&sh3_ops);
/* Setup the SH3e, which has float registers. */
init_monitor_ops (&sh3e_ops);
sh3e_ops.to_shortname = "sh3e";
sh3e_ops.to_longname = "Hitachi SH-3E rom monitor";
sh3e_ops.to_doc =
#ifdef _WINDOWS
/* On windows we can talk through the parallel port too. */
"Debug on a Hitachi eval board running the SH-3E rom monitor.\n"
"Specify the serial device it is connected to (e.g. com2).\n"
"If you want to use the parallel port to download to it, specify that\n"
"as the second argument. (e.g. lpt1)";
#else
"Debug on a Hitachi eval board running the SH-3E rom monitor.\n\
Specify the serial device it is connected to (e.g. /dev/ttya).";
#endif
sh3e_ops.to_open = sh3e_open;
sh3e_ops.to_close = sh3_close;
add_target (&sh3e_ops);
}