diff options
author | Stu Grossman <grossman@cygnus> | 1995-03-15 23:31:14 +0000 |
---|---|---|
committer | Stu Grossman <grossman@cygnus> | 1995-03-15 23:31:14 +0000 |
commit | 2081365ffad350959629339d1633b41ecc6fc95f (patch) | |
tree | b8beaf0bf93947d9699a3a994a930a6d50bb4205 /gdb/rom68k-rom.c | |
parent | a7f6f40b3c489018d8038e2e1da58cd1e8540436 (diff) | |
download | fsf-binutils-gdb-2081365ffad350959629339d1633b41ecc6fc95f.zip fsf-binutils-gdb-2081365ffad350959629339d1633b41ecc6fc95f.tar.gz fsf-binutils-gdb-2081365ffad350959629339d1633b41ecc6fc95f.tar.bz2 |
* findvar.c (read_register_bytes write_register_bytes): Make
these routines much smarter about updating registers from the
target, only doing so when absolutely necessary. This really
speeds up register modification on some remote targets.
* monitor.c: More cleanups. Get rid of monitor_load_ascii_srec.
BFD makes this unnecessary. Lots of debugging speedups.
* (expect): NULL terminate return string.
* (monitor_open monitor_supply_register parse_register_dump
monitor_wait monitor_fetch_register): Switch to using GNU regexp
library to parse multi-register displays.
* (monitor_read_memory): Read multiple bytes (up to 16) at once.
* (monitor_create_inferior): Call clear_proceed_status to make run
command notice first breakpoint.
* (monitor_load): Clean up. Reset inferior_pid, set pc to start
address and reset symbol table stuff to make loads put things into
a fresh state.
* (monitor_load_srec): Lower sleep time to 1 second.
* monitor.h (struct monitor_ops): Add register_pattern and
supply_register to monitor_ops.
* rom68k-rom.c: Add new support for handling register dumps.
Diffstat (limited to 'gdb/rom68k-rom.c')
-rw-r--r-- | gdb/rom68k-rom.c | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/gdb/rom68k-rom.c b/gdb/rom68k-rom.c index 5673d50..ad5dd00 100644 --- a/gdb/rom68k-rom.c +++ b/gdb/rom68k-rom.c @@ -25,7 +25,57 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "monitor.h" #include "serial.h" -void rom68k_open(); +static void rom68k_open PARAMS ((char *args, int from_tty)); + +static void +rom68k_supply_register (regname, regnamelen, val, vallen) + char *regname; + int regnamelen; + char *val; + int vallen; +{ + int numregs; + int regno; + + numregs = 1; + regno = -1; + + if (regnamelen == 2) + switch (regname[0]) + { + case 'S': + if (regname[1] == 'R') + regno = PS_REGNUM; + break; + case 'P': + if (regname[1] == 'C') + regno = PC_REGNUM; + break; + case 'D': + if (regname[1] != 'R') + break; + regno = D0_REGNUM; + numregs = 8; + break; + case 'A': + if (regname[1] != 'R') + break; + regno = A0_REGNUM; + numregs = 7; + break; + } + else if (regnamelen == 3) + switch (regname[0]) + { + case 'I': + if (regname[1] == 'S' && regname[2] == 'P') + regno = SP_REGNUM; + } + + if (regno >= 0) + while (numregs-- > 0) + val = monitor_supply_register (regno++, val); +} /* * this array of registers need to match the indexes used by GDB. The @@ -66,7 +116,7 @@ static struct monitor_ops rom68k_cmds = NULL, /* setreg.term_cmd */ }, { - "dm %x 1\r", /* getmem.cmd (addr) */ + "dm %x %x\r", /* getmem.cmd (addr, len) */ " ", /* getmem.resp_delim */ NULL, /* getmem.term */ NULL, /* getmem.term_cmd */ @@ -83,6 +133,9 @@ static struct monitor_ops rom68k_cmds = "= ", /* getreg.term */ ".\r" /* getreg.term_cmd */ }, + /* register_pattern */ + "\\(\\w+\\)=\\([0-9a-fA-F]+\\( +[0-9a-fA-F]+\\b\\)*\\)", + rom68k_supply_register, /* supply_register */ "dc\r", /* download command */ "ROM68K :->", /* monitor command prompt */ "=", /* end-of-command delimitor */ |