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