* objdump.c (SFILE): Add size field.
[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 421#if 0 /* MAINTENANCE_CMDS */
1c3cd1b0 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
1c3cd1b0
AC
797void
798flush_monitor_dcache ()
799{
800 dcache_flush (remote_dcache);
801}
2a8b1fab 802
a706069f 803static void
51d6a954
RS
804monitor_resume (pid, step, sig)
805 int pid, step;
806 enum target_signal sig;
807{
012be3ce 808 /* Some monitors require a different command when starting a program */
2a8b1fab 809 RDEBUG(("MON resume\n")) ;
012be3ce
DP
810 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
811 {
812 first_time = 0;
813 monitor_printf ("run\r");
814 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
815 dump_reg_flag = 1;
816 return;
817 }
45993f61 818 dcache_flush (remote_dcache);
431b7d5f 819 if (step)
f7ce02f4 820 monitor_printf (current_monitor->step);
431b7d5f 821 else
a706069f 822 {
2a8b1fab
JM
823 if (current_monitor->continue_hook)
824 (*current_monitor->continue_hook)() ;
825 else monitor_printf (current_monitor->cont);
a706069f
SG
826 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
827 dump_reg_flag = 1;
828 }
829}
830
69159fad
SS
831/* Parse the output of a register dump command. A monitor specific
832 regexp is used to extract individual register descriptions of the
833 form REG=VAL. Each description is split up into a name and a value
834 string which are passed down to monitor specific code. */
a706069f 835
7e9576e0 836static void
a706069f
SG
837parse_register_dump (buf, len)
838 char *buf;
839 int len;
840{
2a8b1fab 841 RDEBUG(("MON Parsing register dump\n"))
a706069f
SG
842 while (1)
843 {
844 int regnamelen, vallen;
845 char *regname, *val;
69159fad
SS
846 /* Element 0 points to start of register name, and element 1
847 points to the start of the register value. */
283dc598 848 struct re_registers register_strings;
a706069f 849
edc452d0
JM
850 memset (&register_strings, 0, sizeof (struct re_registers));
851
a706069f
SG
852 if (re_search (&register_pattern, buf, len, 0, len,
853 &register_strings) == -1)
854 break;
855
856 regnamelen = register_strings.end[1] - register_strings.start[1];
857 regname = buf + register_strings.start[1];
858 vallen = register_strings.end[2] - register_strings.start[2];
859 val = buf + register_strings.start[2];
860
861 current_monitor->supply_register (regname, regnamelen, val, vallen);
862
863 buf += register_strings.end[0];
864 len -= register_strings.end[0];
865 }
51d6a954
RS
866}
867
eba08643
C
868/* Send ^C to target to halt it. Target will respond, and send us a
869 packet. */
870
871static void
872monitor_interrupt (signo)
873 int signo;
874{
875 /* If this doesn't work, try more severe steps. */
876 signal (signo, monitor_interrupt_twice);
877
878 if (remote_debug)
879 printf_unfiltered ("monitor_interrupt called\n");
880
881 target_stop ();
882}
883
884/* The user typed ^C twice. */
885
886static void
887monitor_interrupt_twice (signo)
888 int signo;
889{
890 signal (signo, ofunc);
891
892 monitor_interrupt_query ();
893
894 signal (signo, monitor_interrupt);
895}
896
897/* Ask the user what to do when an interrupt is received. */
898
899static void
900monitor_interrupt_query ()
901{
902 target_terminal_ours ();
903
904 if (query ("Interrupted while waiting for the program.\n\
905Give up (and stop debugging it)? "))
906 {
907 target_mourn_inferior ();
908 return_to_top_level (RETURN_QUIT);
909 }
910
911 target_terminal_inferior ();
912}
913
914static void
915monitor_wait_cleanup (old_timeout)
c8623080 916 void *old_timeout;
eba08643 917{
c8623080 918 timeout = *(int*)old_timeout;
eba08643 919 signal (SIGINT, ofunc);
4a430794 920 in_monitor_wait = 0;
eba08643
C
921}
922
2a8b1fab
JM
923
924
925void monitor_wait_filter(char * buf,
926 int bufmax,
927 int * ext_resp_len,
928 struct target_waitstatus * status
929 )
930{
931 int resp_len ;
932 do
933 {
934 resp_len = monitor_expect_prompt (buf, bufmax);
935 * ext_resp_len =resp_len ;
936
937 if (resp_len <= 0)
938 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
939 }
940 while (resp_len < 0);
941
942 /* Print any output characters that were preceded by ^O. */
943 /* FIXME - This would be great as a user settabgle flag */
944 if (remote_debug ||
945 current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
946 {
947 int i;
948
949 for (i = 0; i < resp_len - 1; i++)
950 if (buf[i] == 0x0f)
951 putchar_unfiltered (buf[++i]);
952 }
953}
954
955
956
431b7d5f
SS
957/* Wait until the remote machine stops, then return, storing status in
958 status just as `wait' would. */
959
a706069f 960static int
51d6a954
RS
961monitor_wait (pid, status)
962 int pid;
963 struct target_waitstatus *status;
964{
965 int old_timeout = timeout;
774e5d7f 966 char buf[1024];
a706069f 967 int resp_len;
eba08643 968 struct cleanup *old_chain;
51d6a954
RS
969
970 status->kind = TARGET_WAITKIND_EXITED;
971 status->value.integer = 0;
972
c8623080 973 old_chain = make_cleanup (monitor_wait_cleanup, &old_timeout);
2a8b1fab 974 RDEBUG(("MON wait\n"))
eba08643 975
2a8b1fab
JM
976#if 0 /* MAINTENANCE_CMDS */
977 /* This is somthing other than a maintenance command */
4a430794
SS
978 in_monitor_wait = 1;
979 timeout = watchdog > 0 ? watchdog : -1;
980#else
1265e2d8 981 timeout = -1; /* Don't time out -- user program is running. */
4a430794 982#endif
51d6a954 983
eba08643
C
984 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
985
2a8b1fab
JM
986 if (current_monitor->wait_filter)
987 (*current_monitor->wait_filter)(buf,sizeof (buf),&resp_len,status) ;
988 else monitor_wait_filter(buf,sizeof (buf),&resp_len,status) ;
989
990#if 0 /* Transferred to monitor wait filter */
a706069f
SG
991 do
992 {
774e5d7f 993 resp_len = monitor_expect_prompt (buf, sizeof (buf));
51d6a954 994
a706069f
SG
995 if (resp_len <= 0)
996 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
997 }
998 while (resp_len < 0);
51d6a954 999
352f9e9d 1000 /* Print any output characters that were preceded by ^O. */
2a8b1fab
JM
1001 /* FIXME - This would be great as a user settabgle flag */
1002 if (remote_debug ||
1003 current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
352f9e9d
MA
1004 {
1005 int i;
1006
1007 for (i = 0; i < resp_len - 1; i++)
1008 if (buf[i] == 0x0f)
1009 putchar_unfiltered (buf[++i]);
1010 }
2a8b1fab 1011#endif
352f9e9d 1012
eba08643
C
1013 signal (SIGINT, ofunc);
1014
51d6a954 1015 timeout = old_timeout;
2a8b1fab 1016#if 0
a706069f
SG
1017 if (dump_reg_flag && current_monitor->dump_registers)
1018 {
1019 dump_reg_flag = 0;
774e5d7f
SS
1020 monitor_printf (current_monitor->dump_registers);
1021 resp_len = monitor_expect_prompt (buf, sizeof (buf));
a706069f
SG
1022 }
1023
1024 if (current_monitor->register_pattern)
1025 parse_register_dump (buf, resp_len);
2a8b1fab
JM
1026#else
1027 RDEBUG(("Wait fetching registers after stop\n")) ;
1028 monitor_dump_regs() ;
1029#endif
a706069f
SG
1030
1031 status->kind = TARGET_WAITKIND_STOPPED;
1032 status->value.sig = TARGET_SIGNAL_TRAP;
1033
eba08643
C
1034 discard_cleanups (old_chain);
1035
4a430794
SS
1036 in_monitor_wait = 0;
1037
1265e2d8 1038 return inferior_pid;
51d6a954
RS
1039}
1040
1265e2d8
SG
1041/* Fetch register REGNO, or all registers if REGNO is -1. Returns
1042 errno value. */
51d6a954 1043
1265e2d8
SG
1044static void
1045monitor_fetch_register (regno)
1046 int regno;
1047{
1265e2d8 1048 char *name;
774e5d7f 1049 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
eba08643
C
1050 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
1051 int i;
51d6a954 1052
f7ce02f4 1053 name = current_monitor->regnames[regno];
2a8b1fab 1054 RDEBUG(("MON fetchreg %d '%s'\n",regno,name))
f1ca4cbc 1055
2a8b1fab
JM
1056 if (!name || (*name == '\0'))
1057 { RDEBUG(("No register known for %d\n",regno))
774e5d7f
SS
1058 supply_register (regno, zerobuf);
1059 return;
1060 }
51d6a954 1061
5be86c56 1062 /* send the register examine command */
431b7d5f 1063
774e5d7f 1064 monitor_printf (current_monitor->getreg.cmd, name);
1b552670 1065
69159fad
SS
1066 /* If RESP_DELIM is specified, we search for that as a leading
1067 delimiter for the register value. Otherwise, we just start
1068 searching from the start of the buf. */
eba08643
C
1069
1070 if (current_monitor->getreg.resp_delim)
7e9576e0 1071 {
2a8b1fab 1072 RDEBUG(("EXP getreg.resp_delim\n"))
7e9576e0
MA
1073 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1074 /* Handle case of first 32 registers listed in pairs. */
1075 if (current_monitor->flags & MO_32_REGS_PAIRED
1076 && regno & 1 == 1 && regno < 32)
2a8b1fab
JM
1077 { RDEBUG(("EXP getreg.resp_delim\n")) ;
1078 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1079 }
7e9576e0 1080 }
eba08643 1081
012be3ce
DP
1082 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
1083 if (current_monitor->flags & MO_HEX_PREFIX)
1084 {
1085 int c;
1086 c = readchar (timeout);
1087 while (c == ' ')
1088 c = readchar (timeout);
1089 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1090 ;
1091 else
1092 error ("Bad value returned from monitor while fetching register %x.",
1093 regno);
1094 }
1095
5be86c56
JL
1096 /* Read upto the maximum number of hex digits for this register, skipping
1097 spaces, but stop reading if something else is seen. Some monitors
1098 like to drop leading zeros. */
eba08643
C
1099
1100 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
1101 {
1102 int c;
5be86c56
JL
1103 c = readchar (timeout);
1104 while (c == ' ')
1105 c = readchar (timeout);
eba08643 1106
5be86c56
JL
1107 if (!isxdigit (c))
1108 break;
eba08643
C
1109
1110 regbuf[i] = c;
1111 }
1112
1113 regbuf[i] = '\000'; /* terminate the number */
2a8b1fab 1114 RDEBUG(("REGVAL '%s'\n",regbuf)) ;
eba08643 1115
69159fad
SS
1116 /* If TERM is present, we wait for that to show up. Also, (if TERM
1117 is present), we will send TERM_CMD if that is present. In any
1118 case, we collect all of the output into buf, and then wait for
1119 the normal prompt. */
1b552670 1120
1265e2d8 1121 if (current_monitor->getreg.term)
431b7d5f 1122 {
2a8b1fab 1123 RDEBUG(("EXP getreg.term\n"))
eba08643 1124 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
2a8b1fab 1125 }
1265e2d8 1126
2a8b1fab
JM
1127 if (current_monitor->getreg.term_cmd)
1128 { RDEBUG(("EMIT getreg.term.cmd\n"))
1129 monitor_printf (current_monitor->getreg.term_cmd);
431b7d5f 1130 }
2a8b1fab
JM
1131 if (! current_monitor->getreg.term || /* Already expected or */
1132 current_monitor->getreg.term_cmd) /* ack expected */
eba08643 1133 monitor_expect_prompt (NULL, 0); /* get response */
51d6a954 1134
eba08643 1135 monitor_supply_register (regno, regbuf);
51d6a954
RS
1136}
1137
2a8b1fab
JM
1138/* Sometimes, it takes several commands to dump the registers */
1139/* This is a primitive for use by variations of monitor interfaces in
1140 case they need to compose the operation.
1141 */
1142int monitor_dump_reg_block(char * block_cmd)
1143{
1144 char buf[1024];
1145 int resp_len;
1146 monitor_printf (block_cmd);
1147 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1148 parse_register_dump (buf, resp_len);
1149 return 1 ;
1150}
1151
1152
1265e2d8 1153/* Read the remote registers into the block regs. */
2a8b1fab 1154/* Call the specific function if it has been provided */
431b7d5f 1155
7e9576e0
MA
1156static void
1157monitor_dump_regs ()
45993f61 1158{
8665f3dc
MS
1159 char buf[1024];
1160 int resp_len;
2a8b1fab
JM
1161 if (current_monitor->dumpregs)
1162 (*(current_monitor->dumpregs))() ; /* call supplied function */
1163 else
1164 if (current_monitor->dump_registers) /* default version */
1165 { monitor_printf (current_monitor->dump_registers);
45993f61
SC
1166 resp_len = monitor_expect_prompt (buf, sizeof (buf));
1167 parse_register_dump (buf, resp_len);
1168 }
1169 else
1170 abort(); /* Need some way to read registers */
1171}
1172
a706069f 1173static void
1265e2d8
SG
1174monitor_fetch_registers (regno)
1175 int regno;
51d6a954 1176{
2a8b1fab 1177 RDEBUG(("MON fetchregs\n")) ;
45993f61 1178 if (current_monitor->getreg.cmd)
431b7d5f 1179 {
45993f61
SC
1180 if (regno >= 0)
1181 {
1182 monitor_fetch_register (regno);
1183 return;
1184 }
51d6a954 1185
45993f61
SC
1186 for (regno = 0; regno < NUM_REGS; regno++)
1187 monitor_fetch_register (regno);
1188 }
1189 else {
1190 monitor_dump_regs ();
1191 }
51d6a954
RS
1192}
1193
431b7d5f
SS
1194/* Store register REGNO, or all if REGNO == 0. Return errno value. */
1195
1265e2d8 1196static void
51d6a954
RS
1197monitor_store_register (regno)
1198 int regno;
1199{
1200 char *name;
69159fad 1201 unsigned int val;
f1ca4cbc 1202
f7ce02f4 1203 name = current_monitor->regnames[regno];
2a8b1fab
JM
1204 if (!name || (*name == '\0'))
1205 { RDEBUG(("MON Cannot store unknown register\n"))
1206 return;
1207 }
51d6a954 1208
1265e2d8 1209 val = read_register (regno);
2a8b1fab 1210 RDEBUG(("MON storeg %d %08x\n",regno,(unsigned int)val))
51d6a954 1211
7e9576e0 1212 /* send the register deposit command */
1265e2d8 1213
8665f3dc
MS
1214 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
1215 monitor_printf (current_monitor->setreg.cmd, val, name);
7e9576e0
MA
1216 else if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1217 monitor_printf (current_monitor->setreg.cmd, name);
8665f3dc
MS
1218 else
1219 monitor_printf (current_monitor->setreg.cmd, name, val);
1265e2d8 1220
7e9576e0 1221 if (current_monitor->setreg.term)
2a8b1fab 1222 { RDEBUG(("EXP setreg.term\n"))
7e9576e0 1223 monitor_expect (current_monitor->setreg.term, NULL, 0);
7e9576e0
MA
1224 if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1225 monitor_printf ("%x\r", val);
7e9576e0
MA
1226 monitor_expect_prompt (NULL, 0);
1227 }
1228 else
1229 monitor_expect_prompt (NULL, 0);
2a8b1fab
JM
1230 if (current_monitor->setreg.term_cmd) /* Mode exit required */
1231 { RDEBUG(("EXP setreg_termcmd\n")) ;
1232 monitor_printf("%s",current_monitor->setreg.term_cmd) ;
1233 monitor_expect_prompt(NULL,0) ;
1234 }
1235} /* monitor_store_register */
1265e2d8
SG
1236
1237/* Store the remote registers. */
1238
a706069f 1239static void
1265e2d8
SG
1240monitor_store_registers (regno)
1241 int regno;
1242{
1243 if (regno >= 0)
431b7d5f 1244 {
1265e2d8
SG
1245 monitor_store_register (regno);
1246 return;
51d6a954 1247 }
431b7d5f 1248
1265e2d8
SG
1249 for (regno = 0; regno < NUM_REGS; regno++)
1250 monitor_store_register (regno);
51d6a954
RS
1251}
1252
1253/* Get ready to modify the registers array. On machines which store
1254 individual registers, this doesn't need to do anything. On machines
1255 which store all the registers in one fell swoop, this makes sure
1256 that registers contains all the registers from the program being
1257 debugged. */
1258
a706069f 1259static void
51d6a954
RS
1260monitor_prepare_to_store ()
1261{
1262 /* Do nothing, since we can store individual regs */
1263}
1264
a706069f
SG
1265static void
1266monitor_files_info (ops)
1267 struct target_ops *ops;
51d6a954 1268{
1265e2d8 1269 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
51d6a954
RS
1270}
1271
1265e2d8
SG
1272static int
1273monitor_write_memory (memaddr, myaddr, len)
51d6a954 1274 CORE_ADDR memaddr;
2b576293 1275 char *myaddr;
51d6a954
RS
1276 int len;
1277{
2a8b1fab 1278 unsigned int val, hostval ;
a706069f
SG
1279 char *cmd;
1280 int i;
1b552670 1281
2a8b1fab
JM
1282 RDEBUG(("MON write %d %08x\n",len,(unsigned long)memaddr))
1283
7e9576e0
MA
1284 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1285 memaddr = ADDR_BITS_REMOVE (memaddr);
1286
a706069f 1287 /* Use memory fill command for leading 0 bytes. */
1b552670 1288
a706069f
SG
1289 if (current_monitor->fill)
1290 {
1291 for (i = 0; i < len; i++)
1292 if (myaddr[i] != 0)
1293 break;
1294
1295 if (i > 4) /* More than 4 zeros is worth doing */
1296 {
2a8b1fab
JM
1297 RDEBUG(("MON FILL %d\n",i))
1298 if (current_monitor->flags & MO_FILL_USES_ADDR)
1299 monitor_printf (current_monitor->fill, memaddr, (memaddr + i)-1, 0);
1300 else
1301 monitor_printf (current_monitor->fill, memaddr, i, 0);
a706069f 1302
774e5d7f 1303 monitor_expect_prompt (NULL, 0);
a706069f
SG
1304
1305 return i;
1306 }
1307 }
1308
8665f3dc
MS
1309#if 0
1310 /* Can't actually use long longs if VAL is an int (nice idea, though). */
a706069f
SG
1311 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1312 {
1313 len = 8;
1314 cmd = current_monitor->setmem.cmdll;
1315 }
8665f3dc
MS
1316 else
1317#endif
1318 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
a706069f
SG
1319 {
1320 len = 4;
1321 cmd = current_monitor->setmem.cmdl;
1322 }
1323 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1324 {
1325 len = 2;
1326 cmd = current_monitor->setmem.cmdw;
1327 }
1328 else
1329 {
1330 len = 1;
1331 cmd = current_monitor->setmem.cmdb;
1332 }
1333
1334 val = extract_unsigned_integer (myaddr, len);
2a8b1fab
JM
1335
1336 if (len == 4)
1337 { hostval = * (unsigned int *) myaddr ;
1338 RDEBUG(("Hostval(%08x) val(%08x)\n",hostval,val)) ;
1339 }
1340
a706069f 1341
012be3ce
DP
1342 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1343 monitor_printf_noecho (cmd, memaddr, val);
7e9576e0
MA
1344 else if (current_monitor->flags & MO_SETMEM_INTERACTIVE)
1345 {
1346
1347 monitor_printf_noecho (cmd, memaddr);
1348
1349 if (current_monitor->setmem.term)
2a8b1fab 1350 { RDEBUG(("EXP setmem.term")) ;
7e9576e0 1351 monitor_expect (current_monitor->setmem.term, NULL, 0);
7e9576e0 1352 monitor_printf ("%x\r", val);
2a8b1fab
JM
1353 }
1354 if (current_monitor->setmem.term_cmd)
1355 { /* Emit this to get out of the memory editing state */
1356 monitor_printf("%s",current_monitor->setmem.term_cmd) ;
1357 /* Drop through to expecting a prompt */
7e9576e0
MA
1358 }
1359 }
012be3ce
DP
1360 else
1361 monitor_printf (cmd, memaddr, val);
1265e2d8 1362
774e5d7f 1363 monitor_expect_prompt (NULL, 0);
1265e2d8 1364
a706069f 1365 return len;
51d6a954
RS
1366}
1367
2a8b1fab 1368
1c3cd1b0
AC
1369static int
1370monitor_write_even_block(memaddr,myaddr,len)
2a8b1fab
JM
1371 CORE_ADDR memaddr ;
1372 char * myaddr ;
1373 int len ;
1374{
1375 unsigned int val ;
1376 int written = 0 ;;
1377 /* Enter the sub mode */
1378 monitor_printf(current_monitor->setmem.cmdl,memaddr) ;
1379 monitor_expect_prompt(NULL,0) ;
1380
1381 while (len)
1382 {
1383 val = extract_unsigned_integer(myaddr,4) ; /* REALLY */
1384 monitor_printf("%x\r",val) ;
1385 myaddr += 4 ;
1386 memaddr += 4 ;
1387 written += 4 ;
1388 RDEBUG((" @ %08x\n",memaddr))
1389 /* If we wanted to, here we could validate the address */
1390 monitor_expect_prompt(NULL,0) ;
1391 }
1392 /* Now exit the sub mode */
1393 monitor_printf (current_monitor->getreg.term_cmd);
1394 monitor_expect_prompt(NULL,0) ;
1395 return written ;
1396}
1397
1398
1399static int monitor_write_memory_bytes(memaddr,myaddr,len)
1400 CORE_ADDR memaddr ;
1401 char * myaddr ;
1402 int len ;
1403{
1404 unsigned char val ;
1405 int written = 0 ;
1406 if (len == 0) return 0 ;
1407 /* Enter the sub mode */
1408 monitor_printf(current_monitor->setmem.cmdb,memaddr) ;
1409 monitor_expect_prompt(NULL,0) ;
1410 while (len)
1411 {
1412 val = *myaddr ;
1413 monitor_printf("%x\r",val) ;
1414 myaddr++ ;
1415 memaddr++ ;
1416 written++ ;
1417 /* If we wanted to, here we could validate the address */
1418 monitor_expect_prompt(NULL,0) ;
1419 len-- ;
1420 }
1421 /* Now exit the sub mode */
1422 monitor_printf (current_monitor->getreg.term_cmd);
1423 monitor_expect_prompt(NULL,0) ;
1424 return written ;
1425}
1426
1427
1c3cd1b0
AC
1428static void
1429longlongendswap (unsigned char * a)
2a8b1fab
JM
1430{
1431 int i,j ;
1432 unsigned char x ;
1433 i = 0 ; j = 7 ;
1434 while (i < 4)
1435 { x = *(a+i) ;
1436 *(a+i) = *(a+j) ;
1437 *(a+j) = x ;
1438 i++ , j-- ;
1439 }
1440}
1441/* Format 32 chars of long long value, advance the pointer */
1442static char * hexlate = "0123456789abcdef" ;
1443static char * longlong_hexchars(unsigned long long value,
1444 char * outbuff )
1445{
1446 if (value == 0) { *outbuff++ = '0' ; return outbuff ; }
1447 else
1448 { static unsigned char disbuf[8] ; /* disassembly buffer */
1449 unsigned char * scan , * limit ; /* loop controls */
1450 unsigned char c , nib ;
1451 int leadzero = 1 ;
1452 scan = disbuf ; limit = scan + 8 ;
1453 { unsigned long long * dp ;
1454 dp = (unsigned long long *) scan ;
1455 *dp = value ;
1456 }
1457 longlongendswap(disbuf) ; /* FIXME: ONly on big endian hosts */
1458 while (scan < limit)
1459 { c = *scan++ ; /* a byte of our long long value */
1460 if (leadzero)
1461 if (c == 0) continue ;
1462 else leadzero = 0 ; /* henceforth we print even zeroes */
1463 nib = c >> 4 ; /* high nibble bits */
1464 *outbuff++ = hexlate[nib] ;
1465 nib = c & 0x0f ; /* low nibble bits */
1466 *outbuff++ = hexlate[nib] ;
1467 }
1468 return outbuff ;
1469 }
1470} /* longlong_hexchars */
1471
1472
1473
1474/* I am only going to call this when writing virtual byte streams.
1475 Which possably entails endian conversions
1476 */
1477static int monitor_write_memory_longlongs(memaddr,myaddr,len)
1478 CORE_ADDR memaddr ;
1479 char * myaddr ;
1480 int len ;
1481{
1482 static char hexstage[20] ; /* At least 16 digits required, plus null */
1483 char * endstring ;
1484 long long * llptr ;
1485 long long value ;
1486 int written = 0 ;
1487 llptr = (unsigned long long *) myaddr ;
1488 if (len == 0 ) return 0 ;
1489 monitor_printf(current_monitor->setmem.cmdll,memaddr) ;
1490 monitor_expect_prompt(NULL,0) ;
1491 while (len >= 8 )
1492 {
1493 value = *llptr ;
1494 endstring = longlong_hexchars(*llptr,hexstage) ;
1495 *endstring = '\0' ; /* NUll terminate for printf */
1496 monitor_printf("%s\r",hexstage) ;
1497 llptr++ ;
1498 memaddr += 8 ;
1499 written += 8 ;
1500 /* If we wanted to, here we could validate the address */
1501 monitor_expect_prompt(NULL,0) ;
1502 len -= 8 ;
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
1511
1512/* ----- MONITOR_WRITE_MEMORY_BLOCK ---------------------------- */
1513/* This is for the large blocks of memory which may occur in downloading.
1514 And for monitors which use interactive entry,
1515 And for monitors which do not have other downloading methods.
1516 Without this, we will end up calling monitor_write_memory many times
1517 and do the entry and exit of the sub mode many times
1518 This currently assumes...
1519 MO_SETMEM_INTERACTIVE
1520 ! MO_NO_ECHO_ON_SETMEM
1521 To use this, the you have to patch the monitor_cmds block with
1522 this function. Otherwise, its not tuned up for use by all
1523 monitor variations.
1524 */
1525
1526static int monitor_write_memory_block(memaddr,myaddr,len)
1527 CORE_ADDR memaddr ;
1528 char * myaddr ;
1529 int len ;
1530{
1531 int written ;
1532 written = 0 ;
1533 /* FIXME: This would be a good place to put the zero test */
1534#if 1
1535 if ((len > 8) && (((len & 0x07)) == 0) && current_monitor->setmem.cmdll)
1536 {
1537 return monitor_write_memory_longlongs(memaddr,myaddr,len) ;
1538 }
1539#endif
1540#if 0
1541 if (len > 4)
1542 {
1543 int sublen ;
1544 written = monitor_write_even_block(memaddr,myaddr,len) ;
1545 /* Adjust calling parameters by written amount */
1546 memaddr += written ;
1547 myaddr += written ;
1548 len -= written ;
1549 }
1550#endif
1551 written = monitor_write_memory_bytes(memaddr,myaddr,len) ;
1552 return written ;
1553}
1554
eba08643
C
1555/* This is an alternate form of monitor_read_memory which is used for monitors
1556 which can only read a single byte/word/etc. at a time. */
1557
1558static int
1559monitor_read_memory_single (memaddr, myaddr, len)
1560 CORE_ADDR memaddr;
2b576293 1561 char *myaddr;
eba08643
C
1562 int len;
1563{
69159fad
SS
1564 unsigned int val;
1565 char membuf[sizeof(int) * 2 + 1];
eba08643
C
1566 char *p;
1567 char *cmd;
1568 int i;
1569
2a8b1fab 1570 RDEBUG(("MON read single\n")) ;
8665f3dc
MS
1571#if 0
1572 /* Can't actually use long longs (nice idea, though). In fact, the
1573 call to strtoul below will fail if it tries to convert a value
1574 that's too big to fit in a long. */
eba08643
C
1575 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1576 {
1577 len = 8;
1578 cmd = current_monitor->getmem.cmdll;
1579 }
8665f3dc
MS
1580 else
1581#endif
1582 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
eba08643
C
1583 {
1584 len = 4;
1585 cmd = current_monitor->getmem.cmdl;
1586 }
1587 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1588 {
1589 len = 2;
1590 cmd = current_monitor->getmem.cmdw;
1591 }
1592 else
1593 {
1594 len = 1;
1595 cmd = current_monitor->getmem.cmdb;
1596 }
1597
15f13cd0 1598 /* Send the examine command. */
eba08643
C
1599
1600 monitor_printf (cmd, memaddr);
1601
15f13cd0
DE
1602 /* If RESP_DELIM is specified, we search for that as a leading
1603 delimiter for the memory value. Otherwise, we just start
1604 searching from the start of the buf. */
eba08643
C
1605
1606 if (current_monitor->getmem.resp_delim)
2a8b1fab
JM
1607 { RDEBUG(("EXP getmem.resp_delim\n")) ;
1608 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1609 }
eba08643 1610
15f13cd0
DE
1611 /* Now, read the appropriate number of hex digits for this loc,
1612 skipping spaces. */
eba08643 1613
15f13cd0 1614 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
012be3ce
DP
1615 if (current_monitor->flags & MO_HEX_PREFIX)
1616 {
1617 int c;
15f13cd0 1618
012be3ce
DP
1619 c = readchar (timeout);
1620 while (c == ' ')
1621 c = readchar (timeout);
1622 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1623 ;
1624 else
15f13cd0
DE
1625 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1626 memaddr, i, membuf, c);
012be3ce 1627 }
eba08643
C
1628 for (i = 0; i < len * 2; i++)
1629 {
1630 int c;
1631
1632 while (1)
1633 {
1634 c = readchar (timeout);
1635 if (isxdigit (c))
1636 break;
1637 if (c == ' ')
1638 continue;
1639
1640 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1641 memaddr, i, membuf, c);
1642 }
1643
1644 membuf[i] = c;
1645 }
1646
1647 membuf[i] = '\000'; /* terminate the number */
1648
1649/* If TERM is present, we wait for that to show up. Also, (if TERM is
1650 present), we will send TERM_CMD if that is present. In any case, we collect
1651 all of the output into buf, and then wait for the normal prompt. */
1652
1653 if (current_monitor->getmem.term)
1654 {
1655 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
1656
1657 if (current_monitor->getmem.term_cmd)
1658 {
1659 monitor_printf (current_monitor->getmem.term_cmd);
1660 monitor_expect_prompt (NULL, 0);
1661 }
1662 }
1663 else
1664 monitor_expect_prompt (NULL, 0); /* get response */
1665
1666 p = membuf;
1667 val = strtoul (membuf, &p, 16);
1668
1669 if (val == 0 && membuf == p)
1670 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.",
1671 memaddr, membuf);
1672
1673 /* supply register stores in target byte order, so swap here */
1674
1675 store_unsigned_integer (myaddr, len, val);
1676
1677 return len;
1678}
1679
7e9576e0
MA
1680/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1681 memory at MEMADDR. Returns length moved. Currently, we do no more
1682 than 16 bytes at a time. */
431b7d5f 1683
1265e2d8
SG
1684static int
1685monitor_read_memory (memaddr, myaddr, len)
51d6a954
RS
1686 CORE_ADDR memaddr;
1687 char *myaddr;
1688 int len;
1689{
69159fad 1690 unsigned int val;
774e5d7f 1691 char buf[512];
1265e2d8 1692 char *p, *p1;
1265e2d8 1693 int resp_len;
a706069f 1694 int i;
7e9576e0
MA
1695 CORE_ADDR dumpaddr;
1696
2a8b1fab
JM
1697 if (remote_debug) printf("MON read block ta(%08x) ha(%08x) %d\n",
1698 (unsigned long) memaddr , (unsigned long)myaddr, len);
1699
7e9576e0
MA
1700 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1701 memaddr = ADDR_BITS_REMOVE (memaddr);
a706069f 1702
eba08643
C
1703 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1704 return monitor_read_memory_single (memaddr, myaddr, len);
1705
a706069f 1706 len = min (len, 16);
1265e2d8 1707
2a8b1fab
JM
1708 /* Some dumpers align the first data with the preceeding 16
1709 byte boundary. Some print blanks and start at the
1710 requested boundary. EXACT_DUMPADDR
1711 */
1712
1713 dumpaddr = (current_monitor->flags & MO_EXACT_DUMPADDR)
1714 ? memaddr : memaddr & ~ 0x0f ;
7e9576e0 1715
15f13cd0 1716 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
774e5d7f
SS
1717 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1718 len = ((memaddr + len) & ~0xf) - memaddr;
1719
15f13cd0 1720 /* send the memory examine command */
1265e2d8 1721
774e5d7f
SS
1722 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1723 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1);
7e9576e0
MA
1724 else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1725 monitor_printf (current_monitor->getmem.cmdb, dumpaddr);
774e5d7f
SS
1726 else
1727 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1265e2d8 1728
15f13cd0
DE
1729 /* If TERM is present, we wait for that to show up. Also, (if TERM
1730 is present), we will send TERM_CMD if that is present. In any
1731 case, we collect all of the output into buf, and then wait for
1732 the normal prompt. */
1265e2d8
SG
1733
1734 if (current_monitor->getmem.term)
431b7d5f 1735 {
774e5d7f 1736 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
1265e2d8
SG
1737
1738 if (resp_len <= 0)
8f078234
SG
1739 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.",
1740 memaddr, resp_len, buf);
1265e2d8
SG
1741
1742 if (current_monitor->getmem.term_cmd)
431b7d5f 1743 {
1265e2d8
SG
1744 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1745 strlen (current_monitor->getmem.term_cmd));
774e5d7f 1746 monitor_expect_prompt (NULL, 0);
1b552670 1747 }
51d6a954 1748 }
1265e2d8 1749 else
774e5d7f
SS
1750 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
1751
1752 p = buf;
1753
15f13cd0
DE
1754 /* If RESP_DELIM is specified, we search for that as a leading
1755 delimiter for the values. Otherwise, we just start searching
1756 from the start of the buf. */
1265e2d8
SG
1757
1758 if (current_monitor->getmem.resp_delim)
1759 {
283dc598
SG
1760 int retval, tmp;
1761 struct re_registers resp_strings;
2a8b1fab 1762 RDEBUG(("MON getmem.resp_delim %s\n",current_monitor->getmem.resp_delim)) ;
283dc598 1763
edc452d0 1764 memset (&resp_strings, 0, sizeof (struct re_registers));
283dc598
SG
1765 tmp = strlen (p);
1766 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1767 &resp_strings);
1768
1769 if (retval < 0)
1770 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1771 memaddr, resp_len, buf);
1772
1773 p += resp_strings.end[0];
1774#if 0
774e5d7f 1775 p = strstr (p, current_monitor->getmem.resp_delim);
1265e2d8 1776 if (!p)
8f078234
SG
1777 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1778 memaddr, resp_len, buf);
1265e2d8 1779 p += strlen (current_monitor->getmem.resp_delim);
283dc598 1780#endif
1265e2d8 1781 }
2a8b1fab 1782 if (remote_debug) printf("MON scanning %d ,%08x '%s'\n",len,p,p) ;
7e9576e0
MA
1783 if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1784 {
2a8b1fab
JM
1785 char c ;
1786 int fetched = 0 ;
7e9576e0 1787 i = len;
2a8b1fab
JM
1788 c = *p ;
1789
1790
1791 while (!(c == '\000' || c == '\n' || c == '\r') && i > 0)
1792 { if (isxdigit (c))
1793 { if ((dumpaddr >= memaddr) && (i > 0))
1794 { val = fromhex (c) * 16 + fromhex (*(p+1));
7e9576e0 1795 *myaddr++ = val;
2a8b1fab 1796 if (remote_debug) printf("[%02x]",val) ;
7e9576e0 1797 --i;
2a8b1fab 1798 fetched++ ;
7e9576e0
MA
1799 }
1800 ++dumpaddr;
1801 ++p;
1802 }
2a8b1fab
JM
1803 ++p; /* skip a blank or other non hex char */
1804 c = *p ;
7e9576e0 1805 }
2a8b1fab
JM
1806 if (fetched == 0) error("Failed to read via monitor") ;
1807 if (remote_debug) printf("\n") ;
1808 return fetched ; /* Return the number of bytes actually read */
7e9576e0 1809 }
2a8b1fab 1810 RDEBUG(("MON scanning bytes\n")) ;
7e9576e0 1811
a706069f
SG
1812 for (i = len; i > 0; i--)
1813 {
774e5d7f
SS
1814 /* Skip non-hex chars, but bomb on end of string and newlines */
1815
1816 while (1)
1817 {
1818 if (isxdigit (*p))
1819 break;
7e9576e0 1820
774e5d7f
SS
1821 if (*p == '\000' || *p == '\n' || *p == '\r')
1822 error ("monitor_read_memory (0x%x): badly terminated response from monitor: %.*s", memaddr, resp_len, buf);
1823 p++;
1824 }
1825
a706069f 1826 val = strtoul (p, &p1, 16);
1265e2d8 1827
a706069f
SG
1828 if (val == 0 && p == p1)
1829 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr,
1830 resp_len, buf);
1265e2d8 1831
a706069f 1832 *myaddr++ = val;
774e5d7f
SS
1833
1834 if (i == 1)
1835 break;
1836
1837 p = p1;
a706069f 1838 }
1265e2d8 1839
a706069f 1840 return len;
51d6a954
RS
1841}
1842
a706069f 1843static int
1265e2d8 1844monitor_xfer_memory (memaddr, myaddr, len, write, target)
51d6a954
RS
1845 CORE_ADDR memaddr;
1846 char *myaddr;
1847 int len;
1848 int write;
1849 struct target_ops *target; /* ignored */
1850{
45993f61 1851 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
51d6a954
RS
1852}
1853
a706069f
SG
1854static void
1855monitor_kill ()
51d6a954
RS
1856{
1857 return; /* ignore attempts to kill target system */
1858}
1859
a706069f
SG
1860/* All we actually do is set the PC to the start address of exec_bfd, and start
1861 the program at that point. */
1862
1863static void
1864monitor_create_inferior (exec_file, args, env)
1865 char *exec_file;
1866 char *args;
1867 char **env;
1868{
1869 if (args && (*args != '\000'))
1870 error ("Args are not supported by the monitor.");
1871
012be3ce 1872 first_time = 1;
a706069f
SG
1873 clear_proceed_status ();
1874 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
1875}
1876
51d6a954
RS
1877/* Clean up when a program exits.
1878 The program actually lives on in the remote processor's RAM, and may be
1879 run again without a download. Don't leave it full of breakpoint
1880 instructions. */
1881
a706069f 1882static void
51d6a954
RS
1883monitor_mourn_inferior ()
1884{
8f078234 1885 unpush_target (targ_ops);
51d6a954
RS
1886 generic_mourn_inferior (); /* Do all the proper things now */
1887}
1888
1265e2d8 1889#define NUM_MONITOR_BREAKPOINTS 8
51d6a954 1890
1265e2d8 1891static CORE_ADDR breakaddr[NUM_MONITOR_BREAKPOINTS] = {0};
51d6a954 1892
431b7d5f
SS
1893/* Tell the monitor to add a breakpoint. */
1894
a706069f 1895static int
51d6a954
RS
1896monitor_insert_breakpoint (addr, shadow)
1897 CORE_ADDR addr;
1898 char *shadow;
1899{
1900 int i;
7e9576e0
MA
1901 unsigned char *bp;
1902 int bplen;
1903
2a8b1fab 1904 RDEBUG(("MON inst bkpt %08x\n",addr))
7e9576e0
MA
1905 if (current_monitor->set_break == NULL)
1906 error ("No set_break defined for this monitor");
1907
1908 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1909 addr = ADDR_BITS_REMOVE (addr);
1910
1911 /* Determine appropriate breakpoint size for this address. */
1912 bp = memory_breakpoint_from_pc (&addr, &bplen);
51d6a954 1913
1265e2d8 1914 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
431b7d5f
SS
1915 {
1916 if (breakaddr[i] == 0)
1917 {
1918 breakaddr[i] = addr;
7e9576e0 1919 monitor_read_memory (addr, shadow, bplen);
f7ce02f4 1920 monitor_printf (current_monitor->set_break, addr);
774e5d7f 1921 monitor_expect_prompt (NULL, 0);
431b7d5f
SS
1922 return 0;
1923 }
f1ca4cbc 1924 }
f1ca4cbc 1925
1265e2d8 1926 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS);
51d6a954
RS
1927}
1928
431b7d5f
SS
1929/* Tell the monitor to remove a breakpoint. */
1930
a706069f 1931static int
51d6a954
RS
1932monitor_remove_breakpoint (addr, shadow)
1933 CORE_ADDR addr;
1934 char *shadow;
1935{
1936 int i;
1937
2a8b1fab 1938 RDEBUG(("MON rmbkpt %08x\n",addr))
7e9576e0
MA
1939 if (current_monitor->clr_break == NULL)
1940 error ("No clr_break defined for this monitor");
1941
1942 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1943 addr = ADDR_BITS_REMOVE (addr);
1944
1265e2d8 1945 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
431b7d5f
SS
1946 {
1947 if (breakaddr[i] == addr)
1948 {
1949 breakaddr[i] = 0;
1950 /* some monitors remove breakpoints based on the address */
7e9576e0 1951 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
f7ce02f4 1952 monitor_printf (current_monitor->clr_break, addr);
7e9576e0
MA
1953 else if (current_monitor->flags & MO_CLR_BREAK_1_BASED)
1954 monitor_printf (current_monitor->clr_break, i + 1);
431b7d5f 1955 else
f7ce02f4 1956 monitor_printf (current_monitor->clr_break, i);
774e5d7f 1957 monitor_expect_prompt (NULL, 0);
431b7d5f
SS
1958 return 0;
1959 }
7804e5bc 1960 }
1265e2d8 1961 fprintf_unfiltered (stderr, "Can't find breakpoint associated with 0x%x\n", addr);
51d6a954
RS
1962 return 1;
1963}
1964
f7ce02f4
DP
1965/* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
1966 an S-record. Return non-zero if the ACK is received properly. */
1967
1968static int
1969monitor_wait_srec_ack ()
1970{
7e9576e0
MA
1971 int i, ch;
1972
1973 if (current_monitor->flags & MO_SREC_ACK_PLUS)
1974 {
1975 return (readchar (timeout) == '+');
1976 }
1977 else if (current_monitor->flags & MO_SREC_ACK_ROTATE)
1978 {
1979 /* Eat two backspaces, a "rotating" char (|/-\), and a space. */
1980 if ((ch = readchar (1)) < 0)
1981 return 0;
1982 if ((ch = readchar (1)) < 0)
1983 return 0;
1984 if ((ch = readchar (1)) < 0)
1985 return 0;
1986 if ((ch = readchar (1)) < 0)
1987 return 0;
1988 }
1989 return 1;
f7ce02f4
DP
1990}
1991
774e5d7f 1992/* monitor_load -- download a file. */
431b7d5f 1993
a706069f
SG
1994static void
1995monitor_load (file, from_tty)
21ed3dcd 1996 char *file;
a706069f 1997 int from_tty;
21ed3dcd 1998{
45993f61 1999 dcache_flush (remote_dcache);
2a8b1fab 2000 RDEBUG(("MON load\n"))
45993f61 2001
774e5d7f
SS
2002 if (current_monitor->load_routine)
2003 current_monitor->load_routine (monitor_desc, file, hashmark);
2004 else
b9ab37f0 2005 { /* The default is ascii S-records */
7e9576e0
MA
2006 int n;
2007 unsigned long load_offset;
2008 char buf[128];
2009
2010 /* enable user to specify address for downloading as 2nd arg to load */
2011 n = sscanf (file, "%s 0x%lx", buf, &load_offset);
2012 if (n > 1)
2013 file = buf;
2014 else
2015 load_offset = 0;
2016
f7ce02f4 2017 monitor_printf (current_monitor->load);
b9ab37f0
MM
2018 if (current_monitor->loadresp)
2019 monitor_expect (current_monitor->loadresp, NULL, 0);
2020
7e9576e0
MA
2021 load_srec (monitor_desc, file, (bfd_vma) load_offset,
2022 32, SREC_ALL, hashmark,
f7ce02f4
DP
2023 current_monitor->flags & MO_SREC_ACK ?
2024 monitor_wait_srec_ack : NULL);
b9ab37f0
MM
2025
2026 monitor_expect_prompt (NULL, 0);
2027 }
21ed3dcd 2028
a706069f 2029/* Finally, make the PC point at the start address */
431b7d5f 2030
45993f61
SC
2031 if (exec_bfd)
2032 write_pc (bfd_get_start_address (exec_bfd));
431b7d5f 2033
a706069f 2034 inferior_pid = 0; /* No process now */
51d6a954 2035
a706069f
SG
2036/* This is necessary because many things were based on the PC at the time that
2037 we attached to the monitor, which is no longer valid now that we have loaded
2038 new code (and just changed the PC). Another way to do this might be to call
2039 normal_stop, except that the stack may not be valid, and things would get
2040 horribly confused... */
51d6a954 2041
a706069f
SG
2042 clear_symtab_users ();
2043}
2044
2045static void
2046monitor_stop ()
2047{
2a8b1fab 2048 RDEBUG(("MON stop\n")) ;
69159fad
SS
2049 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
2050 SERIAL_SEND_BREAK (monitor_desc);
eba08643
C
2051 if (current_monitor->stop)
2052 monitor_printf_noecho (current_monitor->stop);
51d6a954
RS
2053}
2054
431b7d5f
SS
2055/* Put a command string, in args, out to MONITOR. Output from MONITOR
2056 is placed on the users terminal until the prompt is seen. FIXME: We
2057 read the characters ourseleves here cause of a nasty echo. */
2058
8f078234 2059static void
a706069f 2060monitor_command (args, from_tty)
431b7d5f 2061 char *args;
a706069f 2062 int from_tty;
51d6a954 2063{
7804e5bc 2064 char *p;
a706069f
SG
2065 int resp_len;
2066 char buf[1000];
431b7d5f 2067
51d6a954 2068 if (monitor_desc == NULL)
431b7d5f 2069 error ("monitor target not open.");
7804e5bc 2070
f7ce02f4 2071 p = current_monitor->prompt;
774e5d7f 2072
431b7d5f
SS
2073 /* Send the command. Note that if no args were supplied, then we're
2074 just sending the monitor a newline, which is sometimes useful. */
2075
774e5d7f 2076 monitor_printf ("%s\r", (args ? args : ""));
7804e5bc 2077
774e5d7f 2078 resp_len = monitor_expect_prompt (buf, sizeof buf);
a706069f
SG
2079
2080 fputs_unfiltered (buf, gdb_stdout); /* Output the response */
51d6a954
RS
2081}
2082
1b552670 2083/* Convert hex digit A to a number. */
431b7d5f 2084
7e9576e0 2085#if 0
1b552670
RS
2086static int
2087from_hex (a)
2088 int a;
2089{
1b552670
RS
2090 if (a >= '0' && a <= '9')
2091 return a - '0';
2092 if (a >= 'a' && a <= 'f')
2093 return a - 'a' + 10;
2094 if (a >= 'A' && a <= 'F')
2095 return a - 'A' + 10;
1b552670 2096
1265e2d8 2097 error ("Reply contains invalid hex digit 0x%x", a);
1b552670 2098}
7e9576e0
MA
2099#endif
2100
2101char *
2102monitor_get_dev_name ()
2103{
2104 return dev_name;
2105}
1b552670 2106
c8623080
AC
2107static struct target_ops monitor_ops ;
2108
2109static void init_base_monitor_ops(void)
774e5d7f 2110{
c8623080
AC
2111 monitor_ops.to_shortname = NULL;
2112 monitor_ops.to_longname = NULL;
2113 monitor_ops.to_doc = NULL;
2114 monitor_ops.to_open = NULL;
2115 monitor_ops.to_close = monitor_close;
2116 monitor_ops.to_attach = NULL;
2117 monitor_ops.to_detach = monitor_detach;
2118 monitor_ops.to_resume = monitor_resume;
2119 monitor_ops.to_wait = monitor_wait;
2120 monitor_ops.to_fetch_registers = monitor_fetch_registers;
2121 monitor_ops.to_store_registers = monitor_store_registers;
2122 monitor_ops.to_prepare_to_store = monitor_prepare_to_store;
2123 monitor_ops.to_xfer_memory = monitor_xfer_memory;
2124 monitor_ops.to_files_info = monitor_files_info;
2125 monitor_ops.to_insert_breakpoint = monitor_insert_breakpoint;
2126 monitor_ops.to_remove_breakpoint = monitor_remove_breakpoint;
2127 monitor_ops.to_terminal_init = 0;
2128 monitor_ops.to_terminal_inferior = 0;
2129 monitor_ops.to_terminal_ours_for_output = 0;
2130 monitor_ops.to_terminal_ours = 0;
2131 monitor_ops.to_terminal_info = 0;
2132 monitor_ops.to_kill = monitor_kill;
2133 monitor_ops.to_load = monitor_load;
2134 monitor_ops.to_lookup_symbol = 0;
2135 monitor_ops.to_create_inferior = monitor_create_inferior;
2136 monitor_ops.to_mourn_inferior = monitor_mourn_inferior;
2137 monitor_ops.to_can_run = 0;
2138 monitor_ops.to_notice_signals = 0;
2139 monitor_ops.to_thread_alive = 0;
2140 monitor_ops.to_stop = monitor_stop;
2141 monitor_ops.to_stratum = process_stratum;
2142 monitor_ops.DONT_USE = 0;
2143 monitor_ops.to_has_all_memory = 1;
2144 monitor_ops.to_has_memory = 1;
2145 monitor_ops.to_has_stack = 1;
2146 monitor_ops.to_has_registers = 1;
2147 monitor_ops.to_has_execution = 1;
2148 monitor_ops.to_sections = 0;
2149 monitor_ops.to_sections_end = 0;
2150 monitor_ops.to_magic = OPS_MAGIC ;
2151} /* init_monitor_ops */
a706069f
SG
2152
2153/* Init the target_ops structure pointed at by OPS */
2154
2155void
2156init_monitor_ops (ops)
2157 struct target_ops *ops;
2158{
2159 memcpy (ops, &monitor_ops, sizeof monitor_ops);
2160}
2161
431b7d5f
SS
2162/* Define additional commands that are usually only used by monitors. */
2163
51d6a954
RS
2164void
2165_initialize_remote_monitors ()
2166{
c8623080 2167 init_base_monitor_ops() ;
51d6a954
RS
2168 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
2169 (char *)&hashmark,
2170 "Set display of activity while downloading a file.\n\
1265e2d8 2171When enabled, a hashmark \'#\' is displayed.",
51d6a954
RS
2172 &setlist),
2173 &showlist);
2174
51d6a954
RS
2175 add_com ("monitor", class_obscure, monitor_command,
2176 "Send a command to the debug monitor.");
2177}
This page took 0.293149 seconds and 4 git commands to generate.