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