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