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