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