diff options
author | Stan Shebs <shebs@codesourcery.com> | 1996-05-13 18:34:09 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 1996-05-13 18:34:09 +0000 |
commit | 05535e79e9697bdc703d101039f767ea2faa211f (patch) | |
tree | 6df74d7f8288b2da30dcccbf6d7c6c46f9360678 /gdb/sh3-rom.c | |
parent | 048668d355f4b148c6d926361803cf84bf624017 (diff) | |
download | binutils-gdb-05535e79e9697bdc703d101039f767ea2faa211f.tar.gz |
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.
Diffstat (limited to 'gdb/sh3-rom.c')
-rw-r--r-- | gdb/sh3-rom.c | 101 |
1 files changed, 97 insertions, 4 deletions
diff --git a/gdb/sh3-rom.c b/gdb/sh3-rom.c index b5d77e514d8..701bf28412a 100644 --- a/gdb/sh3-rom.c +++ b/gdb/sh3-rom.c @@ -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", + "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", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 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" + "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; @@ -268,6 +289,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); } |