1 /* Remote debugging interface for boot monitors, for GDB.
2 Copyright 1990, 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
3 Contributed by Cygnus Support. Written by Rob Savoye for Cygnus.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
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.
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,
29 which in turn talks to the target board. */
35 #ifdef ANSI_PROTOTYPES
42 #include <sys/types.h>
51 static int readchar PARAMS ((int timeout));
53 static void monitor_command PARAMS ((char *args, int fromtty));
54 static void monitor_load_srec PARAMS ((char *args));
56 static int monitor_make_srec PARAMS ((char *buffer, int type,
58 unsigned char *myaddr, int len));
60 static void monitor_fetch_register PARAMS ((int regno));
61 static void monitor_store_register PARAMS ((int regno));
63 static void monitor_close PARAMS ((int quitting));
64 static void monitor_detach PARAMS ((char *args, int from_tty));
65 static void monitor_resume PARAMS ((int pid, int step, enum target_signal sig));
66 static void monitor_interrupt PARAMS ((int signo));
67 static void monitor_interrupt_twice PARAMS ((int signo));
68 static void monitor_interrupt_query PARAMS ((void));
69 static void monitor_wait_cleanup PARAMS ((int old_timeout));
71 static int monitor_wait PARAMS ((int pid, struct target_waitstatus *status));
72 static void monitor_fetch_registers PARAMS ((int regno));
73 static void monitor_store_registers PARAMS ((int regno));
74 static void monitor_prepare_to_store PARAMS ((void));
75 static int monitor_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len, int write, struct target_ops *target));
76 static void monitor_files_info PARAMS ((struct target_ops *ops));
77 static int monitor_insert_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
78 static int monitor_remove_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
79 static void monitor_kill PARAMS ((void));
80 static void monitor_load PARAMS ((char *file, int from_tty));
81 static void monitor_mourn_inferior PARAMS ((void));
82 static void monitor_stop PARAMS ((void));
84 static int monitor_read_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
85 static int monitor_write_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
87 static int from_hex PARAMS ((int a));
88 static unsigned long get_hex_word PARAMS ((void));
90 static struct monitor_ops *current_monitor;
92 static int hashmark; /* flag set by "set hash" */
94 static int timeout = 30;
96 static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */
98 static void (*ofunc)(); /* Old SIGINT signal handler */
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
104 static serial_t monitor_desc = NULL;
106 /* Pointer to regexp pattern matching data */
108 static struct re_pattern_buffer register_pattern;
110 /* Element 0 points to start of register name, and element 1 points to the
111 start of the register value. */
113 static struct re_registers register_strings;
115 static char fastmap[256];
117 static int dump_reg_flag; /* Non-zero means do a dump_registers cmd when
118 monitor_wait wakes up. */
120 static DCACHE *remote_dcache;
122 /* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
123 Works just like printf. */
126 #ifdef ANSI_PROTOTYPES
127 monitor_printf_noecho (char *pattern, ...)
129 monitor_printf_noecho (va_alist)
138 va_start (args, pattern);
142 pattern = va_arg (args, char *);
145 vsprintf (sndbuf, pattern, args);
147 if (remote_debug > 0)
148 fputs_unfiltered (sndbuf, gdb_stderr);
150 len = strlen (sndbuf);
152 if (len + 1 > sizeof sndbuf)
155 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
156 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
159 /* monitor_printf -- Send data to monitor and check the echo. Works just like
163 #ifdef ANSI_PROTOTYPES
164 monitor_printf (char *pattern, ...)
166 monitor_printf (va_alist)
175 #ifdef ANSI_PROTOTYPES
176 va_start (args, pattern);
180 pattern = va_arg (args, char *);
183 vsprintf (sndbuf, pattern, args);
185 if (remote_debug > 0)
186 fputs_unfiltered (sndbuf, gdb_stderr);
188 len = strlen (sndbuf);
190 if (len + 1 > sizeof sndbuf)
193 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
194 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
196 for (i = 0; i < len; i++)
199 c = readchar (timeout);
203 /* Don't fail if we sent a ^C, they're never echoed */
204 if (sndbuf[i] == '\003')
207 if (sndbuf[i] == '\r'
211 warning ("monitor_printf: Bad echo. Sent: \"%s\", Got: \"%.*s%c\".",
212 sndbuf, i, sndbuf, c);
217 /* Read a character from the remote system, doing all the fancy
226 c = SERIAL_READCHAR (monitor_desc, timeout);
228 if (remote_debug > 0)
229 fputc_unfiltered (c, gdb_stderr);
234 if (c == SERIAL_TIMEOUT)
235 #ifdef MAINTENANCE_CMDS
236 if (in_monitor_wait) /* Watchdog went off */
238 target_mourn_inferior ();
239 error ("Watchdog has expired. Target detached.\n");
243 error ("Timeout reading from remote system.");
245 perror_with_name ("remote-monitor");
248 /* Scan input from the remote system, until STRING is found. If BUF is non-
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. */
256 monitor_expect (string, buf, buflen)
262 int obuflen = buflen;
277 c = readchar (timeout);
282 c = readchar (timeout);
293 return obuflen - buflen;
308 /* Keep discarding input until we see the MONITOR prompt.
310 The convention for dealing with the prompt is that you
312 o *then* wait for the prompt.
314 Thus the last thing that a procedure does with the serial line
315 will be an monitor_expect_prompt(). Exception: monitor_resume does not
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
324 monitor_expect_prompt (buf, buflen)
328 return monitor_expect (PROMPT, buf, buflen);
331 /* Get N 32-bit words from remote, each preceded by a space, and put
332 them in registers starting at REGNO. */
342 ch = readchar (timeout);
347 for (i = 7; i >= 1; i--)
349 ch = readchar (timeout);
352 val = (val << 4) | from_hex (ch);
358 /* Open a connection to a remote debugger. NAME is the filename used
359 for communication. */
361 static char *dev_name;
362 static struct target_ops *targ_ops;
365 monitor_open (args, mon_ops, from_tty)
367 struct monitor_ops *mon_ops;
374 if (mon_ops->magic != MONITOR_OPS_MAGIC)
375 error ("Magic number of monitor_ops struct wrong.");
377 targ_ops = mon_ops->target;
378 name = targ_ops->to_shortname;
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);
384 target_preopen (from_tty);
386 /* Setup pattern for register dump */
388 if (mon_ops->register_pattern)
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),
400 error ("Can't compiler register pattern string: %s!", val);
401 re_compile_fastmap (®ister_pattern);
404 unpush_target (targ_ops);
408 dev_name = strsave (args);
410 monitor_desc = SERIAL_OPEN (dev_name);
413 perror_with_name (dev_name);
417 if (SERIAL_SETBAUDRATE (monitor_desc, baud_rate))
419 SERIAL_CLOSE (monitor_desc);
420 perror_with_name (dev_name);
424 SERIAL_RAW (monitor_desc);
426 SERIAL_FLUSH_INPUT (monitor_desc);
428 /* some systems only work with 2 stop bits */
430 SERIAL_SETSTOPBITS (monitor_desc, mon_ops->stopbits);
432 current_monitor = mon_ops;
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. */
437 if (current_monitor->stop)
440 monitor_expect_prompt (NULL, 0);
443 /* wake up the monitor and see if it's alive */
444 for (p = mon_ops->init; *p != NULL; p++)
447 monitor_expect_prompt (NULL, 0);
450 SERIAL_FLUSH_INPUT (monitor_desc);
452 /* Remove all breakpoints */
454 if (mon_ops->clr_all_break)
456 monitor_printf (mon_ops->clr_all_break);
457 monitor_expect_prompt (NULL, 0);
461 printf_unfiltered ("Remote target %s connected to %s\n", name, dev_name);
463 push_target (targ_ops);
465 inferior_pid = 42000; /* Make run command think we are busy... */
467 /* Give monitor_wait something to read */
469 monitor_printf (current_monitor->line_term);
471 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory);
476 /* Close out all files and local state before this target loses
480 monitor_close (quitting)
484 SERIAL_CLOSE (monitor_desc);
488 /* Terminate the open connection to the remote debugger. Use this
489 when you want to detach and do something else with your gdb. */
492 monitor_detach (args, from_tty)
496 pop_target (); /* calls monitor_close to do the real work */
498 printf_unfiltered ("Ending remote %s debugging\n", target_shortname);
501 /* Convert VALSTR into the target byte-ordered value of REGNO and store it. */
504 monitor_supply_register (regno, valstr)
508 unsigned LONGEST val;
509 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
512 val = strtoul (valstr, &p, 16);
514 if (val == 0 && valstr == p)
515 error ("monitor_supply_register (%d): bad value from monitor: %s.",
518 /* supply register stores in target byte order, so swap here */
520 store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
522 supply_register (regno, regbuf);
527 /* Tell the remote machine to resume. */
530 monitor_resume (pid, step, sig)
532 enum target_signal sig;
534 dcache_flush (remote_dcache);
536 monitor_printf (STEP_CMD);
539 monitor_printf (CONT_CMD);
540 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
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. */
551 parse_register_dump (buf, len)
557 int regnamelen, vallen;
560 if (re_search (®ister_pattern, buf, len, 0, len,
561 ®ister_strings) == -1)
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];
569 current_monitor->supply_register (regname, regnamelen, val, vallen);
571 buf += register_strings.end[0];
572 len -= register_strings.end[0];
576 /* Send ^C to target to halt it. Target will respond, and send us a
580 monitor_interrupt (signo)
583 /* If this doesn't work, try more severe steps. */
584 signal (signo, monitor_interrupt_twice);
587 printf_unfiltered ("monitor_interrupt called\n");
592 /* The user typed ^C twice. */
595 monitor_interrupt_twice (signo)
598 signal (signo, ofunc);
600 monitor_interrupt_query ();
602 signal (signo, monitor_interrupt);
605 /* Ask the user what to do when an interrupt is received. */
608 monitor_interrupt_query ()
610 target_terminal_ours ();
612 if (query ("Interrupted while waiting for the program.\n\
613 Give up (and stop debugging it)? "))
615 target_mourn_inferior ();
616 return_to_top_level (RETURN_QUIT);
619 target_terminal_inferior ();
623 monitor_wait_cleanup (old_timeout)
626 timeout = old_timeout;
627 signal (SIGINT, ofunc);
631 /* Wait until the remote machine stops, then return, storing status in
632 status just as `wait' would. */
635 monitor_wait (pid, status)
637 struct target_waitstatus *status;
639 int old_timeout = timeout;
642 struct cleanup *old_chain;
644 status->kind = TARGET_WAITKIND_EXITED;
645 status->value.integer = 0;
647 old_chain = make_cleanup (monitor_wait_cleanup, old_timeout);
649 #ifdef MAINTENANCE_CMDS
651 timeout = watchdog > 0 ? watchdog : -1;
653 timeout = -1; /* Don't time out -- user program is running. */
656 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
660 resp_len = monitor_expect_prompt (buf, sizeof (buf));
663 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
665 while (resp_len < 0);
667 signal (SIGINT, ofunc);
669 timeout = old_timeout;
671 if (dump_reg_flag && current_monitor->dump_registers)
675 monitor_printf (current_monitor->dump_registers);
676 resp_len = monitor_expect_prompt (buf, sizeof (buf));
679 if (current_monitor->register_pattern)
680 parse_register_dump (buf, resp_len);
682 status->kind = TARGET_WAITKIND_STOPPED;
683 status->value.sig = TARGET_SIGNAL_TRAP;
685 discard_cleanups (old_chain);
692 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
696 monitor_fetch_register (regno)
700 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
701 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
704 name = REGNAMES (regno);
708 supply_register (regno, zerobuf);
712 /* send the register examine command */
714 monitor_printf (current_monitor->getreg.cmd, name);
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
720 if (current_monitor->getreg.resp_delim)
721 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
723 /* Now, read the appropriate number of hex digits for this register, skipping
726 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
732 c = readchar (timeout);
738 error ("monitor_fetch_register (%d): bad response from monitor: %.*s%c.",
739 regno, i, regbuf, c);
745 regbuf[i] = '\000'; /* terminate the number */
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. */
751 if (current_monitor->getreg.term)
753 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
755 if (current_monitor->getreg.term_cmd)
757 monitor_printf (current_monitor->getreg.term_cmd);
758 monitor_expect_prompt (NULL, 0);
762 monitor_expect_prompt (NULL, 0); /* get response */
764 monitor_supply_register (regno, regbuf);
767 /* Read the remote registers into the block regs. */
769 static void monitor_dump_regs ()
771 if (current_monitor->dump_registers)
775 monitor_printf (current_monitor->dump_registers);
776 resp_len = monitor_expect_prompt (buf, sizeof (buf));
777 parse_register_dump (buf, resp_len);
780 abort(); /* Need some way to read registers */
784 monitor_fetch_registers (regno)
787 if (current_monitor->getreg.cmd)
791 monitor_fetch_register (regno);
795 for (regno = 0; regno < NUM_REGS; regno++)
796 monitor_fetch_register (regno);
799 monitor_dump_regs ();
803 /* Store register REGNO, or all if REGNO == 0. Return errno value. */
806 monitor_store_register (regno)
810 unsigned LONGEST val;
812 name = REGNAMES (regno);
816 val = read_register (regno);
818 /* send the register deposit command */
820 monitor_printf (current_monitor->setreg.cmd, name, val);
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...) */
827 monitor_expect_prompt (NULL, 0);
830 /* Store the remote registers. */
833 monitor_store_registers (regno)
838 monitor_store_register (regno);
842 for (regno = 0; regno < NUM_REGS; regno++)
843 monitor_store_register (regno);
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
853 monitor_prepare_to_store ()
855 /* Do nothing, since we can store individual regs */
859 monitor_files_info (ops)
860 struct target_ops *ops;
862 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
866 monitor_write_memory (memaddr, myaddr, len)
868 unsigned char *myaddr;
871 unsigned LONGEST val;
875 /* Use memory fill command for leading 0 bytes. */
877 if (current_monitor->fill)
879 for (i = 0; i < len; i++)
883 if (i > 4) /* More than 4 zeros is worth doing */
885 if (current_monitor->flags & MO_FILL_USES_ADDR)
886 monitor_printf (current_monitor->fill, memaddr, memaddr + i, 0);
888 monitor_printf (current_monitor->fill, memaddr, i, 0);
890 monitor_expect_prompt (NULL, 0);
896 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
899 cmd = current_monitor->setmem.cmdll;
901 else if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
904 cmd = current_monitor->setmem.cmdl;
906 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
909 cmd = current_monitor->setmem.cmdw;
914 cmd = current_monitor->setmem.cmdb;
917 val = extract_unsigned_integer (myaddr, len);
919 monitor_printf (cmd, memaddr, val);
921 monitor_expect_prompt (NULL, 0);
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. */
930 monitor_read_memory_single (memaddr, myaddr, len)
932 unsigned char *myaddr;
935 unsigned LONGEST val;
936 char membuf[sizeof(LONGEST) * 2 + 1];
941 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
944 cmd = current_monitor->getmem.cmdll;
946 else if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
949 cmd = current_monitor->getmem.cmdl;
951 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
954 cmd = current_monitor->getmem.cmdw;
959 cmd = current_monitor->getmem.cmdb;
962 /* Send the examine command. */
964 monitor_printf (cmd, memaddr);
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
970 if (current_monitor->getmem.resp_delim)
971 monitor_expect (current_monitor->getmem.resp_delim, NULL, 0);
973 /* Now, read the appropriate number of hex digits for this loc, skipping
976 for (i = 0; i < len * 2; i++)
982 c = readchar (timeout);
988 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
989 memaddr, i, membuf, c);
995 membuf[i] = '\000'; /* terminate the number */
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. */
1001 if (current_monitor->getmem.term)
1003 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
1005 if (current_monitor->getmem.term_cmd)
1007 monitor_printf (current_monitor->getmem.term_cmd);
1008 monitor_expect_prompt (NULL, 0);
1012 monitor_expect_prompt (NULL, 0); /* get response */
1015 val = strtoul (membuf, &p, 16);
1017 if (val == 0 && membuf == p)
1018 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.",
1021 /* supply register stores in target byte order, so swap here */
1023 store_unsigned_integer (myaddr, len, val);
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
1033 monitor_read_memory (memaddr, myaddr, len)
1038 unsigned LONGEST val;
1039 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
1046 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1047 return monitor_read_memory_single (memaddr, myaddr, len);
1049 len = min (len, 16);
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;
1055 /* send the memory examine command */
1057 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1058 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1);
1060 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
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. */
1066 if (current_monitor->getmem.term)
1068 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
1071 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.",
1072 memaddr, resp_len, buf);
1074 if (current_monitor->getmem.term_cmd)
1076 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1077 strlen (current_monitor->getmem.term_cmd));
1078 monitor_expect_prompt (NULL, 0);
1082 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
1086 /* If RESP_DELIM is specified, we search for that as a leading delimiter for
1087 the values. Otherwise, we just start searching from the start of the buf.
1090 if (current_monitor->getmem.resp_delim)
1092 p = strstr (p, current_monitor->getmem.resp_delim);
1094 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1095 memaddr, resp_len, buf);
1096 p += strlen (current_monitor->getmem.resp_delim);
1099 for (i = len; i > 0; i--)
1101 /* Skip non-hex chars, but bomb on end of string and newlines */
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);
1112 val = strtoul (p, &p1, 16);
1114 if (val == 0 && p == p1)
1115 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr,
1130 monitor_xfer_memory (memaddr, myaddr, len, write, target)
1135 struct target_ops *target; /* ignored */
1137 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
1143 return; /* ignore attempts to kill target system */
1146 /* All we actually do is set the PC to the start address of exec_bfd, and start
1147 the program at that point. */
1150 monitor_create_inferior (exec_file, args, env)
1155 if (args && (*args != '\000'))
1156 error ("Args are not supported by the monitor.");
1158 clear_proceed_status ();
1159 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
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
1168 monitor_mourn_inferior ()
1170 unpush_target (targ_ops);
1171 generic_mourn_inferior (); /* Do all the proper things now */
1174 #define NUM_MONITOR_BREAKPOINTS 8
1176 static CORE_ADDR breakaddr[NUM_MONITOR_BREAKPOINTS] = {0};
1178 /* Tell the monitor to add a breakpoint. */
1181 monitor_insert_breakpoint (addr, shadow)
1186 static unsigned char break_insn[] = BREAKPOINT;
1188 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1190 if (breakaddr[i] == 0)
1192 breakaddr[i] = addr;
1193 monitor_read_memory (addr, shadow, sizeof (break_insn));
1194 monitor_printf (SET_BREAK_CMD, addr);
1195 monitor_expect_prompt (NULL, 0);
1200 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS);
1203 /* Tell the monitor to remove a breakpoint. */
1206 monitor_remove_breakpoint (addr, shadow)
1212 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1214 if (breakaddr[i] == addr)
1217 /* some monitors remove breakpoints based on the address */
1218 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
1219 monitor_printf (CLR_BREAK_CMD, addr);
1221 monitor_printf (CLR_BREAK_CMD, i);
1222 monitor_expect_prompt (NULL, 0);
1226 fprintf_unfiltered (stderr, "Can't find breakpoint associated with 0x%x\n", addr);
1230 /* monitor_load -- download a file. */
1233 monitor_load (file, from_tty)
1237 dcache_flush (remote_dcache);
1239 if (current_monitor->load_routine)
1240 current_monitor->load_routine (monitor_desc, file, hashmark);
1242 monitor_load_srec (file);
1244 /* Finally, make the PC point at the start address */
1247 write_pc (bfd_get_start_address (exec_bfd));
1249 inferior_pid = 0; /* No process now */
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... */
1257 clear_symtab_users ();
1263 if (current_monitor->stop)
1264 monitor_printf_noecho (current_monitor->stop);
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. */
1272 monitor_command (args, from_tty)
1280 if (monitor_desc == NULL)
1281 error ("monitor target not open.");
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. */
1288 monitor_printf ("%s\r", (args ? args : ""));
1290 resp_len = monitor_expect_prompt (buf, sizeof buf);
1292 fputs_unfiltered (buf, gdb_stdout); /* Output the response */
1295 /* Download a binary file by converting it to S records. */
1298 monitor_load_srec (args)
1303 char *buffer, srec[1024];
1305 int srec_frame = 32;
1308 buffer = alloca (srec_frame * 2 + 256);
1310 abfd = bfd_openr (args, 0);
1313 printf_filtered ("Unable to open file %s\n", args);
1317 if (bfd_check_format (abfd, bfd_object) == 0)
1319 printf_filtered ("File is not an object file\n");
1323 monitor_printf (LOAD_CMD); /* tell the monitor to load */
1324 if (current_monitor->loadresp)
1325 monitor_expect (current_monitor->loadresp, NULL, 0);
1327 for (s = abfd->sections; s; s = s->next)
1329 if (s->flags & SEC_LOAD)
1333 printf_filtered ("%s\t: 0x%4x .. 0x%4x ", s->name, s->vma,
1334 s->vma + s->_raw_size);
1335 gdb_flush (gdb_stdout);
1337 for (i = 0; i < s->_raw_size; i += numbytes)
1339 numbytes = min (srec_frame, s->_raw_size - i);
1341 bfd_get_section_contents (abfd, s, buffer, i, numbytes);
1343 reclen = monitor_make_srec (srec, 'd', s->vma + i, buffer, numbytes);
1345 monitor_printf_noecho ("%.*s\r", reclen, srec);
1349 putchar_unfiltered ('#');
1350 gdb_flush (gdb_stdout);
1352 } /* Per-packet (or S-record) loop */
1354 putchar_unfiltered ('\n');
1355 } /* Loadable sections */
1358 putchar_unfiltered ('\n');
1360 /* Write a type 7 terminator record. no data for a type 7, and there
1361 is no data, so len is 0. */
1363 reclen = monitor_make_srec (srec, 't', abfd->start_address, NULL, 0);
1365 monitor_printf_noecho ("%.*s\r", reclen, srec);
1367 monitor_printf_noecho ("\r\r"); /* Some monitors need these to wake up */
1369 monitor_expect_prompt (NULL, 0);
1371 SERIAL_FLUSH_INPUT (monitor_desc);
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:
1379 * byte count-+ address
1380 * start ---+ | | data +- checksum
1382 * S01000006F6B692D746573742E73726563E4
1383 * S315000448600000000000000000FC00005900000000E9
1384 * S31A0004000023C1400037DE00F023604000377B009020825000348D
1385 * S30B0004485A0000000000004E
1388 * S<type><length><address><data><checksum>
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.
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
1406 * is the start address of the data following, or in the case of
1407 * a termination record, the start address of the image
1411 * is the sum of all the raw byte data in the record, from the length
1412 * upwards, modulo 256 and subtracted from 255.
1414 * This routine returns the length of the S-record.
1419 monitor_make_srec (buffer, type, memaddr, myaddr, len)
1423 unsigned char *myaddr;
1426 unsigned char checksum;
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 */
1439 if (memaddr >= 0xffffff)
1441 else if (memaddr >= 0xffffff)
1449 type_code = term_code_table[addr_size];
1452 type_code = data_code_table[addr_size];
1457 /* Create the header for the srec. addr_size is the number of bytes in the address,
1458 and 1 is the number of bytes in the count. */
1463 sprintf (buf, "S%d%02X%08X", type_code, len + addr_size + 1, memaddr);
1467 sprintf (buf, "S%d%02X%06X", type_code, len + addr_size + 1, memaddr);
1471 sprintf (buf, "S%d%02X%04X", type_code, len + addr_size + 1, memaddr);
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
1480 checksum += (len + addr_size + 1 /* Packet length */
1481 + (memaddr & 0xff) /* Address... */
1482 + ((memaddr >> 8) & 0xff)
1483 + ((memaddr >> 16) & 0xff)
1484 + ((memaddr >> 24) & 0xff));
1486 /* build the srecord */
1487 for (i = 0; i < len; i++)
1489 *buf++ = hextab [myaddr[i] >> 4];
1490 *buf++ = hextab [myaddr[i] & 0xf];
1491 checksum += myaddr[i];
1494 checksum = ~checksum;
1496 *buf++ = hextab[checksum >> 4];
1497 *buf++ = hextab[checksum & 0xf];
1499 return buf - buffer;
1502 /* Convert hex digit A to a number. */
1508 if (a >= '0' && a <= '9')
1510 if (a >= 'a' && a <= 'f')
1511 return a - 'a' + 10;
1512 if (a >= 'A' && a <= 'F')
1513 return a - 'A' + 10;
1515 error ("Reply contains invalid hex digit 0x%x", a);
1518 static struct target_ops monitor_ops =
1520 NULL, /* to_shortname */
1521 NULL, /* to_longname */
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 */
1547 0, /* to_notice_signals */
1548 monitor_stop, /* to_stop */
1549 process_stratum, /* to_stratum */
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 */
1557 0, /* sections_end */
1558 OPS_MAGIC /* to_magic */
1561 /* Init the target_ops structure pointed at by OPS */
1564 init_monitor_ops (ops)
1565 struct target_ops *ops;
1567 memcpy (ops, &monitor_ops, sizeof monitor_ops);
1570 /* Define additional commands that are usually only used by monitors. */
1573 _initialize_remote_monitors ()
1575 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
1577 "Set display of activity while downloading a file.\n\
1578 When enabled, a hashmark \'#\' is displayed.",
1582 add_com ("monitor", class_obscure, monitor_command,
1583 "Send a command to the debug monitor.");