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