diff options
Diffstat (limited to 'gdb/remote-mips.c')
-rw-r--r-- | gdb/remote-mips.c | 37 |
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. */ |