* gdb.base/a1-selftest.exp: Change x86 linux setup_xfails to
[deliverable/binutils-gdb.git] / gdb / monitor.c
CommitLineData
51d6a954 1/* Remote debugging interface for boot monitors, for GDB.
69159fad 2 Copyright 1990, 1991, 1992, 1993, 1995, 1996
b9ab37f0
MM
3 Free Software Foundation, Inc.
4 Contributed by Cygnus Support. Written by Rob Savoye for Cygnus.
5 Resurrected from the ashes by Stu Grossman.
51d6a954
RS
6
7This file is part of GDB.
8
9This program is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2 of the License, or
12(at your option) any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program; if not, write to the Free Software
5be86c56 21Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
51d6a954
RS
22
23/* This file was derived from various remote-* modules. It is a collection
24 of generic support functions so GDB can talk directly to a ROM based
25 monitor. This saves use from having to hack an exception based handler
26 into existance, and makes for quick porting.
27
28 This module talks to a debug monitor called 'MONITOR', which
29 We communicate with MONITOR via either a direct serial line, or a TCP
30 (or possibly TELNET) stream to a terminal multiplexor,
431b7d5f 31 which in turn talks to the target board. */
51d6a954 32
69159fad
SS
33/* FIXME 32x64: This code assumes that registers and addresses are at
34 most 32 bits long. If they can be larger, you will need to declare
35 values as LONGEST and use %llx or some such to print values when
36 building commands to send to the monitor. Since we don't know of
37 any actual 64-bit targets with ROM monitors that use this code,
38 it's not an issue right now. -sts 4/18/96 */
39
51d6a954
RS
40#include "defs.h"
41#include "gdbcore.h"
42#include "target.h"
43#include "wait.h"
4a430794 44#ifdef ANSI_PROTOTYPES
85c613aa
C
45#include <stdarg.h>
46#else
51d6a954 47#include <varargs.h>
85c613aa 48#endif
51d6a954 49#include <signal.h>
b9ab37f0 50#include <ctype.h>
2b576293 51#include "gdb_string.h"
51d6a954
RS
52#include <sys/types.h>
53#include "command.h"
54#include "serial.h"
55#include "monitor.h"
1265e2d8
SG
56#include "gdbcmd.h"
57#include "inferior.h"
b9ab37f0 58#include "gnu-regex.h"
45993f61 59#include "dcache.h"
b9ab37f0 60#include "srec.h"
51d6a954 61
5db7cc25
MM
62static char *dev_name;
63static struct target_ops *targ_ops;
64
eba08643
C
65static int readchar PARAMS ((int timeout));
66
8f078234 67static void monitor_command PARAMS ((char *args, int fromtty));
431b7d5f 68
1265e2d8
SG
69static void monitor_fetch_register PARAMS ((int regno));
70static void monitor_store_register PARAMS ((int regno));
71
a706069f
SG
72static void monitor_detach PARAMS ((char *args, int from_tty));
73static void monitor_resume PARAMS ((int pid, int step, enum target_signal sig));
eba08643
C
74static void monitor_interrupt PARAMS ((int signo));
75static void monitor_interrupt_twice PARAMS ((int signo));
76static void monitor_interrupt_query PARAMS ((void));
77static void monitor_wait_cleanup PARAMS ((int old_timeout));
78
a706069f
SG
79static int monitor_wait PARAMS ((int pid, struct target_waitstatus *status));
80static void monitor_fetch_registers PARAMS ((int regno));
81static void monitor_store_registers PARAMS ((int regno));
82static void monitor_prepare_to_store PARAMS ((void));
83static int monitor_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len, int write, struct target_ops *target));
84static void monitor_files_info PARAMS ((struct target_ops *ops));
85static int monitor_insert_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
86static int monitor_remove_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
87static void monitor_kill PARAMS ((void));
88static void monitor_load PARAMS ((char *file, int from_tty));
89static void monitor_mourn_inferior PARAMS ((void));
90static void monitor_stop PARAMS ((void));
69159fad 91static void monitor_debug PARAMS ((char *prefix, char *string, char *suffix));
a706069f 92
45993f61
SC
93static int monitor_read_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
94static int monitor_write_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
95
69159fad
SS
96static int monitor_expect_regexp PARAMS ((struct re_pattern_buffer *pat,
97 char *buf, int buflen));
8f078234 98static int from_hex PARAMS ((int a));
1265e2d8 99static unsigned long get_hex_word PARAMS ((void));
06b8f5e4 100
8f078234 101static struct monitor_ops *current_monitor;
431b7d5f 102
774e5d7f 103static int hashmark; /* flag set by "set hash" */
51d6a954 104
1b552670 105static int timeout = 30;
431b7d5f 106
4a430794
SS
107static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */
108
eba08643
C
109static void (*ofunc)(); /* Old SIGINT signal handler */
110
431b7d5f
SS
111/* Descriptor for I/O to remote machine. Initialize it to NULL so
112 that monitor_open knows that we don't have a file open when the
113 program starts. */
114
1265e2d8 115static serial_t monitor_desc = NULL;
431b7d5f 116
a706069f
SG
117/* Pointer to regexp pattern matching data */
118
119static struct re_pattern_buffer register_pattern;
283dc598 120static char register_fastmap[256];
a706069f 121
283dc598
SG
122static struct re_pattern_buffer getmem_resp_delim_pattern;
123static char getmem_resp_delim_fastmap[256];
a706069f
SG
124
125static int dump_reg_flag; /* Non-zero means do a dump_registers cmd when
126 monitor_wait wakes up. */
127
45993f61 128static DCACHE *remote_dcache;
012be3ce
DP
129static int first_time=0; /* is this the first time we're executing after
130 gaving created the child proccess? */
45993f61 131
b9ab37f0
MM
132/* monitor_debug is like fputs_unfiltered, except it prints special
133 characters in printable fashion. */
134
135static void
69159fad
SS
136monitor_debug (prefix, string, suffix)
137 char *prefix;
b9ab37f0 138 char *string;
69159fad 139 char *suffix;
b9ab37f0
MM
140{
141 int ch;
142
69159fad
SS
143 /* print prefix and suffix after each line */
144 static int new_line=1;
f7ce02f4
DP
145 static char *prev_prefix = "";
146 static char *prev_suffix = "";
012be3ce 147
f7ce02f4
DP
148 /* if the prefix is changing, print the previous suffix, a new line,
149 and the new prefix */
150 if (strcmp(prev_prefix, prefix) != 0 && !new_line)
151 {
152 fputs_unfiltered (prev_suffix, gdb_stderr);
153 fputs_unfiltered ("\n", gdb_stderr);
154 fputs_unfiltered (prefix, gdb_stderr);
155 }
156 prev_prefix = prefix;
157 prev_suffix = suffix;
158
159 /* print prefix if last char was a newline*/
160
161 if (new_line == 1) {
69159fad
SS
162 fputs_unfiltered (prefix, gdb_stderr);
163 new_line=0;
164 }
165 if (strchr(string,'\n')) /* save state for next call */
166 new_line=1;
167
b9ab37f0
MM
168 while ((ch = *string++) != '\0')
169 {
170 switch (ch) {
171 default:
172 if (isprint (ch))
173 fputc_unfiltered (ch, gdb_stderr);
174
175 else
176 fprintf_unfiltered (gdb_stderr, "\\%03o", ch);
177
178 break;
179
180 case '\\': fputs_unfiltered ("\\\\", gdb_stderr); break;
181 case '\b': fputs_unfiltered ("\\b", gdb_stderr); break;
182 case '\f': fputs_unfiltered ("\\f", gdb_stderr); break;
69159fad
SS
183 case '\n': fputs_unfiltered ("\\n", gdb_stderr); break;
184 case '\r': fputs_unfiltered ("\\r", gdb_stderr); break;
b9ab37f0
MM
185 case '\t': fputs_unfiltered ("\\t", gdb_stderr); break;
186 case '\v': fputs_unfiltered ("\\v", gdb_stderr); break;
187 }
188 }
b9ab37f0 189
69159fad
SS
190 if (new_line==1) { /* print suffix if last char was a newline */
191 fputs_unfiltered (suffix, gdb_stderr);
192 fputs_unfiltered ("\n", gdb_stderr);
193 }
194}
b9ab37f0 195
eba08643
C
196/* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
197 Works just like printf. */
198
199void
4a430794 200#ifdef ANSI_PROTOTYPES
85c613aa
C
201monitor_printf_noecho (char *pattern, ...)
202#else
eba08643
C
203monitor_printf_noecho (va_alist)
204 va_dcl
85c613aa 205#endif
eba08643
C
206{
207 va_list args;
eba08643
C
208 char sndbuf[2000];
209 int len;
210
4a430794 211#if ANSI_PROTOTYPES
85c613aa
C
212 va_start (args, pattern);
213#else
214 char *pattern;
eba08643 215 va_start (args);
eba08643 216 pattern = va_arg (args, char *);
85c613aa 217#endif
eba08643
C
218
219 vsprintf (sndbuf, pattern, args);
220
221 if (remote_debug > 0)
69159fad 222 monitor_debug ("sent -->", sndbuf, "<--");
eba08643
C
223
224 len = strlen (sndbuf);
225
226 if (len + 1 > sizeof sndbuf)
227 abort ();
228
229 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
230 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
231}
232
233/* monitor_printf -- Send data to monitor and check the echo. Works just like
234 printf. */
431b7d5f 235
774e5d7f 236void
4a430794 237#ifdef ANSI_PROTOTYPES
85c613aa
C
238monitor_printf (char *pattern, ...)
239#else
774e5d7f 240monitor_printf (va_alist)
51d6a954 241 va_dcl
85c613aa 242#endif
51d6a954
RS
243{
244 va_list args;
eba08643 245 char sndbuf[2000];
774e5d7f 246 int len;
51d6a954 247
4a430794 248#ifdef ANSI_PROTOTYPES
85c613aa
C
249 va_start (args, pattern);
250#else
251 char *pattern;
431b7d5f 252 va_start (args);
431b7d5f 253 pattern = va_arg (args, char *);
85c613aa 254#endif
51d6a954 255
eba08643 256 vsprintf (sndbuf, pattern, args);
51d6a954 257
1265e2d8 258 if (remote_debug > 0)
69159fad 259 monitor_debug ("sent -->", sndbuf, "<--");
51d6a954 260
eba08643 261 len = strlen (sndbuf);
431b7d5f 262
eba08643 263 if (len + 1 > sizeof sndbuf)
774e5d7f 264 abort ();
431b7d5f 265
eba08643 266 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
774e5d7f 267 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
eba08643 268
69159fad
SS
269 /* We used to expect that the next immediate output was the characters we
270 just output, but sometimes some extra junk appeared before the characters
271 we expected, like an extra prompt, or a portmaster sending telnet negotiations.
272 So, just start searching for what we sent, and skip anything unknown. */
273 monitor_expect (sndbuf, (char *)0, 0);
e6fa5bd6
RS
274}
275
431b7d5f
SS
276/* Read a character from the remote system, doing all the fancy
277 timeout stuff. */
278
51d6a954 279static int
431b7d5f 280readchar (timeout)
51d6a954
RS
281 int timeout;
282{
283 int c;
69159fad
SS
284 static enum { last_random, last_nl, last_cr, last_crnl } state = last_random;
285 int looping;
51d6a954 286
69159fad
SS
287 do
288 {
289 looping = 0;
290 c = SERIAL_READCHAR (monitor_desc, timeout);
51d6a954 291
69159fad
SS
292 if (c >= 0)
293 {
294 c &= 0x7f;
295 if (remote_debug > 0)
296 {
297 char buf[2];
298 buf[0] = c;
299 buf[1] = '\0';
300 monitor_debug ("read -->", buf, "<--");
301 }
302 }
303
304 /* Canonicialize \n\r combinations into one \r */
305 if ((current_monitor->flags & MO_HANDLE_NL) != 0)
306 {
307 if ((c == '\r' && state == last_nl)
308 || (c == '\n' && state == last_cr))
309 {
310 state = last_crnl;
311 looping = 1;
312 }
313 else if (c == '\r')
314 state = last_cr;
315 else if (c != '\n')
316 state = last_random;
317 else
318 {
319 state = last_nl;
320 c = '\r';
321 }
322 }
323 }
324 while (looping);
51d6a954
RS
325
326 if (c >= 0)
69159fad 327 return c;
51d6a954 328
431b7d5f 329 if (c == SERIAL_TIMEOUT)
4a430794
SS
330#ifdef MAINTENANCE_CMDS
331 if (in_monitor_wait) /* Watchdog went off */
332 {
333 target_mourn_inferior ();
334 error ("Watchdog has expired. Target detached.\n");
335 }
336 else
337#endif
338 error ("Timeout reading from remote system.");
a706069f 339
431b7d5f 340 perror_with_name ("remote-monitor");
51d6a954
RS
341}
342
1265e2d8 343/* Scan input from the remote system, until STRING is found. If BUF is non-
a706069f
SG
344 zero, then collect input until we have collected either STRING or BUFLEN-1
345 chars. In either case we terminate BUF with a 0. If input overflows BUF
346 because STRING can't be found, return -1, else return number of chars in BUF
347 (minus the terminating NUL). Note that in the non-overflow case, STRING
348 will be at the end of BUF. */
431b7d5f 349
774e5d7f
SS
350int
351monitor_expect (string, buf, buflen)
51d6a954 352 char *string;
1265e2d8
SG
353 char *buf;
354 int buflen;
51d6a954
RS
355{
356 char *p = string;
1265e2d8 357 int obuflen = buflen;
51d6a954 358 int c;
8665f3dc 359 extern struct target_ops *targ_ops;
51d6a954 360
51d6a954 361 immediate_quit = 1;
431b7d5f
SS
362 while (1)
363 {
1265e2d8 364 if (buf)
431b7d5f 365 {
a706069f 366 if (buflen < 2)
431b7d5f 367 {
a706069f 368 *buf = '\000';
431b7d5f 369 immediate_quit = 0;
1265e2d8 370 return -1;
431b7d5f 371 }
1265e2d8
SG
372
373 c = readchar (timeout);
283dc598
SG
374 if (c == '\000')
375 continue;
1265e2d8
SG
376 *buf++ = c;
377 buflen--;
431b7d5f
SS
378 }
379 else
1265e2d8
SG
380 c = readchar (timeout);
381
69159fad
SS
382 /* Don't expect any ^C sent to be echoed */
383
384 if (*p == '\003' || c == *p)
431b7d5f 385 {
69159fad 386 p++;
1265e2d8 387 if (*p == '\0')
431b7d5f 388 {
1265e2d8
SG
389 immediate_quit = 0;
390
a706069f
SG
391 if (buf)
392 {
393 *buf++ = '\000';
394 return obuflen - buflen;
395 }
396 else
397 return 0;
431b7d5f 398 }
1265e2d8 399 }
8665f3dc
MS
400 else if ((c == '\021' || c == '\023') &&
401 (strcmp(targ_ops->to_shortname, "m32r") == 0))
402 { /* m32r monitor emits random DC1/DC3 chars */
403 continue;
404 }
1265e2d8
SG
405 else
406 {
431b7d5f 407 p = string;
1265e2d8
SG
408 if (c == *p)
409 p++;
431b7d5f 410 }
51d6a954 411 }
51d6a954
RS
412}
413
283dc598
SG
414/* Search for a regexp. */
415
69159fad 416static int
283dc598
SG
417monitor_expect_regexp (pat, buf, buflen)
418 struct re_pattern_buffer *pat;
419 char *buf;
420 int buflen;
421{
422 char *mybuf;
423 char *p;
424
425 if (buf)
426 mybuf = buf;
427 else
428 {
429 mybuf = alloca (1024);
430 buflen = 1024;
431 }
432
433 p = mybuf;
434 while (1)
435 {
436 int retval;
437
438 if (p - mybuf >= buflen)
439 { /* Buffer about to overflow */
440
441/* On overflow, we copy the upper half of the buffer to the lower half. Not
442 great, but it usually works... */
443
444 memcpy (mybuf, mybuf + buflen / 2, buflen / 2);
445 p = mybuf + buflen / 2;
446 }
447
448 *p++ = readchar (timeout);
449
450 retval = re_search (pat, mybuf, p - mybuf, 0, p - mybuf, NULL);
451 if (retval >= 0)
452 return 1;
453 }
454}
455
51d6a954
RS
456/* Keep discarding input until we see the MONITOR prompt.
457
458 The convention for dealing with the prompt is that you
459 o give your command
460 o *then* wait for the prompt.
461
462 Thus the last thing that a procedure does with the serial line
774e5d7f 463 will be an monitor_expect_prompt(). Exception: monitor_resume does not
51d6a954
RS
464 wait for the prompt, because the terminal is being handed over
465 to the inferior. However, the next thing which happens after that
466 is a monitor_wait which does wait for the prompt.
467 Note that this includes abnormal exit, e.g. error(). This is
468 necessary to prevent getting into states from which we can't
469 recover. */
431b7d5f 470
774e5d7f
SS
471int
472monitor_expect_prompt (buf, buflen)
1265e2d8
SG
473 char *buf;
474 int buflen;
51d6a954 475{
f7ce02f4 476 return monitor_expect (current_monitor->prompt, buf, buflen);
51d6a954
RS
477}
478
431b7d5f
SS
479/* Get N 32-bit words from remote, each preceded by a space, and put
480 them in registers starting at REGNO. */
481
1265e2d8 482static unsigned long
51d6a954
RS
483get_hex_word ()
484{
1265e2d8 485 unsigned long val;
51d6a954 486 int i;
1265e2d8 487 int ch;
51d6a954 488
1265e2d8
SG
489 do
490 ch = readchar (timeout);
491 while (isspace(ch));
cf51c601 492
1265e2d8
SG
493 val = from_hex (ch);
494
495 for (i = 7; i >= 1; i--)
431b7d5f 496 {
1265e2d8
SG
497 ch = readchar (timeout);
498 if (!isxdigit (ch))
499 break;
500 val = (val << 4) | from_hex (ch);
431b7d5f 501 }
51d6a954
RS
502
503 return val;
504}
505
283dc598
SG
506static void
507compile_pattern (pattern, compiled_pattern, fastmap)
508 char *pattern;
509 struct re_pattern_buffer *compiled_pattern;
510 char *fastmap;
511{
512 int tmp;
513 char *val;
514
515 compiled_pattern->fastmap = fastmap;
516
517 tmp = re_set_syntax (RE_SYNTAX_EMACS);
518 val = re_compile_pattern (pattern,
519 strlen (pattern),
520 compiled_pattern);
521 re_set_syntax (tmp);
522
523 if (val)
524 error ("compile_pattern: Can't compile pattern string `%s': %s!", pattern, val);
525
526 if (fastmap)
527 re_compile_fastmap (compiled_pattern);
528}
529
431b7d5f
SS
530/* Open a connection to a remote debugger. NAME is the filename used
531 for communication. */
532
51d6a954 533void
1265e2d8 534monitor_open (args, mon_ops, from_tty)
51d6a954 535 char *args;
1265e2d8 536 struct monitor_ops *mon_ops;
51d6a954
RS
537 int from_tty;
538{
1265e2d8
SG
539 char *name;
540 int i;
a706069f
SG
541 char **p;
542
543 if (mon_ops->magic != MONITOR_OPS_MAGIC)
544 error ("Magic number of monitor_ops struct wrong.");
1265e2d8
SG
545
546 targ_ops = mon_ops->target;
547 name = targ_ops->to_shortname;
51d6a954 548
1265e2d8 549 if (!args)
51d6a954
RS
550 error ("Use `target %s DEVICE-NAME' to use a serial port, or \n\
551`target %s HOST-NAME:PORT-NUMBER' to use a network connection.", name, name);
552
1265e2d8
SG
553 target_preopen (from_tty);
554
a706069f
SG
555 /* Setup pattern for register dump */
556
557 if (mon_ops->register_pattern)
283dc598
SG
558 compile_pattern (mon_ops->register_pattern, &register_pattern,
559 register_fastmap);
560
561 if (mon_ops->getmem.resp_delim)
562 compile_pattern (mon_ops->getmem.resp_delim, &getmem_resp_delim_pattern,
563 getmem_resp_delim_fastmap);
a706069f 564
1265e2d8
SG
565 unpush_target (targ_ops);
566
567 if (dev_name)
568 free (dev_name);
569 dev_name = strsave (args);
51d6a954 570
431b7d5f 571 monitor_desc = SERIAL_OPEN (dev_name);
51d6a954 572
1265e2d8 573 if (!monitor_desc)
431b7d5f
SS
574 perror_with_name (dev_name);
575
576 if (baud_rate != -1)
577 {
578 if (SERIAL_SETBAUDRATE (monitor_desc, baud_rate))
579 {
580 SERIAL_CLOSE (monitor_desc);
1265e2d8 581 perror_with_name (dev_name);
431b7d5f 582 }
51d6a954 583 }
7a1330f7 584
431b7d5f 585 SERIAL_RAW (monitor_desc);
51d6a954 586
1265e2d8
SG
587 SERIAL_FLUSH_INPUT (monitor_desc);
588
cf51c601 589 /* some systems only work with 2 stop bits */
1265e2d8
SG
590
591 SERIAL_SETSTOPBITS (monitor_desc, mon_ops->stopbits);
592
593 current_monitor = mon_ops;
51d6a954 594
a706069f
SG
595 /* See if we can wake up the monitor. First, try sending a stop sequence,
596 then send the init strings. Last, remove all breakpoints. */
597
eba08643
C
598 if (current_monitor->stop)
599 {
600 monitor_stop ();
69159fad
SS
601 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
602 {
603 monitor_expect_prompt (NULL, 0);
604 }
eba08643 605 }
431b7d5f 606
1265e2d8 607 /* wake up the monitor and see if it's alive */
a706069f
SG
608 for (p = mon_ops->init; *p != NULL; p++)
609 {
69159fad
SS
610 /* Some of the characters we send may not be echoed,
611 but we hope to get a prompt at the end of it all. */
612
613 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
614 monitor_printf(*p);
615 else
616 monitor_printf_noecho (*p);
774e5d7f 617 monitor_expect_prompt (NULL, 0);
a706069f
SG
618 }
619
eba08643
C
620 SERIAL_FLUSH_INPUT (monitor_desc);
621
a706069f 622 /* Remove all breakpoints */
431b7d5f 623
a706069f
SG
624 if (mon_ops->clr_all_break)
625 {
774e5d7f
SS
626 monitor_printf (mon_ops->clr_all_break);
627 monitor_expect_prompt (NULL, 0);
a706069f 628 }
1265e2d8 629
51d6a954 630 if (from_tty)
1265e2d8
SG
631 printf_unfiltered ("Remote target %s connected to %s\n", name, dev_name);
632
633 push_target (targ_ops);
634
635 inferior_pid = 42000; /* Make run command think we are busy... */
636
eba08643
C
637 /* Give monitor_wait something to read */
638
639 monitor_printf (current_monitor->line_term);
1265e2d8 640
45993f61
SC
641 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory);
642
1265e2d8 643 start_remote ();
51d6a954
RS
644}
645
431b7d5f
SS
646/* Close out all files and local state before this target loses
647 control. */
51d6a954 648
69159fad 649void
51d6a954
RS
650monitor_close (quitting)
651 int quitting;
652{
1265e2d8
SG
653 if (monitor_desc)
654 SERIAL_CLOSE (monitor_desc);
51d6a954 655 monitor_desc = NULL;
51d6a954
RS
656}
657
431b7d5f
SS
658/* Terminate the open connection to the remote debugger. Use this
659 when you want to detach and do something else with your gdb. */
660
a706069f 661static void
1265e2d8
SG
662monitor_detach (args, from_tty)
663 char *args;
51d6a954
RS
664 int from_tty;
665{
431b7d5f 666 pop_target (); /* calls monitor_close to do the real work */
51d6a954 667 if (from_tty)
1265e2d8 668 printf_unfiltered ("Ending remote %s debugging\n", target_shortname);
51d6a954 669}
7804e5bc 670
a706069f
SG
671/* Convert VALSTR into the target byte-ordered value of REGNO and store it. */
672
673char *
674monitor_supply_register (regno, valstr)
675 int regno;
676 char *valstr;
677{
69159fad 678 unsigned int val;
a706069f
SG
679 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
680 char *p;
681
682 val = strtoul (valstr, &p, 16);
683
684 if (val == 0 && valstr == p)
685 error ("monitor_supply_register (%d): bad value from monitor: %s.",
686 regno, valstr);
687
688 /* supply register stores in target byte order, so swap here */
689
690 store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
691
692 supply_register (regno, regbuf);
693
694 return p;
695}
696
431b7d5f
SS
697/* Tell the remote machine to resume. */
698
a706069f 699static void
51d6a954
RS
700monitor_resume (pid, step, sig)
701 int pid, step;
702 enum target_signal sig;
703{
012be3ce
DP
704 /* Some monitors require a different command when starting a program */
705 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
706 {
707 first_time = 0;
708 monitor_printf ("run\r");
709 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
710 dump_reg_flag = 1;
711 return;
712 }
45993f61 713 dcache_flush (remote_dcache);
431b7d5f 714 if (step)
f7ce02f4 715 monitor_printf (current_monitor->step);
431b7d5f 716 else
a706069f 717 {
f7ce02f4 718 monitor_printf (current_monitor->cont);
a706069f
SG
719 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
720 dump_reg_flag = 1;
721 }
722}
723
69159fad
SS
724/* Parse the output of a register dump command. A monitor specific
725 regexp is used to extract individual register descriptions of the
726 form REG=VAL. Each description is split up into a name and a value
727 string which are passed down to monitor specific code. */
a706069f
SG
728
729static char *
730parse_register_dump (buf, len)
731 char *buf;
732 int len;
733{
734 while (1)
735 {
736 int regnamelen, vallen;
737 char *regname, *val;
69159fad
SS
738 /* Element 0 points to start of register name, and element 1
739 points to the start of the register value. */
283dc598 740 struct re_registers register_strings;
a706069f
SG
741
742 if (re_search (&register_pattern, buf, len, 0, len,
743 &register_strings) == -1)
744 break;
745
746 regnamelen = register_strings.end[1] - register_strings.start[1];
747 regname = buf + register_strings.start[1];
748 vallen = register_strings.end[2] - register_strings.start[2];
749 val = buf + register_strings.start[2];
750
751 current_monitor->supply_register (regname, regnamelen, val, vallen);
752
753 buf += register_strings.end[0];
754 len -= register_strings.end[0];
755 }
51d6a954
RS
756}
757
eba08643
C
758/* Send ^C to target to halt it. Target will respond, and send us a
759 packet. */
760
761static void
762monitor_interrupt (signo)
763 int signo;
764{
765 /* If this doesn't work, try more severe steps. */
766 signal (signo, monitor_interrupt_twice);
767
768 if (remote_debug)
769 printf_unfiltered ("monitor_interrupt called\n");
770
771 target_stop ();
772}
773
774/* The user typed ^C twice. */
775
776static void
777monitor_interrupt_twice (signo)
778 int signo;
779{
780 signal (signo, ofunc);
781
782 monitor_interrupt_query ();
783
784 signal (signo, monitor_interrupt);
785}
786
787/* Ask the user what to do when an interrupt is received. */
788
789static void
790monitor_interrupt_query ()
791{
792 target_terminal_ours ();
793
794 if (query ("Interrupted while waiting for the program.\n\
795Give up (and stop debugging it)? "))
796 {
797 target_mourn_inferior ();
798 return_to_top_level (RETURN_QUIT);
799 }
800
801 target_terminal_inferior ();
802}
803
804static void
805monitor_wait_cleanup (old_timeout)
806 int old_timeout;
807{
808 timeout = old_timeout;
809 signal (SIGINT, ofunc);
4a430794 810 in_monitor_wait = 0;
eba08643
C
811}
812
431b7d5f
SS
813/* Wait until the remote machine stops, then return, storing status in
814 status just as `wait' would. */
815
a706069f 816static int
51d6a954
RS
817monitor_wait (pid, status)
818 int pid;
819 struct target_waitstatus *status;
820{
821 int old_timeout = timeout;
774e5d7f 822 char buf[1024];
a706069f 823 int resp_len;
eba08643 824 struct cleanup *old_chain;
51d6a954
RS
825
826 status->kind = TARGET_WAITKIND_EXITED;
827 status->value.integer = 0;
828
eba08643
C
829 old_chain = make_cleanup (monitor_wait_cleanup, old_timeout);
830
4a430794
SS
831#ifdef MAINTENANCE_CMDS
832 in_monitor_wait = 1;
833 timeout = watchdog > 0 ? watchdog : -1;
834#else
1265e2d8 835 timeout = -1; /* Don't time out -- user program is running. */
4a430794 836#endif
51d6a954 837
eba08643
C
838 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
839
a706069f
SG
840 do
841 {
774e5d7f 842 resp_len = monitor_expect_prompt (buf, sizeof (buf));
51d6a954 843
a706069f
SG
844 if (resp_len <= 0)
845 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
846 }
847 while (resp_len < 0);
51d6a954 848
eba08643
C
849 signal (SIGINT, ofunc);
850
51d6a954
RS
851 timeout = old_timeout;
852
a706069f
SG
853 if (dump_reg_flag && current_monitor->dump_registers)
854 {
855 dump_reg_flag = 0;
856
774e5d7f
SS
857 monitor_printf (current_monitor->dump_registers);
858 resp_len = monitor_expect_prompt (buf, sizeof (buf));
a706069f
SG
859 }
860
861 if (current_monitor->register_pattern)
862 parse_register_dump (buf, resp_len);
863
864 status->kind = TARGET_WAITKIND_STOPPED;
865 status->value.sig = TARGET_SIGNAL_TRAP;
866
eba08643
C
867 discard_cleanups (old_chain);
868
4a430794
SS
869 in_monitor_wait = 0;
870
1265e2d8 871 return inferior_pid;
51d6a954
RS
872}
873
1265e2d8
SG
874/* Fetch register REGNO, or all registers if REGNO is -1. Returns
875 errno value. */
51d6a954 876
1265e2d8
SG
877static void
878monitor_fetch_register (regno)
879 int regno;
880{
1265e2d8 881 char *name;
774e5d7f 882 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
eba08643
C
883 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
884 int i;
51d6a954 885
f7ce02f4 886 name = current_monitor->regnames[regno];
f1ca4cbc 887
1265e2d8 888 if (!name)
774e5d7f
SS
889 {
890 supply_register (regno, zerobuf);
891 return;
892 }
51d6a954 893
5be86c56 894 /* send the register examine command */
431b7d5f 895
774e5d7f 896 monitor_printf (current_monitor->getreg.cmd, name);
1b552670 897
69159fad
SS
898 /* If RESP_DELIM is specified, we search for that as a leading
899 delimiter for the register value. Otherwise, we just start
900 searching from the start of the buf. */
eba08643
C
901
902 if (current_monitor->getreg.resp_delim)
903 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
904
012be3ce
DP
905 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
906 if (current_monitor->flags & MO_HEX_PREFIX)
907 {
908 int c;
909 c = readchar (timeout);
910 while (c == ' ')
911 c = readchar (timeout);
912 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
913 ;
914 else
915 error ("Bad value returned from monitor while fetching register %x.",
916 regno);
917 }
918
5be86c56
JL
919 /* Read upto the maximum number of hex digits for this register, skipping
920 spaces, but stop reading if something else is seen. Some monitors
921 like to drop leading zeros. */
eba08643
C
922
923 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
924 {
925 int c;
5be86c56
JL
926 c = readchar (timeout);
927 while (c == ' ')
928 c = readchar (timeout);
eba08643 929
5be86c56
JL
930 if (!isxdigit (c))
931 break;
eba08643
C
932
933 regbuf[i] = c;
934 }
935
936 regbuf[i] = '\000'; /* terminate the number */
937
69159fad
SS
938 /* If TERM is present, we wait for that to show up. Also, (if TERM
939 is present), we will send TERM_CMD if that is present. In any
940 case, we collect all of the output into buf, and then wait for
941 the normal prompt. */
1b552670 942
1265e2d8 943 if (current_monitor->getreg.term)
431b7d5f 944 {
eba08643 945 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
1265e2d8
SG
946
947 if (current_monitor->getreg.term_cmd)
431b7d5f 948 {
eba08643 949 monitor_printf (current_monitor->getreg.term_cmd);
774e5d7f 950 monitor_expect_prompt (NULL, 0);
431b7d5f
SS
951 }
952 }
953 else
eba08643 954 monitor_expect_prompt (NULL, 0); /* get response */
51d6a954 955
eba08643 956 monitor_supply_register (regno, regbuf);
51d6a954
RS
957}
958
1265e2d8 959/* Read the remote registers into the block regs. */
431b7d5f 960
45993f61
SC
961static void monitor_dump_regs ()
962{
8665f3dc
MS
963 char buf[1024];
964 int resp_len;
965
45993f61
SC
966 if (current_monitor->dump_registers)
967 {
45993f61
SC
968 monitor_printf (current_monitor->dump_registers);
969 resp_len = monitor_expect_prompt (buf, sizeof (buf));
970 parse_register_dump (buf, resp_len);
971 }
972 else
973 abort(); /* Need some way to read registers */
974}
975
a706069f 976static void
1265e2d8
SG
977monitor_fetch_registers (regno)
978 int regno;
51d6a954 979{
45993f61 980 if (current_monitor->getreg.cmd)
431b7d5f 981 {
45993f61
SC
982 if (regno >= 0)
983 {
984 monitor_fetch_register (regno);
985 return;
986 }
51d6a954 987
45993f61
SC
988 for (regno = 0; regno < NUM_REGS; regno++)
989 monitor_fetch_register (regno);
990 }
991 else {
992 monitor_dump_regs ();
993 }
51d6a954
RS
994}
995
431b7d5f
SS
996/* Store register REGNO, or all if REGNO == 0. Return errno value. */
997
1265e2d8 998static void
51d6a954
RS
999monitor_store_register (regno)
1000 int regno;
1001{
1002 char *name;
69159fad 1003 unsigned int val;
f1ca4cbc 1004
f7ce02f4 1005 name = current_monitor->regnames[regno];
1265e2d8
SG
1006 if (!name)
1007 return;
51d6a954 1008
1265e2d8 1009 val = read_register (regno);
51d6a954 1010
1265e2d8
SG
1011 /* send the register deposit command */
1012
8665f3dc
MS
1013 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
1014 monitor_printf (current_monitor->setreg.cmd, val, name);
1015 else
1016 monitor_printf (current_monitor->setreg.cmd, name, val);
1265e2d8 1017
69159fad
SS
1018/* It's possible that there are actually some monitors out there that
1019 will prompt you when you set a register. In that case, you may
1020 need to add some code here to deal with TERM and TERM_CMD (see
1021 monitor_fetch_register to get an idea of what's needed...) */
1265e2d8 1022
774e5d7f 1023 monitor_expect_prompt (NULL, 0);
1265e2d8
SG
1024}
1025
1026/* Store the remote registers. */
1027
a706069f 1028static void
1265e2d8
SG
1029monitor_store_registers (regno)
1030 int regno;
1031{
1032 if (regno >= 0)
431b7d5f 1033 {
1265e2d8
SG
1034 monitor_store_register (regno);
1035 return;
51d6a954 1036 }
431b7d5f 1037
1265e2d8
SG
1038 for (regno = 0; regno < NUM_REGS; regno++)
1039 monitor_store_register (regno);
51d6a954
RS
1040}
1041
1042/* Get ready to modify the registers array. On machines which store
1043 individual registers, this doesn't need to do anything. On machines
1044 which store all the registers in one fell swoop, this makes sure
1045 that registers contains all the registers from the program being
1046 debugged. */
1047
a706069f 1048static void
51d6a954
RS
1049monitor_prepare_to_store ()
1050{
1051 /* Do nothing, since we can store individual regs */
1052}
1053
a706069f
SG
1054static void
1055monitor_files_info (ops)
1056 struct target_ops *ops;
51d6a954 1057{
1265e2d8 1058 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
51d6a954
RS
1059}
1060
1265e2d8
SG
1061static int
1062monitor_write_memory (memaddr, myaddr, len)
51d6a954 1063 CORE_ADDR memaddr;
2b576293 1064 char *myaddr;
51d6a954
RS
1065 int len;
1066{
69159fad 1067 unsigned int val;
a706069f
SG
1068 char *cmd;
1069 int i;
1b552670 1070
a706069f 1071 /* Use memory fill command for leading 0 bytes. */
1b552670 1072
a706069f
SG
1073 if (current_monitor->fill)
1074 {
1075 for (i = 0; i < len; i++)
1076 if (myaddr[i] != 0)
1077 break;
1078
1079 if (i > 4) /* More than 4 zeros is worth doing */
1080 {
1081 if (current_monitor->flags & MO_FILL_USES_ADDR)
774e5d7f 1082 monitor_printf (current_monitor->fill, memaddr, memaddr + i, 0);
a706069f 1083 else
774e5d7f 1084 monitor_printf (current_monitor->fill, memaddr, i, 0);
a706069f 1085
774e5d7f 1086 monitor_expect_prompt (NULL, 0);
a706069f
SG
1087
1088 return i;
1089 }
1090 }
1091
8665f3dc
MS
1092#if 0
1093 /* Can't actually use long longs if VAL is an int (nice idea, though). */
a706069f
SG
1094 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1095 {
1096 len = 8;
1097 cmd = current_monitor->setmem.cmdll;
1098 }
8665f3dc
MS
1099 else
1100#endif
1101 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
a706069f
SG
1102 {
1103 len = 4;
1104 cmd = current_monitor->setmem.cmdl;
1105 }
1106 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1107 {
1108 len = 2;
1109 cmd = current_monitor->setmem.cmdw;
1110 }
1111 else
1112 {
1113 len = 1;
1114 cmd = current_monitor->setmem.cmdb;
1115 }
1116
1117 val = extract_unsigned_integer (myaddr, len);
1118
012be3ce
DP
1119 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1120 monitor_printf_noecho (cmd, memaddr, val);
1121 else
1122 monitor_printf (cmd, memaddr, val);
1265e2d8 1123
774e5d7f 1124 monitor_expect_prompt (NULL, 0);
1265e2d8 1125
a706069f 1126 return len;
51d6a954
RS
1127}
1128
eba08643
C
1129/* This is an alternate form of monitor_read_memory which is used for monitors
1130 which can only read a single byte/word/etc. at a time. */
1131
1132static int
1133monitor_read_memory_single (memaddr, myaddr, len)
1134 CORE_ADDR memaddr;
2b576293 1135 char *myaddr;
eba08643
C
1136 int len;
1137{
69159fad
SS
1138 unsigned int val;
1139 char membuf[sizeof(int) * 2 + 1];
eba08643
C
1140 char *p;
1141 char *cmd;
1142 int i;
1143
8665f3dc
MS
1144#if 0
1145 /* Can't actually use long longs (nice idea, though). In fact, the
1146 call to strtoul below will fail if it tries to convert a value
1147 that's too big to fit in a long. */
eba08643
C
1148 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1149 {
1150 len = 8;
1151 cmd = current_monitor->getmem.cmdll;
1152 }
8665f3dc
MS
1153 else
1154#endif
1155 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
eba08643
C
1156 {
1157 len = 4;
1158 cmd = current_monitor->getmem.cmdl;
1159 }
1160 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1161 {
1162 len = 2;
1163 cmd = current_monitor->getmem.cmdw;
1164 }
1165 else
1166 {
1167 len = 1;
1168 cmd = current_monitor->getmem.cmdb;
1169 }
1170
1171/* Send the examine command. */
1172
1173 monitor_printf (cmd, memaddr);
1174
1175/* If RESP_DELIM is specified, we search for that as a leading delimiter for
1176 the register value. Otherwise, we just start searching from the start of
1177 the buf. */
1178
1179 if (current_monitor->getmem.resp_delim)
69159fad 1180 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
eba08643
C
1181
1182/* Now, read the appropriate number of hex digits for this loc, skipping
1183 spaces. */
1184
012be3ce
DP
1185 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
1186 if (current_monitor->flags & MO_HEX_PREFIX)
1187 {
1188 int c;
1189 c = readchar (timeout);
1190 while (c == ' ')
1191 c = readchar (timeout);
1192 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1193 ;
1194 else
1195 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1196 memaddr, i, membuf, c);
1197 }
eba08643
C
1198 for (i = 0; i < len * 2; i++)
1199 {
1200 int c;
1201
1202 while (1)
1203 {
1204 c = readchar (timeout);
1205 if (isxdigit (c))
1206 break;
1207 if (c == ' ')
1208 continue;
1209
1210 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1211 memaddr, i, membuf, c);
1212 }
1213
1214 membuf[i] = c;
1215 }
1216
1217 membuf[i] = '\000'; /* terminate the number */
1218
1219/* If TERM is present, we wait for that to show up. Also, (if TERM is
1220 present), we will send TERM_CMD if that is present. In any case, we collect
1221 all of the output into buf, and then wait for the normal prompt. */
1222
1223 if (current_monitor->getmem.term)
1224 {
1225 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
1226
1227 if (current_monitor->getmem.term_cmd)
1228 {
1229 monitor_printf (current_monitor->getmem.term_cmd);
1230 monitor_expect_prompt (NULL, 0);
1231 }
1232 }
1233 else
1234 monitor_expect_prompt (NULL, 0); /* get response */
1235
1236 p = membuf;
1237 val = strtoul (membuf, &p, 16);
1238
1239 if (val == 0 && membuf == p)
1240 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.",
1241 memaddr, membuf);
1242
1243 /* supply register stores in target byte order, so swap here */
1244
1245 store_unsigned_integer (myaddr, len, val);
1246
1247 return len;
1248}
1249
1265e2d8
SG
1250/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's memory
1251 at MEMADDR. Returns length moved. Currently, we only do one byte at a
1252 time. */
431b7d5f 1253
1265e2d8
SG
1254static int
1255monitor_read_memory (memaddr, myaddr, len)
51d6a954
RS
1256 CORE_ADDR memaddr;
1257 char *myaddr;
1258 int len;
1259{
69159fad 1260 unsigned int val;
1265e2d8 1261 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
774e5d7f 1262 char buf[512];
1265e2d8
SG
1263 char *p, *p1;
1264 char *name;
1265 int resp_len;
a706069f
SG
1266 int i;
1267
eba08643
C
1268 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1269 return monitor_read_memory_single (memaddr, myaddr, len);
1270
a706069f 1271 len = min (len, 16);
1265e2d8 1272
774e5d7f
SS
1273/* See if xfer would cross a 16 byte boundary. If so, clip it. */
1274 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1275 len = ((memaddr + len) & ~0xf) - memaddr;
1276
1265e2d8
SG
1277 /* send the memory examine command */
1278
774e5d7f
SS
1279 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1280 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1);
1281 else
1282 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1265e2d8
SG
1283
1284/* If TERM is present, we wait for that to show up. Also, (if TERM is
1285 present), we will send TERM_CMD if that is present. In any case, we collect
1286 all of the output into buf, and then wait for the normal prompt. */
1287
1288 if (current_monitor->getmem.term)
431b7d5f 1289 {
774e5d7f 1290 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
1265e2d8
SG
1291
1292 if (resp_len <= 0)
8f078234
SG
1293 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.",
1294 memaddr, resp_len, buf);
1265e2d8
SG
1295
1296 if (current_monitor->getmem.term_cmd)
431b7d5f 1297 {
1265e2d8
SG
1298 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1299 strlen (current_monitor->getmem.term_cmd));
774e5d7f 1300 monitor_expect_prompt (NULL, 0);
1b552670 1301 }
51d6a954 1302 }
1265e2d8 1303 else
774e5d7f
SS
1304 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
1305
1306 p = buf;
1307
1265e2d8 1308 /* If RESP_DELIM is specified, we search for that as a leading delimiter for
a706069f
SG
1309 the values. Otherwise, we just start searching from the start of the buf.
1310 */
1265e2d8
SG
1311
1312 if (current_monitor->getmem.resp_delim)
1313 {
283dc598
SG
1314 int retval, tmp;
1315 struct re_registers resp_strings;
1316
1317 tmp = strlen (p);
1318 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1319 &resp_strings);
1320
1321 if (retval < 0)
1322 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1323 memaddr, resp_len, buf);
1324
1325 p += resp_strings.end[0];
1326#if 0
774e5d7f 1327 p = strstr (p, current_monitor->getmem.resp_delim);
1265e2d8 1328 if (!p)
8f078234
SG
1329 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1330 memaddr, resp_len, buf);
1265e2d8 1331 p += strlen (current_monitor->getmem.resp_delim);
283dc598 1332#endif
1265e2d8 1333 }
1265e2d8 1334
a706069f
SG
1335 for (i = len; i > 0; i--)
1336 {
774e5d7f
SS
1337 /* Skip non-hex chars, but bomb on end of string and newlines */
1338
1339 while (1)
1340 {
1341 if (isxdigit (*p))
1342 break;
1343 if (*p == '\000' || *p == '\n' || *p == '\r')
1344 error ("monitor_read_memory (0x%x): badly terminated response from monitor: %.*s", memaddr, resp_len, buf);
1345 p++;
1346 }
1347
a706069f 1348 val = strtoul (p, &p1, 16);
1265e2d8 1349
a706069f
SG
1350 if (val == 0 && p == p1)
1351 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr,
1352 resp_len, buf);
1265e2d8 1353
a706069f 1354 *myaddr++ = val;
774e5d7f
SS
1355
1356 if (i == 1)
1357 break;
1358
1359 p = p1;
a706069f 1360 }
1265e2d8 1361
a706069f 1362 return len;
51d6a954
RS
1363}
1364
a706069f 1365static int
1265e2d8 1366monitor_xfer_memory (memaddr, myaddr, len, write, target)
51d6a954
RS
1367 CORE_ADDR memaddr;
1368 char *myaddr;
1369 int len;
1370 int write;
1371 struct target_ops *target; /* ignored */
1372{
45993f61 1373 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
51d6a954
RS
1374}
1375
a706069f
SG
1376static void
1377monitor_kill ()
51d6a954
RS
1378{
1379 return; /* ignore attempts to kill target system */
1380}
1381
a706069f
SG
1382/* All we actually do is set the PC to the start address of exec_bfd, and start
1383 the program at that point. */
1384
1385static void
1386monitor_create_inferior (exec_file, args, env)
1387 char *exec_file;
1388 char *args;
1389 char **env;
1390{
1391 if (args && (*args != '\000'))
1392 error ("Args are not supported by the monitor.");
1393
012be3ce 1394 first_time = 1;
a706069f
SG
1395 clear_proceed_status ();
1396 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
1397}
1398
51d6a954
RS
1399/* Clean up when a program exits.
1400 The program actually lives on in the remote processor's RAM, and may be
1401 run again without a download. Don't leave it full of breakpoint
1402 instructions. */
1403
a706069f 1404static void
51d6a954
RS
1405monitor_mourn_inferior ()
1406{
8f078234 1407 unpush_target (targ_ops);
51d6a954
RS
1408 generic_mourn_inferior (); /* Do all the proper things now */
1409}
1410
1265e2d8 1411#define NUM_MONITOR_BREAKPOINTS 8
51d6a954 1412
1265e2d8 1413static CORE_ADDR breakaddr[NUM_MONITOR_BREAKPOINTS] = {0};
51d6a954 1414
431b7d5f
SS
1415/* Tell the monitor to add a breakpoint. */
1416
a706069f 1417static int
51d6a954
RS
1418monitor_insert_breakpoint (addr, shadow)
1419 CORE_ADDR addr;
1420 char *shadow;
1421{
1422 int i;
1265e2d8 1423 static unsigned char break_insn[] = BREAKPOINT;
51d6a954 1424
1265e2d8 1425 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
431b7d5f
SS
1426 {
1427 if (breakaddr[i] == 0)
1428 {
1429 breakaddr[i] = addr;
1265e2d8 1430 monitor_read_memory (addr, shadow, sizeof (break_insn));
f7ce02f4 1431 monitor_printf (current_monitor->set_break, addr);
774e5d7f 1432 monitor_expect_prompt (NULL, 0);
431b7d5f
SS
1433 return 0;
1434 }
f1ca4cbc 1435 }
f1ca4cbc 1436
1265e2d8 1437 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS);
51d6a954
RS
1438}
1439
431b7d5f
SS
1440/* Tell the monitor to remove a breakpoint. */
1441
a706069f 1442static int
51d6a954
RS
1443monitor_remove_breakpoint (addr, shadow)
1444 CORE_ADDR addr;
1445 char *shadow;
1446{
1447 int i;
1448
1265e2d8 1449 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
431b7d5f
SS
1450 {
1451 if (breakaddr[i] == addr)
1452 {
1453 breakaddr[i] = 0;
1454 /* some monitors remove breakpoints based on the address */
a706069f 1455 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
f7ce02f4 1456 monitor_printf (current_monitor->clr_break, addr);
431b7d5f 1457 else
f7ce02f4 1458 monitor_printf (current_monitor->clr_break, i);
774e5d7f 1459 monitor_expect_prompt (NULL, 0);
431b7d5f
SS
1460 return 0;
1461 }
7804e5bc 1462 }
1265e2d8 1463 fprintf_unfiltered (stderr, "Can't find breakpoint associated with 0x%x\n", addr);
51d6a954
RS
1464 return 1;
1465}
1466
f7ce02f4
DP
1467/* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
1468 an S-record. Return non-zero if the ACK is received properly. */
1469
1470static int
1471monitor_wait_srec_ack ()
1472{
1473 /* FIXME: eventually we'll want to be able to handle acknowledgements
1474 of something other than a '+' character. Right now this is only
1475 going to work for EST visionICE. */
1476 return readchar (timeout) == '+';
1477}
1478
774e5d7f 1479/* monitor_load -- download a file. */
431b7d5f 1480
a706069f
SG
1481static void
1482monitor_load (file, from_tty)
21ed3dcd 1483 char *file;
a706069f 1484 int from_tty;
21ed3dcd 1485{
45993f61
SC
1486 dcache_flush (remote_dcache);
1487
774e5d7f
SS
1488 if (current_monitor->load_routine)
1489 current_monitor->load_routine (monitor_desc, file, hashmark);
1490 else
b9ab37f0 1491 { /* The default is ascii S-records */
f7ce02f4 1492 monitor_printf (current_monitor->load);
b9ab37f0
MM
1493 if (current_monitor->loadresp)
1494 monitor_expect (current_monitor->loadresp, NULL, 0);
1495
012be3ce 1496/* FIXME Should add arg here for load_offset (already done for generic_load) */
f7ce02f4
DP
1497 load_srec (monitor_desc, file, 32, SREC_ALL, hashmark,
1498 current_monitor->flags & MO_SREC_ACK ?
1499 monitor_wait_srec_ack : NULL);
b9ab37f0
MM
1500
1501 monitor_expect_prompt (NULL, 0);
1502 }
21ed3dcd 1503
a706069f 1504/* Finally, make the PC point at the start address */
431b7d5f 1505
45993f61
SC
1506 if (exec_bfd)
1507 write_pc (bfd_get_start_address (exec_bfd));
431b7d5f 1508
a706069f 1509 inferior_pid = 0; /* No process now */
51d6a954 1510
a706069f
SG
1511/* This is necessary because many things were based on the PC at the time that
1512 we attached to the monitor, which is no longer valid now that we have loaded
1513 new code (and just changed the PC). Another way to do this might be to call
1514 normal_stop, except that the stack may not be valid, and things would get
1515 horribly confused... */
51d6a954 1516
a706069f
SG
1517 clear_symtab_users ();
1518}
1519
1520static void
1521monitor_stop ()
1522{
69159fad
SS
1523 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
1524 SERIAL_SEND_BREAK (monitor_desc);
eba08643
C
1525 if (current_monitor->stop)
1526 monitor_printf_noecho (current_monitor->stop);
51d6a954
RS
1527}
1528
431b7d5f
SS
1529/* Put a command string, in args, out to MONITOR. Output from MONITOR
1530 is placed on the users terminal until the prompt is seen. FIXME: We
1531 read the characters ourseleves here cause of a nasty echo. */
1532
8f078234 1533static void
a706069f 1534monitor_command (args, from_tty)
431b7d5f 1535 char *args;
a706069f 1536 int from_tty;
51d6a954 1537{
7804e5bc 1538 char *p;
a706069f
SG
1539 int resp_len;
1540 char buf[1000];
431b7d5f 1541
51d6a954 1542 if (monitor_desc == NULL)
431b7d5f 1543 error ("monitor target not open.");
7804e5bc 1544
f7ce02f4 1545 p = current_monitor->prompt;
774e5d7f 1546
431b7d5f
SS
1547 /* Send the command. Note that if no args were supplied, then we're
1548 just sending the monitor a newline, which is sometimes useful. */
1549
774e5d7f 1550 monitor_printf ("%s\r", (args ? args : ""));
7804e5bc 1551
774e5d7f 1552 resp_len = monitor_expect_prompt (buf, sizeof buf);
a706069f
SG
1553
1554 fputs_unfiltered (buf, gdb_stdout); /* Output the response */
51d6a954
RS
1555}
1556
1b552670 1557/* Convert hex digit A to a number. */
431b7d5f 1558
1b552670
RS
1559static int
1560from_hex (a)
1561 int a;
1562{
1b552670
RS
1563 if (a >= '0' && a <= '9')
1564 return a - '0';
1565 if (a >= 'a' && a <= 'f')
1566 return a - 'a' + 10;
1567 if (a >= 'A' && a <= 'F')
1568 return a - 'A' + 10;
1b552670 1569
1265e2d8 1570 error ("Reply contains invalid hex digit 0x%x", a);
1b552670
RS
1571}
1572
774e5d7f
SS
1573static struct target_ops monitor_ops =
1574{
a706069f
SG
1575 NULL, /* to_shortname */
1576 NULL, /* to_longname */
1577 NULL, /* to_doc */
1578 NULL, /* to_open */
1579 monitor_close, /* to_close */
1580 NULL, /* to_attach */
1581 monitor_detach, /* to_detach */
1582 monitor_resume, /* to_resume */
1583 monitor_wait, /* to_wait */
1584 monitor_fetch_registers, /* to_fetch_registers */
1585 monitor_store_registers, /* to_store_registers */
1586 monitor_prepare_to_store, /* to_prepare_to_store */
1587 monitor_xfer_memory, /* to_xfer_memory */
1588 monitor_files_info, /* to_files_info */
1589 monitor_insert_breakpoint, /* to_insert_breakpoint */
1590 monitor_remove_breakpoint, /* to_remove_breakpoint */
1591 0, /* to_terminal_init */
1592 0, /* to_terminal_inferior */
1593 0, /* to_terminal_ours_for_output */
1594 0, /* to_terminal_ours */
1595 0, /* to_terminal_info */
1596 monitor_kill, /* to_kill */
1597 monitor_load, /* to_load */
1598 0, /* to_lookup_symbol */
1599 monitor_create_inferior, /* to_create_inferior */
1600 monitor_mourn_inferior, /* to_mourn_inferior */
1601 0, /* to_can_run */
1602 0, /* to_notice_signals */
2b576293 1603 0, /* to_thread_alive */
a706069f
SG
1604 monitor_stop, /* to_stop */
1605 process_stratum, /* to_stratum */
1606 0, /* to_next */
1607 1, /* to_has_all_memory */
1608 1, /* to_has_memory */
1609 1, /* to_has_stack */
1610 1, /* to_has_registers */
1611 1, /* to_has_execution */
1612 0, /* sections */
1613 0, /* sections_end */
1614 OPS_MAGIC /* to_magic */
1615};
1616
1617/* Init the target_ops structure pointed at by OPS */
1618
1619void
1620init_monitor_ops (ops)
1621 struct target_ops *ops;
1622{
1623 memcpy (ops, &monitor_ops, sizeof monitor_ops);
1624}
1625
431b7d5f
SS
1626/* Define additional commands that are usually only used by monitors. */
1627
51d6a954
RS
1628void
1629_initialize_remote_monitors ()
1630{
51d6a954
RS
1631 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
1632 (char *)&hashmark,
1633 "Set display of activity while downloading a file.\n\
1265e2d8 1634When enabled, a hashmark \'#\' is displayed.",
51d6a954
RS
1635 &setlist),
1636 &showlist);
1637
51d6a954
RS
1638 add_com ("monitor", class_obscure, monitor_command,
1639 "Send a command to the debug monitor.");
1640}
This page took 0.197217 seconds and 4 git commands to generate.