Fix up some formatting.
[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
39f77062 915monitor_resume (ptid_t ptid, int step, enum target_signal sig)
c906108c
SS
916{
917 /* Some monitors require a different command when starting a program */
2df3850c 918 monitor_debug ("MON resume\n");
c906108c
SS
919 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
920 {
921 first_time = 0;
922 monitor_printf ("run\r");
923 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
c5aa993b 924 dump_reg_flag = 1;
c906108c
SS
925 return;
926 }
c906108c
SS
927 if (step)
928 monitor_printf (current_monitor->step);
929 else
930 {
931 if (current_monitor->continue_hook)
c5aa993b
JM
932 (*current_monitor->continue_hook) ();
933 else
934 monitor_printf (current_monitor->cont);
c906108c
SS
935 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
936 dump_reg_flag = 1;
937 }
938}
939
940/* Parse the output of a register dump command. A monitor specific
941 regexp is used to extract individual register descriptions of the
942 form REG=VAL. Each description is split up into a name and a value
943 string which are passed down to monitor specific code. */
944
945static void
c410a84c 946parse_register_dump (struct regcache *regcache, char *buf, int len)
c906108c 947{
2df3850c
JM
948 monitor_debug ("MON Parsing register dump\n");
949 while (1)
c906108c
SS
950 {
951 int regnamelen, vallen;
952 char *regname, *val;
953 /* Element 0 points to start of register name, and element 1
c5aa993b 954 points to the start of the register value. */
c906108c
SS
955 struct re_registers register_strings;
956
957 memset (&register_strings, 0, sizeof (struct re_registers));
958
959 if (re_search (&register_pattern, buf, len, 0, len,
960 &register_strings) == -1)
961 break;
962
963 regnamelen = register_strings.end[1] - register_strings.start[1];
964 regname = buf + register_strings.start[1];
965 vallen = register_strings.end[2] - register_strings.start[2];
966 val = buf + register_strings.start[2];
967
c410a84c
UW
968 current_monitor->supply_register (regcache, regname, regnamelen,
969 val, vallen);
c906108c
SS
970
971 buf += register_strings.end[0];
972 len -= register_strings.end[0];
973 }
974}
975
976/* Send ^C to target to halt it. Target will respond, and send us a
977 packet. */
978
979static void
fba45db2 980monitor_interrupt (int signo)
c906108c
SS
981{
982 /* If this doesn't work, try more severe steps. */
983 signal (signo, monitor_interrupt_twice);
c5aa993b 984
2df3850c
JM
985 if (monitor_debug_p || remote_debug)
986 fprintf_unfiltered (gdb_stdlog, "monitor_interrupt called\n");
c906108c 987
f9c72d52 988 target_stop (inferior_ptid);
c906108c
SS
989}
990
991/* The user typed ^C twice. */
992
993static void
fba45db2 994monitor_interrupt_twice (int signo)
c906108c
SS
995{
996 signal (signo, ofunc);
c5aa993b 997
c906108c
SS
998 monitor_interrupt_query ();
999
1000 signal (signo, monitor_interrupt);
1001}
1002
1003/* Ask the user what to do when an interrupt is received. */
1004
1005static void
fba45db2 1006monitor_interrupt_query (void)
c906108c
SS
1007{
1008 target_terminal_ours ();
1009
1010 if (query ("Interrupted while waiting for the program.\n\
1011Give up (and stop debugging it)? "))
1012 {
1013 target_mourn_inferior ();
315a522e 1014 deprecated_throw_reason (RETURN_QUIT);
c906108c
SS
1015 }
1016
1017 target_terminal_inferior ();
1018}
1019
1020static void
fba45db2 1021monitor_wait_cleanup (void *old_timeout)
c906108c 1022{
c5aa993b 1023 timeout = *(int *) old_timeout;
c906108c
SS
1024 signal (SIGINT, ofunc);
1025 in_monitor_wait = 0;
1026}
1027
1028
1029
a78f21af 1030static void
c5aa993b
JM
1031monitor_wait_filter (char *buf,
1032 int bufmax,
1033 int *ext_resp_len,
a78f21af 1034 struct target_waitstatus *status)
c906108c 1035{
c5aa993b 1036 int resp_len;
c906108c
SS
1037 do
1038 {
1039 resp_len = monitor_expect_prompt (buf, bufmax);
c5aa993b 1040 *ext_resp_len = resp_len;
c906108c
SS
1041
1042 if (resp_len <= 0)
1043 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
1044 }
1045 while (resp_len < 0);
1046
1047 /* Print any output characters that were preceded by ^O. */
1048 /* FIXME - This would be great as a user settabgle flag */
2df3850c
JM
1049 if (monitor_debug_p || remote_debug
1050 || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
c906108c
SS
1051 {
1052 int i;
1053
1054 for (i = 0; i < resp_len - 1; i++)
1055 if (buf[i] == 0x0f)
1056 putchar_unfiltered (buf[++i]);
1057 }
1058}
1059
1060
1061
1062/* Wait until the remote machine stops, then return, storing status in
1063 status just as `wait' would. */
1064
39f77062 1065static ptid_t
117de6a9
PA
1066monitor_wait (struct target_ops *ops,
1067 ptid_t ptid, struct target_waitstatus *status)
c906108c
SS
1068{
1069 int old_timeout = timeout;
d4f3574e 1070 char buf[TARGET_BUF_SIZE];
c906108c
SS
1071 int resp_len;
1072 struct cleanup *old_chain;
1073
1074 status->kind = TARGET_WAITKIND_EXITED;
1075 status->value.integer = 0;
1076
1077 old_chain = make_cleanup (monitor_wait_cleanup, &old_timeout);
2df3850c 1078 monitor_debug ("MON wait\n");
c906108c 1079
7a292a7a 1080#if 0
c5aa993b
JM
1081 /* This is somthing other than a maintenance command */
1082 in_monitor_wait = 1;
c906108c
SS
1083 timeout = watchdog > 0 ? watchdog : -1;
1084#else
2df3850c 1085 timeout = -1; /* Don't time out -- user program is running. */
c906108c
SS
1086#endif
1087
1088 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
1089
1090 if (current_monitor->wait_filter)
c5aa993b
JM
1091 (*current_monitor->wait_filter) (buf, sizeof (buf), &resp_len, status);
1092 else
1093 monitor_wait_filter (buf, sizeof (buf), &resp_len, status);
1094
1095#if 0 /* Transferred to monitor wait filter */
c906108c
SS
1096 do
1097 {
1098 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1099
1100 if (resp_len <= 0)
1101 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
1102 }
1103 while (resp_len < 0);
1104
1105 /* Print any output characters that were preceded by ^O. */
1106 /* FIXME - This would be great as a user settabgle flag */
2df3850c
JM
1107 if (monitor_debug_p || remote_debug
1108 || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
c906108c
SS
1109 {
1110 int i;
1111
1112 for (i = 0; i < resp_len - 1; i++)
1113 if (buf[i] == 0x0f)
1114 putchar_unfiltered (buf[++i]);
1115 }
c5aa993b 1116#endif
c906108c
SS
1117
1118 signal (SIGINT, ofunc);
1119
1120 timeout = old_timeout;
1121#if 0
1122 if (dump_reg_flag && current_monitor->dump_registers)
1123 {
1124 dump_reg_flag = 0;
1125 monitor_printf (current_monitor->dump_registers);
1126 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1127 }
1128
1129 if (current_monitor->register_pattern)
594f7785 1130 parse_register_dump (get_current_regcache (), buf, resp_len);
c906108c 1131#else
2df3850c 1132 monitor_debug ("Wait fetching registers after stop\n");
594f7785 1133 monitor_dump_regs (get_current_regcache ());
c5aa993b 1134#endif
c906108c
SS
1135
1136 status->kind = TARGET_WAITKIND_STOPPED;
1137 status->value.sig = TARGET_SIGNAL_TRAP;
1138
1139 discard_cleanups (old_chain);
1140
1141 in_monitor_wait = 0;
1142
39f77062 1143 return inferior_ptid;
c906108c
SS
1144}
1145
1146/* Fetch register REGNO, or all registers if REGNO is -1. Returns
1147 errno value. */
1148
1149static void
56be3814 1150monitor_fetch_register (struct regcache *regcache, int regno)
c906108c 1151{
444199e7 1152 const char *name;
86110418
MS
1153 char *zerobuf;
1154 char *regbuf;
c906108c
SS
1155 int i;
1156
d9d9c31f
AC
1157 regbuf = alloca (MAX_REGISTER_SIZE * 2 + 1);
1158 zerobuf = alloca (MAX_REGISTER_SIZE);
1159 memset (zerobuf, 0, MAX_REGISTER_SIZE);
86110418 1160
1c617db8
GS
1161 if (current_monitor->regname != NULL)
1162 name = current_monitor->regname (regno);
1163 else
1164 name = current_monitor->regnames[regno];
2df3850c 1165 monitor_debug ("MON fetchreg %d '%s'\n", regno, name ? name : "(null name)");
c906108c 1166
2df3850c 1167 if (!name || (*name == '\0'))
7a292a7a 1168 {
2df3850c 1169 monitor_debug ("No register known for %d\n", regno);
56be3814 1170 regcache_raw_supply (regcache, regno, zerobuf);
c906108c
SS
1171 return;
1172 }
1173
1174 /* send the register examine command */
1175
1176 monitor_printf (current_monitor->getreg.cmd, name);
1177
1178 /* If RESP_DELIM is specified, we search for that as a leading
1179 delimiter for the register value. Otherwise, we just start
1180 searching from the start of the buf. */
1181
1182 if (current_monitor->getreg.resp_delim)
1183 {
2df3850c
JM
1184 monitor_debug ("EXP getreg.resp_delim\n");
1185 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
c906108c
SS
1186 /* Handle case of first 32 registers listed in pairs. */
1187 if (current_monitor->flags & MO_32_REGS_PAIRED
7a292a7a 1188 && (regno & 1) != 0 && regno < 32)
c5aa993b 1189 {
2df3850c 1190 monitor_debug ("EXP getreg.resp_delim\n");
c906108c
SS
1191 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1192 }
1193 }
1194
1195 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
c5aa993b 1196 if (current_monitor->flags & MO_HEX_PREFIX)
c906108c
SS
1197 {
1198 int c;
1199 c = readchar (timeout);
1200 while (c == ' ')
1201 c = readchar (timeout);
1202 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1203 ;
1204 else
8a3fe4f8 1205 error (_("Bad value returned from monitor while fetching register %x."),
c5aa993b 1206 regno);
c906108c
SS
1207 }
1208
1209 /* Read upto the maximum number of hex digits for this register, skipping
1210 spaces, but stop reading if something else is seen. Some monitors
1211 like to drop leading zeros. */
1212
9b072297 1213 for (i = 0; i < register_size (get_regcache_arch (regcache), regno) * 2; i++)
c906108c
SS
1214 {
1215 int c;
1216 c = readchar (timeout);
1217 while (c == ' ')
1218 c = readchar (timeout);
1219
1220 if (!isxdigit (c))
1221 break;
1222
1223 regbuf[i] = c;
1224 }
1225
1226 regbuf[i] = '\000'; /* terminate the number */
2df3850c 1227 monitor_debug ("REGVAL '%s'\n", regbuf);
c906108c
SS
1228
1229 /* If TERM is present, we wait for that to show up. Also, (if TERM
1230 is present), we will send TERM_CMD if that is present. In any
1231 case, we collect all of the output into buf, and then wait for
1232 the normal prompt. */
1233
1234 if (current_monitor->getreg.term)
1235 {
2df3850c
JM
1236 monitor_debug ("EXP getreg.term\n");
1237 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
c906108c
SS
1238 }
1239
1240 if (current_monitor->getreg.term_cmd)
c5aa993b 1241 {
2df3850c
JM
1242 monitor_debug ("EMIT getreg.term.cmd\n");
1243 monitor_printf (current_monitor->getreg.term_cmd);
c906108c 1244 }
c5aa993b
JM
1245 if (!current_monitor->getreg.term || /* Already expected or */
1246 current_monitor->getreg.term_cmd) /* ack expected */
1247 monitor_expect_prompt (NULL, 0); /* get response */
c906108c 1248
56be3814 1249 monitor_supply_register (regcache, regno, regbuf);
c906108c
SS
1250}
1251
1252/* Sometimes, it takes several commands to dump the registers */
1253/* This is a primitive for use by variations of monitor interfaces in
1254 case they need to compose the operation.
c5aa993b
JM
1255 */
1256int
c410a84c 1257monitor_dump_reg_block (struct regcache *regcache, char *block_cmd)
c906108c 1258{
d4f3574e 1259 char buf[TARGET_BUF_SIZE];
c906108c
SS
1260 int resp_len;
1261 monitor_printf (block_cmd);
1262 resp_len = monitor_expect_prompt (buf, sizeof (buf));
c410a84c 1263 parse_register_dump (regcache, buf, resp_len);
c5aa993b 1264 return 1;
c906108c
SS
1265}
1266
1267
1268/* Read the remote registers into the block regs. */
1269/* Call the specific function if it has been provided */
1270
1271static void
c410a84c 1272monitor_dump_regs (struct regcache *regcache)
c906108c 1273{
d4f3574e 1274 char buf[TARGET_BUF_SIZE];
c906108c
SS
1275 int resp_len;
1276 if (current_monitor->dumpregs)
c410a84c 1277 (*(current_monitor->dumpregs)) (regcache); /* call supplied function */
c5aa993b
JM
1278 else if (current_monitor->dump_registers) /* default version */
1279 {
1280 monitor_printf (current_monitor->dump_registers);
c906108c 1281 resp_len = monitor_expect_prompt (buf, sizeof (buf));
c410a84c 1282 parse_register_dump (regcache, buf, resp_len);
c906108c
SS
1283 }
1284 else
e2e0b3e5 1285 internal_error (__FILE__, __LINE__, _("failed internal consistency check")); /* Need some way to read registers */
c906108c
SS
1286}
1287
1288static void
56be3814 1289monitor_fetch_registers (struct regcache *regcache, int regno)
c906108c 1290{
2df3850c 1291 monitor_debug ("MON fetchregs\n");
c5aa993b 1292 if (current_monitor->getreg.cmd)
c906108c
SS
1293 {
1294 if (regno >= 0)
1295 {
56be3814 1296 monitor_fetch_register (regcache, regno);
c906108c
SS
1297 return;
1298 }
1299
9b072297
UW
1300 for (regno = 0; regno < gdbarch_num_regs (get_regcache_arch (regcache));
1301 regno++)
56be3814 1302 monitor_fetch_register (regcache, regno);
c906108c 1303 }
c5aa993b
JM
1304 else
1305 {
56be3814 1306 monitor_dump_regs (regcache);
c5aa993b 1307 }
c906108c
SS
1308}
1309
1310/* Store register REGNO, or all if REGNO == 0. Return errno value. */
1311
1312static void
56be3814 1313monitor_store_register (struct regcache *regcache, int regno)
c906108c 1314{
444199e7 1315 const char *name;
d4f3574e 1316 ULONGEST val;
1c617db8
GS
1317
1318 if (current_monitor->regname != NULL)
1319 name = current_monitor->regname (regno);
1320 else
1321 name = current_monitor->regnames[regno];
1322
c906108c 1323 if (!name || (*name == '\0'))
c5aa993b 1324 {
2df3850c
JM
1325 monitor_debug ("MON Cannot store unknown register\n");
1326 return;
c906108c
SS
1327 }
1328
56be3814 1329 regcache_cooked_read_unsigned (regcache, regno, &val);
5683e87a 1330 monitor_debug ("MON storeg %d %s\n", regno,
9b072297
UW
1331 phex (val,
1332 register_size (get_regcache_arch (regcache), regno)));
c906108c
SS
1333
1334 /* send the register deposit command */
1335
2df3850c 1336 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
c906108c
SS
1337 monitor_printf (current_monitor->setreg.cmd, val, name);
1338 else if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1339 monitor_printf (current_monitor->setreg.cmd, name);
1340 else
1341 monitor_printf (current_monitor->setreg.cmd, name, val);
1342
1456ad8e
AC
1343 if (current_monitor->setreg.resp_delim)
1344 {
1345 monitor_debug ("EXP setreg.resp_delim\n");
1346 monitor_expect_regexp (&setreg_resp_delim_pattern, NULL, 0);
1347 if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1348 monitor_printf ("%s\r", paddr_nz (val));
1349 }
c906108c 1350 if (current_monitor->setreg.term)
c5aa993b 1351 {
2df3850c
JM
1352 monitor_debug ("EXP setreg.term\n");
1353 monitor_expect (current_monitor->setreg.term, NULL, 0);
c906108c 1354 if (current_monitor->flags & MO_SETREG_INTERACTIVE)
2df3850c 1355 monitor_printf ("%s\r", paddr_nz (val));
c906108c
SS
1356 monitor_expect_prompt (NULL, 0);
1357 }
1358 else
1359 monitor_expect_prompt (NULL, 0);
c5aa993b
JM
1360 if (current_monitor->setreg.term_cmd) /* Mode exit required */
1361 {
2df3850c 1362 monitor_debug ("EXP setreg_termcmd\n");
c5aa993b
JM
1363 monitor_printf ("%s", current_monitor->setreg.term_cmd);
1364 monitor_expect_prompt (NULL, 0);
c906108c 1365 }
c5aa993b 1366} /* monitor_store_register */
c906108c
SS
1367
1368/* Store the remote registers. */
1369
1370static void
56be3814 1371monitor_store_registers (struct regcache *regcache, int regno)
c906108c
SS
1372{
1373 if (regno >= 0)
1374 {
56be3814 1375 monitor_store_register (regcache, regno);
c906108c
SS
1376 return;
1377 }
1378
9b072297
UW
1379 for (regno = 0; regno < gdbarch_num_regs (get_regcache_arch (regcache));
1380 regno++)
56be3814 1381 monitor_store_register (regcache, regno);
c906108c
SS
1382}
1383
1384/* Get ready to modify the registers array. On machines which store
1385 individual registers, this doesn't need to do anything. On machines
1386 which store all the registers in one fell swoop, this makes sure
1387 that registers contains all the registers from the program being
1388 debugged. */
1389
1390static void
316f2060 1391monitor_prepare_to_store (struct regcache *regcache)
c906108c
SS
1392{
1393 /* Do nothing, since we can store individual regs */
1394}
1395
1396static void
fba45db2 1397monitor_files_info (struct target_ops *ops)
c906108c 1398{
a3f17187 1399 printf_unfiltered (_("\tAttached to %s at %d baud.\n"), dev_name, baud_rate);
c906108c
SS
1400}
1401
1402static int
fba45db2 1403monitor_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1404{
c5aa993b 1405 unsigned int val, hostval;
c906108c
SS
1406 char *cmd;
1407 int i;
1408
2df3850c 1409 monitor_debug ("MON write %d %s\n", len, paddr (memaddr));
c906108c 1410
2df3850c 1411 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
bf6ae464 1412 memaddr = gdbarch_addr_bits_remove (current_gdbarch, memaddr);
c906108c
SS
1413
1414 /* Use memory fill command for leading 0 bytes. */
1415
1416 if (current_monitor->fill)
1417 {
1418 for (i = 0; i < len; i++)
1419 if (myaddr[i] != 0)
1420 break;
1421
1422 if (i > 4) /* More than 4 zeros is worth doing */
1423 {
2df3850c
JM
1424 monitor_debug ("MON FILL %d\n", i);
1425 if (current_monitor->flags & MO_FILL_USES_ADDR)
c5aa993b
JM
1426 monitor_printf (current_monitor->fill, memaddr, (memaddr + i) - 1, 0);
1427 else
1428 monitor_printf (current_monitor->fill, memaddr, i, 0);
c906108c
SS
1429
1430 monitor_expect_prompt (NULL, 0);
1431
1432 return i;
1433 }
1434 }
1435
1436#if 0
1437 /* Can't actually use long longs if VAL is an int (nice idea, though). */
1438 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1439 {
1440 len = 8;
1441 cmd = current_monitor->setmem.cmdll;
1442 }
1443 else
1444#endif
1445 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1446 {
1447 len = 4;
1448 cmd = current_monitor->setmem.cmdl;
1449 }
1450 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1451 {
1452 len = 2;
1453 cmd = current_monitor->setmem.cmdw;
1454 }
1455 else
1456 {
1457 len = 1;
1458 cmd = current_monitor->setmem.cmdb;
1459 }
1460
1461 val = extract_unsigned_integer (myaddr, len);
c5aa993b 1462
c906108c 1463 if (len == 4)
c5aa993b
JM
1464 {
1465 hostval = *(unsigned int *) myaddr;
2df3850c 1466 monitor_debug ("Hostval(%08x) val(%08x)\n", hostval, val);
c906108c
SS
1467 }
1468
1469
1470 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1471 monitor_printf_noecho (cmd, memaddr, val);
1472 else if (current_monitor->flags & MO_SETMEM_INTERACTIVE)
1473 {
1474
1475 monitor_printf_noecho (cmd, memaddr);
1476
1456ad8e
AC
1477 if (current_monitor->setmem.resp_delim)
1478 {
1479 monitor_debug ("EXP setmem.resp_delim");
1480 monitor_expect_regexp (&setmem_resp_delim_pattern, NULL, 0);
1481 monitor_printf ("%x\r", val);
1482 }
c906108c 1483 if (current_monitor->setmem.term)
c5aa993b 1484 {
2df3850c 1485 monitor_debug ("EXP setmem.term");
c906108c
SS
1486 monitor_expect (current_monitor->setmem.term, NULL, 0);
1487 monitor_printf ("%x\r", val);
1488 }
1489 if (current_monitor->setmem.term_cmd)
c5aa993b
JM
1490 { /* Emit this to get out of the memory editing state */
1491 monitor_printf ("%s", current_monitor->setmem.term_cmd);
c906108c
SS
1492 /* Drop through to expecting a prompt */
1493 }
1494 }
1495 else
1496 monitor_printf (cmd, memaddr, val);
1497
1498 monitor_expect_prompt (NULL, 0);
1499
1500 return len;
1501}
1502
1503
c5aa993b 1504static int
fba45db2 1505monitor_write_memory_bytes (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1506{
c5aa993b
JM
1507 unsigned char val;
1508 int written = 0;
1509 if (len == 0)
1510 return 0;
c906108c 1511 /* Enter the sub mode */
c5aa993b
JM
1512 monitor_printf (current_monitor->setmem.cmdb, memaddr);
1513 monitor_expect_prompt (NULL, 0);
c906108c
SS
1514 while (len)
1515 {
c5aa993b
JM
1516 val = *myaddr;
1517 monitor_printf ("%x\r", val);
1518 myaddr++;
1519 memaddr++;
1520 written++;
c906108c 1521 /* If we wanted to, here we could validate the address */
c5aa993b
JM
1522 monitor_expect_prompt (NULL, 0);
1523 len--;
c906108c
SS
1524 }
1525 /* Now exit the sub mode */
1526 monitor_printf (current_monitor->getreg.term_cmd);
c5aa993b
JM
1527 monitor_expect_prompt (NULL, 0);
1528 return written;
c906108c
SS
1529}
1530
1531
1532static void
c5aa993b 1533longlongendswap (unsigned char *a)
c906108c 1534{
c5aa993b
JM
1535 int i, j;
1536 unsigned char x;
1537 i = 0;
1538 j = 7;
c906108c 1539 while (i < 4)
c5aa993b
JM
1540 {
1541 x = *(a + i);
1542 *(a + i) = *(a + j);
1543 *(a + j) = x;
1544 i++, j--;
c906108c
SS
1545 }
1546}
1547/* Format 32 chars of long long value, advance the pointer */
c5aa993b
JM
1548static char *hexlate = "0123456789abcdef";
1549static char *
1550longlong_hexchars (unsigned long long value,
1551 char *outbuff)
c906108c 1552{
c5aa993b
JM
1553 if (value == 0)
1554 {
1555 *outbuff++ = '0';
1556 return outbuff;
1557 }
c906108c 1558 else
c5aa993b
JM
1559 {
1560 static unsigned char disbuf[8]; /* disassembly buffer */
1561 unsigned char *scan, *limit; /* loop controls */
1562 unsigned char c, nib;
1563 int leadzero = 1;
1564 scan = disbuf;
1565 limit = scan + 8;
1566 {
1567 unsigned long long *dp;
1568 dp = (unsigned long long *) scan;
1569 *dp = value;
c906108c 1570 }
c5aa993b 1571 longlongendswap (disbuf); /* FIXME: ONly on big endian hosts */
c906108c 1572 while (scan < limit)
7a292a7a 1573 {
c5aa993b 1574 c = *scan++; /* a byte of our long long value */
c906108c 1575 if (leadzero)
7a292a7a
SS
1576 {
1577 if (c == 0)
1578 continue;
1579 else
c5aa993b 1580 leadzero = 0; /* henceforth we print even zeroes */
7a292a7a 1581 }
c5aa993b 1582 nib = c >> 4; /* high nibble bits */
7a292a7a 1583 *outbuff++ = hexlate[nib];
c5aa993b 1584 nib = c & 0x0f; /* low nibble bits */
7a292a7a 1585 *outbuff++ = hexlate[nib];
c906108c 1586 }
c5aa993b 1587 return outbuff;
c906108c 1588 }
c5aa993b 1589} /* longlong_hexchars */
c906108c
SS
1590
1591
1592
1593/* I am only going to call this when writing virtual byte streams.
1594 Which possably entails endian conversions
c5aa993b
JM
1595 */
1596static int
fba45db2 1597monitor_write_memory_longlongs (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1598{
c5aa993b
JM
1599 static char hexstage[20]; /* At least 16 digits required, plus null */
1600 char *endstring;
1601 long long *llptr;
1602 long long value;
1603 int written = 0;
1604 llptr = (unsigned long long *) myaddr;
1605 if (len == 0)
1606 return 0;
1607 monitor_printf (current_monitor->setmem.cmdll, memaddr);
1608 monitor_expect_prompt (NULL, 0);
1609 while (len >= 8)
1610 {
1611 value = *llptr;
1612 endstring = longlong_hexchars (*llptr, hexstage);
1613 *endstring = '\0'; /* NUll terminate for printf */
1614 monitor_printf ("%s\r", hexstage);
1615 llptr++;
1616 memaddr += 8;
1617 written += 8;
c906108c 1618 /* If we wanted to, here we could validate the address */
c5aa993b
JM
1619 monitor_expect_prompt (NULL, 0);
1620 len -= 8;
c906108c
SS
1621 }
1622 /* Now exit the sub mode */
1623 monitor_printf (current_monitor->getreg.term_cmd);
c5aa993b
JM
1624 monitor_expect_prompt (NULL, 0);
1625 return written;
1626} /* */
c906108c
SS
1627
1628
1629
1630/* ----- MONITOR_WRITE_MEMORY_BLOCK ---------------------------- */
1631/* This is for the large blocks of memory which may occur in downloading.
1632 And for monitors which use interactive entry,
1633 And for monitors which do not have other downloading methods.
1634 Without this, we will end up calling monitor_write_memory many times
1635 and do the entry and exit of the sub mode many times
1636 This currently assumes...
c5aa993b
JM
1637 MO_SETMEM_INTERACTIVE
1638 ! MO_NO_ECHO_ON_SETMEM
1639 To use this, the you have to patch the monitor_cmds block with
1640 this function. Otherwise, its not tuned up for use by all
1641 monitor variations.
1642 */
c906108c 1643
c5aa993b 1644static int
fba45db2 1645monitor_write_memory_block (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1646{
c5aa993b
JM
1647 int written;
1648 written = 0;
c906108c 1649 /* FIXME: This would be a good place to put the zero test */
c5aa993b 1650#if 1
c906108c 1651 if ((len > 8) && (((len & 0x07)) == 0) && current_monitor->setmem.cmdll)
c5aa993b
JM
1652 {
1653 return monitor_write_memory_longlongs (memaddr, myaddr, len);
1654 }
c906108c 1655#endif
c5aa993b
JM
1656 written = monitor_write_memory_bytes (memaddr, myaddr, len);
1657 return written;
c906108c
SS
1658}
1659
1660/* This is an alternate form of monitor_read_memory which is used for monitors
1661 which can only read a single byte/word/etc. at a time. */
1662
1663static int
fba45db2 1664monitor_read_memory_single (CORE_ADDR memaddr, char *myaddr, int len)
c906108c
SS
1665{
1666 unsigned int val;
c5aa993b 1667 char membuf[sizeof (int) * 2 + 1];
c906108c
SS
1668 char *p;
1669 char *cmd;
c906108c 1670
2df3850c 1671 monitor_debug ("MON read single\n");
c906108c
SS
1672#if 0
1673 /* Can't actually use long longs (nice idea, though). In fact, the
1674 call to strtoul below will fail if it tries to convert a value
1675 that's too big to fit in a long. */
1676 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1677 {
1678 len = 8;
1679 cmd = current_monitor->getmem.cmdll;
1680 }
1681 else
1682#endif
1683 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1684 {
1685 len = 4;
1686 cmd = current_monitor->getmem.cmdl;
1687 }
1688 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1689 {
1690 len = 2;
1691 cmd = current_monitor->getmem.cmdw;
1692 }
1693 else
1694 {
1695 len = 1;
1696 cmd = current_monitor->getmem.cmdb;
1697 }
1698
1699 /* Send the examine command. */
1700
1701 monitor_printf (cmd, memaddr);
1702
1703 /* If RESP_DELIM is specified, we search for that as a leading
1704 delimiter for the memory value. Otherwise, we just start
1705 searching from the start of the buf. */
1706
1707 if (current_monitor->getmem.resp_delim)
c5aa993b 1708 {
2df3850c 1709 monitor_debug ("EXP getmem.resp_delim\n");
c906108c
SS
1710 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1711 }
1712
1713 /* Now, read the appropriate number of hex digits for this loc,
1714 skipping spaces. */
1715
1716 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
c5aa993b 1717 if (current_monitor->flags & MO_HEX_PREFIX)
c906108c
SS
1718 {
1719 int c;
1720
1721 c = readchar (timeout);
1722 while (c == ' ')
1723 c = readchar (timeout);
1724 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1725 ;
1726 else
2df3850c
JM
1727 monitor_error ("monitor_read_memory_single",
1728 "bad response from monitor",
93d56215 1729 memaddr, 0, NULL, 0);
c906108c 1730 }
c906108c 1731
93d56215
AC
1732 {
1733 int i;
1734 for (i = 0; i < len * 2; i++)
1735 {
1736 int c;
c906108c 1737
93d56215
AC
1738 while (1)
1739 {
1740 c = readchar (timeout);
1741 if (isxdigit (c))
1742 break;
1743 if (c == ' ')
1744 continue;
1745
1746 monitor_error ("monitor_read_memory_single",
1747 "bad response from monitor",
1748 memaddr, i, membuf, 0);
1749 }
c906108c
SS
1750 membuf[i] = c;
1751 }
93d56215
AC
1752 membuf[i] = '\000'; /* terminate the number */
1753 }
c906108c
SS
1754
1755/* If TERM is present, we wait for that to show up. Also, (if TERM is
1756 present), we will send TERM_CMD if that is present. In any case, we collect
1757 all of the output into buf, and then wait for the normal prompt. */
1758
1759 if (current_monitor->getmem.term)
1760 {
c5aa993b 1761 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
c906108c
SS
1762
1763 if (current_monitor->getmem.term_cmd)
1764 {
1765 monitor_printf (current_monitor->getmem.term_cmd);
1766 monitor_expect_prompt (NULL, 0);
1767 }
1768 }
1769 else
c5aa993b 1770 monitor_expect_prompt (NULL, 0); /* get response */
c906108c
SS
1771
1772 p = membuf;
1773 val = strtoul (membuf, &p, 16);
1774
1775 if (val == 0 && membuf == p)
2df3850c
JM
1776 monitor_error ("monitor_read_memory_single",
1777 "bad value from monitor",
c906108c
SS
1778 memaddr, 0, membuf, 0);
1779
1780 /* supply register stores in target byte order, so swap here */
1781
1782 store_unsigned_integer (myaddr, len, val);
1783
1784 return len;
1785}
1786
1787/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1788 memory at MEMADDR. Returns length moved. Currently, we do no more
1789 than 16 bytes at a time. */
1790
1791static int
fba45db2 1792monitor_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
c906108c
SS
1793{
1794 unsigned int val;
1795 char buf[512];
1796 char *p, *p1;
1797 int resp_len;
1798 int i;
1799 CORE_ADDR dumpaddr;
1800
1801 if (len <= 0)
1802 {
2df3850c 1803 monitor_debug ("Zero length call to monitor_read_memory\n");
c906108c
SS
1804 return 0;
1805 }
1806
2df3850c
JM
1807 monitor_debug ("MON read block ta(%s) ha(%lx) %d\n",
1808 paddr_nz (memaddr), (long) myaddr, len);
c906108c
SS
1809
1810 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
bf6ae464 1811 memaddr = gdbarch_addr_bits_remove (current_gdbarch, memaddr);
c906108c
SS
1812
1813 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1814 return monitor_read_memory_single (memaddr, myaddr, len);
1815
1816 len = min (len, 16);
1817
1818 /* Some dumpers align the first data with the preceeding 16
1819 byte boundary. Some print blanks and start at the
1820 requested boundary. EXACT_DUMPADDR
c5aa993b 1821 */
c906108c
SS
1822
1823 dumpaddr = (current_monitor->flags & MO_EXACT_DUMPADDR)
c5aa993b 1824 ? memaddr : memaddr & ~0x0f;
c906108c
SS
1825
1826 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
1827 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1828 len = ((memaddr + len) & ~0xf) - memaddr;
1829
1830 /* send the memory examine command */
1831
1832 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
7a292a7a 1833 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len);
c906108c
SS
1834 else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1835 monitor_printf (current_monitor->getmem.cmdb, dumpaddr);
1836 else
1837 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1838
1839 /* If TERM is present, we wait for that to show up. Also, (if TERM
1840 is present), we will send TERM_CMD if that is present. In any
1841 case, we collect all of the output into buf, and then wait for
1842 the normal prompt. */
1843
1844 if (current_monitor->getmem.term)
1845 {
c5aa993b 1846 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
c906108c
SS
1847
1848 if (resp_len <= 0)
2df3850c
JM
1849 monitor_error ("monitor_read_memory",
1850 "excessive response from monitor",
c906108c
SS
1851 memaddr, resp_len, buf, 0);
1852
1853 if (current_monitor->getmem.term_cmd)
1854 {
2cd58942 1855 serial_write (monitor_desc, current_monitor->getmem.term_cmd,
c906108c
SS
1856 strlen (current_monitor->getmem.term_cmd));
1857 monitor_expect_prompt (NULL, 0);
1858 }
1859 }
1860 else
c5aa993b 1861 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
c906108c
SS
1862
1863 p = buf;
1864
1865 /* If RESP_DELIM is specified, we search for that as a leading
1866 delimiter for the values. Otherwise, we just start searching
1867 from the start of the buf. */
1868
1869 if (current_monitor->getmem.resp_delim)
1870 {
1871 int retval, tmp;
1872 struct re_registers resp_strings;
2df3850c 1873 monitor_debug ("MON getmem.resp_delim %s\n", current_monitor->getmem.resp_delim);
c906108c
SS
1874
1875 memset (&resp_strings, 0, sizeof (struct re_registers));
1876 tmp = strlen (p);
1877 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1878 &resp_strings);
1879
1880 if (retval < 0)
2df3850c
JM
1881 monitor_error ("monitor_read_memory",
1882 "bad response from monitor",
c906108c
SS
1883 memaddr, resp_len, buf, 0);
1884
1885 p += resp_strings.end[0];
1886#if 0
1887 p = strstr (p, current_monitor->getmem.resp_delim);
1888 if (!p)
2df3850c
JM
1889 monitor_error ("monitor_read_memory",
1890 "bad response from monitor",
c906108c
SS
1891 memaddr, resp_len, buf, 0);
1892 p += strlen (current_monitor->getmem.resp_delim);
1893#endif
1894 }
2df3850c 1895 monitor_debug ("MON scanning %d ,%lx '%s'\n", len, (long) p, p);
c906108c
SS
1896 if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1897 {
c5aa993b
JM
1898 char c;
1899 int fetched = 0;
c906108c 1900 i = len;
c5aa993b 1901 c = *p;
c906108c 1902
c5aa993b
JM
1903
1904 while (!(c == '\000' || c == '\n' || c == '\r') && i > 0)
1905 {
1906 if (isxdigit (c))
1907 {
1908 if ((dumpaddr >= memaddr) && (i > 0))
1909 {
1910 val = fromhex (c) * 16 + fromhex (*(p + 1));
c906108c 1911 *myaddr++ = val;
2df3850c
JM
1912 if (monitor_debug_p || remote_debug)
1913 fprintf_unfiltered (gdb_stdlog, "[%02x]", val);
c906108c 1914 --i;
c5aa993b 1915 fetched++;
c906108c
SS
1916 }
1917 ++dumpaddr;
1918 ++p;
1919 }
c5aa993b
JM
1920 ++p; /* skip a blank or other non hex char */
1921 c = *p;
c906108c 1922 }
c5aa993b 1923 if (fetched == 0)
8a3fe4f8 1924 error (_("Failed to read via monitor"));
2df3850c
JM
1925 if (monitor_debug_p || remote_debug)
1926 fprintf_unfiltered (gdb_stdlog, "\n");
c5aa993b 1927 return fetched; /* Return the number of bytes actually read */
c906108c 1928 }
2df3850c 1929 monitor_debug ("MON scanning bytes\n");
c906108c
SS
1930
1931 for (i = len; i > 0; i--)
1932 {
1933 /* Skip non-hex chars, but bomb on end of string and newlines */
1934
1935 while (1)
1936 {
1937 if (isxdigit (*p))
1938 break;
1939
1940 if (*p == '\000' || *p == '\n' || *p == '\r')
2df3850c
JM
1941 monitor_error ("monitor_read_memory",
1942 "badly terminated response from monitor",
c906108c
SS
1943 memaddr, resp_len, buf, 0);
1944 p++;
1945 }
1946
1947 val = strtoul (p, &p1, 16);
1948
1949 if (val == 0 && p == p1)
2df3850c
JM
1950 monitor_error ("monitor_read_memory",
1951 "bad value from monitor",
c906108c
SS
1952 memaddr, resp_len, buf, 0);
1953
1954 *myaddr++ = val;
1955
1956 if (i == 1)
1957 break;
1958
1959 p = p1;
1960 }
1961
1962 return len;
1963}
1964
0e7e8d51
KB
1965/* Transfer LEN bytes between target address MEMADDR and GDB address
1966 MYADDR. Returns 0 for success, errno code for failure. TARGET is
1967 unused. */
1968
c906108c 1969static int
18cf8b5b 1970monitor_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
0a65a603 1971 struct mem_attrib *attrib, struct target_ops *target)
c906108c 1972{
4930751a
C
1973 int res;
1974
1975 if (write)
1976 {
1977 if (current_monitor->flags & MO_HAS_BLOCKWRITES)
1978 res = monitor_write_memory_block(memaddr, myaddr, len);
1979 else
1980 res = monitor_write_memory(memaddr, myaddr, len);
1981 }
1982 else
1983 {
1984 res = monitor_read_memory(memaddr, myaddr, len);
1985 }
1986
1987 return res;
c906108c
SS
1988}
1989
1990static void
fba45db2 1991monitor_kill (void)
c906108c 1992{
c5aa993b 1993 return; /* ignore attempts to kill target system */
c906108c
SS
1994}
1995
281b533b 1996/* All we actually do is set the PC to the start address of exec_bfd. */
c906108c
SS
1997
1998static void
136d6dae
VP
1999monitor_create_inferior (struct target_ops *ops, char *exec_file,
2000 char *args, char **env, int from_tty)
c906108c
SS
2001{
2002 if (args && (*args != '\000'))
8a3fe4f8 2003 error (_("Args are not supported by the monitor."));
c906108c
SS
2004
2005 first_time = 1;
2006 clear_proceed_status ();
281b533b 2007 write_pc (bfd_get_start_address (exec_bfd));
c906108c
SS
2008}
2009
2010/* Clean up when a program exits.
2011 The program actually lives on in the remote processor's RAM, and may be
2012 run again without a download. Don't leave it full of breakpoint
2013 instructions. */
2014
2015static void
136d6dae 2016monitor_mourn_inferior (struct target_ops *ops)
c906108c
SS
2017{
2018 unpush_target (targ_ops);
2019 generic_mourn_inferior (); /* Do all the proper things now */
5e0b29c1 2020 delete_thread_silent (monitor_ptid);
c906108c
SS
2021}
2022
c906108c
SS
2023/* Tell the monitor to add a breakpoint. */
2024
2025static int
8181d85f 2026monitor_insert_breakpoint (struct bp_target_info *bp_tgt)
c906108c 2027{
8181d85f 2028 CORE_ADDR addr = bp_tgt->placed_address;
c906108c 2029 int i;
c906108c
SS
2030 int bplen;
2031
2df3850c
JM
2032 monitor_debug ("MON inst bkpt %s\n", paddr (addr));
2033 if (current_monitor->set_break == NULL)
8a3fe4f8 2034 error (_("No set_break defined for this monitor"));
c906108c
SS
2035
2036 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
bf6ae464 2037 addr = gdbarch_addr_bits_remove (current_gdbarch, addr);
c906108c
SS
2038
2039 /* Determine appropriate breakpoint size for this address. */
73e113d4 2040 gdbarch_breakpoint_from_pc (current_gdbarch, &addr, &bplen);
8181d85f
DJ
2041 bp_tgt->placed_address = addr;
2042 bp_tgt->placed_size = bplen;
c906108c 2043
9e086581 2044 for (i = 0; i < current_monitor->num_breakpoints; i++)
c906108c
SS
2045 {
2046 if (breakaddr[i] == 0)
2047 {
2048 breakaddr[i] = addr;
c906108c
SS
2049 monitor_printf (current_monitor->set_break, addr);
2050 monitor_expect_prompt (NULL, 0);
2051 return 0;
2052 }
2053 }
2054
8a3fe4f8 2055 error (_("Too many breakpoints (> %d) for monitor."), current_monitor->num_breakpoints);
c906108c
SS
2056}
2057
2058/* Tell the monitor to remove a breakpoint. */
2059
2060static int
8181d85f 2061monitor_remove_breakpoint (struct bp_target_info *bp_tgt)
c906108c 2062{
8181d85f 2063 CORE_ADDR addr = bp_tgt->placed_address;
c906108c
SS
2064 int i;
2065
2df3850c
JM
2066 monitor_debug ("MON rmbkpt %s\n", paddr (addr));
2067 if (current_monitor->clr_break == NULL)
8a3fe4f8 2068 error (_("No clr_break defined for this monitor"));
c906108c 2069
9e086581 2070 for (i = 0; i < current_monitor->num_breakpoints; i++)
c906108c
SS
2071 {
2072 if (breakaddr[i] == addr)
2073 {
2074 breakaddr[i] = 0;
2075 /* some monitors remove breakpoints based on the address */
2076 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
2077 monitor_printf (current_monitor->clr_break, addr);
2078 else if (current_monitor->flags & MO_CLR_BREAK_1_BASED)
2079 monitor_printf (current_monitor->clr_break, i + 1);
2080 else
2081 monitor_printf (current_monitor->clr_break, i);
2082 monitor_expect_prompt (NULL, 0);
2083 return 0;
2084 }
2085 }
2086 fprintf_unfiltered (gdb_stderr,
2df3850c
JM
2087 "Can't find breakpoint associated with 0x%s\n",
2088 paddr_nz (addr));
c906108c
SS
2089 return 1;
2090}
2091
2092/* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
2093 an S-record. Return non-zero if the ACK is received properly. */
2094
2095static int
fba45db2 2096monitor_wait_srec_ack (void)
c906108c 2097{
d4f3574e 2098 int ch;
c906108c
SS
2099
2100 if (current_monitor->flags & MO_SREC_ACK_PLUS)
2101 {
2102 return (readchar (timeout) == '+');
2103 }
2104 else if (current_monitor->flags & MO_SREC_ACK_ROTATE)
2105 {
2106 /* Eat two backspaces, a "rotating" char (|/-\), and a space. */
2107 if ((ch = readchar (1)) < 0)
2108 return 0;
2109 if ((ch = readchar (1)) < 0)
2110 return 0;
2111 if ((ch = readchar (1)) < 0)
2112 return 0;
2113 if ((ch = readchar (1)) < 0)
2114 return 0;
2115 }
2116 return 1;
2117}
2118
2119/* monitor_load -- download a file. */
2120
2121static void
fba45db2 2122monitor_load (char *file, int from_tty)
c906108c 2123{
2df3850c 2124 monitor_debug ("MON load\n");
c906108c 2125
2df3850c 2126 if (current_monitor->load_routine)
c906108c
SS
2127 current_monitor->load_routine (monitor_desc, file, hashmark);
2128 else
2129 { /* The default is ascii S-records */
2130 int n;
2131 unsigned long load_offset;
2132 char buf[128];
2133
2134 /* enable user to specify address for downloading as 2nd arg to load */
2135 n = sscanf (file, "%s 0x%lx", buf, &load_offset);
2136 if (n > 1)
2137 file = buf;
2138 else
2139 load_offset = 0;
2140
2141 monitor_printf (current_monitor->load);
2142 if (current_monitor->loadresp)
2143 monitor_expect (current_monitor->loadresp, NULL, 0);
2144
2145 load_srec (monitor_desc, file, (bfd_vma) load_offset,
2146 32, SREC_ALL, hashmark,
2147 current_monitor->flags & MO_SREC_ACK ?
c5aa993b 2148 monitor_wait_srec_ack : NULL);
c906108c
SS
2149
2150 monitor_expect_prompt (NULL, 0);
2151 }
2152
fe490085 2153 /* Finally, make the PC point at the start address */
c906108c
SS
2154 if (exec_bfd)
2155 write_pc (bfd_get_start_address (exec_bfd));
2156
e8816aac
JB
2157 /* There used to be code here which would clear inferior_ptid and
2158 call clear_symtab_users. None of that should be necessary:
2159 monitor targets should behave like remote protocol targets, and
2160 since generic_load does none of those things, this function
2161 shouldn't either.
2162
2163 Furthermore, clearing inferior_ptid is *incorrect*. After doing
2164 a load, we still have a valid connection to the monitor, with a
2165 live processor state to fiddle with. The user can type
2166 `continue' or `jump *start' and make the program run. If they do
2167 these things, however, GDB will be talking to a running program
2168 while inferior_ptid is null_ptid; this makes things like
2169 reinit_frame_cache very confused. */
c906108c
SS
2170}
2171
2172static void
f9c72d52 2173monitor_stop (ptid_t ptid)
c906108c 2174{
2df3850c 2175 monitor_debug ("MON stop\n");
c906108c 2176 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
2cd58942 2177 serial_send_break (monitor_desc);
c906108c
SS
2178 if (current_monitor->stop)
2179 monitor_printf_noecho (current_monitor->stop);
2180}
2181
96baa820
JM
2182/* Put a COMMAND string out to MONITOR. Output from MONITOR is placed
2183 in OUTPUT until the prompt is seen. FIXME: We read the characters
2184 ourseleves here cause of a nasty echo. */
c906108c
SS
2185
2186static void
96baa820 2187monitor_rcmd (char *command,
d9fcf2fb 2188 struct ui_file *outbuf)
c906108c
SS
2189{
2190 char *p;
2191 int resp_len;
2192 char buf[1000];
2193
2194 if (monitor_desc == NULL)
8a3fe4f8 2195 error (_("monitor target not open."));
c906108c
SS
2196
2197 p = current_monitor->prompt;
2198
2199 /* Send the command. Note that if no args were supplied, then we're
2200 just sending the monitor a newline, which is sometimes useful. */
2201
96baa820 2202 monitor_printf ("%s\r", (command ? command : ""));
c906108c
SS
2203
2204 resp_len = monitor_expect_prompt (buf, sizeof buf);
2205
96baa820 2206 fputs_unfiltered (buf, outbuf); /* Output the response */
c906108c
SS
2207}
2208
2209/* Convert hex digit A to a number. */
2210
2211#if 0
2212static int
fba45db2 2213from_hex (int a)
c5aa993b 2214{
c906108c
SS
2215 if (a >= '0' && a <= '9')
2216 return a - '0';
2217 if (a >= 'a' && a <= 'f')
2218 return a - 'a' + 10;
2219 if (a >= 'A' && a <= 'F')
2220 return a - 'A' + 10;
2221
8a3fe4f8 2222 error (_("Reply contains invalid hex digit 0x%x"), a);
c906108c
SS
2223}
2224#endif
2225
2226char *
fba45db2 2227monitor_get_dev_name (void)
c906108c
SS
2228{
2229 return dev_name;
2230}
2231
5e0b29c1
PA
2232/* Check to see if a thread is still alive. */
2233
2234static int
2235monitor_thread_alive (ptid_t ptid)
2236{
2237 if (ptid_equal (ptid, monitor_ptid))
2238 /* The monitor's task is always alive. */
2239 return 1;
2240
2241 return 0;
2242}
2243
2244/* Convert a thread ID to a string. Returns the string in a static
2245 buffer. */
2246
2247static char *
117de6a9 2248monitor_pid_to_str (struct target_ops *ops, ptid_t ptid)
5e0b29c1
PA
2249{
2250 static char buf[64];
2251
2252 if (ptid_equal (monitor_ptid, ptid))
2253 {
2254 xsnprintf (buf, sizeof buf, "Thread <main>");
2255 return buf;
2256 }
2257
2258 return normal_pid_to_str (ptid);
2259}
2260
c906108c
SS
2261static struct target_ops monitor_ops;
2262
2263static void
2264init_base_monitor_ops (void)
2265{
c906108c 2266 monitor_ops.to_close = monitor_close;
c906108c 2267 monitor_ops.to_detach = monitor_detach;
c906108c
SS
2268 monitor_ops.to_resume = monitor_resume;
2269 monitor_ops.to_wait = monitor_wait;
c906108c
SS
2270 monitor_ops.to_fetch_registers = monitor_fetch_registers;
2271 monitor_ops.to_store_registers = monitor_store_registers;
2272 monitor_ops.to_prepare_to_store = monitor_prepare_to_store;
c8e73a31 2273 monitor_ops.deprecated_xfer_memory = monitor_xfer_memory;
c906108c
SS
2274 monitor_ops.to_files_info = monitor_files_info;
2275 monitor_ops.to_insert_breakpoint = monitor_insert_breakpoint;
2276 monitor_ops.to_remove_breakpoint = monitor_remove_breakpoint;
c906108c
SS
2277 monitor_ops.to_kill = monitor_kill;
2278 monitor_ops.to_load = monitor_load;
c906108c 2279 monitor_ops.to_create_inferior = monitor_create_inferior;
c906108c 2280 monitor_ops.to_mourn_inferior = monitor_mourn_inferior;
c906108c 2281 monitor_ops.to_stop = monitor_stop;
96baa820 2282 monitor_ops.to_rcmd = monitor_rcmd;
49d03eab 2283 monitor_ops.to_log_command = serial_log_command;
5e0b29c1
PA
2284 monitor_ops.to_thread_alive = monitor_thread_alive;
2285 monitor_ops.to_pid_to_str = monitor_pid_to_str;
c906108c 2286 monitor_ops.to_stratum = process_stratum;
c906108c
SS
2287 monitor_ops.to_has_all_memory = 1;
2288 monitor_ops.to_has_memory = 1;
2289 monitor_ops.to_has_stack = 1;
2290 monitor_ops.to_has_registers = 1;
2291 monitor_ops.to_has_execution = 1;
c906108c 2292 monitor_ops.to_magic = OPS_MAGIC;
c5aa993b 2293} /* init_base_monitor_ops */
c906108c
SS
2294
2295/* Init the target_ops structure pointed at by OPS */
2296
2297void
fba45db2 2298init_monitor_ops (struct target_ops *ops)
c906108c
SS
2299{
2300 if (monitor_ops.to_magic != OPS_MAGIC)
2301 init_base_monitor_ops ();
2302
2303 memcpy (ops, &monitor_ops, sizeof monitor_ops);
2304}
2305
2306/* Define additional commands that are usually only used by monitors. */
2307
a78f21af
AC
2308extern initialize_file_ftype _initialize_remote_monitors; /* -Wmissing-prototypes */
2309
c906108c 2310void
fba45db2 2311_initialize_remote_monitors (void)
c906108c
SS
2312{
2313 init_base_monitor_ops ();
5bf193a2
AC
2314 add_setshow_boolean_cmd ("hash", no_class, &hashmark, _("\
2315Set display of activity while downloading a file."), _("\
2316Show display of activity while downloading a file."), _("\
2317When enabled, a hashmark \'#\' is displayed."),
2318 NULL,
2319 NULL, /* FIXME: i18n: */
2320 &setlist, &showlist);
2df3850c 2321
85c07804
AC
2322 add_setshow_zinteger_cmd ("monitor", no_class, &monitor_debug_p, _("\
2323Set debugging of remote monitor communication."), _("\
2324Show debugging of remote monitor communication."), _("\
2df3850c 2325When enabled, communication between GDB and the remote monitor\n\
85c07804
AC
2326is displayed."),
2327 NULL,
2328 NULL, /* FIXME: i18n: */
2329 &setdebuglist, &showdebuglist);
5e0b29c1
PA
2330
2331 /* Yes, 42000 is arbitrary. The only sense out of it, is that it
2332 isn't 0. */
2333 monitor_ptid = ptid_build (42000, 0, 42000);
c906108c 2334}
This page took 0.826418 seconds and 4 git commands to generate.