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 char *dev_name;
63 static struct target_ops *targ_ops;
65 static int readchar PARAMS ((int timeout));
67 static void monitor_command PARAMS ((char *args, int fromtty));
69 static void monitor_fetch_register PARAMS ((int regno));
70 static void monitor_store_register PARAMS ((int regno));
72 static void monitor_detach PARAMS ((char *args, int from_tty));
73 static void monitor_resume PARAMS ((int pid, int step, enum target_signal sig));
74 static void monitor_interrupt PARAMS ((int signo));
75 static void monitor_interrupt_twice PARAMS ((int signo));
76 static void monitor_interrupt_query PARAMS ((void));
77 static void monitor_wait_cleanup PARAMS ((int old_timeout));
79 static int monitor_wait PARAMS ((int pid, struct target_waitstatus *status));
80 static void monitor_fetch_registers PARAMS ((int regno));
81 static void monitor_store_registers PARAMS ((int regno));
82 static void monitor_prepare_to_store PARAMS ((void));
83 static int monitor_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len, int write, struct target_ops *target));
84 static void monitor_files_info PARAMS ((struct target_ops *ops));
85 static int monitor_insert_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
86 static int monitor_remove_breakpoint PARAMS ((CORE_ADDR addr, char *shadow));
87 static void monitor_kill PARAMS ((void));
88 static void monitor_load PARAMS ((char *file, int from_tty));
89 static void monitor_mourn_inferior PARAMS ((void));
90 static void monitor_stop PARAMS ((void));
91 static void monitor_debug PARAMS ((char *prefix, char *string, char *suffix));
93 static int monitor_read_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
94 static int monitor_write_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
96 static int monitor_expect_regexp PARAMS ((struct re_pattern_buffer *pat,
97 char *buf, int buflen));
98 static int from_hex PARAMS ((int a));
99 static unsigned long get_hex_word PARAMS ((void));
101 static struct monitor_ops *current_monitor;
103 static int hashmark; /* flag set by "set hash" */
105 static int timeout = 30;
107 static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */
109 static void (*ofunc)(); /* Old SIGINT signal handler */
111 /* Descriptor for I/O to remote machine. Initialize it to NULL so
112 that monitor_open knows that we don't have a file open when the
115 static serial_t monitor_desc = NULL;
117 /* Pointer to regexp pattern matching data */
119 static struct re_pattern_buffer register_pattern;
120 static char register_fastmap[256];
122 static struct re_pattern_buffer getmem_resp_delim_pattern;
123 static char getmem_resp_delim_fastmap[256];
125 static int dump_reg_flag; /* Non-zero means do a dump_registers cmd when
126 monitor_wait wakes up. */
128 static DCACHE *remote_dcache;
129 static int first_time=0; /* is this the first time we're executing after
130 gaving created the child proccess? */
132 /* monitor_debug is like fputs_unfiltered, except it prints special
133 characters in printable fashion. */
136 monitor_debug (prefix, string, suffix)
143 /* print prefix and suffix after each line */
144 static int new_line=1;
145 static char *prev_prefix = "";
146 static char *prev_suffix = "";
148 /* if the prefix is changing, print the previous suffix, a new line,
149 and the new prefix */
150 if (strcmp(prev_prefix, prefix) != 0 && !new_line)
152 fputs_unfiltered (prev_suffix, gdb_stderr);
153 fputs_unfiltered ("\n", gdb_stderr);
154 fputs_unfiltered (prefix, gdb_stderr);
156 prev_prefix = prefix;
157 prev_suffix = suffix;
159 /* print prefix if last char was a newline*/
162 fputs_unfiltered (prefix, gdb_stderr);
165 if (strchr(string,'\n')) /* save state for next call */
168 while ((ch = *string++) != '\0')
173 fputc_unfiltered (ch, gdb_stderr);
176 fprintf_unfiltered (gdb_stderr, "\\%03o", ch);
180 case '\\': fputs_unfiltered ("\\\\", gdb_stderr); break;
181 case '\b': fputs_unfiltered ("\\b", gdb_stderr); break;
182 case '\f': fputs_unfiltered ("\\f", gdb_stderr); break;
183 case '\n': fputs_unfiltered ("\\n", gdb_stderr); break;
184 case '\r': fputs_unfiltered ("\\r", gdb_stderr); break;
185 case '\t': fputs_unfiltered ("\\t", gdb_stderr); break;
186 case '\v': fputs_unfiltered ("\\v", gdb_stderr); break;
190 if (new_line==1) { /* print suffix if last char was a newline */
191 fputs_unfiltered (suffix, gdb_stderr);
192 fputs_unfiltered ("\n", gdb_stderr);
196 /* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
197 Works just like printf. */
200 #ifdef ANSI_PROTOTYPES
201 monitor_printf_noecho (char *pattern, ...)
203 monitor_printf_noecho (va_alist)
212 va_start (args, pattern);
216 pattern = va_arg (args, char *);
219 vsprintf (sndbuf, pattern, args);
221 if (remote_debug > 0)
222 monitor_debug ("sent -->", sndbuf, "<--");
224 len = strlen (sndbuf);
226 if (len + 1 > sizeof sndbuf)
229 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
230 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
233 /* monitor_printf -- Send data to monitor and check the echo. Works just like
237 #ifdef ANSI_PROTOTYPES
238 monitor_printf (char *pattern, ...)
240 monitor_printf (va_alist)
248 #ifdef ANSI_PROTOTYPES
249 va_start (args, pattern);
253 pattern = va_arg (args, char *);
256 vsprintf (sndbuf, pattern, args);
258 if (remote_debug > 0)
259 monitor_debug ("sent -->", sndbuf, "<--");
261 len = strlen (sndbuf);
263 if (len + 1 > sizeof sndbuf)
266 if (SERIAL_WRITE(monitor_desc, sndbuf, len))
267 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
269 /* We used to expect that the next immediate output was the characters we
270 just output, but sometimes some extra junk appeared before the characters
271 we expected, like an extra prompt, or a portmaster sending telnet negotiations.
272 So, just start searching for what we sent, and skip anything unknown. */
273 monitor_expect (sndbuf, (char *)0, 0);
276 /* Read a character from the remote system, doing all the fancy
284 static enum { last_random, last_nl, last_cr, last_crnl } state = last_random;
290 c = SERIAL_READCHAR (monitor_desc, timeout);
295 if (remote_debug > 0)
300 monitor_debug ("read -->", buf, "<--");
304 /* Canonicialize \n\r combinations into one \r */
305 if ((current_monitor->flags & MO_HANDLE_NL) != 0)
307 if ((c == '\r' && state == last_nl)
308 || (c == '\n' && state == last_cr))
329 if (c == SERIAL_TIMEOUT)
330 #ifdef MAINTENANCE_CMDS
331 if (in_monitor_wait) /* Watchdog went off */
333 target_mourn_inferior ();
334 error ("Watchdog has expired. Target detached.\n");
338 error ("Timeout reading from remote system.");
340 perror_with_name ("remote-monitor");
343 /* Scan input from the remote system, until STRING is found. If BUF is non-
344 zero, then collect input until we have collected either STRING or BUFLEN-1
345 chars. In either case we terminate BUF with a 0. If input overflows BUF
346 because STRING can't be found, return -1, else return number of chars in BUF
347 (minus the terminating NUL). Note that in the non-overflow case, STRING
348 will be at the end of BUF. */
351 monitor_expect (string, buf, buflen)
357 int obuflen = buflen;
359 extern struct target_ops *targ_ops;
373 c = readchar (timeout);
380 c = readchar (timeout);
382 /* Don't expect any ^C sent to be echoed */
384 if (*p == '\003' || c == *p)
394 return obuflen - buflen;
400 else if ((c == '\021' || c == '\023') &&
401 (strcmp(targ_ops->to_shortname, "m32r") == 0))
402 { /* m32r monitor emits random DC1/DC3 chars */
414 /* Search for a regexp. */
417 monitor_expect_regexp (pat, buf, buflen)
418 struct re_pattern_buffer *pat;
429 mybuf = alloca (1024);
438 if (p - mybuf >= buflen)
439 { /* Buffer about to overflow */
441 /* On overflow, we copy the upper half of the buffer to the lower half. Not
442 great, but it usually works... */
444 memcpy (mybuf, mybuf + buflen / 2, buflen / 2);
445 p = mybuf + buflen / 2;
448 *p++ = readchar (timeout);
450 retval = re_search (pat, mybuf, p - mybuf, 0, p - mybuf, NULL);
456 /* Keep discarding input until we see the MONITOR prompt.
458 The convention for dealing with the prompt is that you
460 o *then* wait for the prompt.
462 Thus the last thing that a procedure does with the serial line will
463 be an monitor_expect_prompt(). Exception: monitor_resume does not
464 wait for the prompt, because the terminal is being handed over to
465 the inferior. However, the next thing which happens after that is
466 a monitor_wait which does wait for the prompt. Note that this
467 includes abnormal exit, e.g. error(). This is necessary to prevent
468 getting into states from which we can't recover. */
471 monitor_expect_prompt (buf, buflen)
475 return monitor_expect (current_monitor->prompt, buf, buflen);
478 /* Get N 32-bit words from remote, each preceded by a space, and put
479 them in registers starting at REGNO. */
489 ch = readchar (timeout);
494 for (i = 7; i >= 1; i--)
496 ch = readchar (timeout);
499 val = (val << 4) | from_hex (ch);
506 compile_pattern (pattern, compiled_pattern, fastmap)
508 struct re_pattern_buffer *compiled_pattern;
514 compiled_pattern->fastmap = fastmap;
516 tmp = re_set_syntax (RE_SYNTAX_EMACS);
517 val = re_compile_pattern (pattern,
523 error ("compile_pattern: Can't compile pattern string `%s': %s!", pattern, val);
526 re_compile_fastmap (compiled_pattern);
529 /* Open a connection to a remote debugger. NAME is the filename used
530 for communication. */
533 monitor_open (args, mon_ops, from_tty)
535 struct monitor_ops *mon_ops;
542 if (mon_ops->magic != MONITOR_OPS_MAGIC)
543 error ("Magic number of monitor_ops struct wrong.");
545 targ_ops = mon_ops->target;
546 name = targ_ops->to_shortname;
549 error ("Use `target %s DEVICE-NAME' to use a serial port, or \n\
550 `target %s HOST-NAME:PORT-NUMBER' to use a network connection.", name, name);
552 target_preopen (from_tty);
554 /* Setup pattern for register dump */
556 if (mon_ops->register_pattern)
557 compile_pattern (mon_ops->register_pattern, ®ister_pattern,
560 if (mon_ops->getmem.resp_delim)
561 compile_pattern (mon_ops->getmem.resp_delim, &getmem_resp_delim_pattern,
562 getmem_resp_delim_fastmap);
564 unpush_target (targ_ops);
568 dev_name = strsave (args);
570 monitor_desc = SERIAL_OPEN (dev_name);
573 perror_with_name (dev_name);
577 if (SERIAL_SETBAUDRATE (monitor_desc, baud_rate))
579 SERIAL_CLOSE (monitor_desc);
580 perror_with_name (dev_name);
584 SERIAL_RAW (monitor_desc);
586 SERIAL_FLUSH_INPUT (monitor_desc);
588 /* some systems only work with 2 stop bits */
590 SERIAL_SETSTOPBITS (monitor_desc, mon_ops->stopbits);
592 current_monitor = mon_ops;
594 /* See if we can wake up the monitor. First, try sending a stop sequence,
595 then send the init strings. Last, remove all breakpoints. */
597 if (current_monitor->stop)
600 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
602 monitor_expect_prompt (NULL, 0);
606 /* wake up the monitor and see if it's alive */
607 for (p = mon_ops->init; *p != NULL; p++)
609 /* Some of the characters we send may not be echoed,
610 but we hope to get a prompt at the end of it all. */
612 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
615 monitor_printf_noecho (*p);
616 monitor_expect_prompt (NULL, 0);
619 SERIAL_FLUSH_INPUT (monitor_desc);
621 /* Remove all breakpoints */
623 if (mon_ops->clr_all_break)
625 monitor_printf (mon_ops->clr_all_break);
626 monitor_expect_prompt (NULL, 0);
630 printf_unfiltered ("Remote target %s connected to %s\n", name, dev_name);
632 push_target (targ_ops);
634 inferior_pid = 42000; /* Make run command think we are busy... */
636 /* Give monitor_wait something to read */
638 monitor_printf (current_monitor->line_term);
640 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory);
645 /* Close out all files and local state before this target loses
649 monitor_close (quitting)
653 SERIAL_CLOSE (monitor_desc);
657 /* Terminate the open connection to the remote debugger. Use this
658 when you want to detach and do something else with your gdb. */
661 monitor_detach (args, from_tty)
665 pop_target (); /* calls monitor_close to do the real work */
667 printf_unfiltered ("Ending remote %s debugging\n", target_shortname);
670 /* Convert VALSTR into the target byte-ordered value of REGNO and store it. */
673 monitor_supply_register (regno, valstr)
678 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
681 val = strtoul (valstr, &p, 16);
683 if (val == 0 && valstr == p)
684 error ("monitor_supply_register (%d): bad value from monitor: %s.",
687 /* supply register stores in target byte order, so swap here */
689 store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
691 supply_register (regno, regbuf);
696 /* Tell the remote machine to resume. */
699 monitor_resume (pid, step, sig)
701 enum target_signal sig;
703 /* Some monitors require a different command when starting a program */
704 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
707 monitor_printf ("run\r");
708 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
712 dcache_flush (remote_dcache);
714 monitor_printf (current_monitor->step);
717 monitor_printf (current_monitor->cont);
718 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
723 /* Parse the output of a register dump command. A monitor specific
724 regexp is used to extract individual register descriptions of the
725 form REG=VAL. Each description is split up into a name and a value
726 string which are passed down to monitor specific code. */
729 parse_register_dump (buf, len)
735 int regnamelen, vallen;
737 /* Element 0 points to start of register name, and element 1
738 points to the start of the register value. */
739 struct re_registers register_strings;
741 if (re_search (®ister_pattern, buf, len, 0, len,
742 ®ister_strings) == -1)
745 regnamelen = register_strings.end[1] - register_strings.start[1];
746 regname = buf + register_strings.start[1];
747 vallen = register_strings.end[2] - register_strings.start[2];
748 val = buf + register_strings.start[2];
750 current_monitor->supply_register (regname, regnamelen, val, vallen);
752 buf += register_strings.end[0];
753 len -= register_strings.end[0];
757 /* Send ^C to target to halt it. Target will respond, and send us a
761 monitor_interrupt (signo)
764 /* If this doesn't work, try more severe steps. */
765 signal (signo, monitor_interrupt_twice);
768 printf_unfiltered ("monitor_interrupt called\n");
773 /* The user typed ^C twice. */
776 monitor_interrupt_twice (signo)
779 signal (signo, ofunc);
781 monitor_interrupt_query ();
783 signal (signo, monitor_interrupt);
786 /* Ask the user what to do when an interrupt is received. */
789 monitor_interrupt_query ()
791 target_terminal_ours ();
793 if (query ("Interrupted while waiting for the program.\n\
794 Give up (and stop debugging it)? "))
796 target_mourn_inferior ();
797 return_to_top_level (RETURN_QUIT);
800 target_terminal_inferior ();
804 monitor_wait_cleanup (old_timeout)
807 timeout = old_timeout;
808 signal (SIGINT, ofunc);
812 /* Wait until the remote machine stops, then return, storing status in
813 status just as `wait' would. */
816 monitor_wait (pid, status)
818 struct target_waitstatus *status;
820 int old_timeout = timeout;
823 struct cleanup *old_chain;
825 status->kind = TARGET_WAITKIND_EXITED;
826 status->value.integer = 0;
828 old_chain = make_cleanup (monitor_wait_cleanup, old_timeout);
830 #ifdef MAINTENANCE_CMDS
832 timeout = watchdog > 0 ? watchdog : -1;
834 timeout = -1; /* Don't time out -- user program is running. */
837 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
841 resp_len = monitor_expect_prompt (buf, sizeof (buf));
844 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
846 while (resp_len < 0);
848 signal (SIGINT, ofunc);
850 timeout = old_timeout;
852 if (dump_reg_flag && current_monitor->dump_registers)
856 monitor_printf (current_monitor->dump_registers);
857 resp_len = monitor_expect_prompt (buf, sizeof (buf));
860 if (current_monitor->register_pattern)
861 parse_register_dump (buf, resp_len);
863 status->kind = TARGET_WAITKIND_STOPPED;
864 status->value.sig = TARGET_SIGNAL_TRAP;
866 discard_cleanups (old_chain);
873 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
877 monitor_fetch_register (regno)
881 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
882 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
885 name = current_monitor->regnames[regno];
889 supply_register (regno, zerobuf);
893 /* send the register examine command */
895 monitor_printf (current_monitor->getreg.cmd, name);
897 /* If RESP_DELIM is specified, we search for that as a leading
898 delimiter for the register value. Otherwise, we just start
899 searching from the start of the buf. */
901 if (current_monitor->getreg.resp_delim)
902 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
904 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
905 if (current_monitor->flags & MO_HEX_PREFIX)
908 c = readchar (timeout);
910 c = readchar (timeout);
911 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
914 error ("Bad value returned from monitor while fetching register %x.",
918 /* Read upto the maximum number of hex digits for this register, skipping
919 spaces, but stop reading if something else is seen. Some monitors
920 like to drop leading zeros. */
922 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
925 c = readchar (timeout);
927 c = readchar (timeout);
935 regbuf[i] = '\000'; /* terminate the number */
937 /* If TERM is present, we wait for that to show up. Also, (if TERM
938 is present), we will send TERM_CMD if that is present. In any
939 case, we collect all of the output into buf, and then wait for
940 the normal prompt. */
942 if (current_monitor->getreg.term)
944 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
946 if (current_monitor->getreg.term_cmd)
948 monitor_printf (current_monitor->getreg.term_cmd);
949 monitor_expect_prompt (NULL, 0);
953 monitor_expect_prompt (NULL, 0); /* get response */
955 monitor_supply_register (regno, regbuf);
958 /* Read the remote registers into the block regs. */
960 static void monitor_dump_regs ()
965 if (current_monitor->dump_registers)
967 monitor_printf (current_monitor->dump_registers);
968 resp_len = monitor_expect_prompt (buf, sizeof (buf));
969 parse_register_dump (buf, resp_len);
972 abort(); /* Need some way to read registers */
976 monitor_fetch_registers (regno)
979 if (current_monitor->getreg.cmd)
983 monitor_fetch_register (regno);
987 for (regno = 0; regno < NUM_REGS; regno++)
988 monitor_fetch_register (regno);
991 monitor_dump_regs ();
995 /* Store register REGNO, or all if REGNO == 0. Return errno value. */
998 monitor_store_register (regno)
1004 name = current_monitor->regnames[regno];
1008 val = read_register (regno);
1010 /* send the register deposit command */
1012 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
1013 monitor_printf (current_monitor->setreg.cmd, val, name);
1015 monitor_printf (current_monitor->setreg.cmd, name, val);
1017 /* It's possible that there are actually some monitors out there that
1018 will prompt you when you set a register. In that case, you may
1019 need to add some code here to deal with TERM and TERM_CMD (see
1020 monitor_fetch_register to get an idea of what's needed...) */
1022 monitor_expect_prompt (NULL, 0);
1025 /* Store the remote registers. */
1028 monitor_store_registers (regno)
1033 monitor_store_register (regno);
1037 for (regno = 0; regno < NUM_REGS; regno++)
1038 monitor_store_register (regno);
1041 /* Get ready to modify the registers array. On machines which store
1042 individual registers, this doesn't need to do anything. On machines
1043 which store all the registers in one fell swoop, this makes sure
1044 that registers contains all the registers from the program being
1048 monitor_prepare_to_store ()
1050 /* Do nothing, since we can store individual regs */
1054 monitor_files_info (ops)
1055 struct target_ops *ops;
1057 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
1061 monitor_write_memory (memaddr, myaddr, len)
1070 /* Use memory fill command for leading 0 bytes. */
1072 if (current_monitor->fill)
1074 for (i = 0; i < len; i++)
1078 if (i > 4) /* More than 4 zeros is worth doing */
1080 if (current_monitor->flags & MO_FILL_USES_ADDR)
1081 monitor_printf (current_monitor->fill, memaddr, memaddr + i, 0);
1083 monitor_printf (current_monitor->fill, memaddr, i, 0);
1085 monitor_expect_prompt (NULL, 0);
1092 /* Can't actually use long longs if VAL is an int (nice idea, though). */
1093 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1096 cmd = current_monitor->setmem.cmdll;
1100 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1103 cmd = current_monitor->setmem.cmdl;
1105 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1108 cmd = current_monitor->setmem.cmdw;
1113 cmd = current_monitor->setmem.cmdb;
1116 val = extract_unsigned_integer (myaddr, len);
1118 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1119 monitor_printf_noecho (cmd, memaddr, val);
1121 monitor_printf (cmd, memaddr, val);
1123 monitor_expect_prompt (NULL, 0);
1128 /* This is an alternate form of monitor_read_memory which is used for monitors
1129 which can only read a single byte/word/etc. at a time. */
1132 monitor_read_memory_single (memaddr, myaddr, len)
1138 char membuf[sizeof(int) * 2 + 1];
1144 /* Can't actually use long longs (nice idea, though). In fact, the
1145 call to strtoul below will fail if it tries to convert a value
1146 that's too big to fit in a long. */
1147 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1150 cmd = current_monitor->getmem.cmdll;
1154 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1157 cmd = current_monitor->getmem.cmdl;
1159 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1162 cmd = current_monitor->getmem.cmdw;
1167 cmd = current_monitor->getmem.cmdb;
1170 /* Send the examine command. */
1172 monitor_printf (cmd, memaddr);
1174 /* If RESP_DELIM is specified, we search for that as a leading
1175 delimiter for the memory value. Otherwise, we just start
1176 searching from the start of the buf. */
1178 if (current_monitor->getmem.resp_delim)
1179 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1181 /* Now, read the appropriate number of hex digits for this loc,
1184 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
1185 if (current_monitor->flags & MO_HEX_PREFIX)
1189 c = readchar (timeout);
1191 c = readchar (timeout);
1192 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1195 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1196 memaddr, i, membuf, c);
1198 for (i = 0; i < len * 2; i++)
1204 c = readchar (timeout);
1210 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1211 memaddr, i, membuf, c);
1217 membuf[i] = '\000'; /* terminate the number */
1219 /* If TERM is present, we wait for that to show up. Also, (if TERM is
1220 present), we will send TERM_CMD if that is present. In any case, we collect
1221 all of the output into buf, and then wait for the normal prompt. */
1223 if (current_monitor->getmem.term)
1225 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
1227 if (current_monitor->getmem.term_cmd)
1229 monitor_printf (current_monitor->getmem.term_cmd);
1230 monitor_expect_prompt (NULL, 0);
1234 monitor_expect_prompt (NULL, 0); /* get response */
1237 val = strtoul (membuf, &p, 16);
1239 if (val == 0 && membuf == p)
1240 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.",
1243 /* supply register stores in target byte order, so swap here */
1245 store_unsigned_integer (myaddr, len, val);
1250 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's memory
1251 at MEMADDR. Returns length moved. Currently, we only do one byte at a
1255 monitor_read_memory (memaddr, myaddr, len)
1261 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
1268 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1269 return monitor_read_memory_single (memaddr, myaddr, len);
1271 len = min (len, 16);
1273 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
1274 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1275 len = ((memaddr + len) & ~0xf) - memaddr;
1277 /* send the memory examine command */
1279 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1280 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1);
1282 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1284 /* If TERM is present, we wait for that to show up. Also, (if TERM
1285 is present), we will send TERM_CMD if that is present. In any
1286 case, we collect all of the output into buf, and then wait for
1287 the normal prompt. */
1289 if (current_monitor->getmem.term)
1291 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
1294 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.",
1295 memaddr, resp_len, buf);
1297 if (current_monitor->getmem.term_cmd)
1299 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1300 strlen (current_monitor->getmem.term_cmd));
1301 monitor_expect_prompt (NULL, 0);
1305 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
1309 /* If RESP_DELIM is specified, we search for that as a leading
1310 delimiter for the values. Otherwise, we just start searching
1311 from the start of the buf. */
1313 if (current_monitor->getmem.resp_delim)
1316 struct re_registers resp_strings;
1319 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1323 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1324 memaddr, resp_len, buf);
1326 p += resp_strings.end[0];
1328 p = strstr (p, current_monitor->getmem.resp_delim);
1330 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1331 memaddr, resp_len, buf);
1332 p += strlen (current_monitor->getmem.resp_delim);
1336 for (i = len; i > 0; i--)
1338 /* Skip non-hex chars, but bomb on end of string and newlines */
1344 if (*p == '\000' || *p == '\n' || *p == '\r')
1345 error ("monitor_read_memory (0x%x): badly terminated response from monitor: %.*s", memaddr, resp_len, buf);
1349 val = strtoul (p, &p1, 16);
1351 if (val == 0 && p == p1)
1352 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr,
1367 monitor_xfer_memory (memaddr, myaddr, len, write, target)
1372 struct target_ops *target; /* ignored */
1374 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
1380 return; /* ignore attempts to kill target system */
1383 /* All we actually do is set the PC to the start address of exec_bfd, and start
1384 the program at that point. */
1387 monitor_create_inferior (exec_file, args, env)
1392 if (args && (*args != '\000'))
1393 error ("Args are not supported by the monitor.");
1396 clear_proceed_status ();
1397 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
1400 /* Clean up when a program exits.
1401 The program actually lives on in the remote processor's RAM, and may be
1402 run again without a download. Don't leave it full of breakpoint
1406 monitor_mourn_inferior ()
1408 unpush_target (targ_ops);
1409 generic_mourn_inferior (); /* Do all the proper things now */
1412 #define NUM_MONITOR_BREAKPOINTS 8
1414 static CORE_ADDR breakaddr[NUM_MONITOR_BREAKPOINTS] = {0};
1416 /* Tell the monitor to add a breakpoint. */
1419 monitor_insert_breakpoint (addr, shadow)
1424 /* This is only used to compute the size of a breakpoint. */
1426 static unsigned char break_insn[] = BREAKPOINT;
1428 /* In the bi-endian case we assume breakpoints are the same size. */
1429 static unsigned char break_insn[] = BIG_BREAKPOINT;
1432 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1434 if (breakaddr[i] == 0)
1436 breakaddr[i] = addr;
1437 monitor_read_memory (addr, shadow, sizeof (break_insn));
1438 monitor_printf (current_monitor->set_break, addr);
1439 monitor_expect_prompt (NULL, 0);
1444 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS);
1447 /* Tell the monitor to remove a breakpoint. */
1450 monitor_remove_breakpoint (addr, shadow)
1456 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1458 if (breakaddr[i] == addr)
1461 /* some monitors remove breakpoints based on the address */
1462 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
1463 monitor_printf (current_monitor->clr_break, addr);
1465 monitor_printf (current_monitor->clr_break, i);
1466 monitor_expect_prompt (NULL, 0);
1470 fprintf_unfiltered (stderr, "Can't find breakpoint associated with 0x%x\n", addr);
1474 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
1475 an S-record. Return non-zero if the ACK is received properly. */
1478 monitor_wait_srec_ack ()
1480 /* FIXME: eventually we'll want to be able to handle acknowledgements
1481 of something other than a '+' character. Right now this is only
1482 going to work for EST visionICE. */
1483 return readchar (timeout) == '+';
1486 /* monitor_load -- download a file. */
1489 monitor_load (file, from_tty)
1493 dcache_flush (remote_dcache);
1495 if (current_monitor->load_routine)
1496 current_monitor->load_routine (monitor_desc, file, hashmark);
1498 { /* The default is ascii S-records */
1499 monitor_printf (current_monitor->load);
1500 if (current_monitor->loadresp)
1501 monitor_expect (current_monitor->loadresp, NULL, 0);
1503 /* FIXME Should add arg here for load_offset (already done for generic_load) */
1504 load_srec (monitor_desc, file, 32, SREC_ALL, hashmark,
1505 current_monitor->flags & MO_SREC_ACK ?
1506 monitor_wait_srec_ack : NULL);
1508 monitor_expect_prompt (NULL, 0);
1511 /* Finally, make the PC point at the start address */
1514 write_pc (bfd_get_start_address (exec_bfd));
1516 inferior_pid = 0; /* No process now */
1518 /* This is necessary because many things were based on the PC at the time that
1519 we attached to the monitor, which is no longer valid now that we have loaded
1520 new code (and just changed the PC). Another way to do this might be to call
1521 normal_stop, except that the stack may not be valid, and things would get
1522 horribly confused... */
1524 clear_symtab_users ();
1530 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
1531 SERIAL_SEND_BREAK (monitor_desc);
1532 if (current_monitor->stop)
1533 monitor_printf_noecho (current_monitor->stop);
1536 /* Put a command string, in args, out to MONITOR. Output from MONITOR
1537 is placed on the users terminal until the prompt is seen. FIXME: We
1538 read the characters ourseleves here cause of a nasty echo. */
1541 monitor_command (args, from_tty)
1549 if (monitor_desc == NULL)
1550 error ("monitor target not open.");
1552 p = current_monitor->prompt;
1554 /* Send the command. Note that if no args were supplied, then we're
1555 just sending the monitor a newline, which is sometimes useful. */
1557 monitor_printf ("%s\r", (args ? args : ""));
1559 resp_len = monitor_expect_prompt (buf, sizeof buf);
1561 fputs_unfiltered (buf, gdb_stdout); /* Output the response */
1564 /* Convert hex digit A to a number. */
1570 if (a >= '0' && a <= '9')
1572 if (a >= 'a' && a <= 'f')
1573 return a - 'a' + 10;
1574 if (a >= 'A' && a <= 'F')
1575 return a - 'A' + 10;
1577 error ("Reply contains invalid hex digit 0x%x", a);
1580 static struct target_ops monitor_ops =
1582 NULL, /* to_shortname */
1583 NULL, /* to_longname */
1586 monitor_close, /* to_close */
1587 NULL, /* to_attach */
1588 monitor_detach, /* to_detach */
1589 monitor_resume, /* to_resume */
1590 monitor_wait, /* to_wait */
1591 monitor_fetch_registers, /* to_fetch_registers */
1592 monitor_store_registers, /* to_store_registers */
1593 monitor_prepare_to_store, /* to_prepare_to_store */
1594 monitor_xfer_memory, /* to_xfer_memory */
1595 monitor_files_info, /* to_files_info */
1596 monitor_insert_breakpoint, /* to_insert_breakpoint */
1597 monitor_remove_breakpoint, /* to_remove_breakpoint */
1598 0, /* to_terminal_init */
1599 0, /* to_terminal_inferior */
1600 0, /* to_terminal_ours_for_output */
1601 0, /* to_terminal_ours */
1602 0, /* to_terminal_info */
1603 monitor_kill, /* to_kill */
1604 monitor_load, /* to_load */
1605 0, /* to_lookup_symbol */
1606 monitor_create_inferior, /* to_create_inferior */
1607 monitor_mourn_inferior, /* to_mourn_inferior */
1609 0, /* to_notice_signals */
1610 0, /* to_thread_alive */
1611 monitor_stop, /* to_stop */
1612 process_stratum, /* to_stratum */
1614 1, /* to_has_all_memory */
1615 1, /* to_has_memory */
1616 1, /* to_has_stack */
1617 1, /* to_has_registers */
1618 1, /* to_has_execution */
1620 0, /* sections_end */
1621 OPS_MAGIC /* to_magic */
1624 /* Init the target_ops structure pointed at by OPS */
1627 init_monitor_ops (ops)
1628 struct target_ops *ops;
1630 memcpy (ops, &monitor_ops, sizeof monitor_ops);
1633 /* Define additional commands that are usually only used by monitors. */
1636 _initialize_remote_monitors ()
1638 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
1640 "Set display of activity while downloading a file.\n\
1641 When enabled, a hashmark \'#\' is displayed.",
1645 add_com ("monitor", class_obscure, monitor_command,
1646 "Send a command to the debug monitor.");