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