1 /* Remote debugging interface for boot monitors, for GDB.
2 Copyright 1990, 1991, 1992, 1993, 1995, 1996
3 Free Software Foundation, Inc.
4 Contributed by Cygnus Support. Written by Rob Savoye for Cygnus.
5 Resurrected from the ashes by Stu Grossman.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
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.
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,
31 which in turn talks to the target board. */
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 */
44 #ifdef ANSI_PROTOTYPES
51 #include "gdb_string.h"
52 #include <sys/types.h>
58 #include "gnu-regex.h"
62 static int readchar PARAMS ((int timeout));
64 static void monitor_command PARAMS ((char *args, int fromtty));
66 static void monitor_fetch_register PARAMS ((int regno));
67 static void monitor_store_register PARAMS ((int regno));
69 static void monitor_detach PARAMS ((char *args, int from_tty));
70 static void monitor_resume PARAMS ((int pid, int step, enum target_signal sig));
71 static void monitor_interrupt PARAMS ((int signo));
72 static void monitor_interrupt_twice PARAMS ((int signo));
73 static void monitor_interrupt_query PARAMS ((void));
74 static void monitor_wait_cleanup PARAMS ((int old_timeout));
76 static int monitor_wait PARAMS ((int pid, struct target_waitstatus *status));
77 static void monitor_fetch_registers PARAMS ((int regno));
78 static void monitor_store_registers PARAMS ((int regno));
79 static void monitor_prepare_to_store PARAMS ((void));
80 static int monitor_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len, int write, struct target_ops *target));
81 static void monitor_files_info PARAMS ((struct target_ops *ops));
82 static int monitor_insert_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
83 static int monitor_remove_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
84 static void monitor_kill PARAMS ((void));
85 static void monitor_load PARAMS ((char *file, int from_tty));
86 static void monitor_mourn_inferior PARAMS ((void));
87 static void monitor_stop PARAMS ((void));
88 static void monitor_debug PARAMS ((char *prefix, char *string, char *suffix));
90 static int monitor_read_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
91 static int monitor_write_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
93 static int monitor_expect_regexp PARAMS ((struct re_pattern_buffer *pat,
94 char *buf, int buflen));
95 static int from_hex PARAMS ((int a));
96 static unsigned long get_hex_word PARAMS ((void));
98 static struct monitor_ops *current_monitor;
100 static int hashmark; /* flag set by "set hash" */
102 static int timeout = 30;
104 static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */
106 static void (*ofunc)(); /* Old SIGINT signal handler */
108 /* Descriptor for I/O to remote machine. Initialize it to NULL so
109 that monitor_open knows that we don't have a file open when the
112 static serial_t monitor_desc = NULL;
114 /* Pointer to regexp pattern matching data */
116 static struct re_pattern_buffer register_pattern;
117 static char register_fastmap[256];
119 static struct re_pattern_buffer getmem_resp_delim_pattern;
120 static char getmem_resp_delim_fastmap[256];
122 static int dump_reg_flag; /* Non-zero means do a dump_registers cmd when
123 monitor_wait wakes up. */
125 static DCACHE *remote_dcache;
126 static int first_time=0; /* is this the first time we're executing after
127 gaving created the child proccess? */
129 /* monitor_debug is like fputs_unfiltered, except it prints special
130 characters in printable fashion. */
133 monitor_debug (prefix, string, suffix)
140 /* print prefix and suffix after each line */
141 static int new_line=1;
142 static char *prev_prefix = "";
143 static char *prev_suffix = "";
145 /* if the prefix is changing, print the previous suffix, a new line,
146 and the new prefix */
147 if (strcmp(prev_prefix, prefix) != 0 && !new_line)
149 fputs_unfiltered (prev_suffix, gdb_stderr);
150 fputs_unfiltered ("\n", gdb_stderr);
151 fputs_unfiltered (prefix, gdb_stderr);
153 prev_prefix = prefix;
154 prev_suffix = suffix;
156 /* print prefix if last char was a newline*/
159 fputs_unfiltered (prefix, gdb_stderr);
162 if (strchr(string,'\n')) /* save state for next call */
165 while ((ch = *string++) != '\0')
170 fputc_unfiltered (ch, gdb_stderr);
173 fprintf_unfiltered (gdb_stderr, "\\%03o", ch);
177 case '\\': fputs_unfiltered ("\\\\", gdb_stderr); break;
178 case '\b': fputs_unfiltered ("\\b", gdb_stderr); break;
179 case '\f': fputs_unfiltered ("\\f", gdb_stderr); break;
180 case '\n': fputs_unfiltered ("\\n", gdb_stderr); break;
181 case '\r': fputs_unfiltered ("\\r", gdb_stderr); break;
182 case '\t': fputs_unfiltered ("\\t", gdb_stderr); break;
183 case '\v': fputs_unfiltered ("\\v", gdb_stderr); break;
187 if (new_line==1) { /* print suffix if last char was a newline */
188 fputs_unfiltered (suffix, gdb_stderr);
189 fputs_unfiltered ("\n", gdb_stderr);
193 /* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
194 Works just like printf. */
197 #ifdef ANSI_PROTOTYPES
198 monitor_printf_noecho (char *pattern, ...)
200 monitor_printf_noecho (va_alist)
209 va_start (args, pattern);
213 pattern = va_arg (args, char *);
216 vsprintf (sndbuf, pattern, args);
218 if (remote_debug > 0)
219 monitor_debug ("sent -->", sndbuf, "<--");
221 len = strlen (sndbuf);
223 if (len + 1 > sizeof sndbuf)
226 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
227 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
230 /* monitor_printf -- Send data to monitor and check the echo. Works just like
234 #ifdef ANSI_PROTOTYPES
235 monitor_printf (char *pattern, ...)
237 monitor_printf (va_alist)
245 #ifdef ANSI_PROTOTYPES
246 va_start (args, pattern);
250 pattern = va_arg (args, char *);
253 vsprintf (sndbuf, pattern, args);
255 if (remote_debug > 0)
256 monitor_debug ("sent -->", sndbuf, "<--");
258 len = strlen (sndbuf);
260 if (len + 1 > sizeof sndbuf)
263 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
264 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
266 /* We used to expect that the next immediate output was the characters we
267 just output, but sometimes some extra junk appeared before the characters
268 we expected, like an extra prompt, or a portmaster sending telnet negotiations.
269 So, just start searching for what we sent, and skip anything unknown. */
270 monitor_expect (sndbuf, (char *)0, 0);
273 /* Read a character from the remote system, doing all the fancy
281 static enum { last_random, last_nl, last_cr, last_crnl } state = last_random;
287 c = SERIAL_READCHAR (monitor_desc, timeout);
292 if (remote_debug > 0)
297 monitor_debug ("read -->", buf, "<--");
301 /* Canonicialize \n\r combinations into one \r */
302 if ((current_monitor->flags & MO_HANDLE_NL) != 0)
304 if ((c == '\r' && state == last_nl)
305 || (c == '\n' && state == last_cr))
326 if (c == SERIAL_TIMEOUT)
327 #ifdef MAINTENANCE_CMDS
328 if (in_monitor_wait) /* Watchdog went off */
330 target_mourn_inferior ();
331 error ("Watchdog has expired. Target detached.\n");
335 error ("Timeout reading from remote system.");
337 perror_with_name ("remote-monitor");
340 /* Scan input from the remote system, until STRING is found. If BUF is non-
341 zero, then collect input until we have collected either STRING or BUFLEN-1
342 chars. In either case we terminate BUF with a 0. If input overflows BUF
343 because STRING can't be found, return -1, else return number of chars in BUF
344 (minus the terminating NUL). Note that in the non-overflow case, STRING
345 will be at the end of BUF. */
348 monitor_expect (string, buf, buflen)
354 int obuflen = buflen;
369 c = readchar (timeout);
376 c = readchar (timeout);
378 /* Don't expect any ^C sent to be echoed */
380 if (*p == '\003' || c == *p)
390 return obuflen - buflen;
405 /* Search for a regexp. */
408 monitor_expect_regexp (pat, buf, buflen)
409 struct re_pattern_buffer *pat;
420 mybuf = alloca (1024);
429 if (p - mybuf >= buflen)
430 { /* Buffer about to overflow */
432 /* On overflow, we copy the upper half of the buffer to the lower half. Not
433 great, but it usually works... */
435 memcpy (mybuf, mybuf + buflen / 2, buflen / 2);
436 p = mybuf + buflen / 2;
439 *p++ = readchar (timeout);
441 retval = re_search (pat, mybuf, p - mybuf, 0, p - mybuf, NULL);
447 /* Keep discarding input until we see the MONITOR prompt.
449 The convention for dealing with the prompt is that you
451 o *then* wait for the prompt.
453 Thus the last thing that a procedure does with the serial line
454 will be an monitor_expect_prompt(). Exception: monitor_resume does not
455 wait for the prompt, because the terminal is being handed over
456 to the inferior. However, the next thing which happens after that
457 is a monitor_wait which does wait for the prompt.
458 Note that this includes abnormal exit, e.g. error(). This is
459 necessary to prevent getting into states from which we can't
463 monitor_expect_prompt (buf, buflen)
467 return monitor_expect (current_monitor->prompt, buf, buflen);
470 /* Get N 32-bit words from remote, each preceded by a space, and put
471 them in registers starting at REGNO. */
481 ch = readchar (timeout);
486 for (i = 7; i >= 1; i--)
488 ch = readchar (timeout);
491 val = (val << 4) | from_hex (ch);
498 compile_pattern (pattern, compiled_pattern, fastmap)
500 struct re_pattern_buffer *compiled_pattern;
506 compiled_pattern->fastmap = fastmap;
508 tmp = re_set_syntax (RE_SYNTAX_EMACS);
509 val = re_compile_pattern (pattern,
515 error ("compile_pattern: Can't compile pattern string `%s': %s!", pattern, val);
518 re_compile_fastmap (compiled_pattern);
521 /* Open a connection to a remote debugger. NAME is the filename used
522 for communication. */
524 static char *dev_name;
525 static struct target_ops *targ_ops;
528 monitor_open (args, mon_ops, from_tty)
530 struct monitor_ops *mon_ops;
537 if (mon_ops->magic != MONITOR_OPS_MAGIC)
538 error ("Magic number of monitor_ops struct wrong.");
540 targ_ops = mon_ops->target;
541 name = targ_ops->to_shortname;
544 error ("Use `target %s DEVICE-NAME' to use a serial port, or \n\
545 `target %s HOST-NAME:PORT-NUMBER' to use a network connection.", name, name);
547 target_preopen (from_tty);
549 /* Setup pattern for register dump */
551 if (mon_ops->register_pattern)
552 compile_pattern (mon_ops->register_pattern, ®ister_pattern,
555 if (mon_ops->getmem.resp_delim)
556 compile_pattern (mon_ops->getmem.resp_delim, &getmem_resp_delim_pattern,
557 getmem_resp_delim_fastmap);
559 unpush_target (targ_ops);
563 dev_name = strsave (args);
565 monitor_desc = SERIAL_OPEN (dev_name);
568 perror_with_name (dev_name);
572 if (SERIAL_SETBAUDRATE (monitor_desc, baud_rate))
574 SERIAL_CLOSE (monitor_desc);
575 perror_with_name (dev_name);
579 SERIAL_RAW (monitor_desc);
581 SERIAL_FLUSH_INPUT (monitor_desc);
583 /* some systems only work with 2 stop bits */
585 SERIAL_SETSTOPBITS (monitor_desc, mon_ops->stopbits);
587 current_monitor = mon_ops;
589 /* See if we can wake up the monitor. First, try sending a stop sequence,
590 then send the init strings. Last, remove all breakpoints. */
592 if (current_monitor->stop)
595 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
597 monitor_expect_prompt (NULL, 0);
601 /* wake up the monitor and see if it's alive */
602 for (p = mon_ops->init; *p != NULL; p++)
604 /* Some of the characters we send may not be echoed,
605 but we hope to get a prompt at the end of it all. */
607 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
610 monitor_printf_noecho (*p);
611 monitor_expect_prompt (NULL, 0);
614 SERIAL_FLUSH_INPUT (monitor_desc);
616 /* Remove all breakpoints */
618 if (mon_ops->clr_all_break)
620 monitor_printf (mon_ops->clr_all_break);
621 monitor_expect_prompt (NULL, 0);
625 printf_unfiltered ("Remote target %s connected to %s\n", name, dev_name);
627 push_target (targ_ops);
629 inferior_pid = 42000; /* Make run command think we are busy... */
631 /* Give monitor_wait something to read */
633 monitor_printf (current_monitor->line_term);
635 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory);
640 /* Close out all files and local state before this target loses
644 monitor_close (quitting)
648 SERIAL_CLOSE (monitor_desc);
652 /* Terminate the open connection to the remote debugger. Use this
653 when you want to detach and do something else with your gdb. */
656 monitor_detach (args, from_tty)
660 pop_target (); /* calls monitor_close to do the real work */
662 printf_unfiltered ("Ending remote %s debugging\n", target_shortname);
665 /* Convert VALSTR into the target byte-ordered value of REGNO and store it. */
668 monitor_supply_register (regno, valstr)
673 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
676 val = strtoul (valstr, &p, 16);
678 if (val == 0 && valstr == p)
679 error ("monitor_supply_register (%d): bad value from monitor: %s.",
682 /* supply register stores in target byte order, so swap here */
684 store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
686 supply_register (regno, regbuf);
691 /* Tell the remote machine to resume. */
694 monitor_resume (pid, step, sig)
696 enum target_signal sig;
698 /* Some monitors require a different command when starting a program */
699 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
702 monitor_printf ("run\r");
703 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
707 dcache_flush (remote_dcache);
709 monitor_printf (current_monitor->step);
712 monitor_printf (current_monitor->cont);
713 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
718 /* Parse the output of a register dump command. A monitor specific
719 regexp is used to extract individual register descriptions of the
720 form REG=VAL. Each description is split up into a name and a value
721 string which are passed down to monitor specific code. */
724 parse_register_dump (buf, len)
730 int regnamelen, vallen;
732 /* Element 0 points to start of register name, and element 1
733 points to the start of the register value. */
734 struct re_registers register_strings;
736 if (re_search (®ister_pattern, buf, len, 0, len,
737 ®ister_strings) == -1)
740 regnamelen = register_strings.end[1] - register_strings.start[1];
741 regname = buf + register_strings.start[1];
742 vallen = register_strings.end[2] - register_strings.start[2];
743 val = buf + register_strings.start[2];
745 current_monitor->supply_register (regname, regnamelen, val, vallen);
747 buf += register_strings.end[0];
748 len -= register_strings.end[0];
752 /* Send ^C to target to halt it. Target will respond, and send us a
756 monitor_interrupt (signo)
759 /* If this doesn't work, try more severe steps. */
760 signal (signo, monitor_interrupt_twice);
763 printf_unfiltered ("monitor_interrupt called\n");
768 /* The user typed ^C twice. */
771 monitor_interrupt_twice (signo)
774 signal (signo, ofunc);
776 monitor_interrupt_query ();
778 signal (signo, monitor_interrupt);
781 /* Ask the user what to do when an interrupt is received. */
784 monitor_interrupt_query ()
786 target_terminal_ours ();
788 if (query ("Interrupted while waiting for the program.\n\
789 Give up (and stop debugging it)? "))
791 target_mourn_inferior ();
792 return_to_top_level (RETURN_QUIT);
795 target_terminal_inferior ();
799 monitor_wait_cleanup (old_timeout)
802 timeout = old_timeout;
803 signal (SIGINT, ofunc);
807 /* Wait until the remote machine stops, then return, storing status in
808 status just as `wait' would. */
811 monitor_wait (pid, status)
813 struct target_waitstatus *status;
815 int old_timeout = timeout;
818 struct cleanup *old_chain;
820 status->kind = TARGET_WAITKIND_EXITED;
821 status->value.integer = 0;
823 old_chain = make_cleanup (monitor_wait_cleanup, old_timeout);
825 #ifdef MAINTENANCE_CMDS
827 timeout = watchdog > 0 ? watchdog : -1;
829 timeout = -1; /* Don't time out -- user program is running. */
832 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
836 resp_len = monitor_expect_prompt (buf, sizeof (buf));
839 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
841 while (resp_len < 0);
843 signal (SIGINT, ofunc);
845 timeout = old_timeout;
847 if (dump_reg_flag && current_monitor->dump_registers)
851 monitor_printf (current_monitor->dump_registers);
852 resp_len = monitor_expect_prompt (buf, sizeof (buf));
855 if (current_monitor->register_pattern)
856 parse_register_dump (buf, resp_len);
858 status->kind = TARGET_WAITKIND_STOPPED;
859 status->value.sig = TARGET_SIGNAL_TRAP;
861 discard_cleanups (old_chain);
868 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
872 monitor_fetch_register (regno)
876 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
877 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
880 name = current_monitor->regnames[regno];
884 supply_register (regno, zerobuf);
888 /* send the register examine command */
890 monitor_printf (current_monitor->getreg.cmd, name);
892 /* If RESP_DELIM is specified, we search for that as a leading
893 delimiter for the register value. Otherwise, we just start
894 searching from the start of the buf. */
896 if (current_monitor->getreg.resp_delim)
897 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
899 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
900 if (current_monitor->flags & MO_HEX_PREFIX)
903 c = readchar (timeout);
905 c = readchar (timeout);
906 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
909 error ("Bad value returned from monitor while fetching register %x.",
913 /* Read upto the maximum number of hex digits for this register, skipping
914 spaces, but stop reading if something else is seen. Some monitors
915 like to drop leading zeros. */
917 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
920 c = readchar (timeout);
922 c = readchar (timeout);
930 regbuf[i] = '\000'; /* terminate the number */
932 /* If TERM is present, we wait for that to show up. Also, (if TERM
933 is present), we will send TERM_CMD if that is present. In any
934 case, we collect all of the output into buf, and then wait for
935 the normal prompt. */
937 if (current_monitor->getreg.term)
939 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
941 if (current_monitor->getreg.term_cmd)
943 monitor_printf (current_monitor->getreg.term_cmd);
944 monitor_expect_prompt (NULL, 0);
948 monitor_expect_prompt (NULL, 0); /* get response */
950 monitor_supply_register (regno, regbuf);
953 /* Read the remote registers into the block regs. */
955 static void monitor_dump_regs ()
957 if (current_monitor->dump_registers)
962 monitor_printf (current_monitor->dump_registers);
963 resp_len = monitor_expect_prompt (buf, sizeof (buf));
964 parse_register_dump (buf, resp_len);
967 abort(); /* Need some way to read registers */
971 monitor_fetch_registers (regno)
974 if (current_monitor->getreg.cmd)
978 monitor_fetch_register (regno);
982 for (regno = 0; regno < NUM_REGS; regno++)
983 monitor_fetch_register (regno);
986 monitor_dump_regs ();
990 /* Store register REGNO, or all if REGNO == 0. Return errno value. */
993 monitor_store_register (regno)
999 name = current_monitor->regnames[regno];
1003 val = read_register (regno);
1005 /* send the register deposit command */
1007 monitor_printf (current_monitor->setreg.cmd, name, val);
1009 /* It's possible that there are actually some monitors out there that
1010 will prompt you when you set a register. In that case, you may
1011 need to add some code here to deal with TERM and TERM_CMD (see
1012 monitor_fetch_register to get an idea of what's needed...) */
1014 monitor_expect_prompt (NULL, 0);
1017 /* Store the remote registers. */
1020 monitor_store_registers (regno)
1025 monitor_store_register (regno);
1029 for (regno = 0; regno < NUM_REGS; regno++)
1030 monitor_store_register (regno);
1033 /* Get ready to modify the registers array. On machines which store
1034 individual registers, this doesn't need to do anything. On machines
1035 which store all the registers in one fell swoop, this makes sure
1036 that registers contains all the registers from the program being
1040 monitor_prepare_to_store ()
1042 /* Do nothing, since we can store individual regs */
1046 monitor_files_info (ops)
1047 struct target_ops *ops;
1049 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
1053 monitor_write_memory (memaddr, myaddr, len)
1062 /* Use memory fill command for leading 0 bytes. */
1064 if (current_monitor->fill)
1066 for (i = 0; i < len; i++)
1070 if (i > 4) /* More than 4 zeros is worth doing */
1072 if (current_monitor->flags & MO_FILL_USES_ADDR)
1073 monitor_printf (current_monitor->fill, memaddr, memaddr + i, 0);
1075 monitor_printf (current_monitor->fill, memaddr, i, 0);
1077 monitor_expect_prompt (NULL, 0);
1083 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1086 cmd = current_monitor->setmem.cmdll;
1088 else if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1091 cmd = current_monitor->setmem.cmdl;
1093 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1096 cmd = current_monitor->setmem.cmdw;
1101 cmd = current_monitor->setmem.cmdb;
1104 val = extract_unsigned_integer (myaddr, len);
1106 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1107 monitor_printf_noecho (cmd, memaddr, val);
1109 monitor_printf (cmd, memaddr, val);
1111 monitor_expect_prompt (NULL, 0);
1116 /* This is an alternate form of monitor_read_memory which is used for monitors
1117 which can only read a single byte/word/etc. at a time. */
1120 monitor_read_memory_single (memaddr, myaddr, len)
1126 char membuf[sizeof(int) * 2 + 1];
1131 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1134 cmd = current_monitor->getmem.cmdll;
1136 else if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1139 cmd = current_monitor->getmem.cmdl;
1141 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1144 cmd = current_monitor->getmem.cmdw;
1149 cmd = current_monitor->getmem.cmdb;
1152 /* Send the examine command. */
1154 monitor_printf (cmd, memaddr);
1156 /* If RESP_DELIM is specified, we search for that as a leading delimiter for
1157 the register value. Otherwise, we just start searching from the start of
1160 if (current_monitor->getmem.resp_delim)
1161 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1163 /* Now, read the appropriate number of hex digits for this loc, skipping
1166 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
1167 if (current_monitor->flags & MO_HEX_PREFIX)
1170 c = readchar (timeout);
1172 c = readchar (timeout);
1173 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1176 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1177 memaddr, i, membuf, c);
1179 for (i = 0; i < len * 2; i++)
1185 c = readchar (timeout);
1191 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1192 memaddr, i, membuf, c);
1198 membuf[i] = '\000'; /* terminate the number */
1200 /* If TERM is present, we wait for that to show up. Also, (if TERM is
1201 present), we will send TERM_CMD if that is present. In any case, we collect
1202 all of the output into buf, and then wait for the normal prompt. */
1204 if (current_monitor->getmem.term)
1206 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
1208 if (current_monitor->getmem.term_cmd)
1210 monitor_printf (current_monitor->getmem.term_cmd);
1211 monitor_expect_prompt (NULL, 0);
1215 monitor_expect_prompt (NULL, 0); /* get response */
1218 val = strtoul (membuf, &p, 16);
1220 if (val == 0 && membuf == p)
1221 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.",
1224 /* supply register stores in target byte order, so swap here */
1226 store_unsigned_integer (myaddr, len, val);
1231 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's memory
1232 at MEMADDR. Returns length moved. Currently, we only do one byte at a
1236 monitor_read_memory (memaddr, myaddr, len)
1242 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
1249 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1250 return monitor_read_memory_single (memaddr, myaddr, len);
1252 len = min (len, 16);
1254 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
1255 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1256 len = ((memaddr + len) & ~0xf) - memaddr;
1258 /* send the memory examine command */
1260 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1261 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1);
1263 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1265 /* If TERM is present, we wait for that to show up. Also, (if TERM is
1266 present), we will send TERM_CMD if that is present. In any case, we collect
1267 all of the output into buf, and then wait for the normal prompt. */
1269 if (current_monitor->getmem.term)
1271 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
1274 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.",
1275 memaddr, resp_len, buf);
1277 if (current_monitor->getmem.term_cmd)
1279 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1280 strlen (current_monitor->getmem.term_cmd));
1281 monitor_expect_prompt (NULL, 0);
1285 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
1289 /* If RESP_DELIM is specified, we search for that as a leading delimiter for
1290 the values. Otherwise, we just start searching from the start of the buf.
1293 if (current_monitor->getmem.resp_delim)
1296 struct re_registers resp_strings;
1299 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1303 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1304 memaddr, resp_len, buf);
1306 p += resp_strings.end[0];
1308 p = strstr (p, current_monitor->getmem.resp_delim);
1310 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1311 memaddr, resp_len, buf);
1312 p += strlen (current_monitor->getmem.resp_delim);
1316 for (i = len; i > 0; i--)
1318 /* Skip non-hex chars, but bomb on end of string and newlines */
1324 if (*p == '\000' || *p == '\n' || *p == '\r')
1325 error ("monitor_read_memory (0x%x): badly terminated response from monitor: %.*s", memaddr, resp_len, buf);
1329 val = strtoul (p, &p1, 16);
1331 if (val == 0 && p == p1)
1332 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr,
1347 monitor_xfer_memory (memaddr, myaddr, len, write, target)
1352 struct target_ops *target; /* ignored */
1354 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
1360 return; /* ignore attempts to kill target system */
1363 /* All we actually do is set the PC to the start address of exec_bfd, and start
1364 the program at that point. */
1367 monitor_create_inferior (exec_file, args, env)
1372 if (args && (*args != '\000'))
1373 error ("Args are not supported by the monitor.");
1376 clear_proceed_status ();
1377 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
1380 /* Clean up when a program exits.
1381 The program actually lives on in the remote processor's RAM, and may be
1382 run again without a download. Don't leave it full of breakpoint
1386 monitor_mourn_inferior ()
1388 unpush_target (targ_ops);
1389 generic_mourn_inferior (); /* Do all the proper things now */
1392 #define NUM_MONITOR_BREAKPOINTS 8
1394 static CORE_ADDR breakaddr[NUM_MONITOR_BREAKPOINTS] = {0};
1396 /* Tell the monitor to add a breakpoint. */
1399 monitor_insert_breakpoint (addr, shadow)
1404 static unsigned char break_insn[] = BREAKPOINT;
1406 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1408 if (breakaddr[i] == 0)
1410 breakaddr[i] = addr;
1411 monitor_read_memory (addr, shadow, sizeof (break_insn));
1412 monitor_printf (current_monitor->set_break, addr);
1413 monitor_expect_prompt (NULL, 0);
1418 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS);
1421 /* Tell the monitor to remove a breakpoint. */
1424 monitor_remove_breakpoint (addr, shadow)
1430 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1432 if (breakaddr[i] == addr)
1435 /* some monitors remove breakpoints based on the address */
1436 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
1437 monitor_printf (current_monitor->clr_break, addr);
1439 monitor_printf (current_monitor->clr_break, i);
1440 monitor_expect_prompt (NULL, 0);
1444 fprintf_unfiltered (stderr, "Can't find breakpoint associated with 0x%x\n", addr);
1448 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
1449 an S-record. Return non-zero if the ACK is received properly. */
1452 monitor_wait_srec_ack ()
1454 /* FIXME: eventually we'll want to be able to handle acknowledgements
1455 of something other than a '+' character. Right now this is only
1456 going to work for EST visionICE. */
1457 return readchar (timeout) == '+';
1460 /* monitor_load -- download a file. */
1463 monitor_load (file, from_tty)
1467 dcache_flush (remote_dcache);
1469 if (current_monitor->load_routine)
1470 current_monitor->load_routine (monitor_desc, file, hashmark);
1472 { /* The default is ascii S-records */
1473 monitor_printf (current_monitor->load);
1474 if (current_monitor->loadresp)
1475 monitor_expect (current_monitor->loadresp, NULL, 0);
1477 /* FIXME Should add arg here for load_offset (already done for generic_load) */
1478 load_srec (monitor_desc, file, 32, SREC_ALL, hashmark,
1479 current_monitor->flags & MO_SREC_ACK ?
1480 monitor_wait_srec_ack : NULL);
1482 monitor_expect_prompt (NULL, 0);
1485 /* Finally, make the PC point at the start address */
1488 write_pc (bfd_get_start_address (exec_bfd));
1490 inferior_pid = 0; /* No process now */
1492 /* This is necessary because many things were based on the PC at the time that
1493 we attached to the monitor, which is no longer valid now that we have loaded
1494 new code (and just changed the PC). Another way to do this might be to call
1495 normal_stop, except that the stack may not be valid, and things would get
1496 horribly confused... */
1498 clear_symtab_users ();
1504 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
1505 SERIAL_SEND_BREAK (monitor_desc);
1506 if (current_monitor->stop)
1507 monitor_printf_noecho (current_monitor->stop);
1510 /* Put a command string, in args, out to MONITOR. Output from MONITOR
1511 is placed on the users terminal until the prompt is seen. FIXME: We
1512 read the characters ourseleves here cause of a nasty echo. */
1515 monitor_command (args, from_tty)
1523 if (monitor_desc == NULL)
1524 error ("monitor target not open.");
1526 p = current_monitor->prompt;
1528 /* Send the command. Note that if no args were supplied, then we're
1529 just sending the monitor a newline, which is sometimes useful. */
1531 monitor_printf ("%s\r", (args ? args : ""));
1533 resp_len = monitor_expect_prompt (buf, sizeof buf);
1535 fputs_unfiltered (buf, gdb_stdout); /* Output the response */
1538 /* Convert hex digit A to a number. */
1544 if (a >= '0' && a <= '9')
1546 if (a >= 'a' && a <= 'f')
1547 return a - 'a' + 10;
1548 if (a >= 'A' && a <= 'F')
1549 return a - 'A' + 10;
1551 error ("Reply contains invalid hex digit 0x%x", a);
1554 static struct target_ops monitor_ops =
1556 NULL, /* to_shortname */
1557 NULL, /* to_longname */
1560 monitor_close, /* to_close */
1561 NULL, /* to_attach */
1562 monitor_detach, /* to_detach */
1563 monitor_resume, /* to_resume */
1564 monitor_wait, /* to_wait */
1565 monitor_fetch_registers, /* to_fetch_registers */
1566 monitor_store_registers, /* to_store_registers */
1567 monitor_prepare_to_store, /* to_prepare_to_store */
1568 monitor_xfer_memory, /* to_xfer_memory */
1569 monitor_files_info, /* to_files_info */
1570 monitor_insert_breakpoint, /* to_insert_breakpoint */
1571 monitor_remove_breakpoint, /* to_remove_breakpoint */
1572 0, /* to_terminal_init */
1573 0, /* to_terminal_inferior */
1574 0, /* to_terminal_ours_for_output */
1575 0, /* to_terminal_ours */
1576 0, /* to_terminal_info */
1577 monitor_kill, /* to_kill */
1578 monitor_load, /* to_load */
1579 0, /* to_lookup_symbol */
1580 monitor_create_inferior, /* to_create_inferior */
1581 monitor_mourn_inferior, /* to_mourn_inferior */
1583 0, /* to_notice_signals */
1584 0, /* to_thread_alive */
1585 monitor_stop, /* to_stop */
1586 process_stratum, /* to_stratum */
1588 1, /* to_has_all_memory */
1589 1, /* to_has_memory */
1590 1, /* to_has_stack */
1591 1, /* to_has_registers */
1592 1, /* to_has_execution */
1594 0, /* sections_end */
1595 OPS_MAGIC /* to_magic */
1598 /* Init the target_ops structure pointed at by OPS */
1601 init_monitor_ops (ops)
1602 struct target_ops *ops;
1604 memcpy (ops, &monitor_ops, sizeof monitor_ops);
1607 /* Define additional commands that are usually only used by monitors. */
1610 _initialize_remote_monitors ()
1612 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
1614 "Set display of activity while downloading a file.\n\
1615 When enabled, a hashmark \'#\' is displayed.",
1619 add_com ("monitor", class_obscure, monitor_command,
1620 "Send a command to the debug monitor.");