import gdb-1999-11-16 snapshot
[deliverable/binutils-gdb.git] / gdb / monitor.c
CommitLineData
c906108c
SS
1/* Remote debugging interface for boot monitors, for GDB.
2 Copyright 1990, 1991, 1992, 1993, 1995, 1996, 1997, 1999
3 Free Software Foundation, Inc.
4 Contributed by Cygnus Support. Written by Rob Savoye for Cygnus.
5 Resurrected from the ashes by Stu Grossman.
6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b
JM
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
c906108c
SS
23
24/* This file was derived from various remote-* modules. It is a collection
25 of generic support functions so GDB can talk directly to a ROM based
26 monitor. This saves use from having to hack an exception based handler
27 into existance, and makes for quick porting.
28
29 This module talks to a debug monitor called 'MONITOR', which
30 We communicate with MONITOR via either a direct serial line, or a TCP
31 (or possibly TELNET) stream to a terminal multiplexor,
32 which in turn talks to the target board. */
33
34/* FIXME 32x64: This code assumes that registers and addresses are at
35 most 32 bits long. If they can be larger, you will need to declare
36 values as LONGEST and use %llx or some such to print values when
37 building commands to send to the monitor. Since we don't know of
38 any actual 64-bit targets with ROM monitors that use this code,
39 it's not an issue right now. -sts 4/18/96 */
40
41#include "defs.h"
42#include "gdbcore.h"
43#include "target.h"
44#include "wait.h"
c906108c
SS
45#include <signal.h>
46#include <ctype.h>
47#include "gdb_string.h"
48#include <sys/types.h>
49#include "command.h"
50#include "serial.h"
51#include "monitor.h"
52#include "gdbcmd.h"
53#include "inferior.h"
54#include "gnu-regex.h"
55#include "dcache.h"
56#include "srec.h"
57
58static char *dev_name;
59static struct target_ops *targ_ops;
60
61static void monitor_vsprintf PARAMS ((char *sndbuf, char *pattern, va_list args));
62
63static int readchar PARAMS ((int timeout));
64
c906108c
SS
65static void monitor_fetch_register PARAMS ((int regno));
66static void monitor_store_register PARAMS ((int regno));
67
2df3850c
JM
68static void monitor_printable_string (char *newstr, char *oldstr, int len);
69static void monitor_error (char *function, char *message, CORE_ADDR memaddr, int len, char *string, int final_char);
c906108c
SS
70static void monitor_detach PARAMS ((char *args, int from_tty));
71static void monitor_resume PARAMS ((int pid, int step, enum target_signal sig));
72static void monitor_interrupt PARAMS ((int signo));
73static void monitor_interrupt_twice PARAMS ((int signo));
74static void monitor_interrupt_query PARAMS ((void));
75static void monitor_wait_cleanup PARAMS ((void *old_timeout));
76
c5aa993b 77static int monitor_wait PARAMS ((int pid, struct target_waitstatus * status));
c906108c
SS
78static void monitor_fetch_registers PARAMS ((int regno));
79static void monitor_store_registers PARAMS ((int regno));
80static void monitor_prepare_to_store PARAMS ((void));
c5aa993b
JM
81static int monitor_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len, int write, struct target_ops * target));
82static void monitor_files_info PARAMS ((struct target_ops * ops));
c906108c
SS
83static int monitor_insert_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
84static int monitor_remove_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
85static void monitor_kill PARAMS ((void));
86static void monitor_load PARAMS ((char *file, int from_tty));
87static void monitor_mourn_inferior PARAMS ((void));
88static void monitor_stop PARAMS ((void));
89
c5aa993b
JM
90static int monitor_read_memory PARAMS ((CORE_ADDR addr, char *myaddr, int len));
91static int monitor_write_memory PARAMS ((CORE_ADDR addr, char *myaddr, int len));
c906108c 92static int monitor_write_memory_bytes PARAMS ((CORE_ADDR addr,
c5aa993b
JM
93 char *myaddr, int len));
94static int monitor_write_memory_block PARAMS ((
95 CORE_ADDR memaddr,
96 char *myaddr,
97 int len));
98static int monitor_expect_regexp PARAMS ((struct re_pattern_buffer * pat,
c906108c 99 char *buf, int buflen));
c5aa993b 100static void monitor_dump_regs PARAMS ((void));
c906108c
SS
101#if 0
102static int from_hex PARAMS ((int a));
103static unsigned long get_hex_word PARAMS ((void));
104#endif
105static void parse_register_dump PARAMS ((char *, int));
106
107static struct monitor_ops *current_monitor;
108
109static int hashmark; /* flag set by "set hash" */
110
111static int timeout = 30;
112
113static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */
114
c5aa993b 115static void (*ofunc) (); /* Old SIGINT signal handler */
c906108c 116
9e086581
JM
117static CORE_ADDR *breakaddr;
118
c906108c
SS
119/* Descriptor for I/O to remote machine. Initialize it to NULL so
120 that monitor_open knows that we don't have a file open when the
121 program starts. */
122
123static serial_t monitor_desc = NULL;
124
125/* Pointer to regexp pattern matching data */
126
127static struct re_pattern_buffer register_pattern;
128static char register_fastmap[256];
129
130static struct re_pattern_buffer getmem_resp_delim_pattern;
131static char getmem_resp_delim_fastmap[256];
132
133static int dump_reg_flag; /* Non-zero means do a dump_registers cmd when
134 monitor_wait wakes up. */
135
136static DCACHE *remote_dcache;
c5aa993b
JM
137static int first_time = 0; /* is this the first time we're executing after
138 gaving created the child proccess? */
c906108c 139
d4f3574e
SS
140#define TARGET_BUF_SIZE 2048
141
2df3850c
JM
142/* Monitor specific debugging information. Typically only useful to
143 the developer of a new monitor interface. */
c906108c 144
2df3850c
JM
145static void monitor_debug (const char *fmt, ...) ATTR_FORMAT(printf, 1, 2);
146
147static int monitor_debug_p = 0;
148
149/* NOTE: This file alternates between monitor_debug_p and remote_debug
150 when determining if debug information is printed. Perhaphs this
151 could be simplified. */
152
153static void
154monitor_debug (const char *fmt, ...)
155{
156 if (monitor_debug_p)
157 {
158 va_list args;
159 va_start (args, fmt);
160 vfprintf_filtered (gdb_stdlog, fmt, args);
161 va_end (args);
162 }
163}
164
165
166/* Convert a string into a printable representation, Return # byte in
167 the new string. When LEN is >0 it specifies the size of the
168 string. Otherwize strlen(oldstr) is used. */
169
170static void
171monitor_printable_string (char *newstr, char *oldstr, int len)
c906108c 172{
c906108c 173 int ch;
2df3850c
JM
174 int i;
175
176 if (len <= 0)
177 len = strlen (oldstr);
c906108c 178
2df3850c 179 for (i = 0; i < len; i++)
c906108c 180 {
2df3850c 181 ch = oldstr[i];
c906108c 182 switch (ch)
c5aa993b 183 {
c906108c
SS
184 default:
185 if (isprint (ch))
186 *newstr++ = ch;
187
188 else
189 {
190 sprintf (newstr, "\\x%02x", ch & 0xff);
191 newstr += 4;
192 }
193 break;
194
c5aa993b
JM
195 case '\\':
196 *newstr++ = '\\';
197 *newstr++ = '\\';
198 break;
199 case '\b':
200 *newstr++ = '\\';
201 *newstr++ = 'b';
202 break;
203 case '\f':
204 *newstr++ = '\\';
205 *newstr++ = 't';
206 break;
207 case '\n':
208 *newstr++ = '\\';
209 *newstr++ = 'n';
210 break;
211 case '\r':
212 *newstr++ = '\\';
213 *newstr++ = 'r';
214 break;
215 case '\t':
216 *newstr++ = '\\';
217 *newstr++ = 't';
218 break;
219 case '\v':
220 *newstr++ = '\\';
221 *newstr++ = 'v';
222 break;
223 }
c906108c
SS
224 }
225
226 *newstr++ = '\0';
c906108c
SS
227}
228
229/* Print monitor errors with a string, converting the string to printable
230 representation. */
231
232static void
2df3850c
JM
233monitor_error (char *function, char *message,
234 CORE_ADDR memaddr, int len, char *string, int final_char)
c906108c 235{
c5aa993b 236 int real_len = (len == 0 && string != (char *) 0) ? strlen (string) : len;
c906108c 237 char *safe_string = alloca ((real_len * 4) + 1);
2df3850c 238 monitor_printable_string (safe_string, string, real_len);
c906108c
SS
239
240 if (final_char)
2df3850c 241 error ("%s (0x%s): %s: %s%c", function, paddr_nz (memaddr), message, safe_string, final_char);
c906108c 242 else
2df3850c 243 error ("%s (0x%s): %s: %s", function, paddr_nz (memaddr), message, safe_string);
c906108c
SS
244}
245
246/* Convert hex digit A to a number. */
247
248static int
249fromhex (a)
250 int a;
251{
252 if (a >= '0' && a <= '9')
253 return a - '0';
254 else if (a >= 'a' && a <= 'f')
255 return a - 'a' + 10;
c5aa993b
JM
256 else if (a >= 'A' && a <= 'F')
257 return a - 'A' + 10;
c906108c 258 else
c5aa993b 259 error ("Invalid hex digit %d", a);
c906108c
SS
260}
261
262/* monitor_vsprintf - similar to vsprintf but handles 64-bit addresses
263
264 This function exists to get around the problem that many host platforms
265 don't have a printf that can print 64-bit addresses. The %A format
266 specification is recognized as a special case, and causes the argument
267 to be printed as a 64-bit hexadecimal address.
268
269 Only format specifiers of the form "[0-9]*[a-z]" are recognized.
270 If it is a '%s' format, the argument is a string; otherwise the
271 argument is assumed to be a long integer.
272
273 %% is also turned into a single %.
c5aa993b
JM
274 */
275
c906108c
SS
276static void
277monitor_vsprintf (sndbuf, pattern, args)
278 char *sndbuf;
279 char *pattern;
280 va_list args;
281{
282 char format[10];
283 char fmt;
284 char *p;
285 int i;
286 long arg_int;
287 CORE_ADDR arg_addr;
288 char *arg_string;
289
290 for (p = pattern; *p; p++)
291 {
292 if (*p == '%')
293 {
294 /* Copy the format specifier to a separate buffer. */
295 format[0] = *p++;
296 for (i = 1; *p >= '0' && *p <= '9' && i < (int) sizeof (format) - 2;
297 i++, p++)
298 format[i] = *p;
299 format[i] = fmt = *p;
c5aa993b 300 format[i + 1] = '\0';
c906108c
SS
301
302 /* Fetch the next argument and print it. */
303 switch (fmt)
304 {
305 case '%':
306 strcpy (sndbuf, "%");
307 break;
308 case 'A':
309 arg_addr = va_arg (args, CORE_ADDR);
310 strcpy (sndbuf, paddr_nz (arg_addr));
311 break;
312 case 's':
313 arg_string = va_arg (args, char *);
314 sprintf (sndbuf, format, arg_string);
315 break;
316 default:
317 arg_int = va_arg (args, long);
318 sprintf (sndbuf, format, arg_int);
319 break;
320 }
321 sndbuf += strlen (sndbuf);
322 }
323 else
324 *sndbuf++ = *p;
325 }
326 *sndbuf = '\0';
327}
328
329
330/* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
331 Works just like printf. */
332
333void
c5aa993b 334monitor_printf_noecho (char *pattern,...)
c906108c
SS
335{
336 va_list args;
337 char sndbuf[2000];
338 int len;
339
c906108c 340 va_start (args, pattern);
c906108c
SS
341
342 monitor_vsprintf (sndbuf, pattern, args);
343
344 len = strlen (sndbuf);
345 if (len + 1 > sizeof sndbuf)
346 abort ();
347
2df3850c 348 if (monitor_debug_p)
c906108c
SS
349 {
350 char *safe_string = (char *) alloca ((strlen (sndbuf) * 4) + 1);
2df3850c
JM
351 monitor_printable_string (safe_string, sndbuf, 0);
352 fprintf_unfiltered (gdb_stdlog, "sent[%s]\n", safe_string);
c906108c 353 }
c5aa993b 354
c906108c
SS
355 monitor_write (sndbuf, len);
356}
357
358/* monitor_printf -- Send data to monitor and check the echo. Works just like
359 printf. */
360
361void
c5aa993b 362monitor_printf (char *pattern,...)
c906108c
SS
363{
364 va_list args;
365 char sndbuf[2000];
366 int len;
367
c906108c 368 va_start (args, pattern);
c906108c
SS
369
370 monitor_vsprintf (sndbuf, pattern, args);
371
372 len = strlen (sndbuf);
373 if (len + 1 > sizeof sndbuf)
374 abort ();
375
2df3850c 376 if (monitor_debug_p)
c906108c
SS
377 {
378 char *safe_string = (char *) alloca ((len * 4) + 1);
2df3850c
JM
379 monitor_printable_string (safe_string, sndbuf, 0);
380 fprintf_unfiltered (gdb_stdlog, "sent[%s]\n", safe_string);
c906108c
SS
381 }
382
383 monitor_write (sndbuf, len);
384
385 /* We used to expect that the next immediate output was the characters we
386 just output, but sometimes some extra junk appeared before the characters
387 we expected, like an extra prompt, or a portmaster sending telnet negotiations.
388 So, just start searching for what we sent, and skip anything unknown. */
2df3850c
JM
389 monitor_debug ("ExpectEcho\n");
390 monitor_expect (sndbuf, (char *) 0, 0);
c906108c
SS
391}
392
393
394/* Write characters to the remote system. */
395
396void
397monitor_write (buf, buflen)
398 char *buf;
399 int buflen;
400{
c5aa993b 401 if (SERIAL_WRITE (monitor_desc, buf, buflen))
c906108c
SS
402 fprintf_unfiltered (gdb_stderr, "SERIAL_WRITE failed: %s\n",
403 safe_strerror (errno));
404}
405
406
407/* Read a binary character from the remote system, doing all the fancy
408 timeout stuff, but without interpreting the character in any way,
409 and without printing remote debug information. */
410
411int
412monitor_readchar ()
413{
414 int c;
415 int looping;
416
417 do
418 {
419 looping = 0;
420 c = SERIAL_READCHAR (monitor_desc, timeout);
421
422 if (c >= 0)
c5aa993b 423 c &= 0xff; /* don't lose bit 7 */
c906108c
SS
424 }
425 while (looping);
426
427 if (c >= 0)
428 return c;
429
430 if (c == SERIAL_TIMEOUT)
c5aa993b 431 error ("Timeout reading from remote system.");
c906108c
SS
432
433 perror_with_name ("remote-monitor");
434}
435
436
437/* Read a character from the remote system, doing all the fancy
438 timeout stuff. */
439
440static int
441readchar (timeout)
442 int timeout;
443{
444 int c;
c5aa993b
JM
445 static enum
446 {
447 last_random, last_nl, last_cr, last_crnl
448 }
449 state = last_random;
c906108c
SS
450 int looping;
451
452 do
453 {
454 looping = 0;
455 c = SERIAL_READCHAR (monitor_desc, timeout);
456
457 if (c >= 0)
458 {
459 c &= 0x7f;
c906108c
SS
460 /* This seems to interfere with proper function of the
461 input stream */
2df3850c 462 if (monitor_debug_p || remote_debug)
c906108c
SS
463 {
464 char buf[2];
465 buf[0] = c;
466 buf[1] = '\0';
467 puts_debug ("read -->", buf, "<--");
468 }
c5aa993b 469
c906108c
SS
470 }
471
472 /* Canonicialize \n\r combinations into one \r */
473 if ((current_monitor->flags & MO_HANDLE_NL) != 0)
474 {
475 if ((c == '\r' && state == last_nl)
476 || (c == '\n' && state == last_cr))
477 {
478 state = last_crnl;
479 looping = 1;
480 }
481 else if (c == '\r')
482 state = last_cr;
483 else if (c != '\n')
484 state = last_random;
485 else
486 {
487 state = last_nl;
488 c = '\r';
489 }
490 }
491 }
492 while (looping);
493
494 if (c >= 0)
495 return c;
496
497 if (c == SERIAL_TIMEOUT)
7a292a7a 498#if 0
c906108c
SS
499 /* I fail to see how detaching here can be useful */
500 if (in_monitor_wait) /* Watchdog went off */
501 {
502 target_mourn_inferior ();
503 error ("GDB serial timeout has expired. Target detached.\n");
504 }
505 else
506#endif
507 error ("Timeout reading from remote system.");
508
509 perror_with_name ("remote-monitor");
510}
511
512/* Scan input from the remote system, until STRING is found. If BUF is non-
513 zero, then collect input until we have collected either STRING or BUFLEN-1
514 chars. In either case we terminate BUF with a 0. If input overflows BUF
515 because STRING can't be found, return -1, else return number of chars in BUF
516 (minus the terminating NUL). Note that in the non-overflow case, STRING
517 will be at the end of BUF. */
518
519int
520monitor_expect (string, buf, buflen)
521 char *string;
522 char *buf;
523 int buflen;
524{
525 char *p = string;
526 int obuflen = buflen;
527 int c;
528 extern struct target_ops *targ_ops;
529
2df3850c 530 if (monitor_debug_p)
c906108c
SS
531 {
532 char *safe_string = (char *) alloca ((strlen (string) * 4) + 1);
2df3850c
JM
533 monitor_printable_string (safe_string, string, 0);
534 fprintf_unfiltered (gdb_stdlog, "MON Expecting '%s'\n", safe_string);
c906108c
SS
535 }
536
537 immediate_quit = 1;
538 while (1)
539 {
540 if (buf)
541 {
542 if (buflen < 2)
543 {
544 *buf = '\000';
545 immediate_quit = 0;
546 return -1;
547 }
548
549 c = readchar (timeout);
550 if (c == '\000')
551 continue;
552 *buf++ = c;
553 buflen--;
554 }
555 else
556 c = readchar (timeout);
557
558 /* Don't expect any ^C sent to be echoed */
c5aa993b 559
c906108c
SS
560 if (*p == '\003' || c == *p)
561 {
562 p++;
563 if (*p == '\0')
564 {
565 immediate_quit = 0;
566
567 if (buf)
568 {
569 *buf++ = '\000';
570 return obuflen - buflen;
571 }
572 else
573 return 0;
574 }
575 }
576 else if ((c == '\021' || c == '\023') &&
577 (STREQ (targ_ops->to_shortname, "m32r")
578 || STREQ (targ_ops->to_shortname, "mon2000")))
c5aa993b 579 { /* m32r monitor emits random DC1/DC3 chars */
c906108c
SS
580 continue;
581 }
582 else
583 {
a0b3c4fd
JM
584 /* We got a character that doesn't match the string. We need to
585 back up p, but how far? If we're looking for "..howdy" and the
586 monitor sends "...howdy"? There's certainly a match in there,
587 but when we receive the third ".", we won't find it if we just
588 restart the matching at the beginning of the string.
589
590 This is a Boyer-Moore kind of situation. We want to reset P to
591 the end of the longest prefix of STRING that is a suffix of
592 what we've read so far. In the example above, that would be
593 ".." --- the longest prefix of "..howdy" that is a suffix of
594 "...". This longest prefix could be the empty string, if C
595 is nowhere to be found in STRING.
596
597 If this longest prefix is not the empty string, it must contain
598 C, so let's search from the end of STRING for instances of C,
599 and see if the portion of STRING before that is a suffix of
600 what we read before C. Actually, we can search backwards from
601 p, since we know no prefix can be longer than that.
602
603 Note that we can use STRING itself, along with C, as a record
604 of what we've received so far. :) */
605 int i;
606
607 for (i = (p - string) - 1; i >= 0; i--)
608 if (string[i] == c)
609 {
610 /* Is this prefix a suffix of what we've read so far?
611 In other words, does
612 string[0 .. i-1] == string[p - i, p - 1]? */
613 if (! memcmp (string, p - i, i))
614 {
615 p = string + i + 1;
616 break;
617 }
618 }
619 if (i < 0)
620 p = string;
c906108c
SS
621 }
622 }
623}
624
625/* Search for a regexp. */
626
627static int
628monitor_expect_regexp (pat, buf, buflen)
629 struct re_pattern_buffer *pat;
630 char *buf;
631 int buflen;
632{
633 char *mybuf;
634 char *p;
2df3850c 635 monitor_debug ("MON Expecting regexp\n");
c906108c
SS
636 if (buf)
637 mybuf = buf;
638 else
639 {
d4f3574e
SS
640 mybuf = alloca (TARGET_BUF_SIZE);
641 buflen = TARGET_BUF_SIZE;
c906108c
SS
642 }
643
644 p = mybuf;
645 while (1)
646 {
647 int retval;
648
649 if (p - mybuf >= buflen)
650 { /* Buffer about to overflow */
651
652/* On overflow, we copy the upper half of the buffer to the lower half. Not
653 great, but it usually works... */
654
655 memcpy (mybuf, mybuf + buflen / 2, buflen / 2);
656 p = mybuf + buflen / 2;
657 }
658
659 *p++ = readchar (timeout);
660
661 retval = re_search (pat, mybuf, p - mybuf, 0, p - mybuf, NULL);
662 if (retval >= 0)
663 return 1;
664 }
665}
666
667/* Keep discarding input until we see the MONITOR prompt.
668
669 The convention for dealing with the prompt is that you
670 o give your command
671 o *then* wait for the prompt.
672
673 Thus the last thing that a procedure does with the serial line will
674 be an monitor_expect_prompt(). Exception: monitor_resume does not
675 wait for the prompt, because the terminal is being handed over to
676 the inferior. However, the next thing which happens after that is
677 a monitor_wait which does wait for the prompt. Note that this
678 includes abnormal exit, e.g. error(). This is necessary to prevent
679 getting into states from which we can't recover. */
680
681int
682monitor_expect_prompt (buf, buflen)
683 char *buf;
684 int buflen;
685{
2df3850c
JM
686 monitor_debug ("MON Expecting prompt\n");
687 return monitor_expect (current_monitor->prompt, buf, buflen);
c906108c
SS
688}
689
690/* Get N 32-bit words from remote, each preceded by a space, and put
691 them in registers starting at REGNO. */
692
693#if 0
694static unsigned long
695get_hex_word ()
696{
697 unsigned long val;
698 int i;
699 int ch;
700
701 do
702 ch = readchar (timeout);
c5aa993b 703 while (isspace (ch));
c906108c
SS
704
705 val = from_hex (ch);
706
707 for (i = 7; i >= 1; i--)
708 {
709 ch = readchar (timeout);
710 if (!isxdigit (ch))
711 break;
712 val = (val << 4) | from_hex (ch);
713 }
714
715 return val;
716}
717#endif
718
719static void
720compile_pattern (pattern, compiled_pattern, fastmap)
721 char *pattern;
722 struct re_pattern_buffer *compiled_pattern;
723 char *fastmap;
724{
725 int tmp;
726 const char *val;
727
728 compiled_pattern->fastmap = fastmap;
729
730 tmp = re_set_syntax (RE_SYNTAX_EMACS);
731 val = re_compile_pattern (pattern,
732 strlen (pattern),
733 compiled_pattern);
734 re_set_syntax (tmp);
735
736 if (val)
737 error ("compile_pattern: Can't compile pattern string `%s': %s!", pattern, val);
738
739 if (fastmap)
740 re_compile_fastmap (compiled_pattern);
741}
742
743/* Open a connection to a remote debugger. NAME is the filename used
744 for communication. */
745
746void
747monitor_open (args, mon_ops, from_tty)
748 char *args;
749 struct monitor_ops *mon_ops;
750 int from_tty;
751{
752 char *name;
753 char **p;
754
755 if (mon_ops->magic != MONITOR_OPS_MAGIC)
756 error ("Magic number of monitor_ops struct wrong.");
757
758 targ_ops = mon_ops->target;
759 name = targ_ops->to_shortname;
760
761 if (!args)
762 error ("Use `target %s DEVICE-NAME' to use a serial port, or \n\
763`target %s HOST-NAME:PORT-NUMBER' to use a network connection.", name, name);
764
765 target_preopen (from_tty);
766
767 /* Setup pattern for register dump */
768
769 if (mon_ops->register_pattern)
770 compile_pattern (mon_ops->register_pattern, &register_pattern,
771 register_fastmap);
772
773 if (mon_ops->getmem.resp_delim)
774 compile_pattern (mon_ops->getmem.resp_delim, &getmem_resp_delim_pattern,
775 getmem_resp_delim_fastmap);
776
777 unpush_target (targ_ops);
778
779 if (dev_name)
780 free (dev_name);
781 dev_name = strsave (args);
782
783 monitor_desc = SERIAL_OPEN (dev_name);
784
785 if (!monitor_desc)
786 perror_with_name (dev_name);
787
788 if (baud_rate != -1)
789 {
790 if (SERIAL_SETBAUDRATE (monitor_desc, baud_rate))
791 {
792 SERIAL_CLOSE (monitor_desc);
793 perror_with_name (dev_name);
794 }
795 }
c5aa993b 796
c906108c
SS
797 SERIAL_RAW (monitor_desc);
798
799 SERIAL_FLUSH_INPUT (monitor_desc);
800
801 /* some systems only work with 2 stop bits */
802
803 SERIAL_SETSTOPBITS (monitor_desc, mon_ops->stopbits);
804
805 current_monitor = mon_ops;
806
807 /* See if we can wake up the monitor. First, try sending a stop sequence,
808 then send the init strings. Last, remove all breakpoints. */
809
810 if (current_monitor->stop)
811 {
812 monitor_stop ();
813 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
c5aa993b 814 {
2df3850c 815 monitor_debug ("EXP Open echo\n");
c5aa993b
JM
816 monitor_expect_prompt (NULL, 0);
817 }
c906108c
SS
818 }
819
820 /* wake up the monitor and see if it's alive */
821 for (p = mon_ops->init; *p != NULL; p++)
822 {
823 /* Some of the characters we send may not be echoed,
c5aa993b
JM
824 but we hope to get a prompt at the end of it all. */
825
c906108c 826 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
c5aa993b 827 monitor_printf (*p);
c906108c 828 else
c5aa993b 829 monitor_printf_noecho (*p);
c906108c
SS
830 monitor_expect_prompt (NULL, 0);
831 }
832
833 SERIAL_FLUSH_INPUT (monitor_desc);
834
9e086581
JM
835 /* Alloc breakpoints */
836 if (mon_ops->set_break != NULL)
837 {
838 if (mon_ops->num_breakpoints == 0)
839 mon_ops->num_breakpoints = 8;
840
841 breakaddr = (CORE_ADDR *) xmalloc (mon_ops->num_breakpoints * sizeof (CORE_ADDR));
842 memset (breakaddr, 0, mon_ops->num_breakpoints * sizeof (CORE_ADDR));
843 }
844
c906108c
SS
845 /* Remove all breakpoints */
846
847 if (mon_ops->clr_all_break)
848 {
849 monitor_printf (mon_ops->clr_all_break);
850 monitor_expect_prompt (NULL, 0);
851 }
852
853 if (from_tty)
854 printf_unfiltered ("Remote target %s connected to %s\n", name, dev_name);
855
856 push_target (targ_ops);
857
858 inferior_pid = 42000; /* Make run command think we are busy... */
859
860 /* Give monitor_wait something to read */
861
862 monitor_printf (current_monitor->line_term);
863
864 if (current_monitor->flags & MO_HAS_BLOCKWRITES)
865 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory_block);
866 else
867 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory);
868 start_remote ();
869}
870
871/* Close out all files and local state before this target loses
872 control. */
873
874void
875monitor_close (quitting)
876 int quitting;
877{
878 if (monitor_desc)
879 SERIAL_CLOSE (monitor_desc);
9e086581
JM
880
881 /* Free breakpoint memory */
882 if (breakaddr != NULL)
883 {
884 free (breakaddr);
885 breakaddr = NULL;
886 }
887
c906108c
SS
888 monitor_desc = NULL;
889}
890
891/* Terminate the open connection to the remote debugger. Use this
892 when you want to detach and do something else with your gdb. */
893
894static void
895monitor_detach (args, from_tty)
896 char *args;
897 int from_tty;
898{
899 pop_target (); /* calls monitor_close to do the real work */
900 if (from_tty)
901 printf_unfiltered ("Ending remote %s debugging\n", target_shortname);
902}
903
904/* Convert VALSTR into the target byte-ordered value of REGNO and store it. */
905
906char *
907monitor_supply_register (regno, valstr)
908 int regno;
909 char *valstr;
910{
d4f3574e 911 ULONGEST val;
c906108c
SS
912 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
913 char *p;
914
4ce44c66 915 val = 0;
d4f3574e
SS
916 p = valstr;
917 while (p && *p != '\0')
918 {
919 if (*p == '\r' || *p == '\n')
920 {
921 while (*p != '\0')
922 p++;
923 break;
924 }
925 if (isspace (*p))
926 {
927 p++;
928 continue;
929 }
930 if (!isxdigit (*p) && *p != 'x')
931 {
932 break;
933 }
934
935 val <<= 4;
936 val += fromhex (*p++);
937 }
2df3850c 938 monitor_debug ("Supplying Register %d %s\n", regno, valstr);
c906108c 939
d4f3574e 940 if (*p != '\0')
c906108c
SS
941 error ("monitor_supply_register (%d): bad value from monitor: %s.",
942 regno, valstr);
943
944 /* supply register stores in target byte order, so swap here */
945
946 store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
947
948 supply_register (regno, regbuf);
949
950 return p;
951}
952
953/* Tell the remote machine to resume. */
954
955void
956flush_monitor_dcache ()
957{
958 dcache_flush (remote_dcache);
959}
960
961static void
962monitor_resume (pid, step, sig)
963 int pid, step;
964 enum target_signal sig;
965{
966 /* Some monitors require a different command when starting a program */
2df3850c 967 monitor_debug ("MON resume\n");
c906108c
SS
968 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
969 {
970 first_time = 0;
971 monitor_printf ("run\r");
972 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
c5aa993b 973 dump_reg_flag = 1;
c906108c
SS
974 return;
975 }
976 dcache_flush (remote_dcache);
977 if (step)
978 monitor_printf (current_monitor->step);
979 else
980 {
981 if (current_monitor->continue_hook)
c5aa993b
JM
982 (*current_monitor->continue_hook) ();
983 else
984 monitor_printf (current_monitor->cont);
c906108c
SS
985 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
986 dump_reg_flag = 1;
987 }
988}
989
990/* Parse the output of a register dump command. A monitor specific
991 regexp is used to extract individual register descriptions of the
992 form REG=VAL. Each description is split up into a name and a value
993 string which are passed down to monitor specific code. */
994
995static void
996parse_register_dump (buf, len)
997 char *buf;
998 int len;
999{
2df3850c
JM
1000 monitor_debug ("MON Parsing register dump\n");
1001 while (1)
c906108c
SS
1002 {
1003 int regnamelen, vallen;
1004 char *regname, *val;
1005 /* Element 0 points to start of register name, and element 1
c5aa993b 1006 points to the start of the register value. */
c906108c
SS
1007 struct re_registers register_strings;
1008
1009 memset (&register_strings, 0, sizeof (struct re_registers));
1010
1011 if (re_search (&register_pattern, buf, len, 0, len,
1012 &register_strings) == -1)
1013 break;
1014
1015 regnamelen = register_strings.end[1] - register_strings.start[1];
1016 regname = buf + register_strings.start[1];
1017 vallen = register_strings.end[2] - register_strings.start[2];
1018 val = buf + register_strings.start[2];
1019
1020 current_monitor->supply_register (regname, regnamelen, val, vallen);
1021
1022 buf += register_strings.end[0];
1023 len -= register_strings.end[0];
1024 }
1025}
1026
1027/* Send ^C to target to halt it. Target will respond, and send us a
1028 packet. */
1029
1030static void
1031monitor_interrupt (signo)
1032 int signo;
1033{
1034 /* If this doesn't work, try more severe steps. */
1035 signal (signo, monitor_interrupt_twice);
c5aa993b 1036
2df3850c
JM
1037 if (monitor_debug_p || remote_debug)
1038 fprintf_unfiltered (gdb_stdlog, "monitor_interrupt called\n");
c906108c
SS
1039
1040 target_stop ();
1041}
1042
1043/* The user typed ^C twice. */
1044
1045static void
1046monitor_interrupt_twice (signo)
1047 int signo;
1048{
1049 signal (signo, ofunc);
c5aa993b 1050
c906108c
SS
1051 monitor_interrupt_query ();
1052
1053 signal (signo, monitor_interrupt);
1054}
1055
1056/* Ask the user what to do when an interrupt is received. */
1057
1058static void
1059monitor_interrupt_query ()
1060{
1061 target_terminal_ours ();
1062
1063 if (query ("Interrupted while waiting for the program.\n\
1064Give up (and stop debugging it)? "))
1065 {
1066 target_mourn_inferior ();
1067 return_to_top_level (RETURN_QUIT);
1068 }
1069
1070 target_terminal_inferior ();
1071}
1072
1073static void
1074monitor_wait_cleanup (old_timeout)
1075 void *old_timeout;
1076{
c5aa993b 1077 timeout = *(int *) old_timeout;
c906108c
SS
1078 signal (SIGINT, ofunc);
1079 in_monitor_wait = 0;
1080}
1081
1082
1083
c5aa993b
JM
1084void
1085monitor_wait_filter (char *buf,
1086 int bufmax,
1087 int *ext_resp_len,
1088 struct target_waitstatus *status
1089)
c906108c 1090{
c5aa993b 1091 int resp_len;
c906108c
SS
1092 do
1093 {
1094 resp_len = monitor_expect_prompt (buf, bufmax);
c5aa993b 1095 *ext_resp_len = resp_len;
c906108c
SS
1096
1097 if (resp_len <= 0)
1098 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
1099 }
1100 while (resp_len < 0);
1101
1102 /* Print any output characters that were preceded by ^O. */
1103 /* FIXME - This would be great as a user settabgle flag */
2df3850c
JM
1104 if (monitor_debug_p || remote_debug
1105 || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
c906108c
SS
1106 {
1107 int i;
1108
1109 for (i = 0; i < resp_len - 1; i++)
1110 if (buf[i] == 0x0f)
1111 putchar_unfiltered (buf[++i]);
1112 }
1113}
1114
1115
1116
1117/* Wait until the remote machine stops, then return, storing status in
1118 status just as `wait' would. */
1119
1120static int
1121monitor_wait (pid, status)
1122 int pid;
1123 struct target_waitstatus *status;
1124{
1125 int old_timeout = timeout;
d4f3574e 1126 char buf[TARGET_BUF_SIZE];
c906108c
SS
1127 int resp_len;
1128 struct cleanup *old_chain;
1129
1130 status->kind = TARGET_WAITKIND_EXITED;
1131 status->value.integer = 0;
1132
1133 old_chain = make_cleanup (monitor_wait_cleanup, &old_timeout);
2df3850c 1134 monitor_debug ("MON wait\n");
c906108c 1135
7a292a7a 1136#if 0
c5aa993b
JM
1137 /* This is somthing other than a maintenance command */
1138 in_monitor_wait = 1;
c906108c
SS
1139 timeout = watchdog > 0 ? watchdog : -1;
1140#else
2df3850c 1141 timeout = -1; /* Don't time out -- user program is running. */
c906108c
SS
1142#endif
1143
1144 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
1145
1146 if (current_monitor->wait_filter)
c5aa993b
JM
1147 (*current_monitor->wait_filter) (buf, sizeof (buf), &resp_len, status);
1148 else
1149 monitor_wait_filter (buf, sizeof (buf), &resp_len, status);
1150
1151#if 0 /* Transferred to monitor wait filter */
c906108c
SS
1152 do
1153 {
1154 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1155
1156 if (resp_len <= 0)
1157 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
1158 }
1159 while (resp_len < 0);
1160
1161 /* Print any output characters that were preceded by ^O. */
1162 /* FIXME - This would be great as a user settabgle flag */
2df3850c
JM
1163 if (monitor_debug_p || remote_debug
1164 || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
c906108c
SS
1165 {
1166 int i;
1167
1168 for (i = 0; i < resp_len - 1; i++)
1169 if (buf[i] == 0x0f)
1170 putchar_unfiltered (buf[++i]);
1171 }
c5aa993b 1172#endif
c906108c
SS
1173
1174 signal (SIGINT, ofunc);
1175
1176 timeout = old_timeout;
1177#if 0
1178 if (dump_reg_flag && current_monitor->dump_registers)
1179 {
1180 dump_reg_flag = 0;
1181 monitor_printf (current_monitor->dump_registers);
1182 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1183 }
1184
1185 if (current_monitor->register_pattern)
1186 parse_register_dump (buf, resp_len);
1187#else
2df3850c 1188 monitor_debug ("Wait fetching registers after stop\n");
c5aa993b
JM
1189 monitor_dump_regs ();
1190#endif
c906108c
SS
1191
1192 status->kind = TARGET_WAITKIND_STOPPED;
1193 status->value.sig = TARGET_SIGNAL_TRAP;
1194
1195 discard_cleanups (old_chain);
1196
1197 in_monitor_wait = 0;
1198
1199 return inferior_pid;
1200}
1201
1202/* Fetch register REGNO, or all registers if REGNO is -1. Returns
1203 errno value. */
1204
1205static void
1206monitor_fetch_register (regno)
1207 int regno;
1208{
1209 char *name;
c5aa993b
JM
1210 static char zerobuf[MAX_REGISTER_RAW_SIZE] =
1211 {0};
c906108c
SS
1212 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
1213 int i;
1214
1215 name = current_monitor->regnames[regno];
2df3850c 1216 monitor_debug ("MON fetchreg %d '%s'\n", regno, name ? name : "(null name)");
c906108c 1217
2df3850c 1218 if (!name || (*name == '\0'))
7a292a7a 1219 {
2df3850c
JM
1220 monitor_debug ("No register known for %d\n", regno);
1221 supply_register (regno, zerobuf);
c906108c
SS
1222 return;
1223 }
1224
1225 /* send the register examine command */
1226
1227 monitor_printf (current_monitor->getreg.cmd, name);
1228
1229 /* If RESP_DELIM is specified, we search for that as a leading
1230 delimiter for the register value. Otherwise, we just start
1231 searching from the start of the buf. */
1232
1233 if (current_monitor->getreg.resp_delim)
1234 {
2df3850c
JM
1235 monitor_debug ("EXP getreg.resp_delim\n");
1236 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
c906108c
SS
1237 /* Handle case of first 32 registers listed in pairs. */
1238 if (current_monitor->flags & MO_32_REGS_PAIRED
7a292a7a 1239 && (regno & 1) != 0 && regno < 32)
c5aa993b 1240 {
2df3850c 1241 monitor_debug ("EXP getreg.resp_delim\n");
c906108c
SS
1242 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1243 }
1244 }
1245
1246 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
c5aa993b 1247 if (current_monitor->flags & MO_HEX_PREFIX)
c906108c
SS
1248 {
1249 int c;
1250 c = readchar (timeout);
1251 while (c == ' ')
1252 c = readchar (timeout);
1253 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1254 ;
1255 else
c5aa993b
JM
1256 error ("Bad value returned from monitor while fetching register %x.",
1257 regno);
c906108c
SS
1258 }
1259
1260 /* Read upto the maximum number of hex digits for this register, skipping
1261 spaces, but stop reading if something else is seen. Some monitors
1262 like to drop leading zeros. */
1263
1264 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
1265 {
1266 int c;
1267 c = readchar (timeout);
1268 while (c == ' ')
1269 c = readchar (timeout);
1270
1271 if (!isxdigit (c))
1272 break;
1273
1274 regbuf[i] = c;
1275 }
1276
1277 regbuf[i] = '\000'; /* terminate the number */
2df3850c 1278 monitor_debug ("REGVAL '%s'\n", regbuf);
c906108c
SS
1279
1280 /* If TERM is present, we wait for that to show up. Also, (if TERM
1281 is present), we will send TERM_CMD if that is present. In any
1282 case, we collect all of the output into buf, and then wait for
1283 the normal prompt. */
1284
1285 if (current_monitor->getreg.term)
1286 {
2df3850c
JM
1287 monitor_debug ("EXP getreg.term\n");
1288 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
c906108c
SS
1289 }
1290
1291 if (current_monitor->getreg.term_cmd)
c5aa993b 1292 {
2df3850c
JM
1293 monitor_debug ("EMIT getreg.term.cmd\n");
1294 monitor_printf (current_monitor->getreg.term_cmd);
c906108c 1295 }
c5aa993b
JM
1296 if (!current_monitor->getreg.term || /* Already expected or */
1297 current_monitor->getreg.term_cmd) /* ack expected */
1298 monitor_expect_prompt (NULL, 0); /* get response */
c906108c
SS
1299
1300 monitor_supply_register (regno, regbuf);
1301}
1302
1303/* Sometimes, it takes several commands to dump the registers */
1304/* This is a primitive for use by variations of monitor interfaces in
1305 case they need to compose the operation.
c5aa993b
JM
1306 */
1307int
1308monitor_dump_reg_block (char *block_cmd)
c906108c 1309{
d4f3574e 1310 char buf[TARGET_BUF_SIZE];
c906108c
SS
1311 int resp_len;
1312 monitor_printf (block_cmd);
1313 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1314 parse_register_dump (buf, resp_len);
c5aa993b 1315 return 1;
c906108c
SS
1316}
1317
1318
1319/* Read the remote registers into the block regs. */
1320/* Call the specific function if it has been provided */
1321
1322static void
1323monitor_dump_regs ()
1324{
d4f3574e 1325 char buf[TARGET_BUF_SIZE];
c906108c
SS
1326 int resp_len;
1327 if (current_monitor->dumpregs)
c5aa993b
JM
1328 (*(current_monitor->dumpregs)) (); /* call supplied function */
1329 else if (current_monitor->dump_registers) /* default version */
1330 {
1331 monitor_printf (current_monitor->dump_registers);
c906108c
SS
1332 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1333 parse_register_dump (buf, resp_len);
1334 }
1335 else
c5aa993b 1336 abort (); /* Need some way to read registers */
c906108c
SS
1337}
1338
1339static void
1340monitor_fetch_registers (regno)
1341 int regno;
1342{
2df3850c 1343 monitor_debug ("MON fetchregs\n");
c5aa993b 1344 if (current_monitor->getreg.cmd)
c906108c
SS
1345 {
1346 if (regno >= 0)
1347 {
1348 monitor_fetch_register (regno);
1349 return;
1350 }
1351
1352 for (regno = 0; regno < NUM_REGS; regno++)
1353 monitor_fetch_register (regno);
1354 }
c5aa993b
JM
1355 else
1356 {
1357 monitor_dump_regs ();
1358 }
c906108c
SS
1359}
1360
1361/* Store register REGNO, or all if REGNO == 0. Return errno value. */
1362
1363static void
1364monitor_store_register (regno)
1365 int regno;
1366{
1367 char *name;
d4f3574e 1368 ULONGEST val;
c906108c
SS
1369
1370 name = current_monitor->regnames[regno];
1371 if (!name || (*name == '\0'))
c5aa993b 1372 {
2df3850c
JM
1373 monitor_debug ("MON Cannot store unknown register\n");
1374 return;
c906108c
SS
1375 }
1376
1377 val = read_register (regno);
2df3850c 1378 monitor_debug ("MON storeg %d %s\n", regno, preg (val));
c906108c
SS
1379
1380 /* send the register deposit command */
1381
2df3850c 1382 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
c906108c
SS
1383 monitor_printf (current_monitor->setreg.cmd, val, name);
1384 else if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1385 monitor_printf (current_monitor->setreg.cmd, name);
1386 else
1387 monitor_printf (current_monitor->setreg.cmd, name, val);
1388
1389 if (current_monitor->setreg.term)
c5aa993b 1390 {
2df3850c
JM
1391 monitor_debug ("EXP setreg.term\n");
1392 monitor_expect (current_monitor->setreg.term, NULL, 0);
c906108c 1393 if (current_monitor->flags & MO_SETREG_INTERACTIVE)
2df3850c 1394 monitor_printf ("%s\r", paddr_nz (val));
c906108c
SS
1395 monitor_expect_prompt (NULL, 0);
1396 }
1397 else
1398 monitor_expect_prompt (NULL, 0);
c5aa993b
JM
1399 if (current_monitor->setreg.term_cmd) /* Mode exit required */
1400 {
2df3850c 1401 monitor_debug ("EXP setreg_termcmd\n");
c5aa993b
JM
1402 monitor_printf ("%s", current_monitor->setreg.term_cmd);
1403 monitor_expect_prompt (NULL, 0);
c906108c 1404 }
c5aa993b 1405} /* monitor_store_register */
c906108c
SS
1406
1407/* Store the remote registers. */
1408
1409static void
1410monitor_store_registers (regno)
1411 int regno;
1412{
1413 if (regno >= 0)
1414 {
1415 monitor_store_register (regno);
1416 return;
1417 }
1418
1419 for (regno = 0; regno < NUM_REGS; regno++)
1420 monitor_store_register (regno);
1421}
1422
1423/* Get ready to modify the registers array. On machines which store
1424 individual registers, this doesn't need to do anything. On machines
1425 which store all the registers in one fell swoop, this makes sure
1426 that registers contains all the registers from the program being
1427 debugged. */
1428
1429static void
1430monitor_prepare_to_store ()
1431{
1432 /* Do nothing, since we can store individual regs */
1433}
1434
1435static void
1436monitor_files_info (ops)
1437 struct target_ops *ops;
1438{
1439 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
1440}
1441
1442static int
1443monitor_write_memory (memaddr, myaddr, len)
1444 CORE_ADDR memaddr;
1445 char *myaddr;
1446 int len;
1447{
c5aa993b 1448 unsigned int val, hostval;
c906108c
SS
1449 char *cmd;
1450 int i;
1451
2df3850c 1452 monitor_debug ("MON write %d %s\n", len, paddr (memaddr));
c906108c 1453
2df3850c 1454 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
c906108c
SS
1455 memaddr = ADDR_BITS_REMOVE (memaddr);
1456
1457 /* Use memory fill command for leading 0 bytes. */
1458
1459 if (current_monitor->fill)
1460 {
1461 for (i = 0; i < len; i++)
1462 if (myaddr[i] != 0)
1463 break;
1464
1465 if (i > 4) /* More than 4 zeros is worth doing */
1466 {
2df3850c
JM
1467 monitor_debug ("MON FILL %d\n", i);
1468 if (current_monitor->flags & MO_FILL_USES_ADDR)
c5aa993b
JM
1469 monitor_printf (current_monitor->fill, memaddr, (memaddr + i) - 1, 0);
1470 else
1471 monitor_printf (current_monitor->fill, memaddr, i, 0);
c906108c
SS
1472
1473 monitor_expect_prompt (NULL, 0);
1474
1475 return i;
1476 }
1477 }
1478
1479#if 0
1480 /* Can't actually use long longs if VAL is an int (nice idea, though). */
1481 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1482 {
1483 len = 8;
1484 cmd = current_monitor->setmem.cmdll;
1485 }
1486 else
1487#endif
1488 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1489 {
1490 len = 4;
1491 cmd = current_monitor->setmem.cmdl;
1492 }
1493 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1494 {
1495 len = 2;
1496 cmd = current_monitor->setmem.cmdw;
1497 }
1498 else
1499 {
1500 len = 1;
1501 cmd = current_monitor->setmem.cmdb;
1502 }
1503
1504 val = extract_unsigned_integer (myaddr, len);
c5aa993b 1505
c906108c 1506 if (len == 4)
c5aa993b
JM
1507 {
1508 hostval = *(unsigned int *) myaddr;
2df3850c 1509 monitor_debug ("Hostval(%08x) val(%08x)\n", hostval, val);
c906108c
SS
1510 }
1511
1512
1513 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1514 monitor_printf_noecho (cmd, memaddr, val);
1515 else if (current_monitor->flags & MO_SETMEM_INTERACTIVE)
1516 {
1517
1518 monitor_printf_noecho (cmd, memaddr);
1519
1520 if (current_monitor->setmem.term)
c5aa993b 1521 {
2df3850c 1522 monitor_debug ("EXP setmem.term");
c906108c
SS
1523 monitor_expect (current_monitor->setmem.term, NULL, 0);
1524 monitor_printf ("%x\r", val);
1525 }
1526 if (current_monitor->setmem.term_cmd)
c5aa993b
JM
1527 { /* Emit this to get out of the memory editing state */
1528 monitor_printf ("%s", current_monitor->setmem.term_cmd);
c906108c
SS
1529 /* Drop through to expecting a prompt */
1530 }
1531 }
1532 else
1533 monitor_printf (cmd, memaddr, val);
1534
1535 monitor_expect_prompt (NULL, 0);
1536
1537 return len;
1538}
1539
1540
1541static int
c5aa993b
JM
1542monitor_write_even_block (memaddr, myaddr, len)
1543 CORE_ADDR memaddr;
1544 char *myaddr;
1545 int len;
c906108c 1546{
c5aa993b
JM
1547 unsigned int val;
1548 int written = 0;;
c906108c 1549 /* Enter the sub mode */
c5aa993b
JM
1550 monitor_printf (current_monitor->setmem.cmdl, memaddr);
1551 monitor_expect_prompt (NULL, 0);
1552
c906108c
SS
1553 while (len)
1554 {
c5aa993b
JM
1555 val = extract_unsigned_integer (myaddr, 4); /* REALLY */
1556 monitor_printf ("%x\r", val);
1557 myaddr += 4;
1558 memaddr += 4;
1559 written += 4;
2df3850c 1560 monitor_debug (" @ %s\n", paddr (memaddr));
c906108c 1561 /* If we wanted to, here we could validate the address */
2df3850c 1562 monitor_expect_prompt (NULL, 0);
c906108c
SS
1563 }
1564 /* Now exit the sub mode */
1565 monitor_printf (current_monitor->getreg.term_cmd);
c5aa993b
JM
1566 monitor_expect_prompt (NULL, 0);
1567 return written;
c906108c
SS
1568}
1569
1570
c5aa993b
JM
1571static int
1572monitor_write_memory_bytes (memaddr, myaddr, len)
1573 CORE_ADDR memaddr;
1574 char *myaddr;
1575 int len;
c906108c 1576{
c5aa993b
JM
1577 unsigned char val;
1578 int written = 0;
1579 if (len == 0)
1580 return 0;
c906108c 1581 /* Enter the sub mode */
c5aa993b
JM
1582 monitor_printf (current_monitor->setmem.cmdb, memaddr);
1583 monitor_expect_prompt (NULL, 0);
c906108c
SS
1584 while (len)
1585 {
c5aa993b
JM
1586 val = *myaddr;
1587 monitor_printf ("%x\r", val);
1588 myaddr++;
1589 memaddr++;
1590 written++;
c906108c 1591 /* If we wanted to, here we could validate the address */
c5aa993b
JM
1592 monitor_expect_prompt (NULL, 0);
1593 len--;
c906108c
SS
1594 }
1595 /* Now exit the sub mode */
1596 monitor_printf (current_monitor->getreg.term_cmd);
c5aa993b
JM
1597 monitor_expect_prompt (NULL, 0);
1598 return written;
c906108c
SS
1599}
1600
1601
1602static void
c5aa993b 1603longlongendswap (unsigned char *a)
c906108c 1604{
c5aa993b
JM
1605 int i, j;
1606 unsigned char x;
1607 i = 0;
1608 j = 7;
c906108c 1609 while (i < 4)
c5aa993b
JM
1610 {
1611 x = *(a + i);
1612 *(a + i) = *(a + j);
1613 *(a + j) = x;
1614 i++, j--;
c906108c
SS
1615 }
1616}
1617/* Format 32 chars of long long value, advance the pointer */
c5aa993b
JM
1618static char *hexlate = "0123456789abcdef";
1619static char *
1620longlong_hexchars (unsigned long long value,
1621 char *outbuff)
c906108c 1622{
c5aa993b
JM
1623 if (value == 0)
1624 {
1625 *outbuff++ = '0';
1626 return outbuff;
1627 }
c906108c 1628 else
c5aa993b
JM
1629 {
1630 static unsigned char disbuf[8]; /* disassembly buffer */
1631 unsigned char *scan, *limit; /* loop controls */
1632 unsigned char c, nib;
1633 int leadzero = 1;
1634 scan = disbuf;
1635 limit = scan + 8;
1636 {
1637 unsigned long long *dp;
1638 dp = (unsigned long long *) scan;
1639 *dp = value;
c906108c 1640 }
c5aa993b 1641 longlongendswap (disbuf); /* FIXME: ONly on big endian hosts */
c906108c 1642 while (scan < limit)
7a292a7a 1643 {
c5aa993b 1644 c = *scan++; /* a byte of our long long value */
c906108c 1645 if (leadzero)
7a292a7a
SS
1646 {
1647 if (c == 0)
1648 continue;
1649 else
c5aa993b 1650 leadzero = 0; /* henceforth we print even zeroes */
7a292a7a 1651 }
c5aa993b 1652 nib = c >> 4; /* high nibble bits */
7a292a7a 1653 *outbuff++ = hexlate[nib];
c5aa993b 1654 nib = c & 0x0f; /* low nibble bits */
7a292a7a 1655 *outbuff++ = hexlate[nib];
c906108c 1656 }
c5aa993b 1657 return outbuff;
c906108c 1658 }
c5aa993b 1659} /* longlong_hexchars */
c906108c
SS
1660
1661
1662
1663/* I am only going to call this when writing virtual byte streams.
1664 Which possably entails endian conversions
c5aa993b
JM
1665 */
1666static int
1667monitor_write_memory_longlongs (memaddr, myaddr, len)
1668 CORE_ADDR memaddr;
1669 char *myaddr;
1670 int len;
c906108c 1671{
c5aa993b
JM
1672 static char hexstage[20]; /* At least 16 digits required, plus null */
1673 char *endstring;
1674 long long *llptr;
1675 long long value;
1676 int written = 0;
1677 llptr = (unsigned long long *) myaddr;
1678 if (len == 0)
1679 return 0;
1680 monitor_printf (current_monitor->setmem.cmdll, memaddr);
1681 monitor_expect_prompt (NULL, 0);
1682 while (len >= 8)
1683 {
1684 value = *llptr;
1685 endstring = longlong_hexchars (*llptr, hexstage);
1686 *endstring = '\0'; /* NUll terminate for printf */
1687 monitor_printf ("%s\r", hexstage);
1688 llptr++;
1689 memaddr += 8;
1690 written += 8;
c906108c 1691 /* If we wanted to, here we could validate the address */
c5aa993b
JM
1692 monitor_expect_prompt (NULL, 0);
1693 len -= 8;
c906108c
SS
1694 }
1695 /* Now exit the sub mode */
1696 monitor_printf (current_monitor->getreg.term_cmd);
c5aa993b
JM
1697 monitor_expect_prompt (NULL, 0);
1698 return written;
1699} /* */
c906108c
SS
1700
1701
1702
1703/* ----- MONITOR_WRITE_MEMORY_BLOCK ---------------------------- */
1704/* This is for the large blocks of memory which may occur in downloading.
1705 And for monitors which use interactive entry,
1706 And for monitors which do not have other downloading methods.
1707 Without this, we will end up calling monitor_write_memory many times
1708 and do the entry and exit of the sub mode many times
1709 This currently assumes...
c5aa993b
JM
1710 MO_SETMEM_INTERACTIVE
1711 ! MO_NO_ECHO_ON_SETMEM
1712 To use this, the you have to patch the monitor_cmds block with
1713 this function. Otherwise, its not tuned up for use by all
1714 monitor variations.
1715 */
c906108c 1716
c5aa993b
JM
1717static int
1718monitor_write_memory_block (memaddr, myaddr, len)
1719 CORE_ADDR memaddr;
1720 char *myaddr;
1721 int len;
c906108c 1722{
c5aa993b
JM
1723 int written;
1724 written = 0;
c906108c 1725 /* FIXME: This would be a good place to put the zero test */
c5aa993b 1726#if 1
c906108c 1727 if ((len > 8) && (((len & 0x07)) == 0) && current_monitor->setmem.cmdll)
c5aa993b
JM
1728 {
1729 return monitor_write_memory_longlongs (memaddr, myaddr, len);
1730 }
1731#endif
1732#if 0
c906108c
SS
1733 if (len > 4)
1734 {
c5aa993b
JM
1735 int sublen;
1736 written = monitor_write_even_block (memaddr, myaddr, len);
c906108c 1737 /* Adjust calling parameters by written amount */
c5aa993b
JM
1738 memaddr += written;
1739 myaddr += written;
1740 len -= written;
c906108c
SS
1741 }
1742#endif
c5aa993b
JM
1743 written = monitor_write_memory_bytes (memaddr, myaddr, len);
1744 return written;
c906108c
SS
1745}
1746
1747/* This is an alternate form of monitor_read_memory which is used for monitors
1748 which can only read a single byte/word/etc. at a time. */
1749
1750static int
1751monitor_read_memory_single (memaddr, myaddr, len)
1752 CORE_ADDR memaddr;
1753 char *myaddr;
1754 int len;
1755{
1756 unsigned int val;
c5aa993b 1757 char membuf[sizeof (int) * 2 + 1];
c906108c
SS
1758 char *p;
1759 char *cmd;
1760 int i;
1761
2df3850c 1762 monitor_debug ("MON read single\n");
c906108c
SS
1763#if 0
1764 /* Can't actually use long longs (nice idea, though). In fact, the
1765 call to strtoul below will fail if it tries to convert a value
1766 that's too big to fit in a long. */
1767 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1768 {
1769 len = 8;
1770 cmd = current_monitor->getmem.cmdll;
1771 }
1772 else
1773#endif
1774 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1775 {
1776 len = 4;
1777 cmd = current_monitor->getmem.cmdl;
1778 }
1779 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1780 {
1781 len = 2;
1782 cmd = current_monitor->getmem.cmdw;
1783 }
1784 else
1785 {
1786 len = 1;
1787 cmd = current_monitor->getmem.cmdb;
1788 }
1789
1790 /* Send the examine command. */
1791
1792 monitor_printf (cmd, memaddr);
1793
1794 /* If RESP_DELIM is specified, we search for that as a leading
1795 delimiter for the memory value. Otherwise, we just start
1796 searching from the start of the buf. */
1797
1798 if (current_monitor->getmem.resp_delim)
c5aa993b 1799 {
2df3850c 1800 monitor_debug ("EXP getmem.resp_delim\n");
c906108c
SS
1801 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1802 }
1803
1804 /* Now, read the appropriate number of hex digits for this loc,
1805 skipping spaces. */
1806
1807 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
c5aa993b 1808 if (current_monitor->flags & MO_HEX_PREFIX)
c906108c
SS
1809 {
1810 int c;
1811
1812 c = readchar (timeout);
1813 while (c == ' ')
1814 c = readchar (timeout);
1815 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1816 ;
1817 else
2df3850c
JM
1818 monitor_error ("monitor_read_memory_single",
1819 "bad response from monitor",
c906108c
SS
1820 memaddr, i, membuf, c);
1821 }
1822 for (i = 0; i < len * 2; i++)
1823 {
1824 int c;
1825
1826 while (1)
1827 {
1828 c = readchar (timeout);
1829 if (isxdigit (c))
1830 break;
1831 if (c == ' ')
1832 continue;
1833
2df3850c
JM
1834 monitor_error ("monitor_read_memory_single",
1835 "bad response from monitor",
c906108c
SS
1836 memaddr, i, membuf, c);
1837 }
1838
1839 membuf[i] = c;
1840 }
1841
1842 membuf[i] = '\000'; /* terminate the number */
1843
1844/* If TERM is present, we wait for that to show up. Also, (if TERM is
1845 present), we will send TERM_CMD if that is present. In any case, we collect
1846 all of the output into buf, and then wait for the normal prompt. */
1847
1848 if (current_monitor->getmem.term)
1849 {
c5aa993b 1850 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
c906108c
SS
1851
1852 if (current_monitor->getmem.term_cmd)
1853 {
1854 monitor_printf (current_monitor->getmem.term_cmd);
1855 monitor_expect_prompt (NULL, 0);
1856 }
1857 }
1858 else
c5aa993b 1859 monitor_expect_prompt (NULL, 0); /* get response */
c906108c
SS
1860
1861 p = membuf;
1862 val = strtoul (membuf, &p, 16);
1863
1864 if (val == 0 && membuf == p)
2df3850c
JM
1865 monitor_error ("monitor_read_memory_single",
1866 "bad value from monitor",
c906108c
SS
1867 memaddr, 0, membuf, 0);
1868
1869 /* supply register stores in target byte order, so swap here */
1870
1871 store_unsigned_integer (myaddr, len, val);
1872
1873 return len;
1874}
1875
1876/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1877 memory at MEMADDR. Returns length moved. Currently, we do no more
1878 than 16 bytes at a time. */
1879
1880static int
1881monitor_read_memory (memaddr, myaddr, len)
1882 CORE_ADDR memaddr;
1883 char *myaddr;
1884 int len;
1885{
1886 unsigned int val;
1887 char buf[512];
1888 char *p, *p1;
1889 int resp_len;
1890 int i;
1891 CORE_ADDR dumpaddr;
1892
1893 if (len <= 0)
1894 {
2df3850c 1895 monitor_debug ("Zero length call to monitor_read_memory\n");
c906108c
SS
1896 return 0;
1897 }
1898
2df3850c
JM
1899 monitor_debug ("MON read block ta(%s) ha(%lx) %d\n",
1900 paddr_nz (memaddr), (long) myaddr, len);
c906108c
SS
1901
1902 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1903 memaddr = ADDR_BITS_REMOVE (memaddr);
1904
1905 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1906 return monitor_read_memory_single (memaddr, myaddr, len);
1907
1908 len = min (len, 16);
1909
1910 /* Some dumpers align the first data with the preceeding 16
1911 byte boundary. Some print blanks and start at the
1912 requested boundary. EXACT_DUMPADDR
c5aa993b 1913 */
c906108c
SS
1914
1915 dumpaddr = (current_monitor->flags & MO_EXACT_DUMPADDR)
c5aa993b 1916 ? memaddr : memaddr & ~0x0f;
c906108c
SS
1917
1918 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
1919 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1920 len = ((memaddr + len) & ~0xf) - memaddr;
1921
1922 /* send the memory examine command */
1923
1924 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
7a292a7a 1925 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len);
c906108c
SS
1926 else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1927 monitor_printf (current_monitor->getmem.cmdb, dumpaddr);
1928 else
1929 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1930
1931 /* If TERM is present, we wait for that to show up. Also, (if TERM
1932 is present), we will send TERM_CMD if that is present. In any
1933 case, we collect all of the output into buf, and then wait for
1934 the normal prompt. */
1935
1936 if (current_monitor->getmem.term)
1937 {
c5aa993b 1938 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
c906108c
SS
1939
1940 if (resp_len <= 0)
2df3850c
JM
1941 monitor_error ("monitor_read_memory",
1942 "excessive response from monitor",
c906108c
SS
1943 memaddr, resp_len, buf, 0);
1944
1945 if (current_monitor->getmem.term_cmd)
1946 {
1947 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1948 strlen (current_monitor->getmem.term_cmd));
1949 monitor_expect_prompt (NULL, 0);
1950 }
1951 }
1952 else
c5aa993b 1953 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
c906108c
SS
1954
1955 p = buf;
1956
1957 /* If RESP_DELIM is specified, we search for that as a leading
1958 delimiter for the values. Otherwise, we just start searching
1959 from the start of the buf. */
1960
1961 if (current_monitor->getmem.resp_delim)
1962 {
1963 int retval, tmp;
1964 struct re_registers resp_strings;
2df3850c 1965 monitor_debug ("MON getmem.resp_delim %s\n", current_monitor->getmem.resp_delim);
c906108c
SS
1966
1967 memset (&resp_strings, 0, sizeof (struct re_registers));
1968 tmp = strlen (p);
1969 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1970 &resp_strings);
1971
1972 if (retval < 0)
2df3850c
JM
1973 monitor_error ("monitor_read_memory",
1974 "bad response from monitor",
c906108c
SS
1975 memaddr, resp_len, buf, 0);
1976
1977 p += resp_strings.end[0];
1978#if 0
1979 p = strstr (p, current_monitor->getmem.resp_delim);
1980 if (!p)
2df3850c
JM
1981 monitor_error ("monitor_read_memory",
1982 "bad response from monitor",
c906108c
SS
1983 memaddr, resp_len, buf, 0);
1984 p += strlen (current_monitor->getmem.resp_delim);
1985#endif
1986 }
2df3850c 1987 monitor_debug ("MON scanning %d ,%lx '%s'\n", len, (long) p, p);
c906108c
SS
1988 if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1989 {
c5aa993b
JM
1990 char c;
1991 int fetched = 0;
c906108c 1992 i = len;
c5aa993b 1993 c = *p;
c906108c 1994
c5aa993b
JM
1995
1996 while (!(c == '\000' || c == '\n' || c == '\r') && i > 0)
1997 {
1998 if (isxdigit (c))
1999 {
2000 if ((dumpaddr >= memaddr) && (i > 0))
2001 {
2002 val = fromhex (c) * 16 + fromhex (*(p + 1));
c906108c 2003 *myaddr++ = val;
2df3850c
JM
2004 if (monitor_debug_p || remote_debug)
2005 fprintf_unfiltered (gdb_stdlog, "[%02x]", val);
c906108c 2006 --i;
c5aa993b 2007 fetched++;
c906108c
SS
2008 }
2009 ++dumpaddr;
2010 ++p;
2011 }
c5aa993b
JM
2012 ++p; /* skip a blank or other non hex char */
2013 c = *p;
c906108c 2014 }
c5aa993b
JM
2015 if (fetched == 0)
2016 error ("Failed to read via monitor");
2df3850c
JM
2017 if (monitor_debug_p || remote_debug)
2018 fprintf_unfiltered (gdb_stdlog, "\n");
c5aa993b 2019 return fetched; /* Return the number of bytes actually read */
c906108c 2020 }
2df3850c 2021 monitor_debug ("MON scanning bytes\n");
c906108c
SS
2022
2023 for (i = len; i > 0; i--)
2024 {
2025 /* Skip non-hex chars, but bomb on end of string and newlines */
2026
2027 while (1)
2028 {
2029 if (isxdigit (*p))
2030 break;
2031
2032 if (*p == '\000' || *p == '\n' || *p == '\r')
2df3850c
JM
2033 monitor_error ("monitor_read_memory",
2034 "badly terminated response from monitor",
c906108c
SS
2035 memaddr, resp_len, buf, 0);
2036 p++;
2037 }
2038
2039 val = strtoul (p, &p1, 16);
2040
2041 if (val == 0 && p == p1)
2df3850c
JM
2042 monitor_error ("monitor_read_memory",
2043 "bad value from monitor",
c906108c
SS
2044 memaddr, resp_len, buf, 0);
2045
2046 *myaddr++ = val;
2047
2048 if (i == 1)
2049 break;
2050
2051 p = p1;
2052 }
2053
2054 return len;
2055}
2056
2057static int
2058monitor_xfer_memory (memaddr, myaddr, len, write, target)
2059 CORE_ADDR memaddr;
2060 char *myaddr;
2061 int len;
2062 int write;
c5aa993b 2063 struct target_ops *target; /* ignored */
c906108c
SS
2064{
2065 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
2066}
2067
2068static void
2069monitor_kill ()
2070{
c5aa993b 2071 return; /* ignore attempts to kill target system */
c906108c
SS
2072}
2073
2074/* All we actually do is set the PC to the start address of exec_bfd, and start
2075 the program at that point. */
2076
2077static void
2078monitor_create_inferior (exec_file, args, env)
2079 char *exec_file;
2080 char *args;
2081 char **env;
2082{
2083 if (args && (*args != '\000'))
2084 error ("Args are not supported by the monitor.");
2085
2086 first_time = 1;
2087 clear_proceed_status ();
2088 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
2089}
2090
2091/* Clean up when a program exits.
2092 The program actually lives on in the remote processor's RAM, and may be
2093 run again without a download. Don't leave it full of breakpoint
2094 instructions. */
2095
2096static void
2097monitor_mourn_inferior ()
2098{
2099 unpush_target (targ_ops);
2100 generic_mourn_inferior (); /* Do all the proper things now */
2101}
2102
c906108c
SS
2103/* Tell the monitor to add a breakpoint. */
2104
2105static int
2106monitor_insert_breakpoint (addr, shadow)
2107 CORE_ADDR addr;
2108 char *shadow;
2109{
2110 int i;
2111 unsigned char *bp;
2112 int bplen;
2113
2df3850c
JM
2114 monitor_debug ("MON inst bkpt %s\n", paddr (addr));
2115 if (current_monitor->set_break == NULL)
c906108c
SS
2116 error ("No set_break defined for this monitor");
2117
2118 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
2119 addr = ADDR_BITS_REMOVE (addr);
2120
2121 /* Determine appropriate breakpoint size for this address. */
2122 bp = memory_breakpoint_from_pc (&addr, &bplen);
2123
9e086581 2124 for (i = 0; i < current_monitor->num_breakpoints; i++)
c906108c
SS
2125 {
2126 if (breakaddr[i] == 0)
2127 {
2128 breakaddr[i] = addr;
2129 monitor_read_memory (addr, shadow, bplen);
2130 monitor_printf (current_monitor->set_break, addr);
2131 monitor_expect_prompt (NULL, 0);
2132 return 0;
2133 }
2134 }
2135
9e086581 2136 error ("Too many breakpoints (> %d) for monitor.", current_monitor->num_breakpoints);
c906108c
SS
2137}
2138
2139/* Tell the monitor to remove a breakpoint. */
2140
2141static int
2142monitor_remove_breakpoint (addr, shadow)
2143 CORE_ADDR addr;
2144 char *shadow;
2145{
2146 int i;
2147
2df3850c
JM
2148 monitor_debug ("MON rmbkpt %s\n", paddr (addr));
2149 if (current_monitor->clr_break == NULL)
c906108c
SS
2150 error ("No clr_break defined for this monitor");
2151
2152 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
2153 addr = ADDR_BITS_REMOVE (addr);
2154
9e086581 2155 for (i = 0; i < current_monitor->num_breakpoints; i++)
c906108c
SS
2156 {
2157 if (breakaddr[i] == addr)
2158 {
2159 breakaddr[i] = 0;
2160 /* some monitors remove breakpoints based on the address */
2161 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
2162 monitor_printf (current_monitor->clr_break, addr);
2163 else if (current_monitor->flags & MO_CLR_BREAK_1_BASED)
2164 monitor_printf (current_monitor->clr_break, i + 1);
2165 else
2166 monitor_printf (current_monitor->clr_break, i);
2167 monitor_expect_prompt (NULL, 0);
2168 return 0;
2169 }
2170 }
2171 fprintf_unfiltered (gdb_stderr,
2df3850c
JM
2172 "Can't find breakpoint associated with 0x%s\n",
2173 paddr_nz (addr));
c906108c
SS
2174 return 1;
2175}
2176
2177/* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
2178 an S-record. Return non-zero if the ACK is received properly. */
2179
2180static int
2181monitor_wait_srec_ack ()
2182{
d4f3574e 2183 int ch;
c906108c
SS
2184
2185 if (current_monitor->flags & MO_SREC_ACK_PLUS)
2186 {
2187 return (readchar (timeout) == '+');
2188 }
2189 else if (current_monitor->flags & MO_SREC_ACK_ROTATE)
2190 {
2191 /* Eat two backspaces, a "rotating" char (|/-\), and a space. */
2192 if ((ch = readchar (1)) < 0)
2193 return 0;
2194 if ((ch = readchar (1)) < 0)
2195 return 0;
2196 if ((ch = readchar (1)) < 0)
2197 return 0;
2198 if ((ch = readchar (1)) < 0)
2199 return 0;
2200 }
2201 return 1;
2202}
2203
2204/* monitor_load -- download a file. */
2205
2206static void
2207monitor_load (file, from_tty)
c5aa993b
JM
2208 char *file;
2209 int from_tty;
c906108c
SS
2210{
2211 dcache_flush (remote_dcache);
2df3850c 2212 monitor_debug ("MON load\n");
c906108c 2213
2df3850c 2214 if (current_monitor->load_routine)
c906108c
SS
2215 current_monitor->load_routine (monitor_desc, file, hashmark);
2216 else
2217 { /* The default is ascii S-records */
2218 int n;
2219 unsigned long load_offset;
2220 char buf[128];
2221
2222 /* enable user to specify address for downloading as 2nd arg to load */
2223 n = sscanf (file, "%s 0x%lx", buf, &load_offset);
2224 if (n > 1)
2225 file = buf;
2226 else
2227 load_offset = 0;
2228
2229 monitor_printf (current_monitor->load);
2230 if (current_monitor->loadresp)
2231 monitor_expect (current_monitor->loadresp, NULL, 0);
2232
2233 load_srec (monitor_desc, file, (bfd_vma) load_offset,
2234 32, SREC_ALL, hashmark,
2235 current_monitor->flags & MO_SREC_ACK ?
c5aa993b 2236 monitor_wait_srec_ack : NULL);
c906108c
SS
2237
2238 monitor_expect_prompt (NULL, 0);
2239 }
2240
2241/* Finally, make the PC point at the start address */
2242
2243 if (exec_bfd)
2244 write_pc (bfd_get_start_address (exec_bfd));
2245
2246 inferior_pid = 0; /* No process now */
2247
2248/* This is necessary because many things were based on the PC at the time that
2249 we attached to the monitor, which is no longer valid now that we have loaded
2250 new code (and just changed the PC). Another way to do this might be to call
2251 normal_stop, except that the stack may not be valid, and things would get
2252 horribly confused... */
2253
2254 clear_symtab_users ();
2255}
2256
2257static void
2258monitor_stop ()
2259{
2df3850c 2260 monitor_debug ("MON stop\n");
c906108c
SS
2261 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
2262 SERIAL_SEND_BREAK (monitor_desc);
2263 if (current_monitor->stop)
2264 monitor_printf_noecho (current_monitor->stop);
2265}
2266
96baa820
JM
2267/* Put a COMMAND string out to MONITOR. Output from MONITOR is placed
2268 in OUTPUT until the prompt is seen. FIXME: We read the characters
2269 ourseleves here cause of a nasty echo. */
c906108c
SS
2270
2271static void
96baa820
JM
2272monitor_rcmd (char *command,
2273 struct gdb_file *outbuf)
c906108c
SS
2274{
2275 char *p;
2276 int resp_len;
2277 char buf[1000];
2278
2279 if (monitor_desc == NULL)
2280 error ("monitor target not open.");
2281
2282 p = current_monitor->prompt;
2283
2284 /* Send the command. Note that if no args were supplied, then we're
2285 just sending the monitor a newline, which is sometimes useful. */
2286
96baa820 2287 monitor_printf ("%s\r", (command ? command : ""));
c906108c
SS
2288
2289 resp_len = monitor_expect_prompt (buf, sizeof buf);
2290
96baa820 2291 fputs_unfiltered (buf, outbuf); /* Output the response */
c906108c
SS
2292}
2293
2294/* Convert hex digit A to a number. */
2295
2296#if 0
2297static int
2298from_hex (a)
2299 int a;
c5aa993b 2300{
c906108c
SS
2301 if (a >= '0' && a <= '9')
2302 return a - '0';
2303 if (a >= 'a' && a <= 'f')
2304 return a - 'a' + 10;
2305 if (a >= 'A' && a <= 'F')
2306 return a - 'A' + 10;
2307
2308 error ("Reply contains invalid hex digit 0x%x", a);
2309}
2310#endif
2311
2312char *
2313monitor_get_dev_name ()
2314{
2315 return dev_name;
2316}
2317
2318static struct target_ops monitor_ops;
2319
2320static void
2321init_base_monitor_ops (void)
2322{
2323 monitor_ops.to_shortname = NULL;
2324 monitor_ops.to_longname = NULL;
2325 monitor_ops.to_doc = NULL;
2326 monitor_ops.to_open = NULL;
2327 monitor_ops.to_close = monitor_close;
2328 monitor_ops.to_attach = NULL;
2329 monitor_ops.to_post_attach = NULL;
2330 monitor_ops.to_require_attach = NULL;
2331 monitor_ops.to_detach = monitor_detach;
2332 monitor_ops.to_require_detach = NULL;
2333 monitor_ops.to_resume = monitor_resume;
2334 monitor_ops.to_wait = monitor_wait;
2335 monitor_ops.to_post_wait = NULL;
2336 monitor_ops.to_fetch_registers = monitor_fetch_registers;
2337 monitor_ops.to_store_registers = monitor_store_registers;
2338 monitor_ops.to_prepare_to_store = monitor_prepare_to_store;
2339 monitor_ops.to_xfer_memory = monitor_xfer_memory;
2340 monitor_ops.to_files_info = monitor_files_info;
2341 monitor_ops.to_insert_breakpoint = monitor_insert_breakpoint;
2342 monitor_ops.to_remove_breakpoint = monitor_remove_breakpoint;
2343 monitor_ops.to_terminal_init = 0;
2344 monitor_ops.to_terminal_inferior = 0;
2345 monitor_ops.to_terminal_ours_for_output = 0;
2346 monitor_ops.to_terminal_ours = 0;
2347 monitor_ops.to_terminal_info = 0;
2348 monitor_ops.to_kill = monitor_kill;
2349 monitor_ops.to_load = monitor_load;
2350 monitor_ops.to_lookup_symbol = 0;
2351 monitor_ops.to_create_inferior = monitor_create_inferior;
2352 monitor_ops.to_post_startup_inferior = NULL;
2353 monitor_ops.to_acknowledge_created_inferior = NULL;
2354 monitor_ops.to_clone_and_follow_inferior = NULL;
2355 monitor_ops.to_post_follow_inferior_by_clone = NULL;
2356 monitor_ops.to_insert_fork_catchpoint = NULL;
2357 monitor_ops.to_remove_fork_catchpoint = NULL;
2358 monitor_ops.to_insert_vfork_catchpoint = NULL;
2359 monitor_ops.to_remove_vfork_catchpoint = NULL;
2360 monitor_ops.to_has_forked = NULL;
2361 monitor_ops.to_has_vforked = NULL;
2362 monitor_ops.to_can_follow_vfork_prior_to_exec = NULL;
2363 monitor_ops.to_post_follow_vfork = NULL;
2364 monitor_ops.to_insert_exec_catchpoint = NULL;
2365 monitor_ops.to_remove_exec_catchpoint = NULL;
2366 monitor_ops.to_has_execd = NULL;
2367 monitor_ops.to_reported_exec_events_per_exec_call = NULL;
2368 monitor_ops.to_has_exited = NULL;
2369 monitor_ops.to_mourn_inferior = monitor_mourn_inferior;
2370 monitor_ops.to_can_run = 0;
2371 monitor_ops.to_notice_signals = 0;
2372 monitor_ops.to_thread_alive = 0;
2373 monitor_ops.to_stop = monitor_stop;
96baa820 2374 monitor_ops.to_rcmd = monitor_rcmd;
c906108c
SS
2375 monitor_ops.to_pid_to_exec_file = NULL;
2376 monitor_ops.to_core_file_to_sym_file = NULL;
2377 monitor_ops.to_stratum = process_stratum;
2378 monitor_ops.DONT_USE = 0;
2379 monitor_ops.to_has_all_memory = 1;
2380 monitor_ops.to_has_memory = 1;
2381 monitor_ops.to_has_stack = 1;
2382 monitor_ops.to_has_registers = 1;
2383 monitor_ops.to_has_execution = 1;
2384 monitor_ops.to_sections = 0;
2385 monitor_ops.to_sections_end = 0;
2386 monitor_ops.to_magic = OPS_MAGIC;
c5aa993b 2387} /* init_base_monitor_ops */
c906108c
SS
2388
2389/* Init the target_ops structure pointed at by OPS */
2390
2391void
2392init_monitor_ops (ops)
2393 struct target_ops *ops;
2394{
2395 if (monitor_ops.to_magic != OPS_MAGIC)
2396 init_base_monitor_ops ();
2397
2398 memcpy (ops, &monitor_ops, sizeof monitor_ops);
2399}
2400
2401/* Define additional commands that are usually only used by monitors. */
2402
2403void
2404_initialize_remote_monitors ()
2405{
2406 init_base_monitor_ops ();
2407 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
c5aa993b 2408 (char *) &hashmark,
c906108c
SS
2409 "Set display of activity while downloading a file.\n\
2410When enabled, a hashmark \'#\' is displayed.",
c5aa993b 2411 &setlist),
c906108c 2412 &showlist);
2df3850c
JM
2413
2414#if 0
2415 /* FIXME: cagney/1999-10-07: Wait until there is a generic ``set
2416 debug ...'' rather than another ``set ...debug'' command. */
2417 add_show_from_set
2418 (add_set_cmd ("monitordebug", no_class, var_zinteger,
2419 (char *) &monitor_debug_p,
2420 "Set debugging of remote monitor communication.\n\
2421When enabled, communication between GDB and the remote monitor\n\
2422is displayed.", &setlist),
2423 &showlist);
2424#endif
c906108c 2425}
This page took 0.133008 seconds and 4 git commands to generate.