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