* monitor.c (monitor_insert_breakpoint): Handle bi-endian machines.
[deliverable/binutils-gdb.git] / gdb / monitor.c
1 /* Remote debugging interface for boot monitors, for GDB.
2 Copyright 1990, 1991, 1992, 1993, 1995, 1996
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 int readchar PARAMS ((int timeout));
66
67 static void monitor_command PARAMS ((char *args, int fromtty));
68
69 static void monitor_fetch_register PARAMS ((int regno));
70 static void monitor_store_register PARAMS ((int regno));
71
72 static void monitor_detach PARAMS ((char *args, int from_tty));
73 static void monitor_resume PARAMS ((int pid, int step, enum target_signal sig));
74 static void monitor_interrupt PARAMS ((int signo));
75 static void monitor_interrupt_twice PARAMS ((int signo));
76 static void monitor_interrupt_query PARAMS ((void));
77 static void monitor_wait_cleanup PARAMS ((int old_timeout));
78
79 static int monitor_wait PARAMS ((int pid, struct target_waitstatus *status));
80 static void monitor_fetch_registers PARAMS ((int regno));
81 static void monitor_store_registers PARAMS ((int regno));
82 static void monitor_prepare_to_store PARAMS ((void));
83 static int monitor_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len, int write, struct target_ops *target));
84 static void monitor_files_info PARAMS ((struct target_ops *ops));
85 static int monitor_insert_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
86 static int monitor_remove_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
87 static void monitor_kill PARAMS ((void));
88 static void monitor_load PARAMS ((char *file, int from_tty));
89 static void monitor_mourn_inferior PARAMS ((void));
90 static void monitor_stop PARAMS ((void));
91 static void monitor_debug PARAMS ((char *prefix, char *string, char *suffix));
92
93 static int monitor_read_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
94 static int monitor_write_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
95
96 static int monitor_expect_regexp PARAMS ((struct re_pattern_buffer *pat,
97 char *buf, int buflen));
98 static int from_hex PARAMS ((int a));
99 static unsigned long get_hex_word PARAMS ((void));
100
101 static struct monitor_ops *current_monitor;
102
103 static int hashmark; /* flag set by "set hash" */
104
105 static int timeout = 30;
106
107 static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */
108
109 static void (*ofunc)(); /* Old SIGINT signal handler */
110
111 /* Descriptor for I/O to remote machine. Initialize it to NULL so
112 that monitor_open knows that we don't have a file open when the
113 program starts. */
114
115 static serial_t monitor_desc = NULL;
116
117 /* Pointer to regexp pattern matching data */
118
119 static struct re_pattern_buffer register_pattern;
120 static char register_fastmap[256];
121
122 static struct re_pattern_buffer getmem_resp_delim_pattern;
123 static char getmem_resp_delim_fastmap[256];
124
125 static int dump_reg_flag; /* Non-zero means do a dump_registers cmd when
126 monitor_wait wakes up. */
127
128 static DCACHE *remote_dcache;
129 static int first_time=0; /* is this the first time we're executing after
130 gaving created the child proccess? */
131
132 /* monitor_debug is like fputs_unfiltered, except it prints special
133 characters in printable fashion. */
134
135 static void
136 monitor_debug (prefix, string, suffix)
137 char *prefix;
138 char *string;
139 char *suffix;
140 {
141 int ch;
142
143 /* print prefix and suffix after each line */
144 static int new_line=1;
145 static char *prev_prefix = "";
146 static char *prev_suffix = "";
147
148 /* if the prefix is changing, print the previous suffix, a new line,
149 and the new prefix */
150 if (strcmp(prev_prefix, prefix) != 0 && !new_line)
151 {
152 fputs_unfiltered (prev_suffix, gdb_stderr);
153 fputs_unfiltered ("\n", gdb_stderr);
154 fputs_unfiltered (prefix, gdb_stderr);
155 }
156 prev_prefix = prefix;
157 prev_suffix = suffix;
158
159 /* print prefix if last char was a newline*/
160
161 if (new_line == 1) {
162 fputs_unfiltered (prefix, gdb_stderr);
163 new_line=0;
164 }
165 if (strchr(string,'\n')) /* save state for next call */
166 new_line=1;
167
168 while ((ch = *string++) != '\0')
169 {
170 switch (ch) {
171 default:
172 if (isprint (ch))
173 fputc_unfiltered (ch, gdb_stderr);
174
175 else
176 fprintf_unfiltered (gdb_stderr, "\\%03o", ch);
177
178 break;
179
180 case '\\': fputs_unfiltered ("\\\\", gdb_stderr); break;
181 case '\b': fputs_unfiltered ("\\b", gdb_stderr); break;
182 case '\f': fputs_unfiltered ("\\f", gdb_stderr); break;
183 case '\n': fputs_unfiltered ("\\n", gdb_stderr); break;
184 case '\r': fputs_unfiltered ("\\r", gdb_stderr); break;
185 case '\t': fputs_unfiltered ("\\t", gdb_stderr); break;
186 case '\v': fputs_unfiltered ("\\v", gdb_stderr); break;
187 }
188 }
189
190 if (new_line==1) { /* print suffix if last char was a newline */
191 fputs_unfiltered (suffix, gdb_stderr);
192 fputs_unfiltered ("\n", gdb_stderr);
193 }
194 }
195
196 /* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
197 Works just like printf. */
198
199 void
200 #ifdef ANSI_PROTOTYPES
201 monitor_printf_noecho (char *pattern, ...)
202 #else
203 monitor_printf_noecho (va_alist)
204 va_dcl
205 #endif
206 {
207 va_list args;
208 char sndbuf[2000];
209 int len;
210
211 #if ANSI_PROTOTYPES
212 va_start (args, pattern);
213 #else
214 char *pattern;
215 va_start (args);
216 pattern = va_arg (args, char *);
217 #endif
218
219 vsprintf (sndbuf, pattern, args);
220
221 if (remote_debug > 0)
222 monitor_debug ("sent -->", sndbuf, "<--");
223
224 len = strlen (sndbuf);
225
226 if (len + 1 > sizeof sndbuf)
227 abort ();
228
229 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
230 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
231 }
232
233 /* monitor_printf -- Send data to monitor and check the echo. Works just like
234 printf. */
235
236 void
237 #ifdef ANSI_PROTOTYPES
238 monitor_printf (char *pattern, ...)
239 #else
240 monitor_printf (va_alist)
241 va_dcl
242 #endif
243 {
244 va_list args;
245 char sndbuf[2000];
246 int len;
247
248 #ifdef ANSI_PROTOTYPES
249 va_start (args, pattern);
250 #else
251 char *pattern;
252 va_start (args);
253 pattern = va_arg (args, char *);
254 #endif
255
256 vsprintf (sndbuf, pattern, args);
257
258 if (remote_debug > 0)
259 monitor_debug ("sent -->", sndbuf, "<--");
260
261 len = strlen (sndbuf);
262
263 if (len + 1 > sizeof sndbuf)
264 abort ();
265
266 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
267 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
268
269 /* We used to expect that the next immediate output was the characters we
270 just output, but sometimes some extra junk appeared before the characters
271 we expected, like an extra prompt, or a portmaster sending telnet negotiations.
272 So, just start searching for what we sent, and skip anything unknown. */
273 monitor_expect (sndbuf, (char *)0, 0);
274 }
275
276 /* Read a character from the remote system, doing all the fancy
277 timeout stuff. */
278
279 static int
280 readchar (timeout)
281 int timeout;
282 {
283 int c;
284 static enum { last_random, last_nl, last_cr, last_crnl } state = last_random;
285 int looping;
286
287 do
288 {
289 looping = 0;
290 c = SERIAL_READCHAR (monitor_desc, timeout);
291
292 if (c >= 0)
293 {
294 c &= 0x7f;
295 if (remote_debug > 0)
296 {
297 char buf[2];
298 buf[0] = c;
299 buf[1] = '\0';
300 monitor_debug ("read -->", buf, "<--");
301 }
302 }
303
304 /* Canonicialize \n\r combinations into one \r */
305 if ((current_monitor->flags & MO_HANDLE_NL) != 0)
306 {
307 if ((c == '\r' && state == last_nl)
308 || (c == '\n' && state == last_cr))
309 {
310 state = last_crnl;
311 looping = 1;
312 }
313 else if (c == '\r')
314 state = last_cr;
315 else if (c != '\n')
316 state = last_random;
317 else
318 {
319 state = last_nl;
320 c = '\r';
321 }
322 }
323 }
324 while (looping);
325
326 if (c >= 0)
327 return c;
328
329 if (c == SERIAL_TIMEOUT)
330 #ifdef MAINTENANCE_CMDS
331 if (in_monitor_wait) /* Watchdog went off */
332 {
333 target_mourn_inferior ();
334 error ("Watchdog has expired. Target detached.\n");
335 }
336 else
337 #endif
338 error ("Timeout reading from remote system.");
339
340 perror_with_name ("remote-monitor");
341 }
342
343 /* Scan input from the remote system, until STRING is found. If BUF is non-
344 zero, then collect input until we have collected either STRING or BUFLEN-1
345 chars. In either case we terminate BUF with a 0. If input overflows BUF
346 because STRING can't be found, return -1, else return number of chars in BUF
347 (minus the terminating NUL). Note that in the non-overflow case, STRING
348 will be at the end of BUF. */
349
350 int
351 monitor_expect (string, buf, buflen)
352 char *string;
353 char *buf;
354 int buflen;
355 {
356 char *p = string;
357 int obuflen = buflen;
358 int c;
359 extern struct target_ops *targ_ops;
360
361 immediate_quit = 1;
362 while (1)
363 {
364 if (buf)
365 {
366 if (buflen < 2)
367 {
368 *buf = '\000';
369 immediate_quit = 0;
370 return -1;
371 }
372
373 c = readchar (timeout);
374 if (c == '\000')
375 continue;
376 *buf++ = c;
377 buflen--;
378 }
379 else
380 c = readchar (timeout);
381
382 /* Don't expect any ^C sent to be echoed */
383
384 if (*p == '\003' || c == *p)
385 {
386 p++;
387 if (*p == '\0')
388 {
389 immediate_quit = 0;
390
391 if (buf)
392 {
393 *buf++ = '\000';
394 return obuflen - buflen;
395 }
396 else
397 return 0;
398 }
399 }
400 else if ((c == '\021' || c == '\023') &&
401 (strcmp(targ_ops->to_shortname, "m32r") == 0))
402 { /* m32r monitor emits random DC1/DC3 chars */
403 continue;
404 }
405 else
406 {
407 p = string;
408 if (c == *p)
409 p++;
410 }
411 }
412 }
413
414 /* Search for a regexp. */
415
416 static int
417 monitor_expect_regexp (pat, buf, buflen)
418 struct re_pattern_buffer *pat;
419 char *buf;
420 int buflen;
421 {
422 char *mybuf;
423 char *p;
424
425 if (buf)
426 mybuf = buf;
427 else
428 {
429 mybuf = alloca (1024);
430 buflen = 1024;
431 }
432
433 p = mybuf;
434 while (1)
435 {
436 int retval;
437
438 if (p - mybuf >= buflen)
439 { /* Buffer about to overflow */
440
441 /* On overflow, we copy the upper half of the buffer to the lower half. Not
442 great, but it usually works... */
443
444 memcpy (mybuf, mybuf + buflen / 2, buflen / 2);
445 p = mybuf + buflen / 2;
446 }
447
448 *p++ = readchar (timeout);
449
450 retval = re_search (pat, mybuf, p - mybuf, 0, p - mybuf, NULL);
451 if (retval >= 0)
452 return 1;
453 }
454 }
455
456 /* Keep discarding input until we see the MONITOR prompt.
457
458 The convention for dealing with the prompt is that you
459 o give your command
460 o *then* wait for the prompt.
461
462 Thus the last thing that a procedure does with the serial line will
463 be an monitor_expect_prompt(). Exception: monitor_resume does not
464 wait for the prompt, because the terminal is being handed over to
465 the inferior. However, the next thing which happens after that is
466 a monitor_wait which does wait for the prompt. Note that this
467 includes abnormal exit, e.g. error(). This is necessary to prevent
468 getting into states from which we can't recover. */
469
470 int
471 monitor_expect_prompt (buf, buflen)
472 char *buf;
473 int buflen;
474 {
475 return monitor_expect (current_monitor->prompt, buf, buflen);
476 }
477
478 /* Get N 32-bit words from remote, each preceded by a space, and put
479 them in registers starting at REGNO. */
480
481 static unsigned long
482 get_hex_word ()
483 {
484 unsigned long val;
485 int i;
486 int ch;
487
488 do
489 ch = readchar (timeout);
490 while (isspace(ch));
491
492 val = from_hex (ch);
493
494 for (i = 7; i >= 1; i--)
495 {
496 ch = readchar (timeout);
497 if (!isxdigit (ch))
498 break;
499 val = (val << 4) | from_hex (ch);
500 }
501
502 return val;
503 }
504
505 static void
506 compile_pattern (pattern, compiled_pattern, fastmap)
507 char *pattern;
508 struct re_pattern_buffer *compiled_pattern;
509 char *fastmap;
510 {
511 int tmp;
512 char *val;
513
514 compiled_pattern->fastmap = fastmap;
515
516 tmp = re_set_syntax (RE_SYNTAX_EMACS);
517 val = re_compile_pattern (pattern,
518 strlen (pattern),
519 compiled_pattern);
520 re_set_syntax (tmp);
521
522 if (val)
523 error ("compile_pattern: Can't compile pattern string `%s': %s!", pattern, val);
524
525 if (fastmap)
526 re_compile_fastmap (compiled_pattern);
527 }
528
529 /* Open a connection to a remote debugger. NAME is the filename used
530 for communication. */
531
532 void
533 monitor_open (args, mon_ops, from_tty)
534 char *args;
535 struct monitor_ops *mon_ops;
536 int from_tty;
537 {
538 char *name;
539 int i;
540 char **p;
541
542 if (mon_ops->magic != MONITOR_OPS_MAGIC)
543 error ("Magic number of monitor_ops struct wrong.");
544
545 targ_ops = mon_ops->target;
546 name = targ_ops->to_shortname;
547
548 if (!args)
549 error ("Use `target %s DEVICE-NAME' to use a serial port, or \n\
550 `target %s HOST-NAME:PORT-NUMBER' to use a network connection.", name, name);
551
552 target_preopen (from_tty);
553
554 /* Setup pattern for register dump */
555
556 if (mon_ops->register_pattern)
557 compile_pattern (mon_ops->register_pattern, &register_pattern,
558 register_fastmap);
559
560 if (mon_ops->getmem.resp_delim)
561 compile_pattern (mon_ops->getmem.resp_delim, &getmem_resp_delim_pattern,
562 getmem_resp_delim_fastmap);
563
564 unpush_target (targ_ops);
565
566 if (dev_name)
567 free (dev_name);
568 dev_name = strsave (args);
569
570 monitor_desc = SERIAL_OPEN (dev_name);
571
572 if (!monitor_desc)
573 perror_with_name (dev_name);
574
575 if (baud_rate != -1)
576 {
577 if (SERIAL_SETBAUDRATE (monitor_desc, baud_rate))
578 {
579 SERIAL_CLOSE (monitor_desc);
580 perror_with_name (dev_name);
581 }
582 }
583
584 SERIAL_RAW (monitor_desc);
585
586 SERIAL_FLUSH_INPUT (monitor_desc);
587
588 /* some systems only work with 2 stop bits */
589
590 SERIAL_SETSTOPBITS (monitor_desc, mon_ops->stopbits);
591
592 current_monitor = mon_ops;
593
594 /* See if we can wake up the monitor. First, try sending a stop sequence,
595 then send the init strings. Last, remove all breakpoints. */
596
597 if (current_monitor->stop)
598 {
599 monitor_stop ();
600 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
601 {
602 monitor_expect_prompt (NULL, 0);
603 }
604 }
605
606 /* wake up the monitor and see if it's alive */
607 for (p = mon_ops->init; *p != NULL; p++)
608 {
609 /* Some of the characters we send may not be echoed,
610 but we hope to get a prompt at the end of it all. */
611
612 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
613 monitor_printf(*p);
614 else
615 monitor_printf_noecho (*p);
616 monitor_expect_prompt (NULL, 0);
617 }
618
619 SERIAL_FLUSH_INPUT (monitor_desc);
620
621 /* Remove all breakpoints */
622
623 if (mon_ops->clr_all_break)
624 {
625 monitor_printf (mon_ops->clr_all_break);
626 monitor_expect_prompt (NULL, 0);
627 }
628
629 if (from_tty)
630 printf_unfiltered ("Remote target %s connected to %s\n", name, dev_name);
631
632 push_target (targ_ops);
633
634 inferior_pid = 42000; /* Make run command think we are busy... */
635
636 /* Give monitor_wait something to read */
637
638 monitor_printf (current_monitor->line_term);
639
640 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory);
641
642 start_remote ();
643 }
644
645 /* Close out all files and local state before this target loses
646 control. */
647
648 void
649 monitor_close (quitting)
650 int quitting;
651 {
652 if (monitor_desc)
653 SERIAL_CLOSE (monitor_desc);
654 monitor_desc = NULL;
655 }
656
657 /* Terminate the open connection to the remote debugger. Use this
658 when you want to detach and do something else with your gdb. */
659
660 static void
661 monitor_detach (args, from_tty)
662 char *args;
663 int from_tty;
664 {
665 pop_target (); /* calls monitor_close to do the real work */
666 if (from_tty)
667 printf_unfiltered ("Ending remote %s debugging\n", target_shortname);
668 }
669
670 /* Convert VALSTR into the target byte-ordered value of REGNO and store it. */
671
672 char *
673 monitor_supply_register (regno, valstr)
674 int regno;
675 char *valstr;
676 {
677 unsigned int val;
678 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
679 char *p;
680
681 val = strtoul (valstr, &p, 16);
682
683 if (val == 0 && valstr == p)
684 error ("monitor_supply_register (%d): bad value from monitor: %s.",
685 regno, valstr);
686
687 /* supply register stores in target byte order, so swap here */
688
689 store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
690
691 supply_register (regno, regbuf);
692
693 return p;
694 }
695
696 /* Tell the remote machine to resume. */
697
698 static void
699 monitor_resume (pid, step, sig)
700 int pid, step;
701 enum target_signal sig;
702 {
703 /* Some monitors require a different command when starting a program */
704 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
705 {
706 first_time = 0;
707 monitor_printf ("run\r");
708 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
709 dump_reg_flag = 1;
710 return;
711 }
712 dcache_flush (remote_dcache);
713 if (step)
714 monitor_printf (current_monitor->step);
715 else
716 {
717 monitor_printf (current_monitor->cont);
718 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
719 dump_reg_flag = 1;
720 }
721 }
722
723 /* Parse the output of a register dump command. A monitor specific
724 regexp is used to extract individual register descriptions of the
725 form REG=VAL. Each description is split up into a name and a value
726 string which are passed down to monitor specific code. */
727
728 static char *
729 parse_register_dump (buf, len)
730 char *buf;
731 int len;
732 {
733 while (1)
734 {
735 int regnamelen, vallen;
736 char *regname, *val;
737 /* Element 0 points to start of register name, and element 1
738 points to the start of the register value. */
739 struct re_registers register_strings;
740
741 if (re_search (&register_pattern, buf, len, 0, len,
742 &register_strings) == -1)
743 break;
744
745 regnamelen = register_strings.end[1] - register_strings.start[1];
746 regname = buf + register_strings.start[1];
747 vallen = register_strings.end[2] - register_strings.start[2];
748 val = buf + register_strings.start[2];
749
750 current_monitor->supply_register (regname, regnamelen, val, vallen);
751
752 buf += register_strings.end[0];
753 len -= register_strings.end[0];
754 }
755 }
756
757 /* Send ^C to target to halt it. Target will respond, and send us a
758 packet. */
759
760 static void
761 monitor_interrupt (signo)
762 int signo;
763 {
764 /* If this doesn't work, try more severe steps. */
765 signal (signo, monitor_interrupt_twice);
766
767 if (remote_debug)
768 printf_unfiltered ("monitor_interrupt called\n");
769
770 target_stop ();
771 }
772
773 /* The user typed ^C twice. */
774
775 static void
776 monitor_interrupt_twice (signo)
777 int signo;
778 {
779 signal (signo, ofunc);
780
781 monitor_interrupt_query ();
782
783 signal (signo, monitor_interrupt);
784 }
785
786 /* Ask the user what to do when an interrupt is received. */
787
788 static void
789 monitor_interrupt_query ()
790 {
791 target_terminal_ours ();
792
793 if (query ("Interrupted while waiting for the program.\n\
794 Give up (and stop debugging it)? "))
795 {
796 target_mourn_inferior ();
797 return_to_top_level (RETURN_QUIT);
798 }
799
800 target_terminal_inferior ();
801 }
802
803 static void
804 monitor_wait_cleanup (old_timeout)
805 int old_timeout;
806 {
807 timeout = old_timeout;
808 signal (SIGINT, ofunc);
809 in_monitor_wait = 0;
810 }
811
812 /* Wait until the remote machine stops, then return, storing status in
813 status just as `wait' would. */
814
815 static int
816 monitor_wait (pid, status)
817 int pid;
818 struct target_waitstatus *status;
819 {
820 int old_timeout = timeout;
821 char buf[1024];
822 int resp_len;
823 struct cleanup *old_chain;
824
825 status->kind = TARGET_WAITKIND_EXITED;
826 status->value.integer = 0;
827
828 old_chain = make_cleanup (monitor_wait_cleanup, old_timeout);
829
830 #ifdef MAINTENANCE_CMDS
831 in_monitor_wait = 1;
832 timeout = watchdog > 0 ? watchdog : -1;
833 #else
834 timeout = -1; /* Don't time out -- user program is running. */
835 #endif
836
837 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
838
839 do
840 {
841 resp_len = monitor_expect_prompt (buf, sizeof (buf));
842
843 if (resp_len <= 0)
844 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
845 }
846 while (resp_len < 0);
847
848 signal (SIGINT, ofunc);
849
850 timeout = old_timeout;
851
852 if (dump_reg_flag && current_monitor->dump_registers)
853 {
854 dump_reg_flag = 0;
855
856 monitor_printf (current_monitor->dump_registers);
857 resp_len = monitor_expect_prompt (buf, sizeof (buf));
858 }
859
860 if (current_monitor->register_pattern)
861 parse_register_dump (buf, resp_len);
862
863 status->kind = TARGET_WAITKIND_STOPPED;
864 status->value.sig = TARGET_SIGNAL_TRAP;
865
866 discard_cleanups (old_chain);
867
868 in_monitor_wait = 0;
869
870 return inferior_pid;
871 }
872
873 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
874 errno value. */
875
876 static void
877 monitor_fetch_register (regno)
878 int regno;
879 {
880 char *name;
881 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
882 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
883 int i;
884
885 name = current_monitor->regnames[regno];
886
887 if (!name)
888 {
889 supply_register (regno, zerobuf);
890 return;
891 }
892
893 /* send the register examine command */
894
895 monitor_printf (current_monitor->getreg.cmd, name);
896
897 /* If RESP_DELIM is specified, we search for that as a leading
898 delimiter for the register value. Otherwise, we just start
899 searching from the start of the buf. */
900
901 if (current_monitor->getreg.resp_delim)
902 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
903
904 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
905 if (current_monitor->flags & MO_HEX_PREFIX)
906 {
907 int c;
908 c = readchar (timeout);
909 while (c == ' ')
910 c = readchar (timeout);
911 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
912 ;
913 else
914 error ("Bad value returned from monitor while fetching register %x.",
915 regno);
916 }
917
918 /* Read upto the maximum number of hex digits for this register, skipping
919 spaces, but stop reading if something else is seen. Some monitors
920 like to drop leading zeros. */
921
922 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
923 {
924 int c;
925 c = readchar (timeout);
926 while (c == ' ')
927 c = readchar (timeout);
928
929 if (!isxdigit (c))
930 break;
931
932 regbuf[i] = c;
933 }
934
935 regbuf[i] = '\000'; /* terminate the number */
936
937 /* If TERM is present, we wait for that to show up. Also, (if TERM
938 is present), we will send TERM_CMD if that is present. In any
939 case, we collect all of the output into buf, and then wait for
940 the normal prompt. */
941
942 if (current_monitor->getreg.term)
943 {
944 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
945
946 if (current_monitor->getreg.term_cmd)
947 {
948 monitor_printf (current_monitor->getreg.term_cmd);
949 monitor_expect_prompt (NULL, 0);
950 }
951 }
952 else
953 monitor_expect_prompt (NULL, 0); /* get response */
954
955 monitor_supply_register (regno, regbuf);
956 }
957
958 /* Read the remote registers into the block regs. */
959
960 static void monitor_dump_regs ()
961 {
962 char buf[1024];
963 int resp_len;
964
965 if (current_monitor->dump_registers)
966 {
967 monitor_printf (current_monitor->dump_registers);
968 resp_len = monitor_expect_prompt (buf, sizeof (buf));
969 parse_register_dump (buf, resp_len);
970 }
971 else
972 abort(); /* Need some way to read registers */
973 }
974
975 static void
976 monitor_fetch_registers (regno)
977 int regno;
978 {
979 if (current_monitor->getreg.cmd)
980 {
981 if (regno >= 0)
982 {
983 monitor_fetch_register (regno);
984 return;
985 }
986
987 for (regno = 0; regno < NUM_REGS; regno++)
988 monitor_fetch_register (regno);
989 }
990 else {
991 monitor_dump_regs ();
992 }
993 }
994
995 /* Store register REGNO, or all if REGNO == 0. Return errno value. */
996
997 static void
998 monitor_store_register (regno)
999 int regno;
1000 {
1001 char *name;
1002 unsigned int val;
1003
1004 name = current_monitor->regnames[regno];
1005 if (!name)
1006 return;
1007
1008 val = read_register (regno);
1009
1010 /* send the register deposit command */
1011
1012 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
1013 monitor_printf (current_monitor->setreg.cmd, val, name);
1014 else
1015 monitor_printf (current_monitor->setreg.cmd, name, val);
1016
1017 /* It's possible that there are actually some monitors out there that
1018 will prompt you when you set a register. In that case, you may
1019 need to add some code here to deal with TERM and TERM_CMD (see
1020 monitor_fetch_register to get an idea of what's needed...) */
1021
1022 monitor_expect_prompt (NULL, 0);
1023 }
1024
1025 /* Store the remote registers. */
1026
1027 static void
1028 monitor_store_registers (regno)
1029 int regno;
1030 {
1031 if (regno >= 0)
1032 {
1033 monitor_store_register (regno);
1034 return;
1035 }
1036
1037 for (regno = 0; regno < NUM_REGS; regno++)
1038 monitor_store_register (regno);
1039 }
1040
1041 /* Get ready to modify the registers array. On machines which store
1042 individual registers, this doesn't need to do anything. On machines
1043 which store all the registers in one fell swoop, this makes sure
1044 that registers contains all the registers from the program being
1045 debugged. */
1046
1047 static void
1048 monitor_prepare_to_store ()
1049 {
1050 /* Do nothing, since we can store individual regs */
1051 }
1052
1053 static void
1054 monitor_files_info (ops)
1055 struct target_ops *ops;
1056 {
1057 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
1058 }
1059
1060 static int
1061 monitor_write_memory (memaddr, myaddr, len)
1062 CORE_ADDR memaddr;
1063 char *myaddr;
1064 int len;
1065 {
1066 unsigned int val;
1067 char *cmd;
1068 int i;
1069
1070 /* Use memory fill command for leading 0 bytes. */
1071
1072 if (current_monitor->fill)
1073 {
1074 for (i = 0; i < len; i++)
1075 if (myaddr[i] != 0)
1076 break;
1077
1078 if (i > 4) /* More than 4 zeros is worth doing */
1079 {
1080 if (current_monitor->flags & MO_FILL_USES_ADDR)
1081 monitor_printf (current_monitor->fill, memaddr, memaddr + i, 0);
1082 else
1083 monitor_printf (current_monitor->fill, memaddr, i, 0);
1084
1085 monitor_expect_prompt (NULL, 0);
1086
1087 return i;
1088 }
1089 }
1090
1091 #if 0
1092 /* Can't actually use long longs if VAL is an int (nice idea, though). */
1093 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1094 {
1095 len = 8;
1096 cmd = current_monitor->setmem.cmdll;
1097 }
1098 else
1099 #endif
1100 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1101 {
1102 len = 4;
1103 cmd = current_monitor->setmem.cmdl;
1104 }
1105 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1106 {
1107 len = 2;
1108 cmd = current_monitor->setmem.cmdw;
1109 }
1110 else
1111 {
1112 len = 1;
1113 cmd = current_monitor->setmem.cmdb;
1114 }
1115
1116 val = extract_unsigned_integer (myaddr, len);
1117
1118 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1119 monitor_printf_noecho (cmd, memaddr, val);
1120 else
1121 monitor_printf (cmd, memaddr, val);
1122
1123 monitor_expect_prompt (NULL, 0);
1124
1125 return len;
1126 }
1127
1128 /* This is an alternate form of monitor_read_memory which is used for monitors
1129 which can only read a single byte/word/etc. at a time. */
1130
1131 static int
1132 monitor_read_memory_single (memaddr, myaddr, len)
1133 CORE_ADDR memaddr;
1134 char *myaddr;
1135 int len;
1136 {
1137 unsigned int val;
1138 char membuf[sizeof(int) * 2 + 1];
1139 char *p;
1140 char *cmd;
1141 int i;
1142
1143 #if 0
1144 /* Can't actually use long longs (nice idea, though). In fact, the
1145 call to strtoul below will fail if it tries to convert a value
1146 that's too big to fit in a long. */
1147 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1148 {
1149 len = 8;
1150 cmd = current_monitor->getmem.cmdll;
1151 }
1152 else
1153 #endif
1154 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1155 {
1156 len = 4;
1157 cmd = current_monitor->getmem.cmdl;
1158 }
1159 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1160 {
1161 len = 2;
1162 cmd = current_monitor->getmem.cmdw;
1163 }
1164 else
1165 {
1166 len = 1;
1167 cmd = current_monitor->getmem.cmdb;
1168 }
1169
1170 /* Send the examine command. */
1171
1172 monitor_printf (cmd, memaddr);
1173
1174 /* If RESP_DELIM is specified, we search for that as a leading
1175 delimiter for the memory value. Otherwise, we just start
1176 searching from the start of the buf. */
1177
1178 if (current_monitor->getmem.resp_delim)
1179 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1180
1181 /* Now, read the appropriate number of hex digits for this loc,
1182 skipping spaces. */
1183
1184 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
1185 if (current_monitor->flags & MO_HEX_PREFIX)
1186 {
1187 int c;
1188
1189 c = readchar (timeout);
1190 while (c == ' ')
1191 c = readchar (timeout);
1192 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1193 ;
1194 else
1195 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1196 memaddr, i, membuf, c);
1197 }
1198 for (i = 0; i < len * 2; i++)
1199 {
1200 int c;
1201
1202 while (1)
1203 {
1204 c = readchar (timeout);
1205 if (isxdigit (c))
1206 break;
1207 if (c == ' ')
1208 continue;
1209
1210 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1211 memaddr, i, membuf, c);
1212 }
1213
1214 membuf[i] = c;
1215 }
1216
1217 membuf[i] = '\000'; /* terminate the number */
1218
1219 /* If TERM is present, we wait for that to show up. Also, (if TERM is
1220 present), we will send TERM_CMD if that is present. In any case, we collect
1221 all of the output into buf, and then wait for the normal prompt. */
1222
1223 if (current_monitor->getmem.term)
1224 {
1225 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
1226
1227 if (current_monitor->getmem.term_cmd)
1228 {
1229 monitor_printf (current_monitor->getmem.term_cmd);
1230 monitor_expect_prompt (NULL, 0);
1231 }
1232 }
1233 else
1234 monitor_expect_prompt (NULL, 0); /* get response */
1235
1236 p = membuf;
1237 val = strtoul (membuf, &p, 16);
1238
1239 if (val == 0 && membuf == p)
1240 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.",
1241 memaddr, membuf);
1242
1243 /* supply register stores in target byte order, so swap here */
1244
1245 store_unsigned_integer (myaddr, len, val);
1246
1247 return len;
1248 }
1249
1250 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's memory
1251 at MEMADDR. Returns length moved. Currently, we only do one byte at a
1252 time. */
1253
1254 static int
1255 monitor_read_memory (memaddr, myaddr, len)
1256 CORE_ADDR memaddr;
1257 char *myaddr;
1258 int len;
1259 {
1260 unsigned int val;
1261 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
1262 char buf[512];
1263 char *p, *p1;
1264 char *name;
1265 int resp_len;
1266 int i;
1267
1268 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1269 return monitor_read_memory_single (memaddr, myaddr, len);
1270
1271 len = min (len, 16);
1272
1273 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
1274 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1275 len = ((memaddr + len) & ~0xf) - memaddr;
1276
1277 /* send the memory examine command */
1278
1279 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1280 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1);
1281 else
1282 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1283
1284 /* If TERM is present, we wait for that to show up. Also, (if TERM
1285 is present), we will send TERM_CMD if that is present. In any
1286 case, we collect all of the output into buf, and then wait for
1287 the normal prompt. */
1288
1289 if (current_monitor->getmem.term)
1290 {
1291 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
1292
1293 if (resp_len <= 0)
1294 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.",
1295 memaddr, resp_len, buf);
1296
1297 if (current_monitor->getmem.term_cmd)
1298 {
1299 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1300 strlen (current_monitor->getmem.term_cmd));
1301 monitor_expect_prompt (NULL, 0);
1302 }
1303 }
1304 else
1305 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
1306
1307 p = buf;
1308
1309 /* If RESP_DELIM is specified, we search for that as a leading
1310 delimiter for the values. Otherwise, we just start searching
1311 from the start of the buf. */
1312
1313 if (current_monitor->getmem.resp_delim)
1314 {
1315 int retval, tmp;
1316 struct re_registers resp_strings;
1317
1318 tmp = strlen (p);
1319 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1320 &resp_strings);
1321
1322 if (retval < 0)
1323 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1324 memaddr, resp_len, buf);
1325
1326 p += resp_strings.end[0];
1327 #if 0
1328 p = strstr (p, current_monitor->getmem.resp_delim);
1329 if (!p)
1330 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1331 memaddr, resp_len, buf);
1332 p += strlen (current_monitor->getmem.resp_delim);
1333 #endif
1334 }
1335
1336 for (i = len; i > 0; i--)
1337 {
1338 /* Skip non-hex chars, but bomb on end of string and newlines */
1339
1340 while (1)
1341 {
1342 if (isxdigit (*p))
1343 break;
1344 if (*p == '\000' || *p == '\n' || *p == '\r')
1345 error ("monitor_read_memory (0x%x): badly terminated response from monitor: %.*s", memaddr, resp_len, buf);
1346 p++;
1347 }
1348
1349 val = strtoul (p, &p1, 16);
1350
1351 if (val == 0 && p == p1)
1352 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr,
1353 resp_len, buf);
1354
1355 *myaddr++ = val;
1356
1357 if (i == 1)
1358 break;
1359
1360 p = p1;
1361 }
1362
1363 return len;
1364 }
1365
1366 static int
1367 monitor_xfer_memory (memaddr, myaddr, len, write, target)
1368 CORE_ADDR memaddr;
1369 char *myaddr;
1370 int len;
1371 int write;
1372 struct target_ops *target; /* ignored */
1373 {
1374 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
1375 }
1376
1377 static void
1378 monitor_kill ()
1379 {
1380 return; /* ignore attempts to kill target system */
1381 }
1382
1383 /* All we actually do is set the PC to the start address of exec_bfd, and start
1384 the program at that point. */
1385
1386 static void
1387 monitor_create_inferior (exec_file, args, env)
1388 char *exec_file;
1389 char *args;
1390 char **env;
1391 {
1392 if (args && (*args != '\000'))
1393 error ("Args are not supported by the monitor.");
1394
1395 first_time = 1;
1396 clear_proceed_status ();
1397 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
1398 }
1399
1400 /* Clean up when a program exits.
1401 The program actually lives on in the remote processor's RAM, and may be
1402 run again without a download. Don't leave it full of breakpoint
1403 instructions. */
1404
1405 static void
1406 monitor_mourn_inferior ()
1407 {
1408 unpush_target (targ_ops);
1409 generic_mourn_inferior (); /* Do all the proper things now */
1410 }
1411
1412 #define NUM_MONITOR_BREAKPOINTS 8
1413
1414 static CORE_ADDR breakaddr[NUM_MONITOR_BREAKPOINTS] = {0};
1415
1416 /* Tell the monitor to add a breakpoint. */
1417
1418 static int
1419 monitor_insert_breakpoint (addr, shadow)
1420 CORE_ADDR addr;
1421 char *shadow;
1422 {
1423 int i;
1424 /* This is only used to compute the size of a breakpoint. */
1425 #ifdef BREAKPOINT
1426 static unsigned char break_insn[] = BREAKPOINT;
1427 #else
1428 /* In the bi-endian case we assume breakpoints are the same size. */
1429 static unsigned char break_insn[] = BIG_BREAKPOINT;
1430 #endif
1431
1432 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1433 {
1434 if (breakaddr[i] == 0)
1435 {
1436 breakaddr[i] = addr;
1437 monitor_read_memory (addr, shadow, sizeof (break_insn));
1438 monitor_printf (current_monitor->set_break, addr);
1439 monitor_expect_prompt (NULL, 0);
1440 return 0;
1441 }
1442 }
1443
1444 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS);
1445 }
1446
1447 /* Tell the monitor to remove a breakpoint. */
1448
1449 static int
1450 monitor_remove_breakpoint (addr, shadow)
1451 CORE_ADDR addr;
1452 char *shadow;
1453 {
1454 int i;
1455
1456 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1457 {
1458 if (breakaddr[i] == addr)
1459 {
1460 breakaddr[i] = 0;
1461 /* some monitors remove breakpoints based on the address */
1462 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
1463 monitor_printf (current_monitor->clr_break, addr);
1464 else
1465 monitor_printf (current_monitor->clr_break, i);
1466 monitor_expect_prompt (NULL, 0);
1467 return 0;
1468 }
1469 }
1470 fprintf_unfiltered (stderr, "Can't find breakpoint associated with 0x%x\n", addr);
1471 return 1;
1472 }
1473
1474 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
1475 an S-record. Return non-zero if the ACK is received properly. */
1476
1477 static int
1478 monitor_wait_srec_ack ()
1479 {
1480 /* FIXME: eventually we'll want to be able to handle acknowledgements
1481 of something other than a '+' character. Right now this is only
1482 going to work for EST visionICE. */
1483 return readchar (timeout) == '+';
1484 }
1485
1486 /* monitor_load -- download a file. */
1487
1488 static void
1489 monitor_load (file, from_tty)
1490 char *file;
1491 int from_tty;
1492 {
1493 dcache_flush (remote_dcache);
1494
1495 if (current_monitor->load_routine)
1496 current_monitor->load_routine (monitor_desc, file, hashmark);
1497 else
1498 { /* The default is ascii S-records */
1499 monitor_printf (current_monitor->load);
1500 if (current_monitor->loadresp)
1501 monitor_expect (current_monitor->loadresp, NULL, 0);
1502
1503 /* FIXME Should add arg here for load_offset (already done for generic_load) */
1504 load_srec (monitor_desc, file, 32, SREC_ALL, hashmark,
1505 current_monitor->flags & MO_SREC_ACK ?
1506 monitor_wait_srec_ack : NULL);
1507
1508 monitor_expect_prompt (NULL, 0);
1509 }
1510
1511 /* Finally, make the PC point at the start address */
1512
1513 if (exec_bfd)
1514 write_pc (bfd_get_start_address (exec_bfd));
1515
1516 inferior_pid = 0; /* No process now */
1517
1518 /* This is necessary because many things were based on the PC at the time that
1519 we attached to the monitor, which is no longer valid now that we have loaded
1520 new code (and just changed the PC). Another way to do this might be to call
1521 normal_stop, except that the stack may not be valid, and things would get
1522 horribly confused... */
1523
1524 clear_symtab_users ();
1525 }
1526
1527 static void
1528 monitor_stop ()
1529 {
1530 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
1531 SERIAL_SEND_BREAK (monitor_desc);
1532 if (current_monitor->stop)
1533 monitor_printf_noecho (current_monitor->stop);
1534 }
1535
1536 /* Put a command string, in args, out to MONITOR. Output from MONITOR
1537 is placed on the users terminal until the prompt is seen. FIXME: We
1538 read the characters ourseleves here cause of a nasty echo. */
1539
1540 static void
1541 monitor_command (args, from_tty)
1542 char *args;
1543 int from_tty;
1544 {
1545 char *p;
1546 int resp_len;
1547 char buf[1000];
1548
1549 if (monitor_desc == NULL)
1550 error ("monitor target not open.");
1551
1552 p = current_monitor->prompt;
1553
1554 /* Send the command. Note that if no args were supplied, then we're
1555 just sending the monitor a newline, which is sometimes useful. */
1556
1557 monitor_printf ("%s\r", (args ? args : ""));
1558
1559 resp_len = monitor_expect_prompt (buf, sizeof buf);
1560
1561 fputs_unfiltered (buf, gdb_stdout); /* Output the response */
1562 }
1563
1564 /* Convert hex digit A to a number. */
1565
1566 static int
1567 from_hex (a)
1568 int a;
1569 {
1570 if (a >= '0' && a <= '9')
1571 return a - '0';
1572 if (a >= 'a' && a <= 'f')
1573 return a - 'a' + 10;
1574 if (a >= 'A' && a <= 'F')
1575 return a - 'A' + 10;
1576
1577 error ("Reply contains invalid hex digit 0x%x", a);
1578 }
1579
1580 static struct target_ops monitor_ops =
1581 {
1582 NULL, /* to_shortname */
1583 NULL, /* to_longname */
1584 NULL, /* to_doc */
1585 NULL, /* to_open */
1586 monitor_close, /* to_close */
1587 NULL, /* to_attach */
1588 monitor_detach, /* to_detach */
1589 monitor_resume, /* to_resume */
1590 monitor_wait, /* to_wait */
1591 monitor_fetch_registers, /* to_fetch_registers */
1592 monitor_store_registers, /* to_store_registers */
1593 monitor_prepare_to_store, /* to_prepare_to_store */
1594 monitor_xfer_memory, /* to_xfer_memory */
1595 monitor_files_info, /* to_files_info */
1596 monitor_insert_breakpoint, /* to_insert_breakpoint */
1597 monitor_remove_breakpoint, /* to_remove_breakpoint */
1598 0, /* to_terminal_init */
1599 0, /* to_terminal_inferior */
1600 0, /* to_terminal_ours_for_output */
1601 0, /* to_terminal_ours */
1602 0, /* to_terminal_info */
1603 monitor_kill, /* to_kill */
1604 monitor_load, /* to_load */
1605 0, /* to_lookup_symbol */
1606 monitor_create_inferior, /* to_create_inferior */
1607 monitor_mourn_inferior, /* to_mourn_inferior */
1608 0, /* to_can_run */
1609 0, /* to_notice_signals */
1610 0, /* to_thread_alive */
1611 monitor_stop, /* to_stop */
1612 process_stratum, /* to_stratum */
1613 0, /* to_next */
1614 1, /* to_has_all_memory */
1615 1, /* to_has_memory */
1616 1, /* to_has_stack */
1617 1, /* to_has_registers */
1618 1, /* to_has_execution */
1619 0, /* sections */
1620 0, /* sections_end */
1621 OPS_MAGIC /* to_magic */
1622 };
1623
1624 /* Init the target_ops structure pointed at by OPS */
1625
1626 void
1627 init_monitor_ops (ops)
1628 struct target_ops *ops;
1629 {
1630 memcpy (ops, &monitor_ops, sizeof monitor_ops);
1631 }
1632
1633 /* Define additional commands that are usually only used by monitors. */
1634
1635 void
1636 _initialize_remote_monitors ()
1637 {
1638 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
1639 (char *)&hashmark,
1640 "Set display of activity while downloading a file.\n\
1641 When enabled, a hashmark \'#\' is displayed.",
1642 &setlist),
1643 &showlist);
1644
1645 add_com ("monitor", class_obscure, monitor_command,
1646 "Send a command to the debug monitor.");
1647 }
This page took 0.063763 seconds and 5 git commands to generate.