1 /* Remote debugging interface for boot monitors, for GDB.
2 Copyright 1990, 1991, 1992, 1993, 1995, 1996, 1997
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));
92 static int monitor_read_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
93 static int monitor_write_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len));
95 static int monitor_expect_regexp PARAMS ((struct re_pattern_buffer *pat,
96 char *buf, int buflen));
98 static int from_hex PARAMS ((int a));
99 static unsigned long get_hex_word PARAMS ((void));
101 static void parse_register_dump PARAMS ((char *, int));
103 static struct monitor_ops *current_monitor;
105 static int hashmark; /* flag set by "set hash" */
107 static int timeout = 30;
109 static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */
111 static void (*ofunc)(); /* Old SIGINT signal handler */
113 /* Descriptor for I/O to remote machine. Initialize it to NULL so
114 that monitor_open knows that we don't have a file open when the
117 static serial_t monitor_desc = NULL;
119 /* Pointer to regexp pattern matching data */
121 static struct re_pattern_buffer register_pattern;
122 static char register_fastmap[256];
124 static struct re_pattern_buffer getmem_resp_delim_pattern;
125 static char getmem_resp_delim_fastmap[256];
127 static int dump_reg_flag; /* Non-zero means do a dump_registers cmd when
128 monitor_wait wakes up. */
130 static DCACHE *remote_dcache;
131 static int first_time=0; /* is this the first time we're executing after
132 gaving created the child proccess? */
134 /* Convert hex digit A to a number. */
140 if (a >= '0' && a <= '9')
142 else if (a >= 'a' && a <= 'f')
145 error ("Invalid hex digit %d", a);
148 /* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
149 Works just like printf. */
152 #ifdef ANSI_PROTOTYPES
153 monitor_printf_noecho (char *pattern, ...)
155 monitor_printf_noecho (va_alist)
164 va_start (args, pattern);
168 pattern = va_arg (args, char *);
171 vsprintf (sndbuf, pattern, args);
173 if (remote_debug > 0)
174 puts_debug ("sent -->", sndbuf, "<--");
176 len = strlen (sndbuf);
178 if (len + 1 > sizeof sndbuf)
181 monitor_write (sndbuf, len);
184 /* monitor_printf -- Send data to monitor and check the echo. Works just like
188 #ifdef ANSI_PROTOTYPES
189 monitor_printf (char *pattern, ...)
191 monitor_printf (va_alist)
199 #ifdef ANSI_PROTOTYPES
200 va_start (args, pattern);
204 pattern = va_arg (args, char *);
207 vsprintf (sndbuf, pattern, args);
209 if (remote_debug > 0)
210 puts_debug ("sent -->", sndbuf, "<--");
212 len = strlen (sndbuf);
214 if (len + 1 > sizeof sndbuf)
217 monitor_write (sndbuf, len);
219 /* We used to expect that the next immediate output was the characters we
220 just output, but sometimes some extra junk appeared before the characters
221 we expected, like an extra prompt, or a portmaster sending telnet negotiations.
222 So, just start searching for what we sent, and skip anything unknown. */
223 monitor_expect (sndbuf, (char *)0, 0);
227 /* Write characters to the remote system. */
230 monitor_write (buf, buflen)
234 if (SERIAL_WRITE(monitor_desc, buf, buflen))
235 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno));
239 /* Read a binary character from the remote system, doing all the fancy
240 timeout stuff, but without interpreting the character in any way,
241 and without printing remote debug information. */
252 c = SERIAL_READCHAR (monitor_desc, timeout);
255 c &= 0xff; /* don't lose bit 7 */
262 if (c == SERIAL_TIMEOUT)
263 error ("Timeout reading from remote system.");
265 perror_with_name ("remote-monitor");
269 /* Read a character from the remote system, doing all the fancy
277 static enum { last_random, last_nl, last_cr, last_crnl } state = last_random;
283 c = SERIAL_READCHAR (monitor_desc, timeout);
288 if (remote_debug > 0)
293 puts_debug ("read -->", buf, "<--");
297 /* Canonicialize \n\r combinations into one \r */
298 if ((current_monitor->flags & MO_HANDLE_NL) != 0)
300 if ((c == '\r' && state == last_nl)
301 || (c == '\n' && state == last_cr))
322 if (c == SERIAL_TIMEOUT)
323 #ifdef MAINTENANCE_CMDS
324 if (in_monitor_wait) /* Watchdog went off */
326 target_mourn_inferior ();
327 error ("Watchdog has expired. Target detached.\n");
331 error ("Timeout reading from remote system.");
333 perror_with_name ("remote-monitor");
336 /* Scan input from the remote system, until STRING is found. If BUF is non-
337 zero, then collect input until we have collected either STRING or BUFLEN-1
338 chars. In either case we terminate BUF with a 0. If input overflows BUF
339 because STRING can't be found, return -1, else return number of chars in BUF
340 (minus the terminating NUL). Note that in the non-overflow case, STRING
341 will be at the end of BUF. */
344 monitor_expect (string, buf, buflen)
350 int obuflen = buflen;
352 extern struct target_ops *targ_ops;
366 c = readchar (timeout);
373 c = readchar (timeout);
375 /* Don't expect any ^C sent to be echoed */
377 if (*p == '\003' || c == *p)
387 return obuflen - buflen;
393 else if ((c == '\021' || c == '\023') &&
394 (strcmp(targ_ops->to_shortname, "m32r") == 0))
395 { /* m32r monitor emits random DC1/DC3 chars */
407 /* Search for a regexp. */
410 monitor_expect_regexp (pat, buf, buflen)
411 struct re_pattern_buffer *pat;
422 mybuf = alloca (1024);
431 if (p - mybuf >= buflen)
432 { /* Buffer about to overflow */
434 /* On overflow, we copy the upper half of the buffer to the lower half. Not
435 great, but it usually works... */
437 memcpy (mybuf, mybuf + buflen / 2, buflen / 2);
438 p = mybuf + buflen / 2;
441 *p++ = readchar (timeout);
443 retval = re_search (pat, mybuf, p - mybuf, 0, p - mybuf, NULL);
449 /* Keep discarding input until we see the MONITOR prompt.
451 The convention for dealing with the prompt is that you
453 o *then* wait for the prompt.
455 Thus the last thing that a procedure does with the serial line will
456 be an monitor_expect_prompt(). Exception: monitor_resume does not
457 wait for the prompt, because the terminal is being handed over to
458 the inferior. However, the next thing which happens after that is
459 a monitor_wait which does wait for the prompt. Note that this
460 includes abnormal exit, e.g. error(). This is necessary to prevent
461 getting into states from which we can't recover. */
464 monitor_expect_prompt (buf, buflen)
468 return monitor_expect (current_monitor->prompt, buf, buflen);
471 /* Get N 32-bit words from remote, each preceded by a space, and put
472 them in registers starting at REGNO. */
483 ch = readchar (timeout);
488 for (i = 7; i >= 1; i--)
490 ch = readchar (timeout);
493 val = (val << 4) | from_hex (ch);
501 compile_pattern (pattern, compiled_pattern, fastmap)
503 struct re_pattern_buffer *compiled_pattern;
509 compiled_pattern->fastmap = fastmap;
511 tmp = re_set_syntax (RE_SYNTAX_EMACS);
512 val = re_compile_pattern (pattern,
518 error ("compile_pattern: Can't compile pattern string `%s': %s!", pattern, val);
521 re_compile_fastmap (compiled_pattern);
524 /* Open a connection to a remote debugger. NAME is the filename used
525 for communication. */
528 monitor_open (args, mon_ops, from_tty)
530 struct monitor_ops *mon_ops;
536 if (mon_ops->magic != MONITOR_OPS_MAGIC)
537 error ("Magic number of monitor_ops struct wrong.");
539 targ_ops = mon_ops->target;
540 name = targ_ops->to_shortname;
543 error ("Use `target %s DEVICE-NAME' to use a serial port, or \n\
544 `target %s HOST-NAME:PORT-NUMBER' to use a network connection.", name, name);
546 target_preopen (from_tty);
548 /* Setup pattern for register dump */
550 if (mon_ops->register_pattern)
551 compile_pattern (mon_ops->register_pattern, ®ister_pattern,
554 if (mon_ops->getmem.resp_delim)
555 compile_pattern (mon_ops->getmem.resp_delim, &getmem_resp_delim_pattern,
556 getmem_resp_delim_fastmap);
558 unpush_target (targ_ops);
562 dev_name = strsave (args);
564 monitor_desc = SERIAL_OPEN (dev_name);
567 perror_with_name (dev_name);
571 if (SERIAL_SETBAUDRATE (monitor_desc, baud_rate))
573 SERIAL_CLOSE (monitor_desc);
574 perror_with_name (dev_name);
578 SERIAL_RAW (monitor_desc);
580 SERIAL_FLUSH_INPUT (monitor_desc);
582 /* some systems only work with 2 stop bits */
584 SERIAL_SETSTOPBITS (monitor_desc, mon_ops->stopbits);
586 current_monitor = mon_ops;
588 /* See if we can wake up the monitor. First, try sending a stop sequence,
589 then send the init strings. Last, remove all breakpoints. */
591 if (current_monitor->stop)
594 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
596 monitor_expect_prompt (NULL, 0);
600 /* wake up the monitor and see if it's alive */
601 for (p = mon_ops->init; *p != NULL; p++)
603 /* Some of the characters we send may not be echoed,
604 but we hope to get a prompt at the end of it all. */
606 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
609 monitor_printf_noecho (*p);
610 monitor_expect_prompt (NULL, 0);
613 SERIAL_FLUSH_INPUT (monitor_desc);
615 /* Remove all breakpoints */
617 if (mon_ops->clr_all_break)
619 monitor_printf (mon_ops->clr_all_break);
620 monitor_expect_prompt (NULL, 0);
624 printf_unfiltered ("Remote target %s connected to %s\n", name, dev_name);
626 push_target (targ_ops);
628 inferior_pid = 42000; /* Make run command think we are busy... */
630 /* Give monitor_wait something to read */
632 monitor_printf (current_monitor->line_term);
634 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory);
639 /* Close out all files and local state before this target loses
643 monitor_close (quitting)
647 SERIAL_CLOSE (monitor_desc);
651 /* Terminate the open connection to the remote debugger. Use this
652 when you want to detach and do something else with your gdb. */
655 monitor_detach (args, from_tty)
659 pop_target (); /* calls monitor_close to do the real work */
661 printf_unfiltered ("Ending remote %s debugging\n", target_shortname);
664 /* Convert VALSTR into the target byte-ordered value of REGNO and store it. */
667 monitor_supply_register (regno, valstr)
672 unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
675 val = strtoul (valstr, &p, 16);
677 if (val == 0 && valstr == p)
678 error ("monitor_supply_register (%d): bad value from monitor: %s.",
681 /* supply register stores in target byte order, so swap here */
683 store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
685 supply_register (regno, regbuf);
690 /* Tell the remote machine to resume. */
693 monitor_resume (pid, step, sig)
695 enum target_signal sig;
697 /* Some monitors require a different command when starting a program */
698 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
701 monitor_printf ("run\r");
702 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
706 dcache_flush (remote_dcache);
708 monitor_printf (current_monitor->step);
711 monitor_printf (current_monitor->cont);
712 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
717 /* Parse the output of a register dump command. A monitor specific
718 regexp is used to extract individual register descriptions of the
719 form REG=VAL. Each description is split up into a name and a value
720 string which are passed down to monitor specific code. */
723 parse_register_dump (buf, len)
729 int regnamelen, vallen;
731 /* Element 0 points to start of register name, and element 1
732 points to the start of the register value. */
733 struct re_registers register_strings;
735 if (re_search (®ister_pattern, buf, len, 0, len,
736 ®ister_strings) == -1)
739 regnamelen = register_strings.end[1] - register_strings.start[1];
740 regname = buf + register_strings.start[1];
741 vallen = register_strings.end[2] - register_strings.start[2];
742 val = buf + register_strings.start[2];
744 current_monitor->supply_register (regname, regnamelen, val, vallen);
746 buf += register_strings.end[0];
747 len -= register_strings.end[0];
751 /* Send ^C to target to halt it. Target will respond, and send us a
755 monitor_interrupt (signo)
758 /* If this doesn't work, try more severe steps. */
759 signal (signo, monitor_interrupt_twice);
762 printf_unfiltered ("monitor_interrupt called\n");
767 /* The user typed ^C twice. */
770 monitor_interrupt_twice (signo)
773 signal (signo, ofunc);
775 monitor_interrupt_query ();
777 signal (signo, monitor_interrupt);
780 /* Ask the user what to do when an interrupt is received. */
783 monitor_interrupt_query ()
785 target_terminal_ours ();
787 if (query ("Interrupted while waiting for the program.\n\
788 Give up (and stop debugging it)? "))
790 target_mourn_inferior ();
791 return_to_top_level (RETURN_QUIT);
794 target_terminal_inferior ();
798 monitor_wait_cleanup (old_timeout)
801 timeout = old_timeout;
802 signal (SIGINT, ofunc);
806 /* Wait until the remote machine stops, then return, storing status in
807 status just as `wait' would. */
810 monitor_wait (pid, status)
812 struct target_waitstatus *status;
814 int old_timeout = timeout;
817 struct cleanup *old_chain;
819 status->kind = TARGET_WAITKIND_EXITED;
820 status->value.integer = 0;
822 old_chain = make_cleanup (monitor_wait_cleanup, old_timeout);
824 #ifdef MAINTENANCE_CMDS
826 timeout = watchdog > 0 ? watchdog : -1;
828 timeout = -1; /* Don't time out -- user program is running. */
831 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
835 resp_len = monitor_expect_prompt (buf, sizeof (buf));
838 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf);
840 while (resp_len < 0);
842 /* Print any output characters that were preceded by ^O. */
843 if (current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
847 for (i = 0; i < resp_len - 1; i++)
849 putchar_unfiltered (buf[++i]);
852 signal (SIGINT, ofunc);
854 timeout = old_timeout;
856 if (dump_reg_flag && current_monitor->dump_registers)
860 monitor_printf (current_monitor->dump_registers);
861 resp_len = monitor_expect_prompt (buf, sizeof (buf));
864 if (current_monitor->register_pattern)
865 parse_register_dump (buf, resp_len);
867 status->kind = TARGET_WAITKIND_STOPPED;
868 status->value.sig = TARGET_SIGNAL_TRAP;
870 discard_cleanups (old_chain);
877 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
881 monitor_fetch_register (regno)
885 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0};
886 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1];
889 name = current_monitor->regnames[regno];
893 supply_register (regno, zerobuf);
897 /* send the register examine command */
899 monitor_printf (current_monitor->getreg.cmd, name);
901 /* If RESP_DELIM is specified, we search for that as a leading
902 delimiter for the register value. Otherwise, we just start
903 searching from the start of the buf. */
905 if (current_monitor->getreg.resp_delim)
907 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
908 /* Handle case of first 32 registers listed in pairs. */
909 if (current_monitor->flags & MO_32_REGS_PAIRED
910 && regno & 1 == 1 && regno < 32)
911 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
914 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
915 if (current_monitor->flags & MO_HEX_PREFIX)
918 c = readchar (timeout);
920 c = readchar (timeout);
921 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
924 error ("Bad value returned from monitor while fetching register %x.",
928 /* Read upto the maximum number of hex digits for this register, skipping
929 spaces, but stop reading if something else is seen. Some monitors
930 like to drop leading zeros. */
932 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
935 c = readchar (timeout);
937 c = readchar (timeout);
945 regbuf[i] = '\000'; /* terminate the number */
947 /* If TERM is present, we wait for that to show up. Also, (if TERM
948 is present), we will send TERM_CMD if that is present. In any
949 case, we collect all of the output into buf, and then wait for
950 the normal prompt. */
952 if (current_monitor->getreg.term)
954 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */
956 if (current_monitor->getreg.term_cmd)
958 monitor_printf (current_monitor->getreg.term_cmd);
959 monitor_expect_prompt (NULL, 0);
963 monitor_expect_prompt (NULL, 0); /* get response */
965 monitor_supply_register (regno, regbuf);
968 /* Read the remote registers into the block regs. */
976 if (current_monitor->dump_registers)
978 monitor_printf (current_monitor->dump_registers);
979 resp_len = monitor_expect_prompt (buf, sizeof (buf));
980 parse_register_dump (buf, resp_len);
983 abort(); /* Need some way to read registers */
987 monitor_fetch_registers (regno)
990 if (current_monitor->getreg.cmd)
994 monitor_fetch_register (regno);
998 for (regno = 0; regno < NUM_REGS; regno++)
999 monitor_fetch_register (regno);
1002 monitor_dump_regs ();
1006 /* Store register REGNO, or all if REGNO == 0. Return errno value. */
1009 monitor_store_register (regno)
1015 name = current_monitor->regnames[regno];
1019 val = read_register (regno);
1021 /* send the register deposit command */
1023 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
1024 monitor_printf (current_monitor->setreg.cmd, val, name);
1025 else if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1026 monitor_printf (current_monitor->setreg.cmd, name);
1028 monitor_printf (current_monitor->setreg.cmd, name, val);
1030 if (current_monitor->setreg.term)
1032 monitor_expect (current_monitor->setreg.term, NULL, 0);
1034 if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1035 monitor_printf ("%x\r", val);
1037 monitor_expect_prompt (NULL, 0);
1040 monitor_expect_prompt (NULL, 0);
1043 /* Store the remote registers. */
1046 monitor_store_registers (regno)
1051 monitor_store_register (regno);
1055 for (regno = 0; regno < NUM_REGS; regno++)
1056 monitor_store_register (regno);
1059 /* Get ready to modify the registers array. On machines which store
1060 individual registers, this doesn't need to do anything. On machines
1061 which store all the registers in one fell swoop, this makes sure
1062 that registers contains all the registers from the program being
1066 monitor_prepare_to_store ()
1068 /* Do nothing, since we can store individual regs */
1072 monitor_files_info (ops)
1073 struct target_ops *ops;
1075 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
1079 monitor_write_memory (memaddr, myaddr, len)
1088 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1089 memaddr = ADDR_BITS_REMOVE (memaddr);
1091 /* Use memory fill command for leading 0 bytes. */
1093 if (current_monitor->fill)
1095 for (i = 0; i < len; i++)
1099 if (i > 4) /* More than 4 zeros is worth doing */
1101 if (current_monitor->flags & MO_FILL_USES_ADDR)
1102 monitor_printf (current_monitor->fill, memaddr, memaddr + i, 0);
1104 monitor_printf (current_monitor->fill, memaddr, i, 0);
1106 monitor_expect_prompt (NULL, 0);
1113 /* Can't actually use long longs if VAL is an int (nice idea, though). */
1114 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1117 cmd = current_monitor->setmem.cmdll;
1121 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1124 cmd = current_monitor->setmem.cmdl;
1126 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1129 cmd = current_monitor->setmem.cmdw;
1134 cmd = current_monitor->setmem.cmdb;
1137 val = extract_unsigned_integer (myaddr, len);
1139 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1140 monitor_printf_noecho (cmd, memaddr, val);
1141 else if (current_monitor->flags & MO_SETMEM_INTERACTIVE)
1144 monitor_printf_noecho (cmd, memaddr);
1146 if (current_monitor->setmem.term)
1148 monitor_expect (current_monitor->setmem.term, NULL, 0);
1150 monitor_printf ("%x\r", val);
1155 monitor_printf (cmd, memaddr, val);
1157 monitor_expect_prompt (NULL, 0);
1162 /* This is an alternate form of monitor_read_memory which is used for monitors
1163 which can only read a single byte/word/etc. at a time. */
1166 monitor_read_memory_single (memaddr, myaddr, len)
1172 char membuf[sizeof(int) * 2 + 1];
1178 /* Can't actually use long longs (nice idea, though). In fact, the
1179 call to strtoul below will fail if it tries to convert a value
1180 that's too big to fit in a long. */
1181 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1184 cmd = current_monitor->getmem.cmdll;
1188 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1191 cmd = current_monitor->getmem.cmdl;
1193 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1196 cmd = current_monitor->getmem.cmdw;
1201 cmd = current_monitor->getmem.cmdb;
1204 /* Send the examine command. */
1206 monitor_printf (cmd, memaddr);
1208 /* If RESP_DELIM is specified, we search for that as a leading
1209 delimiter for the memory value. Otherwise, we just start
1210 searching from the start of the buf. */
1212 if (current_monitor->getmem.resp_delim)
1213 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1215 /* Now, read the appropriate number of hex digits for this loc,
1218 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
1219 if (current_monitor->flags & MO_HEX_PREFIX)
1223 c = readchar (timeout);
1225 c = readchar (timeout);
1226 if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1229 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1230 memaddr, i, membuf, c);
1232 for (i = 0; i < len * 2; i++)
1238 c = readchar (timeout);
1244 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1245 memaddr, i, membuf, c);
1251 membuf[i] = '\000'; /* terminate the number */
1253 /* If TERM is present, we wait for that to show up. Also, (if TERM is
1254 present), we will send TERM_CMD if that is present. In any case, we collect
1255 all of the output into buf, and then wait for the normal prompt. */
1257 if (current_monitor->getmem.term)
1259 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */
1261 if (current_monitor->getmem.term_cmd)
1263 monitor_printf (current_monitor->getmem.term_cmd);
1264 monitor_expect_prompt (NULL, 0);
1268 monitor_expect_prompt (NULL, 0); /* get response */
1271 val = strtoul (membuf, &p, 16);
1273 if (val == 0 && membuf == p)
1274 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.",
1277 /* supply register stores in target byte order, so swap here */
1279 store_unsigned_integer (myaddr, len, val);
1284 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1285 memory at MEMADDR. Returns length moved. Currently, we do no more
1286 than 16 bytes at a time. */
1289 monitor_read_memory (memaddr, myaddr, len)
1301 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1302 memaddr = ADDR_BITS_REMOVE (memaddr);
1304 if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1305 return monitor_read_memory_single (memaddr, myaddr, len);
1307 len = min (len, 16);
1309 dumpaddr = memaddr & ~0xf;
1311 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
1312 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1313 len = ((memaddr + len) & ~0xf) - memaddr;
1315 /* send the memory examine command */
1317 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1318 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1);
1319 else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1320 monitor_printf (current_monitor->getmem.cmdb, dumpaddr);
1322 monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1324 /* If TERM is present, we wait for that to show up. Also, (if TERM
1325 is present), we will send TERM_CMD if that is present. In any
1326 case, we collect all of the output into buf, and then wait for
1327 the normal prompt. */
1329 if (current_monitor->getmem.term)
1331 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */
1334 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.",
1335 memaddr, resp_len, buf);
1337 if (current_monitor->getmem.term_cmd)
1339 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1340 strlen (current_monitor->getmem.term_cmd));
1341 monitor_expect_prompt (NULL, 0);
1345 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */
1349 /* If RESP_DELIM is specified, we search for that as a leading
1350 delimiter for the values. Otherwise, we just start searching
1351 from the start of the buf. */
1353 if (current_monitor->getmem.resp_delim)
1356 struct re_registers resp_strings;
1359 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1363 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1364 memaddr, resp_len, buf);
1366 p += resp_strings.end[0];
1368 p = strstr (p, current_monitor->getmem.resp_delim);
1370 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1371 memaddr, resp_len, buf);
1372 p += strlen (current_monitor->getmem.resp_delim);
1376 if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1379 while (!(*p == '\000' || *p == '\n' || *p == '\r') && i > 0)
1383 if (dumpaddr >= memaddr && i > 0)
1385 val = fromhex (*p) * 16 + fromhex (*(p+1));
1397 for (i = len; i > 0; i--)
1399 /* Skip non-hex chars, but bomb on end of string and newlines */
1406 if (*p == '\000' || *p == '\n' || *p == '\r')
1407 error ("monitor_read_memory (0x%x): badly terminated response from monitor: %.*s", memaddr, resp_len, buf);
1411 val = strtoul (p, &p1, 16);
1413 if (val == 0 && p == p1)
1414 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr,
1429 monitor_xfer_memory (memaddr, myaddr, len, write, target)
1434 struct target_ops *target; /* ignored */
1436 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
1442 return; /* ignore attempts to kill target system */
1445 /* All we actually do is set the PC to the start address of exec_bfd, and start
1446 the program at that point. */
1449 monitor_create_inferior (exec_file, args, env)
1454 if (args && (*args != '\000'))
1455 error ("Args are not supported by the monitor.");
1458 clear_proceed_status ();
1459 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
1462 /* Clean up when a program exits.
1463 The program actually lives on in the remote processor's RAM, and may be
1464 run again without a download. Don't leave it full of breakpoint
1468 monitor_mourn_inferior ()
1470 unpush_target (targ_ops);
1471 generic_mourn_inferior (); /* Do all the proper things now */
1474 #define NUM_MONITOR_BREAKPOINTS 8
1476 static CORE_ADDR breakaddr[NUM_MONITOR_BREAKPOINTS] = {0};
1478 /* Tell the monitor to add a breakpoint. */
1481 monitor_insert_breakpoint (addr, shadow)
1489 if (current_monitor->set_break == NULL)
1490 error ("No set_break defined for this monitor");
1492 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1493 addr = ADDR_BITS_REMOVE (addr);
1495 /* Determine appropriate breakpoint size for this address. */
1496 bp = memory_breakpoint_from_pc (&addr, &bplen);
1498 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1500 if (breakaddr[i] == 0)
1502 breakaddr[i] = addr;
1503 monitor_read_memory (addr, shadow, bplen);
1504 monitor_printf (current_monitor->set_break, addr);
1505 monitor_expect_prompt (NULL, 0);
1510 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS);
1513 /* Tell the monitor to remove a breakpoint. */
1516 monitor_remove_breakpoint (addr, shadow)
1522 if (current_monitor->clr_break == NULL)
1523 error ("No clr_break defined for this monitor");
1525 if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1526 addr = ADDR_BITS_REMOVE (addr);
1528 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++)
1530 if (breakaddr[i] == addr)
1533 /* some monitors remove breakpoints based on the address */
1534 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
1535 monitor_printf (current_monitor->clr_break, addr);
1536 else if (current_monitor->flags & MO_CLR_BREAK_1_BASED)
1537 monitor_printf (current_monitor->clr_break, i + 1);
1539 monitor_printf (current_monitor->clr_break, i);
1540 monitor_expect_prompt (NULL, 0);
1544 fprintf_unfiltered (stderr, "Can't find breakpoint associated with 0x%x\n", addr);
1548 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
1549 an S-record. Return non-zero if the ACK is received properly. */
1552 monitor_wait_srec_ack ()
1556 if (current_monitor->flags & MO_SREC_ACK_PLUS)
1558 return (readchar (timeout) == '+');
1560 else if (current_monitor->flags & MO_SREC_ACK_ROTATE)
1562 /* Eat two backspaces, a "rotating" char (|/-\), and a space. */
1563 if ((ch = readchar (1)) < 0)
1565 if ((ch = readchar (1)) < 0)
1567 if ((ch = readchar (1)) < 0)
1569 if ((ch = readchar (1)) < 0)
1575 /* monitor_load -- download a file. */
1578 monitor_load (file, from_tty)
1582 dcache_flush (remote_dcache);
1584 if (current_monitor->load_routine)
1585 current_monitor->load_routine (monitor_desc, file, hashmark);
1587 { /* The default is ascii S-records */
1589 unsigned long load_offset;
1592 /* enable user to specify address for downloading as 2nd arg to load */
1593 n = sscanf (file, "%s 0x%lx", buf, &load_offset);
1599 monitor_printf (current_monitor->load);
1600 if (current_monitor->loadresp)
1601 monitor_expect (current_monitor->loadresp, NULL, 0);
1603 load_srec (monitor_desc, file, (bfd_vma) load_offset,
1604 32, SREC_ALL, hashmark,
1605 current_monitor->flags & MO_SREC_ACK ?
1606 monitor_wait_srec_ack : NULL);
1608 monitor_expect_prompt (NULL, 0);
1611 /* Finally, make the PC point at the start address */
1614 write_pc (bfd_get_start_address (exec_bfd));
1616 inferior_pid = 0; /* No process now */
1618 /* This is necessary because many things were based on the PC at the time that
1619 we attached to the monitor, which is no longer valid now that we have loaded
1620 new code (and just changed the PC). Another way to do this might be to call
1621 normal_stop, except that the stack may not be valid, and things would get
1622 horribly confused... */
1624 clear_symtab_users ();
1630 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
1631 SERIAL_SEND_BREAK (monitor_desc);
1632 if (current_monitor->stop)
1633 monitor_printf_noecho (current_monitor->stop);
1636 /* Put a command string, in args, out to MONITOR. Output from MONITOR
1637 is placed on the users terminal until the prompt is seen. FIXME: We
1638 read the characters ourseleves here cause of a nasty echo. */
1641 monitor_command (args, from_tty)
1649 if (monitor_desc == NULL)
1650 error ("monitor target not open.");
1652 p = current_monitor->prompt;
1654 /* Send the command. Note that if no args were supplied, then we're
1655 just sending the monitor a newline, which is sometimes useful. */
1657 monitor_printf ("%s\r", (args ? args : ""));
1659 resp_len = monitor_expect_prompt (buf, sizeof buf);
1661 fputs_unfiltered (buf, gdb_stdout); /* Output the response */
1664 /* Convert hex digit A to a number. */
1671 if (a >= '0' && a <= '9')
1673 if (a >= 'a' && a <= 'f')
1674 return a - 'a' + 10;
1675 if (a >= 'A' && a <= 'F')
1676 return a - 'A' + 10;
1678 error ("Reply contains invalid hex digit 0x%x", a);
1683 monitor_get_dev_name ()
1688 static struct target_ops monitor_ops =
1690 NULL, /* to_shortname */
1691 NULL, /* to_longname */
1694 monitor_close, /* to_close */
1695 NULL, /* to_attach */
1696 monitor_detach, /* to_detach */
1697 monitor_resume, /* to_resume */
1698 monitor_wait, /* to_wait */
1699 monitor_fetch_registers, /* to_fetch_registers */
1700 monitor_store_registers, /* to_store_registers */
1701 monitor_prepare_to_store, /* to_prepare_to_store */
1702 monitor_xfer_memory, /* to_xfer_memory */
1703 monitor_files_info, /* to_files_info */
1704 monitor_insert_breakpoint, /* to_insert_breakpoint */
1705 monitor_remove_breakpoint, /* to_remove_breakpoint */
1706 0, /* to_terminal_init */
1707 0, /* to_terminal_inferior */
1708 0, /* to_terminal_ours_for_output */
1709 0, /* to_terminal_ours */
1710 0, /* to_terminal_info */
1711 monitor_kill, /* to_kill */
1712 monitor_load, /* to_load */
1713 0, /* to_lookup_symbol */
1714 monitor_create_inferior, /* to_create_inferior */
1715 monitor_mourn_inferior, /* to_mourn_inferior */
1717 0, /* to_notice_signals */
1718 0, /* to_thread_alive */
1719 monitor_stop, /* to_stop */
1720 process_stratum, /* to_stratum */
1722 1, /* to_has_all_memory */
1723 1, /* to_has_memory */
1724 1, /* to_has_stack */
1725 1, /* to_has_registers */
1726 1, /* to_has_execution */
1728 0, /* sections_end */
1729 OPS_MAGIC /* to_magic */
1732 /* Init the target_ops structure pointed at by OPS */
1735 init_monitor_ops (ops)
1736 struct target_ops *ops;
1738 memcpy (ops, &monitor_ops, sizeof monitor_ops);
1741 /* Define additional commands that are usually only used by monitors. */
1744 _initialize_remote_monitors ()
1746 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
1748 "Set display of activity while downloading a file.\n\
1749 When enabled, a hashmark \'#\' is displayed.",
1753 add_com ("monitor", class_obscure, monitor_command,
1754 "Send a command to the debug monitor.");