aboutsummaryrefslogtreecommitdiff
path: root/gdb/remote-mips.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/remote-mips.c')
-rw-r--r--gdb/remote-mips.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/gdb/remote-mips.c b/gdb/remote-mips.c
index 170a6ba..6195dbb 100644
--- a/gdb/remote-mips.c
+++ b/gdb/remote-mips.c
@@ -1,5 +1,5 @@
/* Remote debugging interface for MIPS remote debugging protocol.
- Copyright 1993, 1994 Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995 Free Software Foundation, Inc.
Contributed by Cygnus Support. Written by Ian Lance Taylor
<ian@cygnus.com>.
@@ -128,7 +128,7 @@ extern struct target_ops mips_ops;
The value is
0x40 + seq
An acknowlegment packet contains the sequence number of the
- packet being acknowledged plus 1 module 64. Data packets are
+ packet being acknowledged plus 1 modulo 64. Data packets are
transmitted in sequence. There may only be one outstanding
unacknowledged data packet at a time. The sequence numbers
are independent in each direction. If an acknowledgement for
@@ -334,10 +334,24 @@ mips_readchar (timeout)
int ch;
static int state = 0;
static char nextstate[5] = { '<', 'I', 'D', 'T', '>' };
+#ifdef MAINTENANCE_CMDS
+ int i;
+
+ i = timeout;
+ if (i == -1 && watchdog > 0)
+ i = watchdog;
+#endif
if (state == 5)
timeout = 1;
ch = SERIAL_READCHAR (mips_desc, timeout);
+#ifdef MAINTENANCE_CMDS
+ if (ch == SERIAL_TIMEOUT && timeout == -1) /* Watchdog went off */
+ {
+ target_mourn_inferior ();
+ error ("Watchdog has expired. Target detached.\n");
+ }
+#endif
if (ch == SERIAL_EOF)
mips_error ("End of file from remote");
if (ch == SERIAL_ERROR)
@@ -373,7 +387,10 @@ mips_readchar (timeout)
state = 0;
- mips_error ("Remote board reset");
+ /* At this point, about the only thing we can do is abort the command
+ in progress and get back to command level as quickly as possible. */
+
+ error ("Remote board reset, debug protocol re-initialized.");
}
if (ch == nextstate[state])
@@ -874,7 +891,7 @@ mips_request (cmd, addr, data, perr, timeout)
char rcmd;
int rerrflg;
int rresponse;
-
+
if (cmd != '\0')
{
if (mips_need_reply)
@@ -1031,6 +1048,18 @@ device is attached to the target board (e.g., /dev/ttya).");
ptype = mips_read_processor_type ();
if (ptype)
mips_set_processor_type_command (strsave (ptype), 0);
+
+/* This is really the job of start_remote however, that makes an assumption
+ that the target is about to print out a status message of some sort. That
+ doesn't happen here (in fact, it may not be possible to get the monitor to
+ send the appropriate packet). */
+
+ flush_cached_frames ();
+ registers_changed ();
+ stop_pc = read_pc ();
+ set_current_frame (create_new_frame (read_fp (), stop_pc));
+ select_frame (get_current_frame (), 0);
+ print_stack_frame (selected_frame, -1, 1);
}
/* Close a connection to the remote board. */