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