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