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