Kill pthread_ops_hack
[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,
9b254dd1 4 2000, 2001, 2002, 2006, 2007, 2008 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
KB
1065static ptid_t
1066monitor_wait (ptid_t ptid, struct target_waitstatus *status)
c906108c
SS
1067{
1068 int old_timeout = timeout;
d4f3574e 1069 char buf[TARGET_BUF_SIZE];
c906108c
SS
1070 int resp_len;
1071 struct cleanup *old_chain;
1072
1073 status->kind = TARGET_WAITKIND_EXITED;
1074 status->value.integer = 0;
1075
1076 old_chain = make_cleanup (monitor_wait_cleanup, &old_timeout);
2df3850c 1077 monitor_debug ("MON wait\n");
c906108c 1078
7a292a7a 1079#if 0
c5aa993b
JM
1080 /* This is somthing other than a maintenance command */
1081 in_monitor_wait = 1;
c906108c
SS
1082 timeout = watchdog > 0 ? watchdog : -1;
1083#else
2df3850c 1084 timeout = -1; /* Don't time out -- user program is running. */
c906108c
SS
1085#endif
1086
1087 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
1088
1089 if (current_monitor->wait_filter)
c5aa993b
JM
1090 (*current_monitor->wait_filter) (buf, sizeof (buf), &resp_len, status);
1091 else
1092 monitor_wait_filter (buf, sizeof (buf), &resp_len, status);
1093
1094#if 0 /* Transferred to monitor wait filter */
c906108c
SS
1095 do
1096 {
1097 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1098
1099 if (resp_len <= 0)
1100 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
1101 }
1102 while (resp_len < 0);
1103
1104 /* Print any output characters that were preceded by ^O. */
1105 /* FIXME - This would be great as a user settabgle flag */
2df3850c
JM
1106 if (monitor_debug_p || remote_debug
1107 || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
c906108c
SS
1108 {
1109 int i;
1110
1111 for (i = 0; i < resp_len - 1; i++)
1112 if (buf[i] == 0x0f)
1113 putchar_unfiltered (buf[++i]);
1114 }
c5aa993b 1115#endif
c906108c
SS
1116
1117 signal (SIGINT, ofunc);
1118
1119 timeout = old_timeout;
1120#if 0
1121 if (dump_reg_flag && current_monitor->dump_registers)
1122 {
1123 dump_reg_flag = 0;
1124 monitor_printf (current_monitor->dump_registers);
1125 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1126 }
1127
1128 if (current_monitor->register_pattern)
594f7785 1129 parse_register_dump (get_current_regcache (), buf, resp_len);
c906108c 1130#else
2df3850c 1131 monitor_debug ("Wait fetching registers after stop\n");
594f7785 1132 monitor_dump_regs (get_current_regcache ());
c5aa993b 1133#endif
c906108c
SS
1134
1135 status->kind = TARGET_WAITKIND_STOPPED;
1136 status->value.sig = TARGET_SIGNAL_TRAP;
1137
1138 discard_cleanups (old_chain);
1139
1140 in_monitor_wait = 0;
1141
39f77062 1142 return inferior_ptid;
c906108c
SS
1143}
1144
1145/* Fetch register REGNO, or all registers if REGNO is -1. Returns
1146 errno value. */
1147
1148static void
56be3814 1149monitor_fetch_register (struct regcache *regcache, int regno)
c906108c 1150{
444199e7 1151 const char *name;
86110418
MS
1152 char *zerobuf;
1153 char *regbuf;
c906108c
SS
1154 int i;
1155
d9d9c31f
AC
1156 regbuf = alloca (MAX_REGISTER_SIZE * 2 + 1);
1157 zerobuf = alloca (MAX_REGISTER_SIZE);
1158 memset (zerobuf, 0, MAX_REGISTER_SIZE);
86110418 1159
1c617db8
GS
1160 if (current_monitor->regname != NULL)
1161 name = current_monitor->regname (regno);
1162 else
1163 name = current_monitor->regnames[regno];
2df3850c 1164 monitor_debug ("MON fetchreg %d '%s'\n", regno, name ? name : "(null name)");
c906108c 1165
2df3850c 1166 if (!name || (*name == '\0'))
7a292a7a 1167 {
2df3850c 1168 monitor_debug ("No register known for %d\n", regno);
56be3814 1169 regcache_raw_supply (regcache, regno, zerobuf);
c906108c
SS
1170 return;
1171 }
1172
1173 /* send the register examine command */
1174
1175 monitor_printf (current_monitor->getreg.cmd, name);
1176
1177 /* If RESP_DELIM is specified, we search for that as a leading
1178 delimiter for the register value. Otherwise, we just start
1179 searching from the start of the buf. */
1180
1181 if (current_monitor->getreg.resp_delim)
1182 {
2df3850c
JM
1183 monitor_debug ("EXP getreg.resp_delim\n");
1184 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
c906108c
SS
1185 /* Handle case of first 32 registers listed in pairs. */
1186 if (current_monitor->flags & MO_32_REGS_PAIRED
7a292a7a 1187 && (regno & 1) != 0 && regno < 32)
c5aa993b 1188 {
2df3850c 1189 monitor_debug ("EXP getreg.resp_delim\n");
c906108c
SS
1190 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1191 }
1192 }
1193
1194 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
c5aa993b 1195 if (current_monitor->flags & MO_HEX_PREFIX)
c906108c
SS
1196 {
1197 int c;
1198 c = readchar (timeout);
1199 while (c == ' ')
1200 c = readchar (timeout);
1201 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1202 ;
1203 else
8a3fe4f8 1204 error (_("Bad value returned from monitor while fetching register %x."),
c5aa993b 1205 regno);
c906108c
SS
1206 }
1207
1208 /* Read upto the maximum number of hex digits for this register, skipping
1209 spaces, but stop reading if something else is seen. Some monitors
1210 like to drop leading zeros. */
1211
9b072297 1212 for (i = 0; i < register_size (get_regcache_arch (regcache), regno) * 2; i++)
c906108c
SS
1213 {
1214 int c;
1215 c = readchar (timeout);
1216 while (c == ' ')
1217 c = readchar (timeout);
1218
1219 if (!isxdigit (c))
1220 break;
1221
1222 regbuf[i] = c;
1223 }
1224
1225 regbuf[i] = '\000'; /* terminate the number */
2df3850c 1226 monitor_debug ("REGVAL '%s'\n", regbuf);
c906108c
SS
1227
1228 /* If TERM is present, we wait for that to show up. Also, (if TERM
1229 is present), we will send TERM_CMD if that is present. In any
1230 case, we collect all of the output into buf, and then wait for
1231 the normal prompt. */
1232
1233 if (current_monitor->getreg.term)
1234 {
2df3850c
JM
1235 monitor_debug ("EXP getreg.term\n");
1236 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
c906108c
SS
1237 }
1238
1239 if (current_monitor->getreg.term_cmd)
c5aa993b 1240 {
2df3850c
JM
1241 monitor_debug ("EMIT getreg.term.cmd\n");
1242 monitor_printf (current_monitor->getreg.term_cmd);
c906108c 1243 }
c5aa993b
JM
1244 if (!current_monitor->getreg.term || /* Already expected or */
1245 current_monitor->getreg.term_cmd) /* ack expected */
1246 monitor_expect_prompt (NULL, 0); /* get response */
c906108c 1247
56be3814 1248 monitor_supply_register (regcache, regno, regbuf);
c906108c
SS
1249}
1250
1251/* Sometimes, it takes several commands to dump the registers */
1252/* This is a primitive for use by variations of monitor interfaces in
1253 case they need to compose the operation.
c5aa993b
JM
1254 */
1255int
c410a84c 1256monitor_dump_reg_block (struct regcache *regcache, char *block_cmd)
c906108c 1257{
d4f3574e 1258 char buf[TARGET_BUF_SIZE];
c906108c
SS
1259 int resp_len;
1260 monitor_printf (block_cmd);
1261 resp_len = monitor_expect_prompt (buf, sizeof (buf));
c410a84c 1262 parse_register_dump (regcache, buf, resp_len);
c5aa993b 1263 return 1;
c906108c
SS
1264}
1265
1266
1267/* Read the remote registers into the block regs. */
1268/* Call the specific function if it has been provided */
1269
1270static void
c410a84c 1271monitor_dump_regs (struct regcache *regcache)
c906108c 1272{
d4f3574e 1273 char buf[TARGET_BUF_SIZE];
c906108c
SS
1274 int resp_len;
1275 if (current_monitor->dumpregs)
c410a84c 1276 (*(current_monitor->dumpregs)) (regcache); /* call supplied function */
c5aa993b
JM
1277 else if (current_monitor->dump_registers) /* default version */
1278 {
1279 monitor_printf (current_monitor->dump_registers);
c906108c 1280 resp_len = monitor_expect_prompt (buf, sizeof (buf));
c410a84c 1281 parse_register_dump (regcache, buf, resp_len);
c906108c
SS
1282 }
1283 else
e2e0b3e5 1284 internal_error (__FILE__, __LINE__, _("failed internal consistency check")); /* Need some way to read registers */
c906108c
SS
1285}
1286
1287static void
56be3814 1288monitor_fetch_registers (struct regcache *regcache, int regno)
c906108c 1289{
2df3850c 1290 monitor_debug ("MON fetchregs\n");
c5aa993b 1291 if (current_monitor->getreg.cmd)
c906108c
SS
1292 {
1293 if (regno >= 0)
1294 {
56be3814 1295 monitor_fetch_register (regcache, regno);
c906108c
SS
1296 return;
1297 }
1298
9b072297
UW
1299 for (regno = 0; regno < gdbarch_num_regs (get_regcache_arch (regcache));
1300 regno++)
56be3814 1301 monitor_fetch_register (regcache, regno);
c906108c 1302 }
c5aa993b
JM
1303 else
1304 {
56be3814 1305 monitor_dump_regs (regcache);
c5aa993b 1306 }
c906108c
SS
1307}
1308
1309/* Store register REGNO, or all if REGNO == 0. Return errno value. */
1310
1311static void
56be3814 1312monitor_store_register (struct regcache *regcache, int regno)
c906108c 1313{
444199e7 1314 const char *name;
d4f3574e 1315 ULONGEST val;
1c617db8
GS
1316
1317 if (current_monitor->regname != NULL)
1318 name = current_monitor->regname (regno);
1319 else
1320 name = current_monitor->regnames[regno];
1321
c906108c 1322 if (!name || (*name == '\0'))
c5aa993b 1323 {
2df3850c
JM
1324 monitor_debug ("MON Cannot store unknown register\n");
1325 return;
c906108c
SS
1326 }
1327
56be3814 1328 regcache_cooked_read_unsigned (regcache, regno, &val);
5683e87a 1329 monitor_debug ("MON storeg %d %s\n", regno,
9b072297
UW
1330 phex (val,
1331 register_size (get_regcache_arch (regcache), regno)));
c906108c
SS
1332
1333 /* send the register deposit command */
1334
2df3850c 1335 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
c906108c
SS
1336 monitor_printf (current_monitor->setreg.cmd, val, name);
1337 else if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1338 monitor_printf (current_monitor->setreg.cmd, name);
1339 else
1340 monitor_printf (current_monitor->setreg.cmd, name, val);
1341
1456ad8e
AC
1342 if (current_monitor->setreg.resp_delim)
1343 {
1344 monitor_debug ("EXP setreg.resp_delim\n");
1345 monitor_expect_regexp (&setreg_resp_delim_pattern, NULL, 0);
1346 if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1347 monitor_printf ("%s\r", paddr_nz (val));
1348 }
c906108c 1349 if (current_monitor->setreg.term)
c5aa993b 1350 {
2df3850c
JM
1351 monitor_debug ("EXP setreg.term\n");
1352 monitor_expect (current_monitor->setreg.term, NULL, 0);
c906108c 1353 if (current_monitor->flags & MO_SETREG_INTERACTIVE)
2df3850c 1354 monitor_printf ("%s\r", paddr_nz (val));
c906108c
SS
1355 monitor_expect_prompt (NULL, 0);
1356 }
1357 else
1358 monitor_expect_prompt (NULL, 0);
c5aa993b
JM
1359 if (current_monitor->setreg.term_cmd) /* Mode exit required */
1360 {
2df3850c 1361 monitor_debug ("EXP setreg_termcmd\n");
c5aa993b
JM
1362 monitor_printf ("%s", current_monitor->setreg.term_cmd);
1363 monitor_expect_prompt (NULL, 0);
c906108c 1364 }
c5aa993b 1365} /* monitor_store_register */
c906108c
SS
1366
1367/* Store the remote registers. */
1368
1369static void
56be3814 1370monitor_store_registers (struct regcache *regcache, int regno)
c906108c
SS
1371{
1372 if (regno >= 0)
1373 {
56be3814 1374 monitor_store_register (regcache, regno);
c906108c
SS
1375 return;
1376 }
1377
9b072297
UW
1378 for (regno = 0; regno < gdbarch_num_regs (get_regcache_arch (regcache));
1379 regno++)
56be3814 1380 monitor_store_register (regcache, regno);
c906108c
SS
1381}
1382
1383/* Get ready to modify the registers array. On machines which store
1384 individual registers, this doesn't need to do anything. On machines
1385 which store all the registers in one fell swoop, this makes sure
1386 that registers contains all the registers from the program being
1387 debugged. */
1388
1389static void
316f2060 1390monitor_prepare_to_store (struct regcache *regcache)
c906108c
SS
1391{
1392 /* Do nothing, since we can store individual regs */
1393}
1394
1395static void
fba45db2 1396monitor_files_info (struct target_ops *ops)
c906108c 1397{
a3f17187 1398 printf_unfiltered (_("\tAttached to %s at %d baud.\n"), dev_name, baud_rate);
c906108c
SS
1399}
1400
1401static int
fba45db2 1402monitor_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1403{
c5aa993b 1404 unsigned int val, hostval;
c906108c
SS
1405 char *cmd;
1406 int i;
1407
2df3850c 1408 monitor_debug ("MON write %d %s\n", len, paddr (memaddr));
c906108c 1409
2df3850c 1410 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
bf6ae464 1411 memaddr = gdbarch_addr_bits_remove (current_gdbarch, memaddr);
c906108c
SS
1412
1413 /* Use memory fill command for leading 0 bytes. */
1414
1415 if (current_monitor->fill)
1416 {
1417 for (i = 0; i < len; i++)
1418 if (myaddr[i] != 0)
1419 break;
1420
1421 if (i > 4) /* More than 4 zeros is worth doing */
1422 {
2df3850c
JM
1423 monitor_debug ("MON FILL %d\n", i);
1424 if (current_monitor->flags & MO_FILL_USES_ADDR)
c5aa993b
JM
1425 monitor_printf (current_monitor->fill, memaddr, (memaddr + i) - 1, 0);
1426 else
1427 monitor_printf (current_monitor->fill, memaddr, i, 0);
c906108c
SS
1428
1429 monitor_expect_prompt (NULL, 0);
1430
1431 return i;
1432 }
1433 }
1434
1435#if 0
1436 /* Can't actually use long longs if VAL is an int (nice idea, though). */
1437 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1438 {
1439 len = 8;
1440 cmd = current_monitor->setmem.cmdll;
1441 }
1442 else
1443#endif
1444 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1445 {
1446 len = 4;
1447 cmd = current_monitor->setmem.cmdl;
1448 }
1449 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1450 {
1451 len = 2;
1452 cmd = current_monitor->setmem.cmdw;
1453 }
1454 else
1455 {
1456 len = 1;
1457 cmd = current_monitor->setmem.cmdb;
1458 }
1459
1460 val = extract_unsigned_integer (myaddr, len);
c5aa993b 1461
c906108c 1462 if (len == 4)
c5aa993b
JM
1463 {
1464 hostval = *(unsigned int *) myaddr;
2df3850c 1465 monitor_debug ("Hostval(%08x) val(%08x)\n", hostval, val);
c906108c
SS
1466 }
1467
1468
1469 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1470 monitor_printf_noecho (cmd, memaddr, val);
1471 else if (current_monitor->flags & MO_SETMEM_INTERACTIVE)
1472 {
1473
1474 monitor_printf_noecho (cmd, memaddr);
1475
1456ad8e
AC
1476 if (current_monitor->setmem.resp_delim)
1477 {
1478 monitor_debug ("EXP setmem.resp_delim");
1479 monitor_expect_regexp (&setmem_resp_delim_pattern, NULL, 0);
1480 monitor_printf ("%x\r", val);
1481 }
c906108c 1482 if (current_monitor->setmem.term)
c5aa993b 1483 {
2df3850c 1484 monitor_debug ("EXP setmem.term");
c906108c
SS
1485 monitor_expect (current_monitor->setmem.term, NULL, 0);
1486 monitor_printf ("%x\r", val);
1487 }
1488 if (current_monitor->setmem.term_cmd)
c5aa993b
JM
1489 { /* Emit this to get out of the memory editing state */
1490 monitor_printf ("%s", current_monitor->setmem.term_cmd);
c906108c
SS
1491 /* Drop through to expecting a prompt */
1492 }
1493 }
1494 else
1495 monitor_printf (cmd, memaddr, val);
1496
1497 monitor_expect_prompt (NULL, 0);
1498
1499 return len;
1500}
1501
1502
c5aa993b 1503static int
fba45db2 1504monitor_write_memory_bytes (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1505{
c5aa993b
JM
1506 unsigned char val;
1507 int written = 0;
1508 if (len == 0)
1509 return 0;
c906108c 1510 /* Enter the sub mode */
c5aa993b
JM
1511 monitor_printf (current_monitor->setmem.cmdb, memaddr);
1512 monitor_expect_prompt (NULL, 0);
c906108c
SS
1513 while (len)
1514 {
c5aa993b
JM
1515 val = *myaddr;
1516 monitor_printf ("%x\r", val);
1517 myaddr++;
1518 memaddr++;
1519 written++;
c906108c 1520 /* If we wanted to, here we could validate the address */
c5aa993b
JM
1521 monitor_expect_prompt (NULL, 0);
1522 len--;
c906108c
SS
1523 }
1524 /* Now exit the sub mode */
1525 monitor_printf (current_monitor->getreg.term_cmd);
c5aa993b
JM
1526 monitor_expect_prompt (NULL, 0);
1527 return written;
c906108c
SS
1528}
1529
1530
1531static void
c5aa993b 1532longlongendswap (unsigned char *a)
c906108c 1533{
c5aa993b
JM
1534 int i, j;
1535 unsigned char x;
1536 i = 0;
1537 j = 7;
c906108c 1538 while (i < 4)
c5aa993b
JM
1539 {
1540 x = *(a + i);
1541 *(a + i) = *(a + j);
1542 *(a + j) = x;
1543 i++, j--;
c906108c
SS
1544 }
1545}
1546/* Format 32 chars of long long value, advance the pointer */
c5aa993b
JM
1547static char *hexlate = "0123456789abcdef";
1548static char *
1549longlong_hexchars (unsigned long long value,
1550 char *outbuff)
c906108c 1551{
c5aa993b
JM
1552 if (value == 0)
1553 {
1554 *outbuff++ = '0';
1555 return outbuff;
1556 }
c906108c 1557 else
c5aa993b
JM
1558 {
1559 static unsigned char disbuf[8]; /* disassembly buffer */
1560 unsigned char *scan, *limit; /* loop controls */
1561 unsigned char c, nib;
1562 int leadzero = 1;
1563 scan = disbuf;
1564 limit = scan + 8;
1565 {
1566 unsigned long long *dp;
1567 dp = (unsigned long long *) scan;
1568 *dp = value;
c906108c 1569 }
c5aa993b 1570 longlongendswap (disbuf); /* FIXME: ONly on big endian hosts */
c906108c 1571 while (scan < limit)
7a292a7a 1572 {
c5aa993b 1573 c = *scan++; /* a byte of our long long value */
c906108c 1574 if (leadzero)
7a292a7a
SS
1575 {
1576 if (c == 0)
1577 continue;
1578 else
c5aa993b 1579 leadzero = 0; /* henceforth we print even zeroes */
7a292a7a 1580 }
c5aa993b 1581 nib = c >> 4; /* high nibble bits */
7a292a7a 1582 *outbuff++ = hexlate[nib];
c5aa993b 1583 nib = c & 0x0f; /* low nibble bits */
7a292a7a 1584 *outbuff++ = hexlate[nib];
c906108c 1585 }
c5aa993b 1586 return outbuff;
c906108c 1587 }
c5aa993b 1588} /* longlong_hexchars */
c906108c
SS
1589
1590
1591
1592/* I am only going to call this when writing virtual byte streams.
1593 Which possably entails endian conversions
c5aa993b
JM
1594 */
1595static int
fba45db2 1596monitor_write_memory_longlongs (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1597{
c5aa993b
JM
1598 static char hexstage[20]; /* At least 16 digits required, plus null */
1599 char *endstring;
1600 long long *llptr;
1601 long long value;
1602 int written = 0;
1603 llptr = (unsigned long long *) myaddr;
1604 if (len == 0)
1605 return 0;
1606 monitor_printf (current_monitor->setmem.cmdll, memaddr);
1607 monitor_expect_prompt (NULL, 0);
1608 while (len >= 8)
1609 {
1610 value = *llptr;
1611 endstring = longlong_hexchars (*llptr, hexstage);
1612 *endstring = '\0'; /* NUll terminate for printf */
1613 monitor_printf ("%s\r", hexstage);
1614 llptr++;
1615 memaddr += 8;
1616 written += 8;
c906108c 1617 /* If we wanted to, here we could validate the address */
c5aa993b
JM
1618 monitor_expect_prompt (NULL, 0);
1619 len -= 8;
c906108c
SS
1620 }
1621 /* Now exit the sub mode */
1622 monitor_printf (current_monitor->getreg.term_cmd);
c5aa993b
JM
1623 monitor_expect_prompt (NULL, 0);
1624 return written;
1625} /* */
c906108c
SS
1626
1627
1628
1629/* ----- MONITOR_WRITE_MEMORY_BLOCK ---------------------------- */
1630/* This is for the large blocks of memory which may occur in downloading.
1631 And for monitors which use interactive entry,
1632 And for monitors which do not have other downloading methods.
1633 Without this, we will end up calling monitor_write_memory many times
1634 and do the entry and exit of the sub mode many times
1635 This currently assumes...
c5aa993b
JM
1636 MO_SETMEM_INTERACTIVE
1637 ! MO_NO_ECHO_ON_SETMEM
1638 To use this, the you have to patch the monitor_cmds block with
1639 this function. Otherwise, its not tuned up for use by all
1640 monitor variations.
1641 */
c906108c 1642
c5aa993b 1643static int
fba45db2 1644monitor_write_memory_block (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1645{
c5aa993b
JM
1646 int written;
1647 written = 0;
c906108c 1648 /* FIXME: This would be a good place to put the zero test */
c5aa993b 1649#if 1
c906108c 1650 if ((len > 8) && (((len & 0x07)) == 0) && current_monitor->setmem.cmdll)
c5aa993b
JM
1651 {
1652 return monitor_write_memory_longlongs (memaddr, myaddr, len);
1653 }
c906108c 1654#endif
c5aa993b
JM
1655 written = monitor_write_memory_bytes (memaddr, myaddr, len);
1656 return written;
c906108c
SS
1657}
1658
1659/* This is an alternate form of monitor_read_memory which is used for monitors
1660 which can only read a single byte/word/etc. at a time. */
1661
1662static int
fba45db2 1663monitor_read_memory_single (CORE_ADDR memaddr, char *myaddr, int len)
c906108c
SS
1664{
1665 unsigned int val;
c5aa993b 1666 char membuf[sizeof (int) * 2 + 1];
c906108c
SS
1667 char *p;
1668 char *cmd;
c906108c 1669
2df3850c 1670 monitor_debug ("MON read single\n");
c906108c
SS
1671#if 0
1672 /* Can't actually use long longs (nice idea, though). In fact, the
1673 call to strtoul below will fail if it tries to convert a value
1674 that's too big to fit in a long. */
1675 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1676 {
1677 len = 8;
1678 cmd = current_monitor->getmem.cmdll;
1679 }
1680 else
1681#endif
1682 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1683 {
1684 len = 4;
1685 cmd = current_monitor->getmem.cmdl;
1686 }
1687 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1688 {
1689 len = 2;
1690 cmd = current_monitor->getmem.cmdw;
1691 }
1692 else
1693 {
1694 len = 1;
1695 cmd = current_monitor->getmem.cmdb;
1696 }
1697
1698 /* Send the examine command. */
1699
1700 monitor_printf (cmd, memaddr);
1701
1702 /* If RESP_DELIM is specified, we search for that as a leading
1703 delimiter for the memory value. Otherwise, we just start
1704 searching from the start of the buf. */
1705
1706 if (current_monitor->getmem.resp_delim)
c5aa993b 1707 {
2df3850c 1708 monitor_debug ("EXP getmem.resp_delim\n");
c906108c
SS
1709 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1710 }
1711
1712 /* Now, read the appropriate number of hex digits for this loc,
1713 skipping spaces. */
1714
1715 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
c5aa993b 1716 if (current_monitor->flags & MO_HEX_PREFIX)
c906108c
SS
1717 {
1718 int c;
1719
1720 c = readchar (timeout);
1721 while (c == ' ')
1722 c = readchar (timeout);
1723 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1724 ;
1725 else
2df3850c
JM
1726 monitor_error ("monitor_read_memory_single",
1727 "bad response from monitor",
93d56215 1728 memaddr, 0, NULL, 0);
c906108c 1729 }
c906108c 1730
93d56215
AC
1731 {
1732 int i;
1733 for (i = 0; i < len * 2; i++)
1734 {
1735 int c;
c906108c 1736
93d56215
AC
1737 while (1)
1738 {
1739 c = readchar (timeout);
1740 if (isxdigit (c))
1741 break;
1742 if (c == ' ')
1743 continue;
1744
1745 monitor_error ("monitor_read_memory_single",
1746 "bad response from monitor",
1747 memaddr, i, membuf, 0);
1748 }
c906108c
SS
1749 membuf[i] = c;
1750 }
93d56215
AC
1751 membuf[i] = '\000'; /* terminate the number */
1752 }
c906108c
SS
1753
1754/* If TERM is present, we wait for that to show up. Also, (if TERM is
1755 present), we will send TERM_CMD if that is present. In any case, we collect
1756 all of the output into buf, and then wait for the normal prompt. */
1757
1758 if (current_monitor->getmem.term)
1759 {
c5aa993b 1760 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
c906108c
SS
1761
1762 if (current_monitor->getmem.term_cmd)
1763 {
1764 monitor_printf (current_monitor->getmem.term_cmd);
1765 monitor_expect_prompt (NULL, 0);
1766 }
1767 }
1768 else
c5aa993b 1769 monitor_expect_prompt (NULL, 0); /* get response */
c906108c
SS
1770
1771 p = membuf;
1772 val = strtoul (membuf, &p, 16);
1773
1774 if (val == 0 && membuf == p)
2df3850c
JM
1775 monitor_error ("monitor_read_memory_single",
1776 "bad value from monitor",
c906108c
SS
1777 memaddr, 0, membuf, 0);
1778
1779 /* supply register stores in target byte order, so swap here */
1780
1781 store_unsigned_integer (myaddr, len, val);
1782
1783 return len;
1784}
1785
1786/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1787 memory at MEMADDR. Returns length moved. Currently, we do no more
1788 than 16 bytes at a time. */
1789
1790static int
fba45db2 1791monitor_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
c906108c
SS
1792{
1793 unsigned int val;
1794 char buf[512];
1795 char *p, *p1;
1796 int resp_len;
1797 int i;
1798 CORE_ADDR dumpaddr;
1799
1800 if (len <= 0)
1801 {
2df3850c 1802 monitor_debug ("Zero length call to monitor_read_memory\n");
c906108c
SS
1803 return 0;
1804 }
1805
2df3850c
JM
1806 monitor_debug ("MON read block ta(%s) ha(%lx) %d\n",
1807 paddr_nz (memaddr), (long) myaddr, len);
c906108c
SS
1808
1809 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
bf6ae464 1810 memaddr = gdbarch_addr_bits_remove (current_gdbarch, memaddr);
c906108c
SS
1811
1812 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1813 return monitor_read_memory_single (memaddr, myaddr, len);
1814
1815 len = min (len, 16);
1816
1817 /* Some dumpers align the first data with the preceeding 16
1818 byte boundary. Some print blanks and start at the
1819 requested boundary. EXACT_DUMPADDR
c5aa993b 1820 */
c906108c
SS
1821
1822 dumpaddr = (current_monitor->flags & MO_EXACT_DUMPADDR)
c5aa993b 1823 ? memaddr : memaddr & ~0x0f;
c906108c
SS
1824
1825 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
1826 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1827 len = ((memaddr + len) & ~0xf) - memaddr;
1828
1829 /* send the memory examine command */
1830
1831 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
7a292a7a 1832 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len);
c906108c
SS
1833 else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1834 monitor_printf (current_monitor->getmem.cmdb, dumpaddr);
1835 else
1836 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1837
1838 /* If TERM is present, we wait for that to show up. Also, (if TERM
1839 is present), we will send TERM_CMD if that is present. In any
1840 case, we collect all of the output into buf, and then wait for
1841 the normal prompt. */
1842
1843 if (current_monitor->getmem.term)
1844 {
c5aa993b 1845 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
c906108c
SS
1846
1847 if (resp_len <= 0)
2df3850c
JM
1848 monitor_error ("monitor_read_memory",
1849 "excessive response from monitor",
c906108c
SS
1850 memaddr, resp_len, buf, 0);
1851
1852 if (current_monitor->getmem.term_cmd)
1853 {
2cd58942 1854 serial_write (monitor_desc, current_monitor->getmem.term_cmd,
c906108c
SS
1855 strlen (current_monitor->getmem.term_cmd));
1856 monitor_expect_prompt (NULL, 0);
1857 }
1858 }
1859 else
c5aa993b 1860 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
c906108c
SS
1861
1862 p = buf;
1863
1864 /* If RESP_DELIM is specified, we search for that as a leading
1865 delimiter for the values. Otherwise, we just start searching
1866 from the start of the buf. */
1867
1868 if (current_monitor->getmem.resp_delim)
1869 {
1870 int retval, tmp;
1871 struct re_registers resp_strings;
2df3850c 1872 monitor_debug ("MON getmem.resp_delim %s\n", current_monitor->getmem.resp_delim);
c906108c
SS
1873
1874 memset (&resp_strings, 0, sizeof (struct re_registers));
1875 tmp = strlen (p);
1876 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1877 &resp_strings);
1878
1879 if (retval < 0)
2df3850c
JM
1880 monitor_error ("monitor_read_memory",
1881 "bad response from monitor",
c906108c
SS
1882 memaddr, resp_len, buf, 0);
1883
1884 p += resp_strings.end[0];
1885#if 0
1886 p = strstr (p, current_monitor->getmem.resp_delim);
1887 if (!p)
2df3850c
JM
1888 monitor_error ("monitor_read_memory",
1889 "bad response from monitor",
c906108c
SS
1890 memaddr, resp_len, buf, 0);
1891 p += strlen (current_monitor->getmem.resp_delim);
1892#endif
1893 }
2df3850c 1894 monitor_debug ("MON scanning %d ,%lx '%s'\n", len, (long) p, p);
c906108c
SS
1895 if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1896 {
c5aa993b
JM
1897 char c;
1898 int fetched = 0;
c906108c 1899 i = len;
c5aa993b 1900 c = *p;
c906108c 1901
c5aa993b
JM
1902
1903 while (!(c == '\000' || c == '\n' || c == '\r') && i > 0)
1904 {
1905 if (isxdigit (c))
1906 {
1907 if ((dumpaddr >= memaddr) && (i > 0))
1908 {
1909 val = fromhex (c) * 16 + fromhex (*(p + 1));
c906108c 1910 *myaddr++ = val;
2df3850c
JM
1911 if (monitor_debug_p || remote_debug)
1912 fprintf_unfiltered (gdb_stdlog, "[%02x]", val);
c906108c 1913 --i;
c5aa993b 1914 fetched++;
c906108c
SS
1915 }
1916 ++dumpaddr;
1917 ++p;
1918 }
c5aa993b
JM
1919 ++p; /* skip a blank or other non hex char */
1920 c = *p;
c906108c 1921 }
c5aa993b 1922 if (fetched == 0)
8a3fe4f8 1923 error (_("Failed to read via monitor"));
2df3850c
JM
1924 if (monitor_debug_p || remote_debug)
1925 fprintf_unfiltered (gdb_stdlog, "\n");
c5aa993b 1926 return fetched; /* Return the number of bytes actually read */
c906108c 1927 }
2df3850c 1928 monitor_debug ("MON scanning bytes\n");
c906108c
SS
1929
1930 for (i = len; i > 0; i--)
1931 {
1932 /* Skip non-hex chars, but bomb on end of string and newlines */
1933
1934 while (1)
1935 {
1936 if (isxdigit (*p))
1937 break;
1938
1939 if (*p == '\000' || *p == '\n' || *p == '\r')
2df3850c
JM
1940 monitor_error ("monitor_read_memory",
1941 "badly terminated response from monitor",
c906108c
SS
1942 memaddr, resp_len, buf, 0);
1943 p++;
1944 }
1945
1946 val = strtoul (p, &p1, 16);
1947
1948 if (val == 0 && p == p1)
2df3850c
JM
1949 monitor_error ("monitor_read_memory",
1950 "bad value from monitor",
c906108c
SS
1951 memaddr, resp_len, buf, 0);
1952
1953 *myaddr++ = val;
1954
1955 if (i == 1)
1956 break;
1957
1958 p = p1;
1959 }
1960
1961 return len;
1962}
1963
0e7e8d51
KB
1964/* Transfer LEN bytes between target address MEMADDR and GDB address
1965 MYADDR. Returns 0 for success, errno code for failure. TARGET is
1966 unused. */
1967
c906108c 1968static int
18cf8b5b 1969monitor_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
0a65a603 1970 struct mem_attrib *attrib, struct target_ops *target)
c906108c 1971{
4930751a
C
1972 int res;
1973
1974 if (write)
1975 {
1976 if (current_monitor->flags & MO_HAS_BLOCKWRITES)
1977 res = monitor_write_memory_block(memaddr, myaddr, len);
1978 else
1979 res = monitor_write_memory(memaddr, myaddr, len);
1980 }
1981 else
1982 {
1983 res = monitor_read_memory(memaddr, myaddr, len);
1984 }
1985
1986 return res;
c906108c
SS
1987}
1988
1989static void
fba45db2 1990monitor_kill (void)
c906108c 1991{
c5aa993b 1992 return; /* ignore attempts to kill target system */
c906108c
SS
1993}
1994
281b533b 1995/* All we actually do is set the PC to the start address of exec_bfd. */
c906108c
SS
1996
1997static void
136d6dae
VP
1998monitor_create_inferior (struct target_ops *ops, char *exec_file,
1999 char *args, char **env, int from_tty)
c906108c
SS
2000{
2001 if (args && (*args != '\000'))
8a3fe4f8 2002 error (_("Args are not supported by the monitor."));
c906108c
SS
2003
2004 first_time = 1;
2005 clear_proceed_status ();
281b533b 2006 write_pc (bfd_get_start_address (exec_bfd));
c906108c
SS
2007}
2008
2009/* Clean up when a program exits.
2010 The program actually lives on in the remote processor's RAM, and may be
2011 run again without a download. Don't leave it full of breakpoint
2012 instructions. */
2013
2014static void
136d6dae 2015monitor_mourn_inferior (struct target_ops *ops)
c906108c
SS
2016{
2017 unpush_target (targ_ops);
2018 generic_mourn_inferior (); /* Do all the proper things now */
5e0b29c1 2019 delete_thread_silent (monitor_ptid);
c906108c
SS
2020}
2021
c906108c
SS
2022/* Tell the monitor to add a breakpoint. */
2023
2024static int
8181d85f 2025monitor_insert_breakpoint (struct bp_target_info *bp_tgt)
c906108c 2026{
8181d85f 2027 CORE_ADDR addr = bp_tgt->placed_address;
c906108c 2028 int i;
f4f9705a 2029 const unsigned char *bp;
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. */
aaab4dba 2040 bp = 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 *
2248monitor_pid_to_str (ptid_t ptid)
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 1.440735 seconds and 4 git commands to generate.