This commit was generated by cvs2svn to track changes on a CVS vendor
[external/binutils.git] / gdb / remote-mips.c
1 /* Remote debugging interface for MIPS remote debugging protocol.
2    Copyright 1993, 1994, 1995, 2000 Free Software Foundation, Inc.
3    Contributed by Cygnus Support.  Written by Ian Lance Taylor
4    <ian@cygnus.com>.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22
23 #include "defs.h"
24 #include "inferior.h"
25 #include "bfd.h"
26 #include "symfile.h"
27 #include "gdb_wait.h"
28 #include "gdbcmd.h"
29 #include "gdbcore.h"
30 #include "serial.h"
31 #include "target.h"
32 #include "remote-utils.h"
33 #include "gdb_string.h"
34
35 #include <signal.h>
36 #include <sys/types.h>
37 #include <sys/stat.h>
38
39 #include <ctype.h>
40
41 /* Microsoft C's stat.h doesn't define all the POSIX file modes.  */
42 #ifndef S_IROTH
43 #define S_IROTH S_IREAD
44 #endif
45
46 \f
47
48 /* Breakpoint types.  Values 0, 1, and 2 must agree with the watch
49    types passed by breakpoint.c to target_insert_watchpoint.
50    Value 3 is our own invention, and is used for ordinary instruction
51    breakpoints.  Value 4 is used to mark an unused watchpoint in tables.  */
52 enum break_type
53   {
54     BREAK_WRITE,                /* 0 */
55     BREAK_READ,                 /* 1 */
56     BREAK_ACCESS,               /* 2 */
57     BREAK_FETCH,                /* 3 */
58     BREAK_UNUSED                /* 4 */
59   };
60
61 /* Prototypes for local functions.  */
62
63 static int mips_readchar (int timeout);
64
65 static int mips_receive_header (unsigned char *hdr, int *pgarbage,
66                                 int ch, int timeout);
67
68 static int mips_receive_trailer (unsigned char *trlr, int *pgarbage,
69                                  int *pch, int timeout);
70
71 static int mips_cksum (const unsigned char *hdr,
72                        const unsigned char *data, int len);
73
74 static void mips_send_packet (const char *s, int get_ack);
75
76 static void mips_send_command (const char *cmd, int prompt);
77
78 static int mips_receive_packet (char *buff, int throw_error, int timeout);
79
80 static CORE_ADDR mips_request (int cmd, CORE_ADDR addr,
81                                CORE_ADDR data, int *perr, int timeout,
82                                char *buff);
83
84 static void mips_initialize (void);
85
86 static void mips_open (char *name, int from_tty);
87
88 static void pmon_open (char *name, int from_tty);
89
90 static void ddb_open (char *name, int from_tty);
91
92 static void lsi_open (char *name, int from_tty);
93
94 static void mips_close (int quitting);
95
96 static void mips_detach (char *args, int from_tty);
97
98 static void mips_resume (int pid, int step, enum target_signal siggnal);
99
100 static int mips_wait (int pid, struct target_waitstatus *status);
101
102 static int mips_map_regno (int regno);
103
104 static void mips_fetch_registers (int regno);
105
106 static void mips_prepare_to_store (void);
107
108 static void mips_store_registers (int regno);
109
110 static unsigned int mips_fetch_word (CORE_ADDR addr);
111
112 static int mips_store_word (CORE_ADDR addr, unsigned int value,
113                             char *old_contents);
114
115 static int mips_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
116                              int write, struct target_ops *ignore);
117
118 static void mips_files_info (struct target_ops *ignore);
119
120 static void mips_create_inferior (char *execfile, char *args, char **env);
121
122 static void mips_mourn_inferior (void);
123
124 static int pmon_makeb64 (unsigned long v, char *p, int n, int *chksum);
125
126 static int pmon_zeroset (int recsize, char **buff, int *amount,
127                          unsigned int *chksum);
128
129 static int pmon_checkset (int recsize, char **buff, int *value);
130
131 static void pmon_make_fastrec (char **outbuf, unsigned char *inbuf,
132                                int *inptr, int inamount, int *recsize,
133                                unsigned int *csum, unsigned int *zerofill);
134
135 static int pmon_check_ack (char *mesg);
136
137 static void pmon_start_download (void);
138
139 static void pmon_end_download (int final, int bintotal);
140
141 static void pmon_download (char *buffer, int length);
142
143 static void pmon_load_fast (char *file);
144
145 static void mips_load (char *file, int from_tty);
146
147 static int mips_make_srec (char *buffer, int type, CORE_ADDR memaddr,
148                            unsigned char *myaddr, int len);
149
150 static int set_breakpoint (CORE_ADDR addr, int len, enum break_type type);
151
152 static int clear_breakpoint (CORE_ADDR addr, int len, enum break_type type);
153
154 static int common_breakpoint (int set, CORE_ADDR addr, int len,
155                               enum break_type type);
156
157 /* Forward declarations.  */
158 extern struct target_ops mips_ops;
159 extern struct target_ops pmon_ops;
160 extern struct target_ops ddb_ops;
161 \f/* *INDENT-OFF* */
162 /* The MIPS remote debugging interface is built on top of a simple
163    packet protocol.  Each packet is organized as follows:
164
165    SYN  The first character is always a SYN (ASCII 026, or ^V).  SYN
166    may not appear anywhere else in the packet.  Any time a SYN is
167    seen, a new packet should be assumed to have begun.
168
169    TYPE_LEN
170    This byte contains the upper five bits of the logical length
171    of the data section, plus a single bit indicating whether this
172    is a data packet or an acknowledgement.  The documentation
173    indicates that this bit is 1 for a data packet, but the actual
174    board uses 1 for an acknowledgement.  The value of the byte is
175    0x40 + (ack ? 0x20 : 0) + (len >> 6)
176    (we always have 0 <= len < 1024).  Acknowledgement packets do
177    not carry data, and must have a data length of 0.
178
179    LEN1 This byte contains the lower six bits of the logical length of
180    the data section.  The value is
181    0x40 + (len & 0x3f)
182
183    SEQ  This byte contains the six bit sequence number of the packet.
184    The value is
185    0x40 + seq
186    An acknowlegment packet contains the sequence number of the
187    packet being acknowledged plus 1 modulo 64.  Data packets are
188    transmitted in sequence.  There may only be one outstanding
189    unacknowledged data packet at a time.  The sequence numbers
190    are independent in each direction.  If an acknowledgement for
191    the previous packet is received (i.e., an acknowledgement with
192    the sequence number of the packet just sent) the packet just
193    sent should be retransmitted.  If no acknowledgement is
194    received within a timeout period, the packet should be
195    retransmitted.  This has an unfortunate failure condition on a
196    high-latency line, as a delayed acknowledgement may lead to an
197    endless series of duplicate packets.
198
199    DATA The actual data bytes follow.  The following characters are
200    escaped inline with DLE (ASCII 020, or ^P):
201    SYN (026)    DLE S
202    DLE (020)    DLE D
203    ^C  (003)    DLE C
204    ^S  (023)    DLE s
205    ^Q  (021)    DLE q
206    The additional DLE characters are not counted in the logical
207    length stored in the TYPE_LEN and LEN1 bytes.
208
209    CSUM1
210    CSUM2
211    CSUM3
212    These bytes contain an 18 bit checksum of the complete
213    contents of the packet excluding the SEQ byte and the
214    CSUM[123] bytes.  The checksum is simply the twos complement
215    addition of all the bytes treated as unsigned characters.  The
216    values of the checksum bytes are:
217    CSUM1: 0x40 + ((cksum >> 12) & 0x3f)
218    CSUM2: 0x40 + ((cksum >> 6) & 0x3f)
219    CSUM3: 0x40 + (cksum & 0x3f)
220
221    It happens that the MIPS remote debugging protocol always
222    communicates with ASCII strings.  Because of this, this
223    implementation doesn't bother to handle the DLE quoting mechanism,
224    since it will never be required.  */
225 /* *INDENT-ON* */
226
227
228 /* The SYN character which starts each packet.  */
229 #define SYN '\026'
230
231 /* The 0x40 used to offset each packet (this value ensures that all of
232    the header and trailer bytes, other than SYN, are printable ASCII
233    characters).  */
234 #define HDR_OFFSET 0x40
235
236 /* The indices of the bytes in the packet header.  */
237 #define HDR_INDX_SYN 0
238 #define HDR_INDX_TYPE_LEN 1
239 #define HDR_INDX_LEN1 2
240 #define HDR_INDX_SEQ 3
241 #define HDR_LENGTH 4
242
243 /* The data/ack bit in the TYPE_LEN header byte.  */
244 #define TYPE_LEN_DA_BIT 0x20
245 #define TYPE_LEN_DATA 0
246 #define TYPE_LEN_ACK TYPE_LEN_DA_BIT
247
248 /* How to compute the header bytes.  */
249 #define HDR_SET_SYN(data, len, seq) (SYN)
250 #define HDR_SET_TYPE_LEN(data, len, seq) \
251   (HDR_OFFSET \
252    + ((data) ? TYPE_LEN_DATA : TYPE_LEN_ACK) \
253    + (((len) >> 6) & 0x1f))
254 #define HDR_SET_LEN1(data, len, seq) (HDR_OFFSET + ((len) & 0x3f))
255 #define HDR_SET_SEQ(data, len, seq) (HDR_OFFSET + (seq))
256
257 /* Check that a header byte is reasonable.  */
258 #define HDR_CHECK(ch) (((ch) & HDR_OFFSET) == HDR_OFFSET)
259
260 /* Get data from the header.  These macros evaluate their argument
261    multiple times.  */
262 #define HDR_IS_DATA(hdr) \
263   (((hdr)[HDR_INDX_TYPE_LEN] & TYPE_LEN_DA_BIT) == TYPE_LEN_DATA)
264 #define HDR_GET_LEN(hdr) \
265   ((((hdr)[HDR_INDX_TYPE_LEN] & 0x1f) << 6) + (((hdr)[HDR_INDX_LEN1] & 0x3f)))
266 #define HDR_GET_SEQ(hdr) ((unsigned int)(hdr)[HDR_INDX_SEQ] & 0x3f)
267
268 /* The maximum data length.  */
269 #define DATA_MAXLEN 1023
270
271 /* The trailer offset.  */
272 #define TRLR_OFFSET HDR_OFFSET
273
274 /* The indices of the bytes in the packet trailer.  */
275 #define TRLR_INDX_CSUM1 0
276 #define TRLR_INDX_CSUM2 1
277 #define TRLR_INDX_CSUM3 2
278 #define TRLR_LENGTH 3
279
280 /* How to compute the trailer bytes.  */
281 #define TRLR_SET_CSUM1(cksum) (TRLR_OFFSET + (((cksum) >> 12) & 0x3f))
282 #define TRLR_SET_CSUM2(cksum) (TRLR_OFFSET + (((cksum) >>  6) & 0x3f))
283 #define TRLR_SET_CSUM3(cksum) (TRLR_OFFSET + (((cksum)      ) & 0x3f))
284
285 /* Check that a trailer byte is reasonable.  */
286 #define TRLR_CHECK(ch) (((ch) & TRLR_OFFSET) == TRLR_OFFSET)
287
288 /* Get data from the trailer.  This evaluates its argument multiple
289    times.  */
290 #define TRLR_GET_CKSUM(trlr) \
291   ((((trlr)[TRLR_INDX_CSUM1] & 0x3f) << 12) \
292    + (((trlr)[TRLR_INDX_CSUM2] & 0x3f) <<  6) \
293    + ((trlr)[TRLR_INDX_CSUM3] & 0x3f))
294
295 /* The sequence number modulos.  */
296 #define SEQ_MODULOS (64)
297
298 /* PMON commands to load from the serial port or UDP socket.  */
299 #define LOAD_CMD        "load -b -s tty0\r"
300 #define LOAD_CMD_UDP    "load -b -s udp\r"
301
302 /* The target vectors for the four different remote MIPS targets.
303    These are initialized with code in _initialize_remote_mips instead
304    of static initializers, to make it easier to extend the target_ops
305    vector later.  */
306 struct target_ops mips_ops, pmon_ops, ddb_ops, lsi_ops;
307
308 enum mips_monitor_type
309   {
310     /* IDT/SIM monitor being used: */
311     MON_IDT,
312     /* PMON monitor being used: */
313     MON_PMON,                   /* 3.0.83 [COGENT,EB,FP,NET] Algorithmics Ltd. Nov  9 1995 17:19:50 */
314     MON_DDB,                    /* 2.7.473 [DDBVR4300,EL,FP,NET] Risq Modular Systems,  Thu Jun 6 09:28:40 PDT 1996 */
315     MON_LSI,                    /* 4.3.12 [EB,FP], LSI LOGIC Corp. Tue Feb 25 13:22:14 1997 */
316     /* Last and unused value, for sizing vectors, etc. */
317     MON_LAST
318   };
319 static enum mips_monitor_type mips_monitor = MON_LAST;
320
321 /* The monitor prompt text.  If the user sets the PMON prompt
322    to some new value, the GDB `set monitor-prompt' command must also
323    be used to inform GDB about the expected prompt.  Otherwise, GDB
324    will not be able to connect to PMON in mips_initialize().
325    If the `set monitor-prompt' command is not used, the expected
326    default prompt will be set according the target:
327    target               prompt
328    -----                -----
329    pmon         PMON> 
330    ddb          NEC010>
331    lsi          PMON>
332  */
333 static char *mips_monitor_prompt;
334
335 /* Set to 1 if the target is open.  */
336 static int mips_is_open;
337
338 /* Currently active target description (if mips_is_open == 1) */
339 static struct target_ops *current_ops;
340
341 /* Set to 1 while the connection is being initialized.  */
342 static int mips_initializing;
343
344 /* Set to 1 while the connection is being brought down.  */
345 static int mips_exiting;
346
347 /* The next sequence number to send.  */
348 static unsigned int mips_send_seq;
349
350 /* The next sequence number we expect to receive.  */
351 static unsigned int mips_receive_seq;
352
353 /* The time to wait before retransmitting a packet, in seconds.  */
354 static int mips_retransmit_wait = 3;
355
356 /* The number of times to try retransmitting a packet before giving up.  */
357 static int mips_send_retries = 10;
358
359 /* The number of garbage characters to accept when looking for an
360    SYN for the next packet.  */
361 static int mips_syn_garbage = 10;
362
363 /* The time to wait for a packet, in seconds.  */
364 static int mips_receive_wait = 5;
365
366 /* Set if we have sent a packet to the board but have not yet received
367    a reply.  */
368 static int mips_need_reply = 0;
369
370 /* Handle used to access serial I/O stream.  */
371 static serial_t mips_desc;
372
373 /* UDP handle used to download files to target.  */
374 static serial_t udp_desc;
375 static int udp_in_use;
376
377 /* TFTP filename used to download files to DDB board, in the form
378    host:filename.  */
379 static char *tftp_name;         /* host:filename */
380 static char *tftp_localname;    /* filename portion of above */
381 static int tftp_in_use;
382 static FILE *tftp_file;
383
384 /* Counts the number of times the user tried to interrupt the target (usually
385    via ^C.  */
386 static int interrupt_count;
387
388 /* If non-zero, means that the target is running. */
389 static int mips_wait_flag = 0;
390
391 /* If non-zero, monitor supports breakpoint commands. */
392 static int monitor_supports_breakpoints = 0;
393
394 /* Data cache header.  */
395
396 #if 0                           /* not used (yet?) */
397 static DCACHE *mips_dcache;
398 #endif
399
400 /* Non-zero means that we've just hit a read or write watchpoint */
401 static int hit_watchpoint;
402
403 /* Table of breakpoints/watchpoints (used only on LSI PMON target).
404    The table is indexed by a breakpoint number, which is an integer
405    from 0 to 255 returned by the LSI PMON when a breakpoint is set.
406  */
407 #define MAX_LSI_BREAKPOINTS 256
408 struct lsi_breakpoint_info
409   {
410     enum break_type type;       /* type of breakpoint */
411     CORE_ADDR addr;             /* address of breakpoint */
412     int len;                    /* length of region being watched */
413     unsigned long value;        /* value to watch */
414   }
415 lsi_breakpoints[MAX_LSI_BREAKPOINTS];
416
417 /* Error/warning codes returned by LSI PMON for breakpoint commands.
418    Warning values may be ORed together; error values may not.  */
419 #define W_WARN  0x100           /* This bit is set if the error code is a warning */
420 #define W_MSK   0x101           /* warning: Range feature is supported via mask */
421 #define W_VAL   0x102           /* warning: Value check is not supported in hardware */
422 #define W_QAL   0x104           /* warning: Requested qualifiers are not supported in hardware */
423
424 #define E_ERR   0x200           /* This bit is set if the error code is an error */
425 #define E_BPT   0x200           /* error: No such breakpoint number */
426 #define E_RGE   0x201           /* error: Range is not supported */
427 #define E_QAL   0x202           /* error: The requested qualifiers can not be used */
428 #define E_OUT   0x203           /* error: Out of hardware resources */
429 #define E_NON   0x204           /* error: Hardware breakpoint not supported */
430
431 struct lsi_error
432   {
433     int code;                   /* error code */
434     char *string;               /* string associated with this code */
435   };
436
437 struct lsi_error lsi_warning_table[] =
438 {
439   {W_MSK, "Range feature is supported via mask"},
440   {W_VAL, "Value check is not supported in hardware"},
441   {W_QAL, "Requested qualifiers are not supported in hardware"},
442   {0, NULL}
443 };
444
445 struct lsi_error lsi_error_table[] =
446 {
447   {E_BPT, "No such breakpoint number"},
448   {E_RGE, "Range is not supported"},
449   {E_QAL, "The requested qualifiers can not be used"},
450   {E_OUT, "Out of hardware resources"},
451   {E_NON, "Hardware breakpoint not supported"},
452   {0, NULL}
453 };
454
455 /* Set to 1 with the 'set monitor-warnings' command to enable printing
456    of warnings returned by PMON when hardware breakpoints are used.  */
457 static int monitor_warnings;
458
459
460 static void
461 close_ports ()
462 {
463   mips_is_open = 0;
464   SERIAL_CLOSE (mips_desc);
465
466   if (udp_in_use)
467     {
468       SERIAL_CLOSE (udp_desc);
469       udp_in_use = 0;
470     }
471   tftp_in_use = 0;
472 }
473
474 /* Handle low-level error that we can't recover from.  Note that just
475    error()ing out from target_wait or some such low-level place will cause
476    all hell to break loose--the rest of GDB will tend to get left in an
477    inconsistent state.  */
478
479 static NORETURN void
480 mips_error (char *string,...)
481 {
482   va_list args;
483
484   va_start (args, string);
485
486   target_terminal_ours ();
487   wrap_here ("");               /* Force out any buffered output */
488   gdb_flush (gdb_stdout);
489   if (error_pre_print)
490     fprintf_filtered (gdb_stderr, error_pre_print);
491   vfprintf_filtered (gdb_stderr, string, args);
492   fprintf_filtered (gdb_stderr, "\n");
493   va_end (args);
494   gdb_flush (gdb_stderr);
495
496   /* Clean up in such a way that mips_close won't try to talk to the
497      board (it almost surely won't work since we weren't able to talk to
498      it).  */
499   close_ports ();
500
501   printf_unfiltered ("Ending remote MIPS debugging.\n");
502   target_mourn_inferior ();
503
504   return_to_top_level (RETURN_ERROR);
505 }
506
507 /* putc_readable - print a character, displaying non-printable chars in
508    ^x notation or in hex.  */
509
510 static void
511 fputc_readable (ch, file)
512      int ch;
513      struct ui_file *file;
514 {
515   if (ch == '\n')
516     fputc_unfiltered ('\n', file);
517   else if (ch == '\r')
518     fprintf_unfiltered (file, "\\r");
519   else if (ch < 0x20)           /* ASCII control character */
520     fprintf_unfiltered (file, "^%c", ch + '@');
521   else if (ch >= 0x7f)          /* non-ASCII characters (rubout or greater) */
522     fprintf_unfiltered (file, "[%02x]", ch & 0xff);
523   else
524     fputc_unfiltered (ch, file);
525 }
526
527
528 /* puts_readable - print a string, displaying non-printable chars in
529    ^x notation or in hex.  */
530
531 static void
532 fputs_readable (string, file)
533      char *string;
534      struct ui_file *file;
535 {
536   int c;
537
538   while ((c = *string++) != '\0')
539     fputc_readable (c, file);
540 }
541
542
543 /* Wait until STRING shows up in mips_desc.  Returns 1 if successful, else 0 if
544    timed out.  TIMEOUT specifies timeout value in seconds.
545  */
546
547 int
548 mips_expect_timeout (string, timeout)
549      char *string;
550      int timeout;
551 {
552   char *p = string;
553
554   if (remote_debug)
555     {
556       fprintf_unfiltered (gdb_stdlog, "Expected \"");
557       fputs_readable (string, gdb_stdlog);
558       fprintf_unfiltered (gdb_stdlog, "\", got \"");
559     }
560
561   immediate_quit = 1;
562   while (1)
563     {
564       int c;
565
566 /* Must use SERIAL_READCHAR here cuz mips_readchar would get confused if we
567    were waiting for the mips_monitor_prompt... */
568
569       c = SERIAL_READCHAR (mips_desc, timeout);
570
571       if (c == SERIAL_TIMEOUT)
572         {
573           if (remote_debug)
574             fprintf_unfiltered (gdb_stdlog, "\": FAIL\n");
575           return 0;
576         }
577
578       if (remote_debug)
579         fputc_readable (c, gdb_stdlog);
580
581       if (c == *p++)
582         {
583           if (*p == '\0')
584             {
585               immediate_quit = 0;
586               if (remote_debug)
587                 fprintf_unfiltered (gdb_stdlog, "\": OK\n");
588               return 1;
589             }
590         }
591       else
592         {
593           p = string;
594           if (c == *p)
595             p++;
596         }
597     }
598 }
599
600 /* Wait until STRING shows up in mips_desc.  Returns 1 if successful, else 0 if
601    timed out.  The timeout value is hard-coded to 2 seconds.  Use
602    mips_expect_timeout if a different timeout value is needed.
603  */
604
605 int
606 mips_expect (string)
607      char *string;
608 {
609   return mips_expect_timeout (string, 2);
610 }
611
612 /* Read the required number of characters into the given buffer (which
613    is assumed to be large enough). The only failure is a timeout. */
614 int
615 mips_getstring (string, n)
616      char *string;
617      int n;
618 {
619   char *p = string;
620   int c;
621
622   immediate_quit = 1;
623   while (n > 0)
624     {
625       c = SERIAL_READCHAR (mips_desc, 2);
626
627       if (c == SERIAL_TIMEOUT)
628         {
629           fprintf_unfiltered (gdb_stderr,
630                  "Failed to read %d characters from target (TIMEOUT)\n", n);
631           return 0;
632         }
633
634       *p++ = c;
635       n--;
636     }
637
638   return 1;
639 }
640
641 /* Read a character from the remote, aborting on error.  Returns
642    SERIAL_TIMEOUT on timeout (since that's what SERIAL_READCHAR
643    returns).  FIXME: If we see the string mips_monitor_prompt from
644    the board, then we are debugging on the main console port, and we
645    have somehow dropped out of remote debugging mode.  In this case,
646    we automatically go back in to remote debugging mode.  This is a
647    hack, put in because I can't find any way for a program running on
648    the remote board to terminate without also ending remote debugging
649    mode.  I assume users won't have any trouble with this; for one
650    thing, the IDT documentation generally assumes that the remote
651    debugging port is not the console port.  This is, however, very
652    convenient for DejaGnu when you only have one connected serial
653    port.  */
654
655 static int
656 mips_readchar (timeout)
657      int timeout;
658 {
659   int ch;
660   static int state = 0;
661   int mips_monitor_prompt_len = strlen (mips_monitor_prompt);
662
663   {
664     int i;
665
666     i = timeout;
667     if (i == -1 && watchdog > 0)
668       i = watchdog;
669   }
670
671   if (state == mips_monitor_prompt_len)
672     timeout = 1;
673   ch = SERIAL_READCHAR (mips_desc, timeout);
674
675   if (ch == SERIAL_TIMEOUT && timeout == -1)    /* Watchdog went off */
676     {
677       target_mourn_inferior ();
678       error ("Watchdog has expired.  Target detached.\n");
679     }
680
681   if (ch == SERIAL_EOF)
682     mips_error ("End of file from remote");
683   if (ch == SERIAL_ERROR)
684     mips_error ("Error reading from remote: %s", safe_strerror (errno));
685   if (remote_debug > 1)
686     {
687       /* Don't use _filtered; we can't deal with a QUIT out of
688          target_wait, and I think this might be called from there.  */
689       if (ch != SERIAL_TIMEOUT)
690         fprintf_unfiltered (gdb_stdlog, "Read '%c' %d 0x%x\n", ch, ch, ch);
691       else
692         fprintf_unfiltered (gdb_stdlog, "Timed out in read\n");
693     }
694
695   /* If we have seen mips_monitor_prompt and we either time out, or
696      we see a @ (which was echoed from a packet we sent), reset the
697      board as described above.  The first character in a packet after
698      the SYN (which is not echoed) is always an @ unless the packet is
699      more than 64 characters long, which ours never are.  */
700   if ((ch == SERIAL_TIMEOUT || ch == '@')
701       && state == mips_monitor_prompt_len
702       && !mips_initializing
703       && !mips_exiting)
704     {
705       if (remote_debug > 0)
706         /* Don't use _filtered; we can't deal with a QUIT out of
707            target_wait, and I think this might be called from there.  */
708         fprintf_unfiltered (gdb_stdlog, "Reinitializing MIPS debugging mode\n");
709
710       mips_need_reply = 0;
711       mips_initialize ();
712
713       state = 0;
714
715       /* At this point, about the only thing we can do is abort the command
716          in progress and get back to command level as quickly as possible. */
717
718       error ("Remote board reset, debug protocol re-initialized.");
719     }
720
721   if (ch == mips_monitor_prompt[state])
722     ++state;
723   else
724     state = 0;
725
726   return ch;
727 }
728
729 /* Get a packet header, putting the data in the supplied buffer.
730    PGARBAGE is a pointer to the number of garbage characters received
731    so far.  CH is the last character received.  Returns 0 for success,
732    or -1 for timeout.  */
733
734 static int
735 mips_receive_header (hdr, pgarbage, ch, timeout)
736      unsigned char *hdr;
737      int *pgarbage;
738      int ch;
739      int timeout;
740 {
741   int i;
742
743   while (1)
744     {
745       /* Wait for a SYN.  mips_syn_garbage is intended to prevent
746          sitting here indefinitely if the board sends us one garbage
747          character per second.  ch may already have a value from the
748          last time through the loop.  */
749       while (ch != SYN)
750         {
751           ch = mips_readchar (timeout);
752           if (ch == SERIAL_TIMEOUT)
753             return -1;
754           if (ch != SYN)
755             {
756               /* Printing the character here lets the user of gdb see
757                  what the program is outputting, if the debugging is
758                  being done on the console port.  Don't use _filtered:
759                  we can't deal with a QUIT out of target_wait and
760                  buffered target output confuses the user. */
761               if (!mips_initializing || remote_debug > 0)
762                 {
763                   if (isprint (ch) || isspace (ch))
764                     {
765                       fputc_unfiltered (ch, gdb_stdtarg);
766                     }
767                   else
768                     {
769                       fputc_readable (ch, gdb_stdtarg);
770                     }
771                   gdb_flush (gdb_stdtarg);
772                 }
773               
774               /* Only count unprintable characters. */
775               if (! (isprint (ch) || isspace (ch)))
776                 (*pgarbage) += 1;
777
778               if (mips_syn_garbage > 0
779                   && *pgarbage > mips_syn_garbage)
780                 mips_error ("Debug protocol failure:  more than %d characters before a sync.",
781                             mips_syn_garbage);
782             }
783         }
784
785       /* Get the packet header following the SYN.  */
786       for (i = 1; i < HDR_LENGTH; i++)
787         {
788           ch = mips_readchar (timeout);
789           if (ch == SERIAL_TIMEOUT)
790             return -1;
791           /* Make sure this is a header byte.  */
792           if (ch == SYN || !HDR_CHECK (ch))
793             break;
794
795           hdr[i] = ch;
796         }
797
798       /* If we got the complete header, we can return.  Otherwise we
799          loop around and keep looking for SYN.  */
800       if (i >= HDR_LENGTH)
801         return 0;
802     }
803 }
804
805 /* Get a packet header, putting the data in the supplied buffer.
806    PGARBAGE is a pointer to the number of garbage characters received
807    so far.  The last character read is returned in *PCH.  Returns 0
808    for success, -1 for timeout, -2 for error.  */
809
810 static int
811 mips_receive_trailer (trlr, pgarbage, pch, timeout)
812      unsigned char *trlr;
813      int *pgarbage;
814      int *pch;
815      int timeout;
816 {
817   int i;
818   int ch;
819
820   for (i = 0; i < TRLR_LENGTH; i++)
821     {
822       ch = mips_readchar (timeout);
823       *pch = ch;
824       if (ch == SERIAL_TIMEOUT)
825         return -1;
826       if (!TRLR_CHECK (ch))
827         return -2;
828       trlr[i] = ch;
829     }
830   return 0;
831 }
832
833 /* Get the checksum of a packet.  HDR points to the packet header.
834    DATA points to the packet data.  LEN is the length of DATA.  */
835
836 static int
837 mips_cksum (hdr, data, len)
838      const unsigned char *hdr;
839      const unsigned char *data;
840      int len;
841 {
842   register const unsigned char *p;
843   register int c;
844   register int cksum;
845
846   cksum = 0;
847
848   /* The initial SYN is not included in the checksum.  */
849   c = HDR_LENGTH - 1;
850   p = hdr + 1;
851   while (c-- != 0)
852     cksum += *p++;
853
854   c = len;
855   p = data;
856   while (c-- != 0)
857     cksum += *p++;
858
859   return cksum;
860 }
861
862 /* Send a packet containing the given ASCII string.  */
863
864 static void
865 mips_send_packet (s, get_ack)
866      const char *s;
867      int get_ack;
868 {
869   /* unsigned */ int len;
870   unsigned char *packet;
871   register int cksum;
872   int try;
873
874   len = strlen (s);
875   if (len > DATA_MAXLEN)
876     mips_error ("MIPS protocol data packet too long: %s", s);
877
878   packet = (unsigned char *) alloca (HDR_LENGTH + len + TRLR_LENGTH + 1);
879
880   packet[HDR_INDX_SYN] = HDR_SET_SYN (1, len, mips_send_seq);
881   packet[HDR_INDX_TYPE_LEN] = HDR_SET_TYPE_LEN (1, len, mips_send_seq);
882   packet[HDR_INDX_LEN1] = HDR_SET_LEN1 (1, len, mips_send_seq);
883   packet[HDR_INDX_SEQ] = HDR_SET_SEQ (1, len, mips_send_seq);
884
885   memcpy (packet + HDR_LENGTH, s, len);
886
887   cksum = mips_cksum (packet, packet + HDR_LENGTH, len);
888   packet[HDR_LENGTH + len + TRLR_INDX_CSUM1] = TRLR_SET_CSUM1 (cksum);
889   packet[HDR_LENGTH + len + TRLR_INDX_CSUM2] = TRLR_SET_CSUM2 (cksum);
890   packet[HDR_LENGTH + len + TRLR_INDX_CSUM3] = TRLR_SET_CSUM3 (cksum);
891
892   /* Increment the sequence number.  This will set mips_send_seq to
893      the sequence number we expect in the acknowledgement.  */
894   mips_send_seq = (mips_send_seq + 1) % SEQ_MODULOS;
895
896   /* We can only have one outstanding data packet, so we just wait for
897      the acknowledgement here.  Keep retransmitting the packet until
898      we get one, or until we've tried too many times.  */
899   for (try = 0; try < mips_send_retries; try++)
900     {
901       int garbage;
902       int ch;
903
904       if (remote_debug > 0)
905         {
906           /* Don't use _filtered; we can't deal with a QUIT out of
907              target_wait, and I think this might be called from there.  */
908           packet[HDR_LENGTH + len + TRLR_LENGTH] = '\0';
909           fprintf_unfiltered (gdb_stdlog, "Writing \"%s\"\n", packet + 1);
910         }
911
912       if (SERIAL_WRITE (mips_desc, packet,
913                         HDR_LENGTH + len + TRLR_LENGTH) != 0)
914         mips_error ("write to target failed: %s", safe_strerror (errno));
915
916       if (!get_ack)
917         return;
918
919       garbage = 0;
920       ch = 0;
921       while (1)
922         {
923           unsigned char hdr[HDR_LENGTH + 1];
924           unsigned char trlr[TRLR_LENGTH + 1];
925           int err;
926           unsigned int seq;
927
928           /* Get the packet header.  If we time out, resend the data
929              packet.  */
930           err = mips_receive_header (hdr, &garbage, ch, mips_retransmit_wait);
931           if (err != 0)
932             break;
933
934           ch = 0;
935
936           /* If we get a data packet, assume it is a duplicate and
937              ignore it.  FIXME: If the acknowledgement is lost, this
938              data packet may be the packet the remote sends after the
939              acknowledgement.  */
940           if (HDR_IS_DATA (hdr))
941             {
942               int i;
943
944               /* Ignore any errors raised whilst attempting to ignore
945                  packet. */
946
947               len = HDR_GET_LEN (hdr);
948
949               for (i = 0; i < len; i++)
950                 {
951                   int rch;
952
953                   rch = mips_readchar (2);
954                   if (rch == SYN)
955                     {
956                       ch = SYN;
957                       break;
958                     }
959                   if (rch == SERIAL_TIMEOUT)
960                     break;
961                   /* ignore the character */
962                 }
963
964               if (i == len)
965                 (void) mips_receive_trailer (trlr, &garbage, &ch, 2);
966
967               /* We don't bother checking the checksum, or providing an
968                  ACK to the packet. */
969               continue;
970             }
971
972           /* If the length is not 0, this is a garbled packet.  */
973           if (HDR_GET_LEN (hdr) != 0)
974             continue;
975
976           /* Get the packet trailer.  */
977           err = mips_receive_trailer (trlr, &garbage, &ch,
978                                       mips_retransmit_wait);
979
980           /* If we timed out, resend the data packet.  */
981           if (err == -1)
982             break;
983
984           /* If we got a bad character, reread the header.  */
985           if (err != 0)
986             continue;
987
988           /* If the checksum does not match the trailer checksum, this
989              is a bad packet; ignore it.  */
990           if (mips_cksum (hdr, (unsigned char *) NULL, 0)
991               != TRLR_GET_CKSUM (trlr))
992             continue;
993
994           if (remote_debug > 0)
995             {
996               hdr[HDR_LENGTH] = '\0';
997               trlr[TRLR_LENGTH] = '\0';
998               /* Don't use _filtered; we can't deal with a QUIT out of
999                  target_wait, and I think this might be called from there.  */
1000               fprintf_unfiltered (gdb_stdlog, "Got ack %d \"%s%s\"\n",
1001                                   HDR_GET_SEQ (hdr), hdr + 1, trlr);
1002             }
1003
1004           /* If this ack is for the current packet, we're done.  */
1005           seq = HDR_GET_SEQ (hdr);
1006           if (seq == mips_send_seq)
1007             return;
1008
1009           /* If this ack is for the last packet, resend the current
1010              packet.  */
1011           if ((seq + 1) % SEQ_MODULOS == mips_send_seq)
1012             break;
1013
1014           /* Otherwise this is a bad ack; ignore it.  Increment the
1015              garbage count to ensure that we do not stay in this loop
1016              forever.  */
1017           ++garbage;
1018         }
1019     }
1020
1021   mips_error ("Remote did not acknowledge packet");
1022 }
1023
1024 /* Receive and acknowledge a packet, returning the data in BUFF (which
1025    should be DATA_MAXLEN + 1 bytes).  The protocol documentation
1026    implies that only the sender retransmits packets, so this code just
1027    waits silently for a packet.  It returns the length of the received
1028    packet.  If THROW_ERROR is nonzero, call error() on errors.  If not,
1029    don't print an error message and return -1.  */
1030
1031 static int
1032 mips_receive_packet (buff, throw_error, timeout)
1033      char *buff;
1034      int throw_error;
1035      int timeout;
1036 {
1037   int ch;
1038   int garbage;
1039   int len;
1040   unsigned char ack[HDR_LENGTH + TRLR_LENGTH + 1];
1041   int cksum;
1042
1043   ch = 0;
1044   garbage = 0;
1045   while (1)
1046     {
1047       unsigned char hdr[HDR_LENGTH];
1048       unsigned char trlr[TRLR_LENGTH];
1049       int i;
1050       int err;
1051
1052       if (mips_receive_header (hdr, &garbage, ch, timeout) != 0)
1053         {
1054           if (throw_error)
1055             mips_error ("Timed out waiting for remote packet");
1056           else
1057             return -1;
1058         }
1059
1060       ch = 0;
1061
1062       /* An acknowledgement is probably a duplicate; ignore it.  */
1063       if (!HDR_IS_DATA (hdr))
1064         {
1065           len = HDR_GET_LEN (hdr);
1066           /* Check if the length is valid for an ACK, we may aswell
1067              try and read the remainder of the packet: */
1068           if (len == 0)
1069             {
1070               /* Ignore the error condition, since we are going to
1071                  ignore the packet anyway. */
1072               (void) mips_receive_trailer (trlr, &garbage, &ch, timeout);
1073             }
1074           /* Don't use _filtered; we can't deal with a QUIT out of
1075              target_wait, and I think this might be called from there.  */
1076           if (remote_debug > 0)
1077             fprintf_unfiltered (gdb_stdlog, "Ignoring unexpected ACK\n");
1078           continue;
1079         }
1080
1081       len = HDR_GET_LEN (hdr);
1082       for (i = 0; i < len; i++)
1083         {
1084           int rch;
1085
1086           rch = mips_readchar (timeout);
1087           if (rch == SYN)
1088             {
1089               ch = SYN;
1090               break;
1091             }
1092           if (rch == SERIAL_TIMEOUT)
1093             {
1094               if (throw_error)
1095                 mips_error ("Timed out waiting for remote packet");
1096               else
1097                 return -1;
1098             }
1099           buff[i] = rch;
1100         }
1101
1102       if (i < len)
1103         {
1104           /* Don't use _filtered; we can't deal with a QUIT out of
1105              target_wait, and I think this might be called from there.  */
1106           if (remote_debug > 0)
1107             fprintf_unfiltered (gdb_stdlog,
1108                                 "Got new SYN after %d chars (wanted %d)\n",
1109                                 i, len);
1110           continue;
1111         }
1112
1113       err = mips_receive_trailer (trlr, &garbage, &ch, timeout);
1114       if (err == -1)
1115         {
1116           if (throw_error)
1117             mips_error ("Timed out waiting for packet");
1118           else
1119             return -1;
1120         }
1121       if (err == -2)
1122         {
1123           /* Don't use _filtered; we can't deal with a QUIT out of
1124              target_wait, and I think this might be called from there.  */
1125           if (remote_debug > 0)
1126             fprintf_unfiltered (gdb_stdlog, "Got SYN when wanted trailer\n");
1127           continue;
1128         }
1129
1130       /* If this is the wrong sequence number, ignore it.  */
1131       if (HDR_GET_SEQ (hdr) != mips_receive_seq)
1132         {
1133           /* Don't use _filtered; we can't deal with a QUIT out of
1134              target_wait, and I think this might be called from there.  */
1135           if (remote_debug > 0)
1136             fprintf_unfiltered (gdb_stdlog,
1137                                 "Ignoring sequence number %d (want %d)\n",
1138                                 HDR_GET_SEQ (hdr), mips_receive_seq);
1139           continue;
1140         }
1141
1142       if (mips_cksum (hdr, buff, len) == TRLR_GET_CKSUM (trlr))
1143         break;
1144
1145       if (remote_debug > 0)
1146         /* Don't use _filtered; we can't deal with a QUIT out of
1147            target_wait, and I think this might be called from there.  */
1148         printf_unfiltered ("Bad checksum; data %d, trailer %d\n",
1149                            mips_cksum (hdr, buff, len),
1150                            TRLR_GET_CKSUM (trlr));
1151
1152       /* The checksum failed.  Send an acknowledgement for the
1153          previous packet to tell the remote to resend the packet.  */
1154       ack[HDR_INDX_SYN] = HDR_SET_SYN (0, 0, mips_receive_seq);
1155       ack[HDR_INDX_TYPE_LEN] = HDR_SET_TYPE_LEN (0, 0, mips_receive_seq);
1156       ack[HDR_INDX_LEN1] = HDR_SET_LEN1 (0, 0, mips_receive_seq);
1157       ack[HDR_INDX_SEQ] = HDR_SET_SEQ (0, 0, mips_receive_seq);
1158
1159       cksum = mips_cksum (ack, (unsigned char *) NULL, 0);
1160
1161       ack[HDR_LENGTH + TRLR_INDX_CSUM1] = TRLR_SET_CSUM1 (cksum);
1162       ack[HDR_LENGTH + TRLR_INDX_CSUM2] = TRLR_SET_CSUM2 (cksum);
1163       ack[HDR_LENGTH + TRLR_INDX_CSUM3] = TRLR_SET_CSUM3 (cksum);
1164
1165       if (remote_debug > 0)
1166         {
1167           ack[HDR_LENGTH + TRLR_LENGTH] = '\0';
1168           /* Don't use _filtered; we can't deal with a QUIT out of
1169              target_wait, and I think this might be called from there.  */
1170           printf_unfiltered ("Writing ack %d \"%s\"\n", mips_receive_seq,
1171                              ack + 1);
1172         }
1173
1174       if (SERIAL_WRITE (mips_desc, ack, HDR_LENGTH + TRLR_LENGTH) != 0)
1175         {
1176           if (throw_error)
1177             mips_error ("write to target failed: %s", safe_strerror (errno));
1178           else
1179             return -1;
1180         }
1181     }
1182
1183   if (remote_debug > 0)
1184     {
1185       buff[len] = '\0';
1186       /* Don't use _filtered; we can't deal with a QUIT out of
1187          target_wait, and I think this might be called from there.  */
1188       printf_unfiltered ("Got packet \"%s\"\n", buff);
1189     }
1190
1191   /* We got the packet.  Send an acknowledgement.  */
1192   mips_receive_seq = (mips_receive_seq + 1) % SEQ_MODULOS;
1193
1194   ack[HDR_INDX_SYN] = HDR_SET_SYN (0, 0, mips_receive_seq);
1195   ack[HDR_INDX_TYPE_LEN] = HDR_SET_TYPE_LEN (0, 0, mips_receive_seq);
1196   ack[HDR_INDX_LEN1] = HDR_SET_LEN1 (0, 0, mips_receive_seq);
1197   ack[HDR_INDX_SEQ] = HDR_SET_SEQ (0, 0, mips_receive_seq);
1198
1199   cksum = mips_cksum (ack, (unsigned char *) NULL, 0);
1200
1201   ack[HDR_LENGTH + TRLR_INDX_CSUM1] = TRLR_SET_CSUM1 (cksum);
1202   ack[HDR_LENGTH + TRLR_INDX_CSUM2] = TRLR_SET_CSUM2 (cksum);
1203   ack[HDR_LENGTH + TRLR_INDX_CSUM3] = TRLR_SET_CSUM3 (cksum);
1204
1205   if (remote_debug > 0)
1206     {
1207       ack[HDR_LENGTH + TRLR_LENGTH] = '\0';
1208       /* Don't use _filtered; we can't deal with a QUIT out of
1209          target_wait, and I think this might be called from there.  */
1210       printf_unfiltered ("Writing ack %d \"%s\"\n", mips_receive_seq,
1211                          ack + 1);
1212     }
1213
1214   if (SERIAL_WRITE (mips_desc, ack, HDR_LENGTH + TRLR_LENGTH) != 0)
1215     {
1216       if (throw_error)
1217         mips_error ("write to target failed: %s", safe_strerror (errno));
1218       else
1219         return -1;
1220     }
1221
1222   return len;
1223 }
1224 \f
1225 /* Optionally send a request to the remote system and optionally wait
1226    for the reply.  This implements the remote debugging protocol,
1227    which is built on top of the packet protocol defined above.  Each
1228    request has an ADDR argument and a DATA argument.  The following
1229    requests are defined:
1230
1231    \0   don't send a request; just wait for a reply
1232    i    read word from instruction space at ADDR
1233    d    read word from data space at ADDR
1234    I    write DATA to instruction space at ADDR
1235    D    write DATA to data space at ADDR
1236    r    read register number ADDR
1237    R    set register number ADDR to value DATA
1238    c    continue execution (if ADDR != 1, set pc to ADDR)
1239    s    single step (if ADDR != 1, set pc to ADDR)
1240
1241    The read requests return the value requested.  The write requests
1242    return the previous value in the changed location.  The execution
1243    requests return a UNIX wait value (the approximate signal which
1244    caused execution to stop is in the upper eight bits).
1245
1246    If PERR is not NULL, this function waits for a reply.  If an error
1247    occurs, it sets *PERR to 1 and sets errno according to what the
1248    target board reports.  */
1249
1250 static CORE_ADDR
1251 mips_request (cmd, addr, data, perr, timeout, buff)
1252      int cmd;
1253      CORE_ADDR addr;
1254      CORE_ADDR data;
1255      int *perr;
1256      int timeout;
1257      char *buff;
1258 {
1259   char myBuff[DATA_MAXLEN + 1];
1260   int len;
1261   int rpid;
1262   char rcmd;
1263   int rerrflg;
1264   unsigned long rresponse;
1265
1266   if (buff == (char *) NULL)
1267     buff = myBuff;
1268
1269   if (cmd != '\0')
1270     {
1271       if (mips_need_reply)
1272         internal_error ("mips_request: Trying to send command before reply");
1273       sprintf (buff, "0x0 %c 0x%s 0x%s", cmd, paddr_nz (addr), paddr_nz (data));
1274       mips_send_packet (buff, 1);
1275       mips_need_reply = 1;
1276     }
1277
1278   if (perr == (int *) NULL)
1279     return 0;
1280
1281   if (!mips_need_reply)
1282     internal_error ("mips_request: Trying to get reply before command");
1283
1284   mips_need_reply = 0;
1285
1286   len = mips_receive_packet (buff, 1, timeout);
1287   buff[len] = '\0';
1288
1289   if (sscanf (buff, "0x%x %c 0x%x 0x%lx",
1290               &rpid, &rcmd, &rerrflg, &rresponse) != 4
1291       || (cmd != '\0' && rcmd != cmd))
1292     mips_error ("Bad response from remote board");
1293
1294   if (rerrflg != 0)
1295     {
1296       *perr = 1;
1297
1298       /* FIXME: This will returns MIPS errno numbers, which may or may
1299          not be the same as errno values used on other systems.  If
1300          they stick to common errno values, they will be the same, but
1301          if they don't, they must be translated.  */
1302       errno = rresponse;
1303
1304       return 0;
1305     }
1306
1307   *perr = 0;
1308   return rresponse;
1309 }
1310
1311 static void
1312 mips_initialize_cleanups (arg)
1313      PTR arg;
1314 {
1315   mips_initializing = 0;
1316 }
1317
1318 static void
1319 mips_exit_cleanups (arg)
1320      PTR arg;
1321 {
1322   mips_exiting = 0;
1323 }
1324
1325 static void
1326 mips_send_command (cmd, prompt)
1327      const char *cmd;
1328      int prompt;
1329 {
1330   SERIAL_WRITE (mips_desc, cmd, strlen (cmd));
1331   mips_expect (cmd);
1332   mips_expect ("\n");
1333   if (prompt)
1334     mips_expect (mips_monitor_prompt);
1335 }
1336
1337 /* Enter remote (dbx) debug mode: */
1338 static void
1339 mips_enter_debug ()
1340 {
1341   /* Reset the sequence numbers, ready for the new debug sequence: */
1342   mips_send_seq = 0;
1343   mips_receive_seq = 0;
1344
1345   if (mips_monitor != MON_IDT)
1346     mips_send_command ("debug\r", 0);
1347   else                          /* assume IDT monitor by default */
1348     mips_send_command ("db tty0\r", 0);
1349
1350   sleep (1);
1351   SERIAL_WRITE (mips_desc, "\r", sizeof "\r" - 1);
1352
1353   /* We don't need to absorb any spurious characters here, since the
1354      mips_receive_header will eat up a reasonable number of characters
1355      whilst looking for the SYN, however this avoids the "garbage"
1356      being displayed to the user. */
1357   if (mips_monitor != MON_IDT)
1358     mips_expect ("\r");
1359
1360   {
1361     char buff[DATA_MAXLEN + 1];
1362     if (mips_receive_packet (buff, 1, 3) < 0)
1363       mips_error ("Failed to initialize (didn't receive packet).");
1364   }
1365 }
1366
1367 /* Exit remote (dbx) debug mode, returning to the monitor prompt: */
1368 static int
1369 mips_exit_debug ()
1370 {
1371   int err;
1372   struct cleanup *old_cleanups = make_cleanup (mips_exit_cleanups, NULL);
1373
1374   mips_exiting = 1;
1375
1376   if (mips_monitor != MON_IDT)
1377     {
1378       /* The DDB (NEC) and MiniRISC (LSI) versions of PMON exit immediately,
1379          so we do not get a reply to this command: */
1380       mips_request ('x', (unsigned int) 0, (unsigned int) 0, NULL,
1381                     mips_receive_wait, NULL);
1382       mips_need_reply = 0;
1383       if (!mips_expect (" break!"))
1384         return -1;
1385     }
1386   else
1387     mips_request ('x', (unsigned int) 0, (unsigned int) 0, &err,
1388                   mips_receive_wait, NULL);
1389
1390   if (!mips_expect (mips_monitor_prompt))
1391     return -1;
1392
1393   do_cleanups (old_cleanups);
1394
1395   return 0;
1396 }
1397
1398 /* Initialize a new connection to the MIPS board, and make sure we are
1399    really connected.  */
1400
1401 static void
1402 mips_initialize ()
1403 {
1404   int err;
1405   struct cleanup *old_cleanups = make_cleanup (mips_initialize_cleanups, NULL);
1406   int j;
1407
1408   /* What is this code doing here?  I don't see any way it can happen, and
1409      it might mean mips_initializing didn't get cleared properly.
1410      So I'll make it a warning.  */
1411
1412   if (mips_initializing)
1413     {
1414       warning ("internal error: mips_initialize called twice");
1415       return;
1416     }
1417
1418   mips_wait_flag = 0;
1419   mips_initializing = 1;
1420
1421   /* At this point, the packit protocol isn't responding.  We'll try getting
1422      into the monitor, and restarting the protocol.  */
1423
1424   /* Force the system into the monitor.  After this we *should* be at
1425      the mips_monitor_prompt.  */
1426   if (mips_monitor != MON_IDT)
1427     j = 0;                      /* start by checking if we are already at the prompt */
1428   else
1429     j = 1;                      /* start by sending a break */
1430   for (; j <= 4; j++)
1431     {
1432       switch (j)
1433         {
1434         case 0:         /* First, try sending a CR */
1435           SERIAL_FLUSH_INPUT (mips_desc);
1436           SERIAL_WRITE (mips_desc, "\r", 1);
1437           break;
1438         case 1:         /* First, try sending a break */
1439           SERIAL_SEND_BREAK (mips_desc);
1440           break;
1441         case 2:         /* Then, try a ^C */
1442           SERIAL_WRITE (mips_desc, "\003", 1);
1443           break;
1444         case 3:         /* Then, try escaping from download */
1445           {
1446             if (mips_monitor != MON_IDT)
1447               {
1448                 char tbuff[7];
1449
1450                 /* We shouldn't need to send multiple termination
1451                    sequences, since the target performs line (or
1452                    block) reads, and then processes those
1453                    packets. In-case we were downloading a large packet
1454                    we flush the output buffer before inserting a
1455                    termination sequence. */
1456                 SERIAL_FLUSH_OUTPUT (mips_desc);
1457                 sprintf (tbuff, "\r/E/E\r");
1458                 SERIAL_WRITE (mips_desc, tbuff, 6);
1459               }
1460             else
1461               {
1462                 char srec[10];
1463                 int i;
1464
1465                 /* We are possibly in binary download mode, having
1466                    aborted in the middle of an S-record.  ^C won't
1467                    work because of binary mode.  The only reliable way
1468                    out is to send enough termination packets (8 bytes)
1469                    to fill up and then overflow the largest size
1470                    S-record (255 bytes in this case).  This amounts to
1471                    256/8 + 1 packets.
1472                  */
1473
1474                 mips_make_srec (srec, '7', 0, NULL, 0);
1475
1476                 for (i = 1; i <= 33; i++)
1477                   {
1478                     SERIAL_WRITE (mips_desc, srec, 8);
1479
1480                     if (SERIAL_READCHAR (mips_desc, 0) >= 0)
1481                       break;    /* Break immediatly if we get something from
1482                                    the board. */
1483                   }
1484               }
1485           }
1486           break;
1487         case 4:
1488           mips_error ("Failed to initialize.");
1489         }
1490
1491       if (mips_expect (mips_monitor_prompt))
1492         break;
1493     }
1494
1495   if (mips_monitor != MON_IDT)
1496     {
1497       /* Sometimes PMON ignores the first few characters in the first
1498          command sent after a load.  Sending a blank command gets
1499          around that.  */
1500       mips_send_command ("\r", -1);
1501
1502       /* Ensure the correct target state: */
1503       if (mips_monitor != MON_LSI)
1504         mips_send_command ("set regsize 64\r", -1);
1505       mips_send_command ("set hostport tty0\r", -1);
1506       mips_send_command ("set brkcmd \"\"\r", -1);
1507       /* Delete all the current breakpoints: */
1508       mips_send_command ("db *\r", -1);
1509       /* NOTE: PMON does not have breakpoint support through the
1510          "debug" mode, only at the monitor command-line. */
1511     }
1512
1513   mips_enter_debug ();
1514
1515   /* Clear all breakpoints: */
1516   if ((mips_monitor == MON_IDT
1517        && clear_breakpoint (-1, 0, BREAK_UNUSED) == 0)
1518       || mips_monitor == MON_LSI)
1519     monitor_supports_breakpoints = 1;
1520   else
1521     monitor_supports_breakpoints = 0;
1522
1523   do_cleanups (old_cleanups);
1524
1525   /* If this doesn't call error, we have connected; we don't care if
1526      the request itself succeeds or fails.  */
1527
1528   mips_request ('r', (unsigned int) 0, (unsigned int) 0, &err,
1529                 mips_receive_wait, NULL);
1530   set_current_frame (create_new_frame (read_fp (), read_pc ()));
1531   select_frame (get_current_frame (), 0);
1532 }
1533
1534 /* Open a connection to the remote board.  */
1535 static void
1536 common_open (ops, name, from_tty, new_monitor, new_monitor_prompt)
1537      struct target_ops *ops;
1538      char *name;
1539      int from_tty;
1540      enum mips_monitor_type new_monitor;
1541      char *new_monitor_prompt;
1542 {
1543   char *ptype;
1544   char *serial_port_name;
1545   char *remote_name = 0;
1546   char *local_name = 0;
1547   char **argv;
1548
1549   if (name == 0)
1550     error (
1551             "To open a MIPS remote debugging connection, you need to specify what serial\n\
1552 device is attached to the target board (e.g., /dev/ttya).\n"
1553             "If you want to use TFTP to download to the board, specify the name of a\n"
1554             "temporary file to be used by GDB for downloads as the second argument.\n"
1555             "This filename must be in the form host:filename, where host is the name\n"
1556             "of the host running the TFTP server, and the file must be readable by the\n"
1557             "world.  If the local name of the temporary file differs from the name as\n"
1558             "seen from the board via TFTP, specify that name as the third parameter.\n");
1559
1560   /* Parse the serial port name, the optional TFTP name, and the
1561      optional local TFTP name.  */
1562   if ((argv = buildargv (name)) == NULL)
1563     nomem (0);
1564   make_cleanup_freeargv (argv);
1565
1566   serial_port_name = strsave (argv[0]);
1567   if (argv[1])                  /* remote TFTP name specified? */
1568     {
1569       remote_name = argv[1];
1570       if (argv[2])              /* local TFTP filename specified? */
1571         local_name = argv[2];
1572     }
1573
1574   target_preopen (from_tty);
1575
1576   if (mips_is_open)
1577     unpush_target (current_ops);
1578
1579   /* Open and initialize the serial port.  */
1580   mips_desc = SERIAL_OPEN (serial_port_name);
1581   if (mips_desc == (serial_t) NULL)
1582     perror_with_name (serial_port_name);
1583
1584   if (baud_rate != -1)
1585     {
1586       if (SERIAL_SETBAUDRATE (mips_desc, baud_rate))
1587         {
1588           SERIAL_CLOSE (mips_desc);
1589           perror_with_name (serial_port_name);
1590         }
1591     }
1592
1593   SERIAL_RAW (mips_desc);
1594
1595   /* Open and initialize the optional download port.  If it is in the form
1596      hostname#portnumber, it's a UDP socket.  If it is in the form
1597      hostname:filename, assume it's the TFTP filename that must be
1598      passed to the DDB board to tell it where to get the load file.  */
1599   if (remote_name)
1600     {
1601       if (strchr (remote_name, '#'))
1602         {
1603           udp_desc = SERIAL_OPEN (remote_name);
1604           if (!udp_desc)
1605             perror_with_name ("Unable to open UDP port");
1606           udp_in_use = 1;
1607         }
1608       else
1609         {
1610           /* Save the remote and local names of the TFTP temp file.  If
1611              the user didn't specify a local name, assume it's the same
1612              as the part of the remote name after the "host:".  */
1613           if (tftp_name)
1614             free (tftp_name);
1615           if (tftp_localname)
1616             free (tftp_localname);
1617           if (local_name == NULL)
1618             if ((local_name = strchr (remote_name, ':')) != NULL)
1619               local_name++;     /* skip over the colon */
1620           if (local_name == NULL)
1621             local_name = remote_name;   /* local name same as remote name */
1622           tftp_name = strsave (remote_name);
1623           tftp_localname = strsave (local_name);
1624           tftp_in_use = 1;
1625         }
1626     }
1627
1628   current_ops = ops;
1629   mips_is_open = 1;
1630
1631   /* Reset the expected monitor prompt if it's never been set before.  */
1632   if (mips_monitor_prompt == NULL)
1633     mips_monitor_prompt = strsave (new_monitor_prompt);
1634   mips_monitor = new_monitor;
1635
1636   mips_initialize ();
1637
1638   if (from_tty)
1639     printf_unfiltered ("Remote MIPS debugging using %s\n", serial_port_name);
1640
1641   /* Switch to using remote target now.  */
1642   push_target (ops);
1643
1644   /* FIXME: Should we call start_remote here?  */
1645
1646   /* Try to figure out the processor model if possible.  */
1647   ptype = mips_read_processor_type ();
1648   if (ptype)
1649     mips_set_processor_type_command (strsave (ptype), 0);
1650
1651 /* This is really the job of start_remote however, that makes an assumption
1652    that the target is about to print out a status message of some sort.  That
1653    doesn't happen here (in fact, it may not be possible to get the monitor to
1654    send the appropriate packet).  */
1655
1656   flush_cached_frames ();
1657   registers_changed ();
1658   stop_pc = read_pc ();
1659   set_current_frame (create_new_frame (read_fp (), stop_pc));
1660   select_frame (get_current_frame (), 0);
1661   print_stack_frame (selected_frame, -1, 1);
1662   free (serial_port_name);
1663 }
1664
1665 static void
1666 mips_open (name, from_tty)
1667      char *name;
1668      int from_tty;
1669 {
1670   const char *monitor_prompt = NULL;
1671   if (TARGET_ARCHITECTURE != NULL
1672       && TARGET_ARCHITECTURE->arch == bfd_arch_mips)
1673     {
1674     switch (TARGET_ARCHITECTURE->mach)
1675       {
1676       case bfd_mach_mips4100:
1677       case bfd_mach_mips4300:
1678       case bfd_mach_mips4600:
1679       case bfd_mach_mips4650:
1680       case bfd_mach_mips5000:
1681         monitor_prompt = "<RISQ> ";
1682         break;
1683       }
1684     }
1685   if (monitor_prompt == NULL)
1686     monitor_prompt = "<IDT>";
1687   common_open (&mips_ops, name, from_tty, MON_IDT, monitor_prompt);
1688 }
1689
1690 static void
1691 pmon_open (name, from_tty)
1692      char *name;
1693      int from_tty;
1694 {
1695   common_open (&pmon_ops, name, from_tty, MON_PMON, "PMON> ");
1696 }
1697
1698 static void
1699 ddb_open (name, from_tty)
1700      char *name;
1701      int from_tty;
1702 {
1703   common_open (&ddb_ops, name, from_tty, MON_DDB, "NEC010>");
1704 }
1705
1706 static void
1707 lsi_open (name, from_tty)
1708      char *name;
1709      int from_tty;
1710 {
1711   int i;
1712
1713   /* Clear the LSI breakpoint table.  */
1714   for (i = 0; i < MAX_LSI_BREAKPOINTS; i++)
1715     lsi_breakpoints[i].type = BREAK_UNUSED;
1716
1717   common_open (&lsi_ops, name, from_tty, MON_LSI, "PMON> ");
1718 }
1719
1720 /* Close a connection to the remote board.  */
1721
1722 static void
1723 mips_close (quitting)
1724      int quitting;
1725 {
1726   if (mips_is_open)
1727     {
1728       /* Get the board out of remote debugging mode.  */
1729       (void) mips_exit_debug ();
1730
1731       close_ports ();
1732     }
1733 }
1734
1735 /* Detach from the remote board.  */
1736
1737 static void
1738 mips_detach (args, from_tty)
1739      char *args;
1740      int from_tty;
1741 {
1742   if (args)
1743     error ("Argument given to \"detach\" when remotely debugging.");
1744
1745   pop_target ();
1746
1747   mips_close (1);
1748
1749   if (from_tty)
1750     printf_unfiltered ("Ending remote MIPS debugging.\n");
1751 }
1752
1753 /* Tell the target board to resume.  This does not wait for a reply
1754    from the board, except in the case of single-stepping on LSI boards,
1755    where PMON does return a reply.  */
1756
1757 static void
1758 mips_resume (pid, step, siggnal)
1759      int pid, step;
1760      enum target_signal siggnal;
1761 {
1762   int err;
1763
1764   /* LSI PMON requires returns a reply packet "0x1 s 0x0 0x57f" after
1765      a single step, so we wait for that.  */
1766   mips_request (step ? 's' : 'c',
1767                 (unsigned int) 1,
1768                 (unsigned int) siggnal,
1769                 mips_monitor == MON_LSI && step ? &err : (int *) NULL,
1770                 mips_receive_wait, NULL);
1771 }
1772
1773 /* Return the signal corresponding to SIG, where SIG is the number which
1774    the MIPS protocol uses for the signal.  */
1775 enum target_signal
1776 mips_signal_from_protocol (sig)
1777      int sig;
1778 {
1779   /* We allow a few more signals than the IDT board actually returns, on
1780      the theory that there is at least *some* hope that perhaps the numbering
1781      for these signals is widely agreed upon.  */
1782   if (sig <= 0
1783       || sig > 31)
1784     return TARGET_SIGNAL_UNKNOWN;
1785
1786   /* Don't want to use target_signal_from_host because we are converting
1787      from MIPS signal numbers, not host ones.  Our internal numbers
1788      match the MIPS numbers for the signals the board can return, which
1789      are: SIGINT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, SIGTRAP.  */
1790   return (enum target_signal) sig;
1791 }
1792
1793 /* Wait until the remote stops, and return a wait status.  */
1794
1795 static int
1796 mips_wait (pid, status)
1797      int pid;
1798      struct target_waitstatus *status;
1799 {
1800   int rstatus;
1801   int err;
1802   char buff[DATA_MAXLEN];
1803   int rpc, rfp, rsp;
1804   char flags[20];
1805   int nfields;
1806   int i;
1807
1808   interrupt_count = 0;
1809   hit_watchpoint = 0;
1810
1811   /* If we have not sent a single step or continue command, then the
1812      board is waiting for us to do something.  Return a status
1813      indicating that it is stopped.  */
1814   if (!mips_need_reply)
1815     {
1816       status->kind = TARGET_WAITKIND_STOPPED;
1817       status->value.sig = TARGET_SIGNAL_TRAP;
1818       return 0;
1819     }
1820
1821   /* No timeout; we sit here as long as the program continues to execute.  */
1822   mips_wait_flag = 1;
1823   rstatus = mips_request ('\000', (unsigned int) 0, (unsigned int) 0, &err, -1,
1824                           buff);
1825   mips_wait_flag = 0;
1826   if (err)
1827     mips_error ("Remote failure: %s", safe_strerror (errno));
1828
1829   /* On returning from a continue, the PMON monitor seems to start
1830      echoing back the messages we send prior to sending back the
1831      ACK. The code can cope with this, but to try and avoid the
1832      unnecessary serial traffic, and "spurious" characters displayed
1833      to the user, we cheat and reset the debug protocol. The problems
1834      seems to be caused by a check on the number of arguments, and the
1835      command length, within the monitor causing it to echo the command
1836      as a bad packet. */
1837   if (mips_monitor == MON_PMON)
1838     {
1839       mips_exit_debug ();
1840       mips_enter_debug ();
1841     }
1842
1843   /* See if we got back extended status.  If so, pick out the pc, fp, sp, etc... */
1844
1845   nfields = sscanf (buff, "0x%*x %*c 0x%*x 0x%*x 0x%x 0x%x 0x%x 0x%*x %s",
1846                     &rpc, &rfp, &rsp, flags);
1847   if (nfields >= 3)
1848     {
1849       char buf[MAX_REGISTER_RAW_SIZE];
1850
1851       store_unsigned_integer (buf, REGISTER_RAW_SIZE (PC_REGNUM), rpc);
1852       supply_register (PC_REGNUM, buf);
1853
1854       store_unsigned_integer (buf, REGISTER_RAW_SIZE (PC_REGNUM), rfp);
1855       supply_register (30, buf);        /* This register they are avoiding and so it is unnamed */
1856
1857       store_unsigned_integer (buf, REGISTER_RAW_SIZE (SP_REGNUM), rsp);
1858       supply_register (SP_REGNUM, buf);
1859
1860       store_unsigned_integer (buf, REGISTER_RAW_SIZE (FP_REGNUM), 0);
1861       supply_register (FP_REGNUM, buf);
1862
1863       if (nfields == 9)
1864         {
1865           int i;
1866
1867           for (i = 0; i <= 2; i++)
1868             if (flags[i] == 'r' || flags[i] == 'w')
1869               hit_watchpoint = 1;
1870             else if (flags[i] == '\000')
1871               break;
1872         }
1873     }
1874
1875   if (strcmp (target_shortname, "lsi") == 0)
1876     {
1877 #if 0
1878       /* If this is an LSI PMON target, see if we just hit a hardrdware watchpoint.
1879          Right now, PMON doesn't give us enough information to determine which
1880          breakpoint we hit.  So we have to look up the PC in our own table
1881          of breakpoints, and if found, assume it's just a normal instruction
1882          fetch breakpoint, not a data watchpoint.  FIXME when PMON
1883          provides some way to tell us what type of breakpoint it is.  */
1884       int i;
1885       CORE_ADDR pc = read_pc ();
1886
1887       hit_watchpoint = 1;
1888       for (i = 0; i < MAX_LSI_BREAKPOINTS; i++)
1889         {
1890           if (lsi_breakpoints[i].addr == pc
1891               && lsi_breakpoints[i].type == BREAK_FETCH)
1892             {
1893               hit_watchpoint = 0;
1894               break;
1895             }
1896         }
1897 #else
1898       /* If a data breakpoint was hit, PMON returns the following packet:
1899          0x1 c 0x0 0x57f 0x1
1900          The return packet from an ordinary breakpoint doesn't have the
1901          extra 0x01 field tacked onto the end.  */
1902       if (nfields == 1 && rpc == 1)
1903         hit_watchpoint = 1;
1904 #endif
1905     }
1906
1907   /* NOTE: The following (sig) numbers are defined by PMON:
1908      SPP_SIGTRAP     5       breakpoint
1909      SPP_SIGINT      2
1910      SPP_SIGSEGV     11
1911      SPP_SIGBUS      10
1912      SPP_SIGILL      4
1913      SPP_SIGFPE      8
1914      SPP_SIGTERM     15 */
1915
1916   /* Translate a MIPS waitstatus.  We use constants here rather than WTERMSIG
1917      and so on, because the constants we want here are determined by the
1918      MIPS protocol and have nothing to do with what host we are running on.  */
1919   if ((rstatus & 0xff) == 0)
1920     {
1921       status->kind = TARGET_WAITKIND_EXITED;
1922       status->value.integer = (((rstatus) >> 8) & 0xff);
1923     }
1924   else if ((rstatus & 0xff) == 0x7f)
1925     {
1926       status->kind = TARGET_WAITKIND_STOPPED;
1927       status->value.sig = mips_signal_from_protocol (((rstatus) >> 8) & 0xff);
1928
1929       /* If the stop PC is in the _exit function, assume
1930          we hit the 'break 0x3ff' instruction in _exit, so this
1931          is not a normal breakpoint.  */
1932       if (strcmp (target_shortname, "lsi") == 0)
1933         {
1934           char *func_name;
1935           CORE_ADDR func_start;
1936           CORE_ADDR pc = read_pc ();
1937
1938           find_pc_partial_function (pc, &func_name, &func_start, NULL);
1939           if (func_name != NULL && strcmp (func_name, "_exit") == 0
1940               && func_start == pc)
1941             status->kind = TARGET_WAITKIND_EXITED;
1942         }
1943     }
1944   else
1945     {
1946       status->kind = TARGET_WAITKIND_SIGNALLED;
1947       status->value.sig = mips_signal_from_protocol (rstatus & 0x7f);
1948     }
1949
1950   return 0;
1951 }
1952
1953 /* We have to map between the register numbers used by gdb and the
1954    register numbers used by the debugging protocol.  This function
1955    assumes that we are using tm-mips.h.  */
1956
1957 #define REGNO_OFFSET 96
1958
1959 static int
1960 mips_map_regno (regno)
1961      int regno;
1962 {
1963   if (regno < 32)
1964     return regno;
1965   if (regno >= FP0_REGNUM && regno < FP0_REGNUM + 32)
1966     return regno - FP0_REGNUM + 32;
1967   switch (regno)
1968     {
1969     case PC_REGNUM:
1970       return REGNO_OFFSET + 0;
1971     case CAUSE_REGNUM:
1972       return REGNO_OFFSET + 1;
1973     case HI_REGNUM:
1974       return REGNO_OFFSET + 2;
1975     case LO_REGNUM:
1976       return REGNO_OFFSET + 3;
1977     case FCRCS_REGNUM:
1978       return REGNO_OFFSET + 4;
1979     case FCRIR_REGNUM:
1980       return REGNO_OFFSET + 5;
1981     default:
1982       /* FIXME: Is there a way to get the status register?  */
1983       return 0;
1984     }
1985 }
1986
1987 /* Fetch the remote registers.  */
1988
1989 static void
1990 mips_fetch_registers (regno)
1991      int regno;
1992 {
1993   unsigned LONGEST val;
1994   int err;
1995
1996   if (regno == -1)
1997     {
1998       for (regno = 0; regno < NUM_REGS; regno++)
1999         mips_fetch_registers (regno);
2000       return;
2001     }
2002
2003   if (regno == FP_REGNUM || regno == ZERO_REGNUM)
2004     /* FP_REGNUM on the mips is a hack which is just supposed to read
2005        zero (see also mips-nat.c).  */
2006     val = 0;
2007   else
2008     {
2009       /* If PMON doesn't support this register, don't waste serial
2010          bandwidth trying to read it.  */
2011       int pmon_reg = mips_map_regno (regno);
2012       if (regno != 0 && pmon_reg == 0)
2013         val = 0;
2014       else
2015         {
2016           /* Unfortunately the PMON version in the Vr4300 board has been
2017              compiled without the 64bit register access commands. This
2018              means we cannot get hold of the full register width. */
2019           if (mips_monitor == MON_DDB)
2020             val = (unsigned) mips_request ('t', (unsigned int) pmon_reg,
2021                            (unsigned int) 0, &err, mips_receive_wait, NULL);
2022           else
2023             val = mips_request ('r', (unsigned int) pmon_reg,
2024                            (unsigned int) 0, &err, mips_receive_wait, NULL);
2025           if (err)
2026             mips_error ("Can't read register %d: %s", regno,
2027                         safe_strerror (errno));
2028         }
2029     }
2030
2031   {
2032     char buf[MAX_REGISTER_RAW_SIZE];
2033
2034     /* We got the number the register holds, but gdb expects to see a
2035        value in the target byte ordering.  */
2036     store_unsigned_integer (buf, REGISTER_RAW_SIZE (regno), val);
2037     supply_register (regno, buf);
2038   }
2039 }
2040
2041 /* Prepare to store registers.  The MIPS protocol can store individual
2042    registers, so this function doesn't have to do anything.  */
2043
2044 static void
2045 mips_prepare_to_store ()
2046 {
2047 }
2048
2049 /* Store remote register(s).  */
2050
2051 static void
2052 mips_store_registers (regno)
2053      int regno;
2054 {
2055   int err;
2056
2057   if (regno == -1)
2058     {
2059       for (regno = 0; regno < NUM_REGS; regno++)
2060         mips_store_registers (regno);
2061       return;
2062     }
2063
2064   mips_request ('R', (unsigned int) mips_map_regno (regno),
2065                 read_register (regno),
2066                 &err, mips_receive_wait, NULL);
2067   if (err)
2068     mips_error ("Can't write register %d: %s", regno, safe_strerror (errno));
2069 }
2070
2071 /* Fetch a word from the target board.  */
2072
2073 static unsigned int
2074 mips_fetch_word (addr)
2075      CORE_ADDR addr;
2076 {
2077   unsigned int val;
2078   int err;
2079
2080   /* FIXME! addr was cast to uint! */
2081   val = mips_request ('d', addr, (unsigned int) 0, &err,
2082                       mips_receive_wait, NULL);
2083   if (err)
2084     {
2085       /* Data space failed; try instruction space.  */
2086       /* FIXME! addr was cast to uint! */
2087       val = mips_request ('i', addr, (unsigned int) 0, &err,
2088                           mips_receive_wait, NULL);
2089       if (err)
2090         mips_error ("Can't read address 0x%s: %s",
2091                     paddr_nz (addr), safe_strerror (errno));
2092     }
2093   return val;
2094 }
2095
2096 /* Store a word to the target board.  Returns errno code or zero for
2097    success.  If OLD_CONTENTS is non-NULL, put the old contents of that
2098    memory location there.  */
2099
2100 /* FIXME! make sure only 32-bit quantities get stored! */
2101 static int
2102 mips_store_word (addr, val, old_contents)
2103      CORE_ADDR addr;
2104      unsigned int val;
2105      char *old_contents;
2106 {
2107   int err;
2108   unsigned int oldcontents;
2109
2110   oldcontents = mips_request ('D', addr, (unsigned int) val,
2111                               &err,
2112                               mips_receive_wait, NULL);
2113   if (err)
2114     {
2115       /* Data space failed; try instruction space.  */
2116       oldcontents = mips_request ('I', addr,
2117                                   (unsigned int) val, &err,
2118                                   mips_receive_wait, NULL);
2119       if (err)
2120         return errno;
2121     }
2122   if (old_contents != NULL)
2123     store_unsigned_integer (old_contents, 4, oldcontents);
2124   return 0;
2125 }
2126
2127 /* Read or write LEN bytes from inferior memory at MEMADDR,
2128    transferring to or from debugger address MYADDR.  Write to inferior
2129    if SHOULD_WRITE is nonzero.  Returns length of data written or
2130    read; 0 for error.  Note that protocol gives us the correct value
2131    for a longword, since it transfers values in ASCII.  We want the
2132    byte values, so we have to swap the longword values.  */
2133
2134 static int
2135 mips_xfer_memory (memaddr, myaddr, len, write, ignore)
2136      CORE_ADDR memaddr;
2137      char *myaddr;
2138      int len;
2139      int write;
2140      struct target_ops *ignore;
2141 {
2142   register int i;
2143   /* Round starting address down to longword boundary.  */
2144   register CORE_ADDR addr = memaddr & ~3;
2145   /* Round ending address up; get number of longwords that makes.  */
2146   register int count = (((memaddr + len) - addr) + 3) / 4;
2147   /* Allocate buffer of that many longwords.  */
2148   register char *buffer = alloca (count * 4);
2149
2150   int status;
2151
2152   if (write)
2153     {
2154       /* Fill start and end extra bytes of buffer with existing data.  */
2155       if (addr != memaddr || len < 4)
2156         {
2157           /* Need part of initial word -- fetch it.  */
2158           store_unsigned_integer (&buffer[0], 4, mips_fetch_word (addr));
2159         }
2160
2161       if (count > 1)
2162         {
2163           /* Need part of last word -- fetch it.  FIXME: we do this even
2164              if we don't need it.  */
2165           store_unsigned_integer (&buffer[(count - 1) * 4], 4,
2166                                   mips_fetch_word (addr + (count - 1) * 4));
2167         }
2168
2169       /* Copy data to be written over corresponding part of buffer */
2170
2171       memcpy ((char *) buffer + (memaddr & 3), myaddr, len);
2172
2173       /* Write the entire buffer.  */
2174
2175       for (i = 0; i < count; i++, addr += 4)
2176         {
2177           status = mips_store_word (addr,
2178                                extract_unsigned_integer (&buffer[i * 4], 4),
2179                                     NULL);
2180           /* Report each kilobyte (we download 32-bit words at a time) */
2181           if (i % 256 == 255)
2182             {
2183               printf_unfiltered ("*");
2184               gdb_flush (gdb_stdout);
2185             }
2186           if (status)
2187             {
2188               errno = status;
2189               return 0;
2190             }
2191           /* FIXME: Do we want a QUIT here?  */
2192         }
2193       if (count >= 256)
2194         printf_unfiltered ("\n");
2195     }
2196   else
2197     {
2198       /* Read all the longwords */
2199       for (i = 0; i < count; i++, addr += 4)
2200         {
2201           store_unsigned_integer (&buffer[i * 4], 4, mips_fetch_word (addr));
2202           QUIT;
2203         }
2204
2205       /* Copy appropriate bytes out of the buffer.  */
2206       memcpy (myaddr, buffer + (memaddr & 3), len);
2207     }
2208   return len;
2209 }
2210
2211 /* Print info on this target.  */
2212
2213 static void
2214 mips_files_info (ignore)
2215      struct target_ops *ignore;
2216 {
2217   printf_unfiltered ("Debugging a MIPS board over a serial line.\n");
2218 }
2219
2220 /* Kill the process running on the board.  This will actually only
2221    work if we are doing remote debugging over the console input.  I
2222    think that if IDT/sim had the remote debug interrupt enabled on the
2223    right port, we could interrupt the process with a break signal.  */
2224
2225 static void
2226 mips_kill ()
2227 {
2228   if (!mips_wait_flag)
2229     return;
2230
2231   interrupt_count++;
2232
2233   if (interrupt_count >= 2)
2234     {
2235       interrupt_count = 0;
2236
2237       target_terminal_ours ();
2238
2239       if (query ("Interrupted while waiting for the program.\n\
2240 Give up (and stop debugging it)? "))
2241         {
2242           /* Clean up in such a way that mips_close won't try to talk to the
2243              board (it almost surely won't work since we weren't able to talk to
2244              it).  */
2245           mips_wait_flag = 0;
2246           close_ports ();
2247
2248           printf_unfiltered ("Ending remote MIPS debugging.\n");
2249           target_mourn_inferior ();
2250
2251           return_to_top_level (RETURN_QUIT);
2252         }
2253
2254       target_terminal_inferior ();
2255     }
2256
2257   if (remote_debug > 0)
2258     printf_unfiltered ("Sending break\n");
2259
2260   SERIAL_SEND_BREAK (mips_desc);
2261
2262 #if 0
2263   if (mips_is_open)
2264     {
2265       char cc;
2266
2267       /* Send a ^C.  */
2268       cc = '\003';
2269       SERIAL_WRITE (mips_desc, &cc, 1);
2270       sleep (1);
2271       target_mourn_inferior ();
2272     }
2273 #endif
2274 }
2275
2276 /* Start running on the target board.  */
2277
2278 static void
2279 mips_create_inferior (execfile, args, env)
2280      char *execfile;
2281      char *args;
2282      char **env;
2283 {
2284   CORE_ADDR entry_pt;
2285
2286   if (args && *args)
2287     {
2288       warning ("\
2289 Can't pass arguments to remote MIPS board; arguments ignored.");
2290       /* And don't try to use them on the next "run" command.  */
2291       execute_command ("set args", 0);
2292     }
2293
2294   if (execfile == 0 || exec_bfd == 0)
2295     error ("No executable file specified");
2296
2297   entry_pt = (CORE_ADDR) bfd_get_start_address (exec_bfd);
2298
2299   init_wait_for_inferior ();
2300
2301   /* FIXME: Should we set inferior_pid here?  */
2302
2303   proceed (entry_pt, TARGET_SIGNAL_DEFAULT, 0);
2304 }
2305
2306 /* Clean up after a process.  Actually nothing to do.  */
2307
2308 static void
2309 mips_mourn_inferior ()
2310 {
2311   if (current_ops != NULL)
2312     unpush_target (current_ops);
2313   generic_mourn_inferior ();
2314 }
2315 \f
2316 /* We can write a breakpoint and read the shadow contents in one
2317    operation.  */
2318
2319 /* Insert a breakpoint.  On targets that don't have built-in breakpoint
2320    support, we read the contents of the target location and stash it,
2321    then overwrite it with a breakpoint instruction.  ADDR is the target
2322    location in the target machine.  CONTENTS_CACHE is a pointer to 
2323    memory allocated for saving the target contents.  It is guaranteed
2324    by the caller to be long enough to save sizeof BREAKPOINT bytes (this
2325    is accomplished via BREAKPOINT_MAX).  */
2326
2327 static int
2328 mips_insert_breakpoint (addr, contents_cache)
2329      CORE_ADDR addr;
2330      char *contents_cache;
2331 {
2332   if (monitor_supports_breakpoints)
2333     return set_breakpoint (addr, MIPS_INSTLEN, BREAK_FETCH);
2334   else
2335     return memory_insert_breakpoint (addr, contents_cache);
2336 }
2337
2338 static int
2339 mips_remove_breakpoint (addr, contents_cache)
2340      CORE_ADDR addr;
2341      char *contents_cache;
2342 {
2343   if (monitor_supports_breakpoints)
2344     return clear_breakpoint (addr, MIPS_INSTLEN, BREAK_FETCH);
2345   else
2346     return memory_remove_breakpoint (addr, contents_cache);
2347 }
2348
2349 #if 0                           /* currently not used */
2350 /* PMON does not currently provide support for the debug mode 'b'
2351    commands to manipulate breakpoints. However, if we wanted to use
2352    the monitor breakpoints (rather than the GDB BREAK_INSN version)
2353    then this code performs the work needed to leave debug mode,
2354    set/clear the breakpoint, and then return to debug mode. */
2355
2356 #define PMON_MAX_BP (33)        /* 32 SW, 1 HW */
2357 static CORE_ADDR mips_pmon_bp_info[PMON_MAX_BP];
2358 /* NOTE: The code relies on this vector being zero-initialised by the system */
2359
2360 static int
2361 pmon_insert_breakpoint (addr, contents_cache)
2362      CORE_ADDR addr;
2363      char *contents_cache;
2364 {
2365   int status;
2366
2367   if (monitor_supports_breakpoints)
2368     {
2369       char tbuff[12];           /* space for breakpoint command */
2370       int bpnum;
2371       CORE_ADDR bpaddr;
2372
2373       /* PMON does not support debug level breakpoint set/remove: */
2374       if (mips_exit_debug ())
2375         mips_error ("Failed to exit debug mode");
2376
2377       sprintf (tbuff, "b %08x\r", addr);
2378       mips_send_command (tbuff, 0);
2379
2380       mips_expect ("Bpt ");
2381
2382       if (!mips_getstring (tbuff, 2))
2383         return 1;
2384       tbuff[2] = '\0';          /* terminate the string */
2385       if (sscanf (tbuff, "%d", &bpnum) != 1)
2386         {
2387           fprintf_unfiltered (gdb_stderr,
2388               "Invalid decimal breakpoint number from target: %s\n", tbuff);
2389           return 1;
2390         }
2391
2392       mips_expect (" = ");
2393
2394       /* Lead in the hex number we are expecting: */
2395       tbuff[0] = '0';
2396       tbuff[1] = 'x';
2397
2398       /* FIXME!! only 8 bytes!  need to expand for Bfd64; 
2399          which targets return 64-bit addresses?  PMON returns only 32! */
2400       if (!mips_getstring (&tbuff[2], 8))
2401         return 1;
2402       tbuff[10] = '\0';         /* terminate the string */
2403
2404       if (sscanf (tbuff, "0x%08x", &bpaddr) != 1)
2405         {
2406           fprintf_unfiltered (gdb_stderr,
2407                             "Invalid hex address from target: %s\n", tbuff);
2408           return 1;
2409         }
2410
2411       if (bpnum >= PMON_MAX_BP)
2412         {
2413           fprintf_unfiltered (gdb_stderr,
2414                               "Error: Returned breakpoint number %d outside acceptable range (0..%d)\n",
2415                               bpnum, PMON_MAX_BP - 1);
2416           return 1;
2417         }
2418
2419       if (bpaddr != addr)
2420         fprintf_unfiltered (gdb_stderr, "Warning: Breakpoint addresses do not match: 0x%x != 0x%x\n", addr, bpaddr);
2421
2422       mips_pmon_bp_info[bpnum] = bpaddr;
2423
2424       mips_expect ("\r\n");
2425       mips_expect (mips_monitor_prompt);
2426
2427       mips_enter_debug ();
2428
2429       return 0;
2430     }
2431
2432   return mips_store_word (addr, BREAK_INSN, contents_cache);
2433 }
2434
2435 static int
2436 pmon_remove_breakpoint (addr, contents_cache)
2437      CORE_ADDR addr;
2438      char *contents_cache;
2439 {
2440   if (monitor_supports_breakpoints)
2441     {
2442       int bpnum;
2443       char tbuff[7];            /* enough for delete breakpoint command */
2444
2445       for (bpnum = 0; bpnum < PMON_MAX_BP; bpnum++)
2446         if (mips_pmon_bp_info[bpnum] == addr)
2447           break;
2448
2449       if (bpnum >= PMON_MAX_BP)
2450         {
2451           fprintf_unfiltered (gdb_stderr,
2452                               "pmon_remove_breakpoint: Failed to find breakpoint at address 0x%s\n",
2453                               paddr_nz (addr));
2454           return 1;
2455         }
2456
2457       if (mips_exit_debug ())
2458         mips_error ("Failed to exit debug mode");
2459
2460       sprintf (tbuff, "db %02d\r", bpnum);
2461
2462       mips_send_command (tbuff, -1);
2463       /* NOTE: If the breakpoint does not exist then a "Bpt <dd> not
2464          set" message will be returned. */
2465
2466       mips_enter_debug ();
2467
2468       return 0;
2469     }
2470
2471   return target_write_memory (addr, contents_cache, BREAK_INSN_SIZE);
2472 }
2473 #endif
2474
2475
2476 /* Tell whether this target can support a hardware breakpoint.  CNT
2477    is the number of hardware breakpoints already installed.  This
2478    implements the TARGET_CAN_USE_HARDWARE_WATCHPOINT macro.  */
2479
2480 int
2481 remote_mips_can_use_hardware_watchpoint (cnt)
2482      int cnt;
2483 {
2484   return cnt < MAX_LSI_BREAKPOINTS && strcmp (target_shortname, "lsi") == 0;
2485 }
2486
2487
2488 /* Compute a don't care mask for the region bounding ADDR and ADDR + LEN - 1.
2489    This is used for memory ref breakpoints.  */
2490
2491 static unsigned long
2492 calculate_mask (addr, len)
2493      CORE_ADDR addr;
2494      int len;
2495 {
2496   unsigned long mask;
2497   int i;
2498
2499   mask = addr ^ (addr + len - 1);
2500
2501   for (i = 32; i >= 0; i--)
2502     if (mask == 0)
2503       break;
2504     else
2505       mask >>= 1;
2506
2507   mask = (unsigned long) 0xffffffff >> i;
2508
2509   return mask;
2510 }
2511
2512
2513 /* Insert a hardware breakpoint.  This works only on LSI targets, which
2514    implement ordinary breakpoints using hardware facilities.  */
2515
2516 int
2517 remote_mips_insert_hw_breakpoint (addr, contents_cache)
2518      CORE_ADDR addr;
2519      char *contents_cache;
2520 {
2521   if (strcmp (target_shortname, "lsi") == 0)
2522     return mips_insert_breakpoint (addr, contents_cache);
2523   else
2524     return -1;
2525 }
2526
2527
2528 /* Remove a hardware breakpoint.  This works only on LSI targets, which
2529    implement ordinary breakpoints using hardware facilities.  */
2530
2531 int
2532 remote_mips_remove_hw_breakpoint (addr, contents_cache)
2533      CORE_ADDR addr;
2534      char *contents_cache;
2535 {
2536   if (strcmp (target_shortname, "lsi") == 0)
2537     return mips_remove_breakpoint (addr, contents_cache);
2538   else
2539     return -1;
2540 }
2541
2542 /* Set a data watchpoint.  ADDR and LEN should be obvious.  TYPE is 0
2543    for a write watchpoint, 1 for a read watchpoint, or 2 for a read/write
2544    watchpoint. */
2545
2546 int
2547 remote_mips_set_watchpoint (addr, len, type)
2548      CORE_ADDR addr;
2549      int len;
2550      int type;
2551 {
2552   if (set_breakpoint (addr, len, type))
2553     return -1;
2554
2555   return 0;
2556 }
2557
2558 int
2559 remote_mips_remove_watchpoint (addr, len, type)
2560      CORE_ADDR addr;
2561      int len;
2562      int type;
2563 {
2564   if (clear_breakpoint (addr, len, type))
2565     return -1;
2566
2567   return 0;
2568 }
2569
2570 int
2571 remote_mips_stopped_by_watchpoint (void)
2572 {
2573   return hit_watchpoint;
2574 }
2575
2576
2577 /* Insert a breakpoint.  */
2578
2579 static int
2580 set_breakpoint (addr, len, type)
2581      CORE_ADDR addr;
2582      int len;
2583      enum break_type type;
2584 {
2585   return common_breakpoint (1, addr, len, type);
2586 }
2587
2588
2589 /* Clear a breakpoint.  */
2590
2591 static int
2592 clear_breakpoint (addr, len, type)
2593      CORE_ADDR addr;
2594      int len;
2595      enum break_type type;
2596 {
2597   return common_breakpoint (0, addr, len, type);
2598 }
2599
2600
2601 /* Check the error code from the return packet for an LSI breakpoint
2602    command.  If there's no error, just return 0.  If it's a warning,
2603    print the warning text and return 0.  If it's an error, print
2604    the error text and return 1.  <ADDR> is the address of the breakpoint
2605    that was being set.  <RERRFLG> is the error code returned by PMON. 
2606    This is a helper function for common_breakpoint.  */
2607
2608 static int
2609 check_lsi_error (addr, rerrflg)
2610      CORE_ADDR addr;
2611      int rerrflg;
2612 {
2613   struct lsi_error *err;
2614   char *saddr = paddr_nz (addr);        /* printable address string */
2615
2616   if (rerrflg == 0)             /* no error */
2617     return 0;
2618
2619   /* Warnings can be ORed together, so check them all.  */
2620   if (rerrflg & W_WARN)
2621     {
2622       if (monitor_warnings)
2623         {
2624           int found = 0;
2625           for (err = lsi_warning_table; err->code != 0; err++)
2626             {
2627               if ((err->code & rerrflg) == err->code)
2628                 {
2629                   found = 1;
2630                   fprintf_unfiltered (gdb_stderr,
2631                                   "common_breakpoint (0x%s): Warning: %s\n",
2632                                       saddr,
2633                                       err->string);
2634                 }
2635             }
2636           if (!found)
2637             fprintf_unfiltered (gdb_stderr,
2638                         "common_breakpoint (0x%s): Unknown warning: 0x%x\n",
2639                                 saddr,
2640                                 rerrflg);
2641         }
2642       return 0;
2643     }
2644
2645   /* Errors are unique, i.e. can't be ORed together.  */
2646   for (err = lsi_error_table; err->code != 0; err++)
2647     {
2648       if ((err->code & rerrflg) == err->code)
2649         {
2650           fprintf_unfiltered (gdb_stderr,
2651                               "common_breakpoint (0x%s): Error: %s\n",
2652                               saddr,
2653                               err->string);
2654           return 1;
2655         }
2656     }
2657   fprintf_unfiltered (gdb_stderr,
2658                       "common_breakpoint (0x%s): Unknown error: 0x%x\n",
2659                       saddr,
2660                       rerrflg);
2661   return 1;
2662 }
2663
2664
2665 /* This routine sends a breakpoint command to the remote target.
2666
2667    <SET> is 1 if setting a breakpoint, or 0 if clearing a breakpoint.
2668    <ADDR> is the address of the breakpoint.
2669    <LEN> the length of the region to break on.
2670    <TYPE> is the type of breakpoint:
2671    0 = write                    (BREAK_WRITE)
2672    1 = read                     (BREAK_READ)
2673    2 = read/write               (BREAK_ACCESS)
2674    3 = instruction fetch        (BREAK_FETCH)
2675
2676    Return 0 if successful; otherwise 1.  */
2677
2678 static int
2679 common_breakpoint (set, addr, len, type)
2680      int set;
2681      CORE_ADDR addr;
2682      int len;
2683      enum break_type type;
2684 {
2685   char buf[DATA_MAXLEN + 1];
2686   char cmd, rcmd;
2687   int rpid, rerrflg, rresponse, rlen;
2688   int nfields;
2689
2690   addr = ADDR_BITS_REMOVE (addr);
2691
2692   if (mips_monitor == MON_LSI)
2693     {
2694       if (set == 0)             /* clear breakpoint */
2695         {
2696           /* The LSI PMON "clear breakpoint" has this form:
2697              <pid> 'b' <bptn> 0x0
2698              reply:
2699              <pid> 'b' 0x0 <code>
2700
2701              <bptn> is a breakpoint number returned by an earlier 'B' command.
2702              Possible return codes: OK, E_BPT.  */
2703
2704           int i;
2705
2706           /* Search for the breakpoint in the table.  */
2707           for (i = 0; i < MAX_LSI_BREAKPOINTS; i++)
2708             if (lsi_breakpoints[i].type == type
2709                 && lsi_breakpoints[i].addr == addr
2710                 && lsi_breakpoints[i].len == len)
2711               break;
2712
2713           /* Clear the table entry and tell PMON to clear the breakpoint.  */
2714           if (i == MAX_LSI_BREAKPOINTS)
2715             {
2716               warning ("common_breakpoint: Attempt to clear bogus breakpoint at %s\n",
2717                        paddr_nz (addr));
2718               return 1;
2719             }
2720
2721           lsi_breakpoints[i].type = BREAK_UNUSED;
2722           sprintf (buf, "0x0 b 0x%x 0x0", i);
2723           mips_send_packet (buf, 1);
2724
2725           rlen = mips_receive_packet (buf, 1, mips_receive_wait);
2726           buf[rlen] = '\0';
2727
2728           nfields = sscanf (buf, "0x%x b 0x0 0x%x", &rpid, &rerrflg);
2729           if (nfields != 2)
2730             mips_error ("common_breakpoint: Bad response from remote board: %s", buf);
2731
2732           return (check_lsi_error (addr, rerrflg));
2733         }
2734       else
2735         /* set a breakpoint */
2736         {
2737           /* The LSI PMON "set breakpoint" command has this form:
2738              <pid> 'B' <addr> 0x0
2739              reply:
2740              <pid> 'B' <bptn> <code>
2741
2742              The "set data breakpoint" command has this form:
2743
2744              <pid> 'A' <addr1> <type> [<addr2>  [<value>]]
2745
2746              where: type= "0x1" = read
2747              "0x2" = write
2748              "0x3" = access (read or write)
2749
2750              The reply returns two values:
2751              bptn - a breakpoint number, which is a small integer with
2752              possible values of zero through 255.
2753              code - an error return code, a value of zero indicates a
2754              succesful completion, other values indicate various
2755              errors and warnings.
2756
2757              Possible return codes: OK, W_QAL, E_QAL, E_OUT, E_NON.  
2758
2759            */
2760
2761           if (type == BREAK_FETCH)      /* instruction breakpoint */
2762             {
2763               cmd = 'B';
2764               sprintf (buf, "0x0 B 0x%s 0x0", paddr_nz (addr));
2765             }
2766           else
2767             /* watchpoint */
2768             {
2769               cmd = 'A';
2770               sprintf (buf, "0x0 A 0x%s 0x%x 0x%s", paddr_nz (addr),
2771                      type == BREAK_READ ? 1 : (type == BREAK_WRITE ? 2 : 3),
2772                        paddr_nz (addr + len - 1));
2773             }
2774           mips_send_packet (buf, 1);
2775
2776           rlen = mips_receive_packet (buf, 1, mips_receive_wait);
2777           buf[rlen] = '\0';
2778
2779           nfields = sscanf (buf, "0x%x %c 0x%x 0x%x",
2780                             &rpid, &rcmd, &rresponse, &rerrflg);
2781           if (nfields != 4 || rcmd != cmd || rresponse > 255)
2782             mips_error ("common_breakpoint: Bad response from remote board: %s", buf);
2783
2784           if (rerrflg != 0)
2785             if (check_lsi_error (addr, rerrflg))
2786               return 1;
2787
2788           /* rresponse contains PMON's breakpoint number.  Record the
2789              information for this breakpoint so we can clear it later.  */
2790           lsi_breakpoints[rresponse].type = type;
2791           lsi_breakpoints[rresponse].addr = addr;
2792           lsi_breakpoints[rresponse].len = len;
2793
2794           return 0;
2795         }
2796     }
2797   else
2798     {
2799       /* On non-LSI targets, the breakpoint command has this form:
2800          0x0 <CMD> <ADDR> <MASK> <FLAGS>
2801          <MASK> is a don't care mask for addresses.
2802          <FLAGS> is any combination of `r', `w', or `f' for read/write/fetch.
2803        */
2804       unsigned long mask;
2805
2806       mask = calculate_mask (addr, len);
2807       addr &= ~mask;
2808
2809       if (set)                  /* set a breakpoint */
2810         {
2811           char *flags;
2812           switch (type)
2813             {
2814             case BREAK_WRITE:   /* write */
2815               flags = "w";
2816               break;
2817             case BREAK_READ:    /* read */
2818               flags = "r";
2819               break;
2820             case BREAK_ACCESS:  /* read/write */
2821               flags = "rw";
2822               break;
2823             case BREAK_FETCH:   /* fetch */
2824               flags = "f";
2825               break;
2826             default:
2827               abort ();
2828             }
2829
2830           cmd = 'B';
2831           sprintf (buf, "0x0 B 0x%s 0x%s %s", paddr_nz (addr),
2832                    paddr_nz (mask), flags);
2833         }
2834       else
2835         {
2836           cmd = 'b';
2837           sprintf (buf, "0x0 b 0x%s", paddr_nz (addr));
2838         }
2839
2840       mips_send_packet (buf, 1);
2841
2842       rlen = mips_receive_packet (buf, 1, mips_receive_wait);
2843       buf[rlen] = '\0';
2844
2845       nfields = sscanf (buf, "0x%x %c 0x%x 0x%x",
2846                         &rpid, &rcmd, &rerrflg, &rresponse);
2847
2848       if (nfields != 4 || rcmd != cmd)
2849         mips_error ("common_breakpoint: Bad response from remote board: %s",
2850                     buf);
2851
2852       if (rerrflg != 0)
2853         {
2854           /* Ddb returns "0x0 b 0x16 0x0\000", whereas
2855              Cogent returns "0x0 b 0xffffffff 0x16\000": */
2856           if (mips_monitor == MON_DDB)
2857             rresponse = rerrflg;
2858           if (rresponse != 22)  /* invalid argument */
2859             fprintf_unfiltered (gdb_stderr,
2860                              "common_breakpoint (0x%s):  Got error: 0x%x\n",
2861                                 paddr_nz (addr), rresponse);
2862           return 1;
2863         }
2864     }
2865   return 0;
2866 }
2867 \f
2868 static void
2869 send_srec (srec, len, addr)
2870      char *srec;
2871      int len;
2872      CORE_ADDR addr;
2873 {
2874   while (1)
2875     {
2876       int ch;
2877
2878       SERIAL_WRITE (mips_desc, srec, len);
2879
2880       ch = mips_readchar (2);
2881
2882       switch (ch)
2883         {
2884         case SERIAL_TIMEOUT:
2885           error ("Timeout during download.");
2886           break;
2887         case 0x6:               /* ACK */
2888           return;
2889         case 0x15:              /* NACK */
2890           fprintf_unfiltered (gdb_stderr, "Download got a NACK at byte %s!  Retrying.\n", paddr_u (addr));
2891           continue;
2892         default:
2893           error ("Download got unexpected ack char: 0x%x, retrying.\n", ch);
2894         }
2895     }
2896 }
2897
2898 /*  Download a binary file by converting it to S records. */
2899
2900 static void
2901 mips_load_srec (args)
2902      char *args;
2903 {
2904   bfd *abfd;
2905   asection *s;
2906   char *buffer, srec[1024];
2907   unsigned int i;
2908   unsigned int srec_frame = 200;
2909   int reclen;
2910   static int hashmark = 1;
2911
2912   buffer = alloca (srec_frame * 2 + 256);
2913
2914   abfd = bfd_openr (args, 0);
2915   if (!abfd)
2916     {
2917       printf_filtered ("Unable to open file %s\n", args);
2918       return;
2919     }
2920
2921   if (bfd_check_format (abfd, bfd_object) == 0)
2922     {
2923       printf_filtered ("File is not an object file\n");
2924       return;
2925     }
2926
2927 /* This actually causes a download in the IDT binary format: */
2928   mips_send_command (LOAD_CMD, 0);
2929
2930   for (s = abfd->sections; s; s = s->next)
2931     {
2932       if (s->flags & SEC_LOAD)
2933         {
2934           unsigned int numbytes;
2935
2936           /* FIXME!  vma too small????? */
2937           printf_filtered ("%s\t: 0x%4lx .. 0x%4lx  ", s->name,
2938                            (long) s->vma,
2939                            (long) (s->vma + s->_raw_size));
2940           gdb_flush (gdb_stdout);
2941
2942           for (i = 0; i < s->_raw_size; i += numbytes)
2943             {
2944               numbytes = min (srec_frame, s->_raw_size - i);
2945
2946               bfd_get_section_contents (abfd, s, buffer, i, numbytes);
2947
2948               reclen = mips_make_srec (srec, '3', s->vma + i, buffer, numbytes);
2949               send_srec (srec, reclen, s->vma + i);
2950
2951               if (hashmark)
2952                 {
2953                   putchar_unfiltered ('#');
2954                   gdb_flush (gdb_stdout);
2955                 }
2956
2957             }                   /* Per-packet (or S-record) loop */
2958
2959           putchar_unfiltered ('\n');
2960         }                       /* Loadable sections */
2961     }
2962   if (hashmark)
2963     putchar_unfiltered ('\n');
2964
2965   /* Write a type 7 terminator record. no data for a type 7, and there
2966      is no data, so len is 0.  */
2967
2968   reclen = mips_make_srec (srec, '7', abfd->start_address, NULL, 0);
2969
2970   send_srec (srec, reclen, abfd->start_address);
2971
2972   SERIAL_FLUSH_INPUT (mips_desc);
2973 }
2974
2975 /*
2976  * mips_make_srec -- make an srecord. This writes each line, one at a
2977  *      time, each with it's own header and trailer line.
2978  *      An srecord looks like this:
2979  *
2980  * byte count-+     address
2981  * start ---+ |        |       data        +- checksum
2982  *          | |        |                   |
2983  *        S01000006F6B692D746573742E73726563E4
2984  *        S315000448600000000000000000FC00005900000000E9
2985  *        S31A0004000023C1400037DE00F023604000377B009020825000348D
2986  *        S30B0004485A0000000000004E
2987  *        S70500040000F6
2988  *
2989  *      S<type><length><address><data><checksum>
2990  *
2991  *      Where
2992  *      - length
2993  *        is the number of bytes following upto the checksum. Note that
2994  *        this is not the number of chars following, since it takes two
2995  *        chars to represent a byte.
2996  *      - type
2997  *        is one of:
2998  *        0) header record
2999  *        1) two byte address data record
3000  *        2) three byte address data record
3001  *        3) four byte address data record
3002  *        7) four byte address termination record
3003  *        8) three byte address termination record
3004  *        9) two byte address termination record
3005  *       
3006  *      - address
3007  *        is the start address of the data following, or in the case of
3008  *        a termination record, the start address of the image
3009  *      - data
3010  *        is the data.
3011  *      - checksum
3012  *        is the sum of all the raw byte data in the record, from the length
3013  *        upwards, modulo 256 and subtracted from 255.
3014  *
3015  * This routine returns the length of the S-record.
3016  *
3017  */
3018
3019 static int
3020 mips_make_srec (buf, type, memaddr, myaddr, len)
3021      char *buf;
3022      int type;
3023      CORE_ADDR memaddr;
3024      unsigned char *myaddr;
3025      int len;
3026 {
3027   unsigned char checksum;
3028   int i;
3029
3030   /* Create the header for the srec. addr_size is the number of bytes in the address,
3031      and 1 is the number of bytes in the count.  */
3032
3033   /* FIXME!! bigger buf required for 64-bit! */
3034   buf[0] = 'S';
3035   buf[1] = type;
3036   buf[2] = len + 4 + 1;         /* len + 4 byte address + 1 byte checksum */
3037   /* This assumes S3 style downloads (4byte addresses). There should
3038      probably be a check, or the code changed to make it more
3039      explicit. */
3040   buf[3] = memaddr >> 24;
3041   buf[4] = memaddr >> 16;
3042   buf[5] = memaddr >> 8;
3043   buf[6] = memaddr;
3044   memcpy (&buf[7], myaddr, len);
3045
3046   /* Note that the checksum is calculated on the raw data, not the
3047      hexified data.  It includes the length, address and the data
3048      portions of the packet.  */
3049   checksum = 0;
3050   buf += 2;                     /* Point at length byte */
3051   for (i = 0; i < len + 4 + 1; i++)
3052     checksum += *buf++;
3053
3054   *buf = ~checksum;
3055
3056   return len + 8;
3057 }
3058
3059 /* The following manifest controls whether we enable the simple flow
3060    control support provided by the monitor. If enabled the code will
3061    wait for an affirmative ACK between transmitting packets. */
3062 #define DOETXACK (1)
3063
3064 /* The PMON fast-download uses an encoded packet format constructed of
3065    3byte data packets (encoded as 4 printable ASCII characters), and
3066    escape sequences (preceded by a '/'):
3067
3068    'K'     clear checksum
3069    'C'     compare checksum (12bit value, not included in checksum calculation)
3070    'S'     define symbol name (for addr) terminated with "," and padded to 4char boundary
3071    'Z'     zero fill multiple of 3bytes
3072    'B'     byte (12bit encoded value, of 8bit data)
3073    'A'     address (36bit encoded value)
3074    'E'     define entry as original address, and exit load
3075
3076    The packets are processed in 4 character chunks, so the escape
3077    sequences that do not have any data (or variable length data)
3078    should be padded to a 4 character boundary.  The decoder will give
3079    an error if the complete message block size is not a multiple of
3080    4bytes (size of record).
3081
3082    The encoding of numbers is done in 6bit fields.  The 6bit value is
3083    used to index into this string to get the specific character
3084    encoding for the value: */
3085 static char encoding[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.";
3086
3087 /* Convert the number of bits required into an encoded number, 6bits
3088    at a time (range 0..63).  Keep a checksum if required (passed
3089    pointer non-NULL). The function returns the number of encoded
3090    characters written into the buffer. */
3091 static int
3092 pmon_makeb64 (v, p, n, chksum)
3093      unsigned long v;
3094      char *p;
3095      int n;
3096      int *chksum;
3097 {
3098   int count = (n / 6);
3099
3100   if ((n % 12) != 0)
3101     {
3102       fprintf_unfiltered (gdb_stderr,
3103                           "Fast encoding bitcount must be a multiple of 12bits: %dbit%s\n", n, (n == 1) ? "" : "s");
3104       return (0);
3105     }
3106   if (n > 36)
3107     {
3108       fprintf_unfiltered (gdb_stderr,
3109                           "Fast encoding cannot process more than 36bits at the moment: %dbits\n", n);
3110       return (0);
3111     }
3112
3113   /* Deal with the checksum: */
3114   if (chksum != NULL)
3115     {
3116       switch (n)
3117         {
3118         case 36:
3119           *chksum += ((v >> 24) & 0xFFF);
3120         case 24:
3121           *chksum += ((v >> 12) & 0xFFF);
3122         case 12:
3123           *chksum += ((v >> 0) & 0xFFF);
3124         }
3125     }
3126
3127   do
3128     {
3129       n -= 6;
3130       *p++ = encoding[(v >> n) & 0x3F];
3131     }
3132   while (n > 0);
3133
3134   return (count);
3135 }
3136
3137 /* Shorthand function (that could be in-lined) to output the zero-fill
3138    escape sequence into the data stream. */
3139 static int
3140 pmon_zeroset (recsize, buff, amount, chksum)
3141      int recsize;
3142      char **buff;
3143      int *amount;
3144      unsigned int *chksum;
3145 {
3146   int count;
3147
3148   sprintf (*buff, "/Z");
3149   count = pmon_makeb64 (*amount, (*buff + 2), 12, chksum);
3150   *buff += (count + 2);
3151   *amount = 0;
3152   return (recsize + count + 2);
3153 }
3154
3155 static int
3156 pmon_checkset (recsize, buff, value)
3157      int recsize;
3158      char **buff;
3159      int *value;
3160 {
3161   int count;
3162
3163   /* Add the checksum (without updating the value): */
3164   sprintf (*buff, "/C");
3165   count = pmon_makeb64 (*value, (*buff + 2), 12, NULL);
3166   *buff += (count + 2);
3167   sprintf (*buff, "\n");
3168   *buff += 2;                   /* include zero terminator */
3169   /* Forcing a checksum validation clears the sum: */
3170   *value = 0;
3171   return (recsize + count + 3);
3172 }
3173
3174 /* Amount of padding we leave after at the end of the output buffer,
3175    for the checksum and line termination characters: */
3176 #define CHECKSIZE (4 + 4 + 4 + 2)
3177 /* zero-fill, checksum, transfer end and line termination space. */
3178
3179 /* The amount of binary data loaded from the object file in a single
3180    operation: */
3181 #define BINCHUNK (1024)
3182
3183 /* Maximum line of data accepted by the monitor: */
3184 #define MAXRECSIZE (550)
3185 /* NOTE: This constant depends on the monitor being used. This value
3186    is for PMON 5.x on the Cogent Vr4300 board. */
3187
3188 static void
3189 pmon_make_fastrec (outbuf, inbuf, inptr, inamount, recsize, csum, zerofill)
3190      char **outbuf;
3191      unsigned char *inbuf;
3192      int *inptr;
3193      int inamount;
3194      int *recsize;
3195      unsigned int *csum;
3196      unsigned int *zerofill;
3197 {
3198   int count = 0;
3199   char *p = *outbuf;
3200
3201   /* This is a simple check to ensure that our data will fit within
3202      the maximum allowable record size. Each record output is 4bytes
3203      in length. We must allow space for a pending zero fill command,
3204      the record, and a checksum record. */
3205   while ((*recsize < (MAXRECSIZE - CHECKSIZE)) && ((inamount - *inptr) > 0))
3206     {
3207       /* Process the binary data: */
3208       if ((inamount - *inptr) < 3)
3209         {
3210           if (*zerofill != 0)
3211             *recsize = pmon_zeroset (*recsize, &p, zerofill, csum);
3212           sprintf (p, "/B");
3213           count = pmon_makeb64 (inbuf[*inptr], &p[2], 12, csum);
3214           p += (2 + count);
3215           *recsize += (2 + count);
3216           (*inptr)++;
3217         }
3218       else
3219         {
3220           unsigned int value = ((inbuf[*inptr + 0] << 16) | (inbuf[*inptr + 1] << 8) | inbuf[*inptr + 2]);
3221           /* Simple check for zero data. TODO: A better check would be
3222              to check the last, and then the middle byte for being zero
3223              (if the first byte is not). We could then check for
3224              following runs of zeros, and if above a certain size it is
3225              worth the 4 or 8 character hit of the byte insertions used
3226              to pad to the start of the zeroes. NOTE: This also depends
3227              on the alignment at the end of the zero run. */
3228           if (value == 0x00000000)
3229             {
3230               (*zerofill)++;
3231               if (*zerofill == 0xFFF)   /* 12bit counter */
3232                 *recsize = pmon_zeroset (*recsize, &p, zerofill, csum);
3233             }
3234           else
3235             {
3236               if (*zerofill != 0)
3237                 *recsize = pmon_zeroset (*recsize, &p, zerofill, csum);
3238               count = pmon_makeb64 (value, p, 24, csum);
3239               p += count;
3240               *recsize += count;
3241             }
3242           *inptr += 3;
3243         }
3244     }
3245
3246   *outbuf = p;
3247   return;
3248 }
3249
3250 static int
3251 pmon_check_ack (mesg)
3252      char *mesg;
3253 {
3254 #if defined(DOETXACK)
3255   int c;
3256
3257   if (!tftp_in_use)
3258     {
3259       c = SERIAL_READCHAR (udp_in_use ? udp_desc : mips_desc, 2);
3260       if ((c == SERIAL_TIMEOUT) || (c != 0x06))
3261         {
3262           fprintf_unfiltered (gdb_stderr,
3263                               "Failed to receive valid ACK for %s\n", mesg);
3264           return (-1);          /* terminate the download */
3265         }
3266     }
3267 #endif /* DOETXACK */
3268   return (0);
3269 }
3270
3271 /* pmon_download - Send a sequence of characters to the PMON download port,
3272    which is either a serial port or a UDP socket.  */
3273
3274 static void
3275 pmon_start_download ()
3276 {
3277   if (tftp_in_use)
3278     {
3279       /* Create the temporary download file.  */
3280       if ((tftp_file = fopen (tftp_localname, "w")) == NULL)
3281         perror_with_name (tftp_localname);
3282     }
3283   else
3284     {
3285       mips_send_command (udp_in_use ? LOAD_CMD_UDP : LOAD_CMD, 0);
3286       mips_expect ("Downloading from ");
3287       mips_expect (udp_in_use ? "udp" : "tty0");
3288       mips_expect (", ^C to abort\r\n");
3289     }
3290 }
3291
3292 static int
3293 mips_expect_download (char *string)
3294 {
3295   if (!mips_expect (string))
3296     {
3297       fprintf_unfiltered (gdb_stderr, "Load did not complete successfully.\n");
3298       if (tftp_in_use)
3299         remove (tftp_localname);        /* Remove temporary file */
3300       return 0;
3301     }
3302   else
3303     return 1;
3304 }
3305
3306 static void
3307 pmon_end_download (final, bintotal)
3308      int final;
3309      int bintotal;
3310 {
3311   char hexnumber[9];            /* includes '\0' space */
3312
3313   if (tftp_in_use)
3314     {
3315       static char *load_cmd_prefix = "load -b -s ";
3316       char *cmd;
3317       struct stat stbuf;
3318
3319       /* Close off the temporary file containing the load data.  */
3320       fclose (tftp_file);
3321       tftp_file = NULL;
3322
3323       /* Make the temporary file readable by the world.  */
3324       if (stat (tftp_localname, &stbuf) == 0)
3325         chmod (tftp_localname, stbuf.st_mode | S_IROTH);
3326
3327       /* Must reinitialize the board to prevent PMON from crashing.  */
3328       mips_send_command ("initEther\r", -1);
3329
3330       /* Send the load command.  */
3331       cmd = xmalloc (strlen (load_cmd_prefix) + strlen (tftp_name) + 2);
3332       strcpy (cmd, load_cmd_prefix);
3333       strcat (cmd, tftp_name);
3334       strcat (cmd, "\r");
3335       mips_send_command (cmd, 0);
3336       free (cmd);
3337       if (!mips_expect_download ("Downloading from "))
3338         return;
3339       if (!mips_expect_download (tftp_name))
3340         return;
3341       if (!mips_expect_download (", ^C to abort\r\n"))
3342         return;
3343     }
3344
3345   /* Wait for the stuff that PMON prints after the load has completed.
3346      The timeout value for use in the tftp case (15 seconds) was picked
3347      arbitrarily but might be too small for really large downloads. FIXME. */
3348   if (mips_monitor == MON_LSI)
3349     {
3350       pmon_check_ack ("termination");
3351       mips_expect_timeout ("Entry address is ", tftp_in_use ? 15 : 2);
3352     }
3353   else
3354     mips_expect_timeout ("Entry Address  = ", tftp_in_use ? 15 : 2);
3355
3356   sprintf (hexnumber, "%x", final);
3357   mips_expect (hexnumber);
3358   mips_expect ("\r\n");
3359   if (mips_monitor != MON_LSI)
3360     pmon_check_ack ("termination");
3361   mips_expect ("\r\ntotal = 0x");
3362   sprintf (hexnumber, "%x", bintotal);
3363   mips_expect (hexnumber);
3364   if (!mips_expect_download (" bytes\r\n"))
3365     return;
3366
3367   if (tftp_in_use)
3368     remove (tftp_localname);    /* Remove temporary file */
3369 }
3370
3371 static void
3372 pmon_download (buffer, length)
3373      char *buffer;
3374      int length;
3375 {
3376   if (tftp_in_use)
3377     fwrite (buffer, 1, length, tftp_file);
3378   else
3379     SERIAL_WRITE (udp_in_use ? udp_desc : mips_desc, buffer, length);
3380 }
3381
3382 static void
3383 pmon_load_fast (file)
3384      char *file;
3385 {
3386   bfd *abfd;
3387   asection *s;
3388   unsigned char *binbuf;
3389   char *buffer;
3390   int reclen;
3391   unsigned int csum = 0;
3392   int hashmark = !tftp_in_use;
3393   int bintotal = 0;
3394   int final = 0;
3395   int finished = 0;
3396
3397   buffer = (char *) xmalloc (MAXRECSIZE + 1);
3398   binbuf = (unsigned char *) xmalloc (BINCHUNK);
3399
3400   abfd = bfd_openr (file, 0);
3401   if (!abfd)
3402     {
3403       printf_filtered ("Unable to open file %s\n", file);
3404       return;
3405     }
3406
3407   if (bfd_check_format (abfd, bfd_object) == 0)
3408     {
3409       printf_filtered ("File is not an object file\n");
3410       return;
3411     }
3412
3413   /* Setup the required download state: */
3414   mips_send_command ("set dlproto etxack\r", -1);
3415   mips_send_command ("set dlecho off\r", -1);
3416   /* NOTE: We get a "cannot set variable" message if the variable is
3417      already defined to have the argument we give. The code doesn't
3418      care, since it just scans to the next prompt anyway. */
3419   /* Start the download: */
3420   pmon_start_download ();
3421
3422   /* Zero the checksum */
3423   sprintf (buffer, "/Kxx\n");
3424   reclen = strlen (buffer);
3425   pmon_download (buffer, reclen);
3426   finished = pmon_check_ack ("/Kxx");
3427
3428   for (s = abfd->sections; s && !finished; s = s->next)
3429     if (s->flags & SEC_LOAD)    /* only deal with loadable sections */
3430       {
3431         bintotal += s->_raw_size;
3432         final = (s->vma + s->_raw_size);
3433
3434         printf_filtered ("%s\t: 0x%4x .. 0x%4x  ", s->name, (unsigned int) s->vma,
3435                          (unsigned int) (s->vma + s->_raw_size));
3436         gdb_flush (gdb_stdout);
3437
3438         /* Output the starting address */
3439         sprintf (buffer, "/A");
3440         reclen = pmon_makeb64 (s->vma, &buffer[2], 36, &csum);
3441         buffer[2 + reclen] = '\n';
3442         buffer[3 + reclen] = '\0';
3443         reclen += 3;            /* for the initial escape code and carriage return */
3444         pmon_download (buffer, reclen);
3445         finished = pmon_check_ack ("/A");
3446
3447         if (!finished)
3448           {
3449             unsigned int binamount;
3450             unsigned int zerofill = 0;
3451             char *bp = buffer;
3452             unsigned int i;
3453
3454             reclen = 0;
3455
3456             for (i = 0; ((i < s->_raw_size) && !finished); i += binamount)
3457               {
3458                 int binptr = 0;
3459
3460                 binamount = min (BINCHUNK, s->_raw_size - i);
3461
3462                 bfd_get_section_contents (abfd, s, binbuf, i, binamount);
3463
3464                 /* This keeps a rolling checksum, until we decide to output
3465                    the line: */
3466                 for (; ((binamount - binptr) > 0);)
3467                   {
3468                     pmon_make_fastrec (&bp, binbuf, &binptr, binamount, &reclen, &csum, &zerofill);
3469                     if (reclen >= (MAXRECSIZE - CHECKSIZE))
3470                       {
3471                         reclen = pmon_checkset (reclen, &bp, &csum);
3472                         pmon_download (buffer, reclen);
3473                         finished = pmon_check_ack ("data record");
3474                         if (finished)
3475                           {
3476                             zerofill = 0;       /* do not transmit pending zerofills */
3477                             break;
3478                           }
3479
3480                         if (hashmark)
3481                           {
3482                             putchar_unfiltered ('#');
3483                             gdb_flush (gdb_stdout);
3484                           }
3485
3486                         bp = buffer;
3487                         reclen = 0;     /* buffer processed */
3488                       }
3489                   }
3490               }
3491
3492             /* Ensure no out-standing zerofill requests: */
3493             if (zerofill != 0)
3494               reclen = pmon_zeroset (reclen, &bp, &zerofill, &csum);
3495
3496             /* and then flush the line: */
3497             if (reclen > 0)
3498               {
3499                 reclen = pmon_checkset (reclen, &bp, &csum);
3500                 /* Currently pmon_checkset outputs the line terminator by
3501                    default, so we write out the buffer so far: */
3502                 pmon_download (buffer, reclen);
3503                 finished = pmon_check_ack ("record remnant");
3504               }
3505           }
3506
3507         putchar_unfiltered ('\n');
3508       }
3509
3510   /* Terminate the transfer. We know that we have an empty output
3511      buffer at this point. */
3512   sprintf (buffer, "/E/E\n");   /* include dummy padding characters */
3513   reclen = strlen (buffer);
3514   pmon_download (buffer, reclen);
3515
3516   if (finished)
3517     {                           /* Ignore the termination message: */
3518       SERIAL_FLUSH_INPUT (udp_in_use ? udp_desc : mips_desc);
3519     }
3520   else
3521     {                           /* Deal with termination message: */
3522       pmon_end_download (final, bintotal);
3523     }
3524
3525   return;
3526 }
3527
3528 /* mips_load -- download a file. */
3529
3530 static void
3531 mips_load (file, from_tty)
3532      char *file;
3533      int from_tty;
3534 {
3535   /* Get the board out of remote debugging mode.  */
3536   if (mips_exit_debug ())
3537     error ("mips_load:  Couldn't get into monitor mode.");
3538
3539   if (mips_monitor != MON_IDT)
3540     pmon_load_fast (file);
3541   else
3542     mips_load_srec (file);
3543
3544   mips_initialize ();
3545
3546   /* Finally, make the PC point at the start address */
3547   if (mips_monitor != MON_IDT)
3548     {
3549       /* Work around problem where PMON monitor updates the PC after a load
3550          to a different value than GDB thinks it has. The following ensures
3551          that the write_pc() WILL update the PC value: */
3552       register_valid[PC_REGNUM] = 0;
3553     }
3554   if (exec_bfd)
3555     write_pc (bfd_get_start_address (exec_bfd));
3556
3557   inferior_pid = 0;             /* No process now */
3558
3559 /* This is necessary because many things were based on the PC at the time that
3560    we attached to the monitor, which is no longer valid now that we have loaded
3561    new code (and just changed the PC).  Another way to do this might be to call
3562    normal_stop, except that the stack may not be valid, and things would get
3563    horribly confused... */
3564
3565   clear_symtab_users ();
3566 }
3567
3568
3569 /* Pass the command argument as a packet to PMON verbatim.  */
3570
3571 static void
3572 pmon_command (args, from_tty)
3573      char *args;
3574      int from_tty;
3575 {
3576   char buf[DATA_MAXLEN + 1];
3577   int rlen;
3578
3579   sprintf (buf, "0x0 %s", args);
3580   mips_send_packet (buf, 1);
3581   printf_filtered ("Send packet: %s\n", buf);
3582
3583   rlen = mips_receive_packet (buf, 1, mips_receive_wait);
3584   buf[rlen] = '\0';
3585   printf_filtered ("Received packet: %s\n", buf);
3586 }
3587 \f
3588 void
3589 _initialize_remote_mips ()
3590 {
3591   /* Initialize the fields in mips_ops that are common to all four targets.  */
3592   mips_ops.to_longname = "Remote MIPS debugging over serial line";
3593   mips_ops.to_close = mips_close;
3594   mips_ops.to_detach = mips_detach;
3595   mips_ops.to_resume = mips_resume;
3596   mips_ops.to_fetch_registers = mips_fetch_registers;
3597   mips_ops.to_store_registers = mips_store_registers;
3598   mips_ops.to_prepare_to_store = mips_prepare_to_store;
3599   mips_ops.to_xfer_memory = mips_xfer_memory;
3600   mips_ops.to_files_info = mips_files_info;
3601   mips_ops.to_insert_breakpoint = mips_insert_breakpoint;
3602   mips_ops.to_remove_breakpoint = mips_remove_breakpoint;
3603   mips_ops.to_kill = mips_kill;
3604   mips_ops.to_load = mips_load;
3605   mips_ops.to_create_inferior = mips_create_inferior;
3606   mips_ops.to_mourn_inferior = mips_mourn_inferior;
3607   mips_ops.to_stratum = process_stratum;
3608   mips_ops.to_has_all_memory = 1;
3609   mips_ops.to_has_memory = 1;
3610   mips_ops.to_has_stack = 1;
3611   mips_ops.to_has_registers = 1;
3612   mips_ops.to_has_execution = 1;
3613   mips_ops.to_magic = OPS_MAGIC;
3614
3615   /* Copy the common fields to all four target vectors.  */
3616   pmon_ops = ddb_ops = lsi_ops = mips_ops;
3617
3618   /* Initialize target-specific fields in the target vectors.  */
3619   mips_ops.to_shortname = "mips";
3620   mips_ops.to_doc = "\
3621 Debug a board using the MIPS remote debugging protocol over a serial line.\n\
3622 The argument is the device it is connected to or, if it contains a colon,\n\
3623 HOST:PORT to access a board over a network";
3624   mips_ops.to_open = mips_open;
3625   mips_ops.to_wait = mips_wait;
3626
3627   pmon_ops.to_shortname = "pmon";
3628   pmon_ops.to_doc = "\
3629 Debug a board using the PMON MIPS remote debugging protocol over a serial\n\
3630 line. The argument is the device it is connected to or, if it contains a\n\
3631 colon, HOST:PORT to access a board over a network";
3632   pmon_ops.to_open = pmon_open;
3633   pmon_ops.to_wait = mips_wait;
3634
3635   ddb_ops.to_shortname = "ddb";
3636   ddb_ops.to_doc = "\
3637 Debug a board using the PMON MIPS remote debugging protocol over a serial\n\
3638 line. The first argument is the device it is connected to or, if it contains\n\
3639 a colon, HOST:PORT to access a board over a network.  The optional second\n\
3640 parameter is the temporary file in the form HOST:FILENAME to be used for\n\
3641 TFTP downloads to the board.  The optional third parameter is the local name\n\
3642 of the TFTP temporary file, if it differs from the filename seen by the board.";
3643   ddb_ops.to_open = ddb_open;
3644   ddb_ops.to_wait = mips_wait;
3645
3646   lsi_ops.to_shortname = "lsi";
3647   lsi_ops.to_doc = pmon_ops.to_doc;
3648   lsi_ops.to_open = lsi_open;
3649   lsi_ops.to_wait = mips_wait;
3650
3651   /* Add the targets.  */
3652   add_target (&mips_ops);
3653   add_target (&pmon_ops);
3654   add_target (&ddb_ops);
3655   add_target (&lsi_ops);
3656
3657   add_show_from_set (
3658                       add_set_cmd ("timeout", no_class, var_zinteger,
3659                                    (char *) &mips_receive_wait,
3660                        "Set timeout in seconds for remote MIPS serial I/O.",
3661                                    &setlist),
3662                       &showlist);
3663
3664   add_show_from_set (
3665                   add_set_cmd ("retransmit-timeout", no_class, var_zinteger,
3666                                (char *) &mips_retransmit_wait,
3667                                "Set retransmit timeout in seconds for remote MIPS serial I/O.\n\
3668 This is the number of seconds to wait for an acknowledgement to a packet\n\
3669 before resending the packet.", &setlist),
3670                       &showlist);
3671
3672   add_show_from_set (
3673                    add_set_cmd ("syn-garbage-limit", no_class, var_zinteger,
3674                                 (char *) &mips_syn_garbage,
3675                                 "Set the maximum number of characters to ignore when scanning for a SYN.\n\
3676 This is the maximum number of characters GDB will ignore when trying to\n\
3677 synchronize with the remote system.  A value of -1 means that there is no limit\n\
3678 (Note that these characters are printed out even though they are ignored.)",
3679                                 &setlist),
3680                       &showlist);
3681
3682   add_show_from_set
3683     (add_set_cmd ("monitor-prompt", class_obscure, var_string,
3684                   (char *) &mips_monitor_prompt,
3685                   "Set the prompt that GDB expects from the monitor.",
3686                   &setlist),
3687      &showlist);
3688
3689   add_show_from_set (
3690                add_set_cmd ("monitor-warnings", class_obscure, var_zinteger,
3691                             (char *) &monitor_warnings,
3692                             "Set printing of monitor warnings.\n"
3693                 "When enabled, monitor warnings about hardware breakpoints "
3694                             "will be displayed.",
3695                             &setlist),
3696                       &showlist);
3697
3698   add_com ("pmon <command>", class_obscure, pmon_command,
3699            "Send a packet to PMON (must be in debug mode).");
3700 }