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