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