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