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