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