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