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 void monitor_vsprintf
PARAMS ((char *sndbuf
, char *pattern
, va_list args
));
67 static int readchar
PARAMS ((int timeout
));
69 static void monitor_command
PARAMS ((char *args
, int fromtty
));
71 static void monitor_fetch_register
PARAMS ((int regno
));
72 static void monitor_store_register
PARAMS ((int regno
));
74 static void monitor_detach
PARAMS ((char *args
, int from_tty
));
75 static void monitor_resume
PARAMS ((int pid
, int step
, enum target_signal sig
));
76 static void monitor_interrupt
PARAMS ((int signo
));
77 static void monitor_interrupt_twice
PARAMS ((int signo
));
78 static void monitor_interrupt_query
PARAMS ((void));
79 static void monitor_wait_cleanup
PARAMS ((int old_timeout
));
81 static int monitor_wait
PARAMS ((int pid
, struct target_waitstatus
*status
));
82 static void monitor_fetch_registers
PARAMS ((int regno
));
83 static void monitor_store_registers
PARAMS ((int regno
));
84 static void monitor_prepare_to_store
PARAMS ((void));
85 static int monitor_xfer_memory
PARAMS ((CORE_ADDR memaddr
, char *myaddr
, int len
, int write
, struct target_ops
*target
));
86 static void monitor_files_info
PARAMS ((struct target_ops
*ops
));
87 static int monitor_insert_breakpoint
PARAMS ((CORE_ADDR addr
, char *shadow
));
88 static int monitor_remove_breakpoint
PARAMS ((CORE_ADDR addr
, char *shadow
));
89 static void monitor_kill
PARAMS ((void));
90 static void monitor_load
PARAMS ((char *file
, int from_tty
));
91 static void monitor_mourn_inferior
PARAMS ((void));
92 static void monitor_stop
PARAMS ((void));
94 static int monitor_read_memory
PARAMS ((CORE_ADDR addr
, char *myaddr
,int len
));
95 static int monitor_write_memory
PARAMS ((CORE_ADDR addr
, char *myaddr
,int len
));
96 static int monitor_write_memory_bytes
PARAMS ((CORE_ADDR addr
,
97 char *myaddr
,int len
));
98 static int monitor_write_memory_block
PARAMS((
102 static int monitor_expect_regexp
PARAMS ((struct re_pattern_buffer
*pat
,
103 char *buf
, int buflen
));
104 static void monitor_dump_regs
PARAMS((void)) ;
106 static int from_hex
PARAMS ((int a
));
107 static unsigned long get_hex_word
PARAMS ((void));
109 static void parse_register_dump
PARAMS ((char *, int));
111 static struct monitor_ops
*current_monitor
;
113 static int hashmark
; /* flag set by "set hash" */
115 static int timeout
= 30;
117 static int in_monitor_wait
= 0; /* Non-zero means we are in monitor_wait() */
119 static void (*ofunc
)(); /* Old SIGINT signal handler */
121 /* Extra remote debugging for developing a new rom monitor variation */
122 #if ! defined(EXTRA_RDEBUG)
123 #define EXTRA_RDEBUG 1
126 #define RDEBUG(stuff) { if (remote_debug) printf stuff ; }
128 #define RDEBUG(stuff) {}
131 /* Descriptor for I/O to remote machine. Initialize it to NULL so
132 that monitor_open knows that we don't have a file open when the
135 static serial_t monitor_desc
= NULL
;
137 /* Pointer to regexp pattern matching data */
139 static struct re_pattern_buffer register_pattern
;
140 static char register_fastmap
[256];
142 static struct re_pattern_buffer getmem_resp_delim_pattern
;
143 static char getmem_resp_delim_fastmap
[256];
145 static int dump_reg_flag
; /* Non-zero means do a dump_registers cmd when
146 monitor_wait wakes up. */
148 static DCACHE
*remote_dcache
;
149 static int first_time
=0; /* is this the first time we're executing after
150 gaving created the child proccess? */
152 /* Convert hex digit A to a number. */
158 if (a
>= '0' && a
<= '9')
160 else if (a
>= 'a' && a
<= 'f')
163 if (a
>= 'A' && a
<= 'F')
164 return a
- 'A' + 10 ;
165 else error ("Invalid hex digit %d", a
);
168 /* monitor_vsprintf - similar to vsprintf but handles 64-bit addresses
170 This function exists to get around the problem that many host platforms
171 don't have a printf that can print 64-bit addresses. The %A format
172 specification is recognized as a special case, and causes the argument
173 to be printed as a 64-bit hexadecimal address.
175 Only format specifiers of the form "[0-9]*[a-z]" are recognized.
176 If it is a '%s' format, the argument is a string; otherwise the
177 argument is assumed to be a long integer.
181 monitor_vsprintf (sndbuf
, pattern
, args
)
194 for (p
= pattern
; *p
; p
++)
198 /* Copy the format specifier to a separate buffer. */
200 for (i
= 1; *p
>= '0' && *p
<= '9' && i
< (int) sizeof (format
) - 2;
203 format
[i
] = fmt
= *p
;
206 /* Fetch the next argument and print it. */
210 arg_addr
= va_arg (args
, CORE_ADDR
);
211 strcpy (sndbuf
, paddr_nz (arg_addr
));
214 arg_string
= va_arg (args
, char *);
215 sprintf (sndbuf
, format
, arg_string
);
218 arg_int
= va_arg (args
, long);
219 sprintf (sndbuf
, format
, arg_int
);
222 sndbuf
+= strlen (sndbuf
);
231 /* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
232 Works just like printf. */
235 #ifdef ANSI_PROTOTYPES
236 monitor_printf_noecho (char *pattern
, ...)
238 monitor_printf_noecho (va_alist
)
247 va_start (args
, pattern
);
251 pattern
= va_arg (args
, char *);
254 monitor_vsprintf (sndbuf
, pattern
, args
);
257 if (remote_debug
> 0)
258 puts_debug ("sent -->", sndbuf
, "<--");
260 RDEBUG(("sent[%s]\n",sndbuf
)) ;
262 len
= strlen (sndbuf
);
264 if (len
+ 1 > sizeof sndbuf
)
267 monitor_write (sndbuf
, len
);
270 /* monitor_printf -- Send data to monitor and check the echo. Works just like
274 #ifdef ANSI_PROTOTYPES
275 monitor_printf (char *pattern
, ...)
277 monitor_printf (va_alist
)
285 #ifdef ANSI_PROTOTYPES
286 va_start (args
, pattern
);
290 pattern
= va_arg (args
, char *);
293 monitor_vsprintf (sndbuf
, pattern
, args
);
296 if (remote_debug
> 0)
297 puts_debug ("sent -->", sndbuf
, "<--");
299 RDEBUG(("sent[%s]\n",sndbuf
))
300 len
= strlen (sndbuf
);
301 if (len
+ 1 > sizeof sndbuf
)
304 monitor_write (sndbuf
, len
);
306 /* We used to expect that the next immediate output was the characters we
307 just output, but sometimes some extra junk appeared before the characters
308 we expected, like an extra prompt, or a portmaster sending telnet negotiations.
309 So, just start searching for what we sent, and skip anything unknown. */
310 RDEBUG(("ExpectEcho\n"))
311 monitor_expect (sndbuf
, (char *)0, 0);
315 /* Write characters to the remote system. */
318 monitor_write (buf
, buflen
)
322 if (SERIAL_WRITE(monitor_desc
, buf
, buflen
))
323 fprintf_unfiltered (stderr
, "SERIAL_WRITE failed: %s\n", safe_strerror (errno
));
327 /* Read a binary character from the remote system, doing all the fancy
328 timeout stuff, but without interpreting the character in any way,
329 and without printing remote debug information. */
340 c
= SERIAL_READCHAR (monitor_desc
, timeout
);
343 c
&= 0xff; /* don't lose bit 7 */
350 if (c
== SERIAL_TIMEOUT
)
351 error ("Timeout reading from remote system.");
353 perror_with_name ("remote-monitor");
357 /* Read a character from the remote system, doing all the fancy
365 static enum { last_random
, last_nl
, last_cr
, last_crnl
} state
= last_random
;
371 c
= SERIAL_READCHAR (monitor_desc
, timeout
);
377 /* This seems to interfere with proper function of the
379 if (remote_debug
> 0)
384 puts_debug ("read -->", buf
, "<--");
390 /* Canonicialize \n\r combinations into one \r */
391 if ((current_monitor
->flags
& MO_HANDLE_NL
) != 0)
393 if ((c
== '\r' && state
== last_nl
)
394 || (c
== '\n' && state
== last_cr
))
415 if (c
== SERIAL_TIMEOUT
)
416 #if 0 /* MAINTENANCE_CMDS */
417 /* I fail to see how detaching here can be useful
418 if (in_monitor_wait) /* Watchdog went off */
420 target_mourn_inferior ();
421 error ("GDB serial timeout has expired. Target detached.\n");
425 error ("Timeout reading from remote system.");
427 perror_with_name ("remote-monitor");
430 /* Scan input from the remote system, until STRING is found. If BUF is non-
431 zero, then collect input until we have collected either STRING or BUFLEN-1
432 chars. In either case we terminate BUF with a 0. If input overflows BUF
433 because STRING can't be found, return -1, else return number of chars in BUF
434 (minus the terminating NUL). Note that in the non-overflow case, STRING
435 will be at the end of BUF. */
438 monitor_expect (string
, buf
, buflen
)
444 int obuflen
= buflen
;
446 extern struct target_ops
*targ_ops
;
447 RDEBUG(("MON Expecting '%s'\n",string
)) ;
461 c
= readchar (timeout
);
468 c
= readchar (timeout
);
470 /* Don't expect any ^C sent to be echoed */
472 if (*p
== '\003' || c
== *p
)
482 return obuflen
- buflen
;
488 else if ((c
== '\021' || c
== '\023') &&
489 (strcmp(targ_ops
->to_shortname
, "m32r") == 0))
490 { /* m32r monitor emits random DC1/DC3 chars */
502 /* Search for a regexp. */
505 monitor_expect_regexp (pat
, buf
, buflen
)
506 struct re_pattern_buffer
*pat
;
512 RDEBUG(("MON Expecting regexp\n")) ;
517 mybuf
= alloca (1024);
526 if (p
- mybuf
>= buflen
)
527 { /* Buffer about to overflow */
529 /* On overflow, we copy the upper half of the buffer to the lower half. Not
530 great, but it usually works... */
532 memcpy (mybuf
, mybuf
+ buflen
/ 2, buflen
/ 2);
533 p
= mybuf
+ buflen
/ 2;
536 *p
++ = readchar (timeout
);
538 retval
= re_search (pat
, mybuf
, p
- mybuf
, 0, p
- mybuf
, NULL
);
544 /* Keep discarding input until we see the MONITOR prompt.
546 The convention for dealing with the prompt is that you
548 o *then* wait for the prompt.
550 Thus the last thing that a procedure does with the serial line will
551 be an monitor_expect_prompt(). Exception: monitor_resume does not
552 wait for the prompt, because the terminal is being handed over to
553 the inferior. However, the next thing which happens after that is
554 a monitor_wait which does wait for the prompt. Note that this
555 includes abnormal exit, e.g. error(). This is necessary to prevent
556 getting into states from which we can't recover. */
559 monitor_expect_prompt (buf
, buflen
)
563 RDEBUG(("MON Expecting prompt\n"))
564 return monitor_expect (current_monitor
->prompt
, buf
, buflen
);
567 /* Get N 32-bit words from remote, each preceded by a space, and put
568 them in registers starting at REGNO. */
579 ch
= readchar (timeout
);
584 for (i
= 7; i
>= 1; i
--)
586 ch
= readchar (timeout
);
589 val
= (val
<< 4) | from_hex (ch
);
597 compile_pattern (pattern
, compiled_pattern
, fastmap
)
599 struct re_pattern_buffer
*compiled_pattern
;
605 compiled_pattern
->fastmap
= fastmap
;
607 tmp
= re_set_syntax (RE_SYNTAX_EMACS
);
608 val
= re_compile_pattern (pattern
,
614 error ("compile_pattern: Can't compile pattern string `%s': %s!", pattern
, val
);
617 re_compile_fastmap (compiled_pattern
);
620 /* Open a connection to a remote debugger. NAME is the filename used
621 for communication. */
624 monitor_open (args
, mon_ops
, from_tty
)
626 struct monitor_ops
*mon_ops
;
632 if (mon_ops
->magic
!= MONITOR_OPS_MAGIC
)
633 error ("Magic number of monitor_ops struct wrong.");
635 targ_ops
= mon_ops
->target
;
636 name
= targ_ops
->to_shortname
;
639 error ("Use `target %s DEVICE-NAME' to use a serial port, or \n\
640 `target %s HOST-NAME:PORT-NUMBER' to use a network connection.", name
, name
);
642 target_preopen (from_tty
);
644 /* Setup pattern for register dump */
646 if (mon_ops
->register_pattern
)
647 compile_pattern (mon_ops
->register_pattern
, ®ister_pattern
,
650 if (mon_ops
->getmem
.resp_delim
)
651 compile_pattern (mon_ops
->getmem
.resp_delim
, &getmem_resp_delim_pattern
,
652 getmem_resp_delim_fastmap
);
654 unpush_target (targ_ops
);
658 dev_name
= strsave (args
);
660 monitor_desc
= SERIAL_OPEN (dev_name
);
663 perror_with_name (dev_name
);
667 if (SERIAL_SETBAUDRATE (monitor_desc
, baud_rate
))
669 SERIAL_CLOSE (monitor_desc
);
670 perror_with_name (dev_name
);
674 SERIAL_RAW (monitor_desc
);
676 SERIAL_FLUSH_INPUT (monitor_desc
);
678 /* some systems only work with 2 stop bits */
680 SERIAL_SETSTOPBITS (monitor_desc
, mon_ops
->stopbits
);
682 current_monitor
= mon_ops
;
684 /* See if we can wake up the monitor. First, try sending a stop sequence,
685 then send the init strings. Last, remove all breakpoints. */
687 if (current_monitor
->stop
)
690 if ((current_monitor
->flags
& MO_NO_ECHO_ON_OPEN
) == 0)
692 RDEBUG(("EXP Open echo\n")) ;
693 monitor_expect_prompt (NULL
, 0);
697 /* wake up the monitor and see if it's alive */
698 for (p
= mon_ops
->init
; *p
!= NULL
; p
++)
700 /* Some of the characters we send may not be echoed,
701 but we hope to get a prompt at the end of it all. */
703 if ((current_monitor
->flags
& MO_NO_ECHO_ON_OPEN
) == 0)
706 monitor_printf_noecho (*p
);
707 monitor_expect_prompt (NULL
, 0);
710 SERIAL_FLUSH_INPUT (monitor_desc
);
712 /* Remove all breakpoints */
714 if (mon_ops
->clr_all_break
)
716 monitor_printf (mon_ops
->clr_all_break
);
717 monitor_expect_prompt (NULL
, 0);
721 printf_unfiltered ("Remote target %s connected to %s\n", name
, dev_name
);
723 push_target (targ_ops
);
725 inferior_pid
= 42000; /* Make run command think we are busy... */
727 /* Give monitor_wait something to read */
729 monitor_printf (current_monitor
->line_term
);
731 if (current_monitor
->flags
& MO_HAS_BLOCKWRITES
)
732 remote_dcache
= dcache_init (monitor_read_memory
, monitor_write_memory_block
);
734 remote_dcache
= dcache_init (monitor_read_memory
, monitor_write_memory
);
738 /* Close out all files and local state before this target loses
742 monitor_close (quitting
)
746 SERIAL_CLOSE (monitor_desc
);
750 /* Terminate the open connection to the remote debugger. Use this
751 when you want to detach and do something else with your gdb. */
754 monitor_detach (args
, from_tty
)
758 pop_target (); /* calls monitor_close to do the real work */
760 printf_unfiltered ("Ending remote %s debugging\n", target_shortname
);
763 /* Convert VALSTR into the target byte-ordered value of REGNO and store it. */
766 monitor_supply_register (regno
, valstr
)
771 unsigned char regbuf
[MAX_REGISTER_RAW_SIZE
];
774 val
= strtoul (valstr
, &p
, 16);
775 RDEBUG(("Supplying Register %d %s\n",regno
,valstr
)) ;
777 if (val
== 0 && valstr
== p
)
778 error ("monitor_supply_register (%d): bad value from monitor: %s.",
781 /* supply register stores in target byte order, so swap here */
783 store_unsigned_integer (regbuf
, REGISTER_RAW_SIZE (regno
), val
);
785 supply_register (regno
, regbuf
);
790 /* Tell the remote machine to resume. */
792 int flush_monitor_dcache(void) { dcache_flush (remote_dcache
); }
795 monitor_resume (pid
, step
, sig
)
797 enum target_signal sig
;
799 /* Some monitors require a different command when starting a program */
800 RDEBUG(("MON resume\n")) ;
801 if (current_monitor
->flags
& MO_RUN_FIRST_TIME
&& first_time
== 1)
804 monitor_printf ("run\r");
805 if (current_monitor
->flags
& MO_NEED_REGDUMP_AFTER_CONT
)
809 dcache_flush (remote_dcache
);
811 monitor_printf (current_monitor
->step
);
814 if (current_monitor
->continue_hook
)
815 (*current_monitor
->continue_hook
)() ;
816 else monitor_printf (current_monitor
->cont
);
817 if (current_monitor
->flags
& MO_NEED_REGDUMP_AFTER_CONT
)
822 /* Parse the output of a register dump command. A monitor specific
823 regexp is used to extract individual register descriptions of the
824 form REG=VAL. Each description is split up into a name and a value
825 string which are passed down to monitor specific code. */
828 parse_register_dump (buf
, len
)
832 RDEBUG(("MON Parsing register dump\n"))
835 int regnamelen
, vallen
;
837 /* Element 0 points to start of register name, and element 1
838 points to the start of the register value. */
839 struct re_registers register_strings
;
841 if (re_search (®ister_pattern
, buf
, len
, 0, len
,
842 ®ister_strings
) == -1)
845 regnamelen
= register_strings
.end
[1] - register_strings
.start
[1];
846 regname
= buf
+ register_strings
.start
[1];
847 vallen
= register_strings
.end
[2] - register_strings
.start
[2];
848 val
= buf
+ register_strings
.start
[2];
850 current_monitor
->supply_register (regname
, regnamelen
, val
, vallen
);
852 buf
+= register_strings
.end
[0];
853 len
-= register_strings
.end
[0];
857 /* Send ^C to target to halt it. Target will respond, and send us a
861 monitor_interrupt (signo
)
864 /* If this doesn't work, try more severe steps. */
865 signal (signo
, monitor_interrupt_twice
);
868 printf_unfiltered ("monitor_interrupt called\n");
873 /* The user typed ^C twice. */
876 monitor_interrupt_twice (signo
)
879 signal (signo
, ofunc
);
881 monitor_interrupt_query ();
883 signal (signo
, monitor_interrupt
);
886 /* Ask the user what to do when an interrupt is received. */
889 monitor_interrupt_query ()
891 target_terminal_ours ();
893 if (query ("Interrupted while waiting for the program.\n\
894 Give up (and stop debugging it)? "))
896 target_mourn_inferior ();
897 return_to_top_level (RETURN_QUIT
);
900 target_terminal_inferior ();
904 monitor_wait_cleanup (old_timeout
)
907 timeout
= old_timeout
;
908 signal (SIGINT
, ofunc
);
914 void monitor_wait_filter(char * buf
,
917 struct target_waitstatus
* status
923 resp_len
= monitor_expect_prompt (buf
, bufmax
);
924 * ext_resp_len
=resp_len
;
927 fprintf_unfiltered (gdb_stderr
, "monitor_wait: excessive response from monitor: %s.", buf
);
929 while (resp_len
< 0);
931 /* Print any output characters that were preceded by ^O. */
932 /* FIXME - This would be great as a user settabgle flag */
934 current_monitor
->flags
& MO_PRINT_PROGRAM_OUTPUT
)
938 for (i
= 0; i
< resp_len
- 1; i
++)
940 putchar_unfiltered (buf
[++i
]);
946 /* Wait until the remote machine stops, then return, storing status in
947 status just as `wait' would. */
950 monitor_wait (pid
, status
)
952 struct target_waitstatus
*status
;
954 int old_timeout
= timeout
;
957 struct cleanup
*old_chain
;
959 status
->kind
= TARGET_WAITKIND_EXITED
;
960 status
->value
.integer
= 0;
962 old_chain
= make_cleanup (monitor_wait_cleanup
, old_timeout
);
963 RDEBUG(("MON wait\n"))
965 #if 0 /* MAINTENANCE_CMDS */
966 /* This is somthing other than a maintenance command */
968 timeout
= watchdog
> 0 ? watchdog
: -1;
970 timeout
= -1; /* Don't time out -- user program is running. */
973 ofunc
= (void (*)()) signal (SIGINT
, monitor_interrupt
);
975 if (current_monitor
->wait_filter
)
976 (*current_monitor
->wait_filter
)(buf
,sizeof (buf
),&resp_len
,status
) ;
977 else monitor_wait_filter(buf
,sizeof (buf
),&resp_len
,status
) ;
979 #if 0 /* Transferred to monitor wait filter */
982 resp_len
= monitor_expect_prompt (buf
, sizeof (buf
));
985 fprintf_unfiltered (gdb_stderr
, "monitor_wait: excessive response from monitor: %s.", buf
);
987 while (resp_len
< 0);
989 /* Print any output characters that were preceded by ^O. */
990 /* FIXME - This would be great as a user settabgle flag */
992 current_monitor
->flags
& MO_PRINT_PROGRAM_OUTPUT
)
996 for (i
= 0; i
< resp_len
- 1; i
++)
998 putchar_unfiltered (buf
[++i
]);
1002 signal (SIGINT
, ofunc
);
1004 timeout
= old_timeout
;
1006 if (dump_reg_flag
&& current_monitor
->dump_registers
)
1009 monitor_printf (current_monitor
->dump_registers
);
1010 resp_len
= monitor_expect_prompt (buf
, sizeof (buf
));
1013 if (current_monitor
->register_pattern
)
1014 parse_register_dump (buf
, resp_len
);
1016 RDEBUG(("Wait fetching registers after stop\n")) ;
1017 monitor_dump_regs() ;
1020 status
->kind
= TARGET_WAITKIND_STOPPED
;
1021 status
->value
.sig
= TARGET_SIGNAL_TRAP
;
1023 discard_cleanups (old_chain
);
1025 in_monitor_wait
= 0;
1027 return inferior_pid
;
1030 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
1034 monitor_fetch_register (regno
)
1038 static char zerobuf
[MAX_REGISTER_RAW_SIZE
] = {0};
1039 char regbuf
[MAX_REGISTER_RAW_SIZE
* 2 + 1];
1042 name
= current_monitor
->regnames
[regno
];
1043 RDEBUG(("MON fetchreg %d '%s'\n",regno
,name
))
1045 if (!name
|| (*name
== '\0'))
1046 { RDEBUG(("No register known for %d\n",regno
))
1047 supply_register (regno
, zerobuf
);
1051 /* send the register examine command */
1053 monitor_printf (current_monitor
->getreg
.cmd
, name
);
1055 /* If RESP_DELIM is specified, we search for that as a leading
1056 delimiter for the register value. Otherwise, we just start
1057 searching from the start of the buf. */
1059 if (current_monitor
->getreg
.resp_delim
)
1061 RDEBUG(("EXP getreg.resp_delim\n"))
1062 monitor_expect (current_monitor
->getreg
.resp_delim
, NULL
, 0);
1063 /* Handle case of first 32 registers listed in pairs. */
1064 if (current_monitor
->flags
& MO_32_REGS_PAIRED
1065 && regno
& 1 == 1 && regno
< 32)
1066 { RDEBUG(("EXP getreg.resp_delim\n")) ;
1067 monitor_expect (current_monitor
->getreg
.resp_delim
, NULL
, 0);
1071 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
1072 if (current_monitor
->flags
& MO_HEX_PREFIX
)
1075 c
= readchar (timeout
);
1077 c
= readchar (timeout
);
1078 if ((c
== '0') && ((c
= readchar (timeout
)) == 'x'))
1081 error ("Bad value returned from monitor while fetching register %x.",
1085 /* Read upto the maximum number of hex digits for this register, skipping
1086 spaces, but stop reading if something else is seen. Some monitors
1087 like to drop leading zeros. */
1089 for (i
= 0; i
< REGISTER_RAW_SIZE (regno
) * 2; i
++)
1092 c
= readchar (timeout
);
1094 c
= readchar (timeout
);
1102 regbuf
[i
] = '\000'; /* terminate the number */
1103 RDEBUG(("REGVAL '%s'\n",regbuf
)) ;
1105 /* If TERM is present, we wait for that to show up. Also, (if TERM
1106 is present), we will send TERM_CMD if that is present. In any
1107 case, we collect all of the output into buf, and then wait for
1108 the normal prompt. */
1110 if (current_monitor
->getreg
.term
)
1112 RDEBUG(("EXP getreg.term\n"))
1113 monitor_expect (current_monitor
->getreg
.term
, NULL
, 0); /* get response */
1116 if (current_monitor
->getreg
.term_cmd
)
1117 { RDEBUG(("EMIT getreg.term.cmd\n"))
1118 monitor_printf (current_monitor
->getreg
.term_cmd
);
1120 if (! current_monitor
->getreg
.term
|| /* Already expected or */
1121 current_monitor
->getreg
.term_cmd
) /* ack expected */
1122 monitor_expect_prompt (NULL
, 0); /* get response */
1124 monitor_supply_register (regno
, regbuf
);
1127 /* Sometimes, it takes several commands to dump the registers */
1128 /* This is a primitive for use by variations of monitor interfaces in
1129 case they need to compose the operation.
1131 int monitor_dump_reg_block(char * block_cmd
)
1135 monitor_printf (block_cmd
);
1136 resp_len
= monitor_expect_prompt (buf
, sizeof (buf
));
1137 parse_register_dump (buf
, resp_len
);
1142 /* Read the remote registers into the block regs. */
1143 /* Call the specific function if it has been provided */
1146 monitor_dump_regs ()
1150 if (current_monitor
->dumpregs
)
1151 (*(current_monitor
->dumpregs
))() ; /* call supplied function */
1153 if (current_monitor
->dump_registers
) /* default version */
1154 { monitor_printf (current_monitor
->dump_registers
);
1155 resp_len
= monitor_expect_prompt (buf
, sizeof (buf
));
1156 parse_register_dump (buf
, resp_len
);
1159 abort(); /* Need some way to read registers */
1163 monitor_fetch_registers (regno
)
1166 RDEBUG(("MON fetchregs\n")) ;
1167 if (current_monitor
->getreg
.cmd
)
1171 monitor_fetch_register (regno
);
1175 for (regno
= 0; regno
< NUM_REGS
; regno
++)
1176 monitor_fetch_register (regno
);
1179 monitor_dump_regs ();
1183 /* Store register REGNO, or all if REGNO == 0. Return errno value. */
1186 monitor_store_register (regno
)
1192 name
= current_monitor
->regnames
[regno
];
1193 if (!name
|| (*name
== '\0'))
1194 { RDEBUG(("MON Cannot store unknown register\n"))
1198 val
= read_register (regno
);
1199 RDEBUG(("MON storeg %d %08x\n",regno
,(unsigned int)val
))
1201 /* send the register deposit command */
1203 if (current_monitor
->flags
& MO_REGISTER_VALUE_FIRST
)
1204 monitor_printf (current_monitor
->setreg
.cmd
, val
, name
);
1205 else if (current_monitor
->flags
& MO_SETREG_INTERACTIVE
)
1206 monitor_printf (current_monitor
->setreg
.cmd
, name
);
1208 monitor_printf (current_monitor
->setreg
.cmd
, name
, val
);
1210 if (current_monitor
->setreg
.term
)
1211 { RDEBUG(("EXP setreg.term\n"))
1212 monitor_expect (current_monitor
->setreg
.term
, NULL
, 0);
1213 if (current_monitor
->flags
& MO_SETREG_INTERACTIVE
)
1214 monitor_printf ("%x\r", val
);
1215 monitor_expect_prompt (NULL
, 0);
1218 monitor_expect_prompt (NULL
, 0);
1219 if (current_monitor
->setreg
.term_cmd
) /* Mode exit required */
1220 { RDEBUG(("EXP setreg_termcmd\n")) ;
1221 monitor_printf("%s",current_monitor
->setreg
.term_cmd
) ;
1222 monitor_expect_prompt(NULL
,0) ;
1224 } /* monitor_store_register */
1226 /* Store the remote registers. */
1229 monitor_store_registers (regno
)
1234 monitor_store_register (regno
);
1238 for (regno
= 0; regno
< NUM_REGS
; regno
++)
1239 monitor_store_register (regno
);
1242 /* Get ready to modify the registers array. On machines which store
1243 individual registers, this doesn't need to do anything. On machines
1244 which store all the registers in one fell swoop, this makes sure
1245 that registers contains all the registers from the program being
1249 monitor_prepare_to_store ()
1251 /* Do nothing, since we can store individual regs */
1255 monitor_files_info (ops
)
1256 struct target_ops
*ops
;
1258 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name
, baud_rate
);
1262 monitor_write_memory (memaddr
, myaddr
, len
)
1267 unsigned int val
, hostval
;
1271 RDEBUG(("MON write %d %08x\n",len
,(unsigned long)memaddr
))
1273 if (current_monitor
->flags
& MO_ADDR_BITS_REMOVE
)
1274 memaddr
= ADDR_BITS_REMOVE (memaddr
);
1276 /* Use memory fill command for leading 0 bytes. */
1278 if (current_monitor
->fill
)
1280 for (i
= 0; i
< len
; i
++)
1284 if (i
> 4) /* More than 4 zeros is worth doing */
1286 RDEBUG(("MON FILL %d\n",i
))
1287 if (current_monitor
->flags
& MO_FILL_USES_ADDR
)
1288 monitor_printf (current_monitor
->fill
, memaddr
, (memaddr
+ i
)-1, 0);
1290 monitor_printf (current_monitor
->fill
, memaddr
, i
, 0);
1292 monitor_expect_prompt (NULL
, 0);
1299 /* Can't actually use long longs if VAL is an int (nice idea, though). */
1300 if ((memaddr
& 0x7) == 0 && len
>= 8 && current_monitor
->setmem
.cmdll
)
1303 cmd
= current_monitor
->setmem
.cmdll
;
1307 if ((memaddr
& 0x3) == 0 && len
>= 4 && current_monitor
->setmem
.cmdl
)
1310 cmd
= current_monitor
->setmem
.cmdl
;
1312 else if ((memaddr
& 0x1) == 0 && len
>= 2 && current_monitor
->setmem
.cmdw
)
1315 cmd
= current_monitor
->setmem
.cmdw
;
1320 cmd
= current_monitor
->setmem
.cmdb
;
1323 val
= extract_unsigned_integer (myaddr
, len
);
1326 { hostval
= * (unsigned int *) myaddr
;
1327 RDEBUG(("Hostval(%08x) val(%08x)\n",hostval
,val
)) ;
1331 if (current_monitor
->flags
& MO_NO_ECHO_ON_SETMEM
)
1332 monitor_printf_noecho (cmd
, memaddr
, val
);
1333 else if (current_monitor
->flags
& MO_SETMEM_INTERACTIVE
)
1336 monitor_printf_noecho (cmd
, memaddr
);
1338 if (current_monitor
->setmem
.term
)
1339 { RDEBUG(("EXP setmem.term")) ;
1340 monitor_expect (current_monitor
->setmem
.term
, NULL
, 0);
1341 monitor_printf ("%x\r", val
);
1343 if (current_monitor
->setmem
.term_cmd
)
1344 { /* Emit this to get out of the memory editing state */
1345 monitor_printf("%s",current_monitor
->setmem
.term_cmd
) ;
1346 /* Drop through to expecting a prompt */
1350 monitor_printf (cmd
, memaddr
, val
);
1352 monitor_expect_prompt (NULL
, 0);
1358 static monitor_write_even_block(memaddr
,myaddr
,len
)
1365 /* Enter the sub mode */
1366 monitor_printf(current_monitor
->setmem
.cmdl
,memaddr
) ;
1367 monitor_expect_prompt(NULL
,0) ;
1371 val
= extract_unsigned_integer(myaddr
,4) ; /* REALLY */
1372 monitor_printf("%x\r",val
) ;
1376 RDEBUG((" @ %08x\n",memaddr
))
1377 /* If we wanted to, here we could validate the address */
1378 monitor_expect_prompt(NULL
,0) ;
1380 /* Now exit the sub mode */
1381 monitor_printf (current_monitor
->getreg
.term_cmd
);
1382 monitor_expect_prompt(NULL
,0) ;
1387 static int monitor_write_memory_bytes(memaddr
,myaddr
,len
)
1394 if (len
== 0) return 0 ;
1395 /* Enter the sub mode */
1396 monitor_printf(current_monitor
->setmem
.cmdb
,memaddr
) ;
1397 monitor_expect_prompt(NULL
,0) ;
1401 monitor_printf("%x\r",val
) ;
1405 /* If we wanted to, here we could validate the address */
1406 monitor_expect_prompt(NULL
,0) ;
1409 /* Now exit the sub mode */
1410 monitor_printf (current_monitor
->getreg
.term_cmd
);
1411 monitor_expect_prompt(NULL
,0) ;
1416 static longlongendswap(unsigned char * a
)
1428 /* Format 32 chars of long long value, advance the pointer */
1429 static char * hexlate
= "0123456789abcdef" ;
1430 static char * longlong_hexchars(unsigned long long value
,
1433 if (value
== 0) { *outbuff
++ = '0' ; return outbuff
; }
1435 { static unsigned char disbuf
[8] ; /* disassembly buffer */
1436 unsigned char * scan
, * limit
; /* loop controls */
1437 unsigned char c
, nib
;
1439 scan
= disbuf
; limit
= scan
+ 8 ;
1440 { unsigned long long * dp
;
1441 dp
= (unsigned long long *) scan
;
1444 longlongendswap(disbuf
) ; /* FIXME: ONly on big endian hosts */
1445 while (scan
< limit
)
1446 { c
= *scan
++ ; /* a byte of our long long value */
1448 if (c
== 0) continue ;
1449 else leadzero
= 0 ; /* henceforth we print even zeroes */
1450 nib
= c
>> 4 ; /* high nibble bits */
1451 *outbuff
++ = hexlate
[nib
] ;
1452 nib
= c
& 0x0f ; /* low nibble bits */
1453 *outbuff
++ = hexlate
[nib
] ;
1457 } /* longlong_hexchars */
1461 /* I am only going to call this when writing virtual byte streams.
1462 Which possably entails endian conversions
1464 static int monitor_write_memory_longlongs(memaddr
,myaddr
,len
)
1469 static char hexstage
[20] ; /* At least 16 digits required, plus null */
1474 llptr
= (unsigned long long *) myaddr
;
1475 if (len
== 0 ) return 0 ;
1476 monitor_printf(current_monitor
->setmem
.cmdll
,memaddr
) ;
1477 monitor_expect_prompt(NULL
,0) ;
1481 endstring
= longlong_hexchars(*llptr
,hexstage
) ;
1482 *endstring
= '\0' ; /* NUll terminate for printf */
1483 monitor_printf("%s\r",hexstage
) ;
1487 /* If we wanted to, here we could validate the address */
1488 monitor_expect_prompt(NULL
,0) ;
1491 /* Now exit the sub mode */
1492 monitor_printf (current_monitor
->getreg
.term_cmd
);
1493 monitor_expect_prompt(NULL
,0) ;
1499 /* ----- MONITOR_WRITE_MEMORY_BLOCK ---------------------------- */
1500 /* This is for the large blocks of memory which may occur in downloading.
1501 And for monitors which use interactive entry,
1502 And for monitors which do not have other downloading methods.
1503 Without this, we will end up calling monitor_write_memory many times
1504 and do the entry and exit of the sub mode many times
1505 This currently assumes...
1506 MO_SETMEM_INTERACTIVE
1507 ! MO_NO_ECHO_ON_SETMEM
1508 To use this, the you have to patch the monitor_cmds block with
1509 this function. Otherwise, its not tuned up for use by all
1513 static int monitor_write_memory_block(memaddr
,myaddr
,len
)
1520 /* FIXME: This would be a good place to put the zero test */
1522 if ((len
> 8) && (((len
& 0x07)) == 0) && current_monitor
->setmem
.cmdll
)
1524 return monitor_write_memory_longlongs(memaddr
,myaddr
,len
) ;
1531 written
= monitor_write_even_block(memaddr
,myaddr
,len
) ;
1532 /* Adjust calling parameters by written amount */
1533 memaddr
+= written
;
1538 written
= monitor_write_memory_bytes(memaddr
,myaddr
,len
) ;
1542 /* This is an alternate form of monitor_read_memory which is used for monitors
1543 which can only read a single byte/word/etc. at a time. */
1546 monitor_read_memory_single (memaddr
, myaddr
, len
)
1552 char membuf
[sizeof(int) * 2 + 1];
1557 RDEBUG(("MON read single\n")) ;
1559 /* Can't actually use long longs (nice idea, though). In fact, the
1560 call to strtoul below will fail if it tries to convert a value
1561 that's too big to fit in a long. */
1562 if ((memaddr
& 0x7) == 0 && len
>= 8 && current_monitor
->getmem
.cmdll
)
1565 cmd
= current_monitor
->getmem
.cmdll
;
1569 if ((memaddr
& 0x3) == 0 && len
>= 4 && current_monitor
->getmem
.cmdl
)
1572 cmd
= current_monitor
->getmem
.cmdl
;
1574 else if ((memaddr
& 0x1) == 0 && len
>= 2 && current_monitor
->getmem
.cmdw
)
1577 cmd
= current_monitor
->getmem
.cmdw
;
1582 cmd
= current_monitor
->getmem
.cmdb
;
1585 /* Send the examine command. */
1587 monitor_printf (cmd
, memaddr
);
1589 /* If RESP_DELIM is specified, we search for that as a leading
1590 delimiter for the memory value. Otherwise, we just start
1591 searching from the start of the buf. */
1593 if (current_monitor
->getmem
.resp_delim
)
1594 { RDEBUG(("EXP getmem.resp_delim\n")) ;
1595 monitor_expect_regexp (&getmem_resp_delim_pattern
, NULL
, 0);
1598 /* Now, read the appropriate number of hex digits for this loc,
1601 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
1602 if (current_monitor
->flags
& MO_HEX_PREFIX
)
1606 c
= readchar (timeout
);
1608 c
= readchar (timeout
);
1609 if ((c
== '0') && ((c
= readchar (timeout
)) == 'x'))
1612 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1613 memaddr
, i
, membuf
, c
);
1615 for (i
= 0; i
< len
* 2; i
++)
1621 c
= readchar (timeout
);
1627 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.",
1628 memaddr
, i
, membuf
, c
);
1634 membuf
[i
] = '\000'; /* terminate the number */
1636 /* If TERM is present, we wait for that to show up. Also, (if TERM is
1637 present), we will send TERM_CMD if that is present. In any case, we collect
1638 all of the output into buf, and then wait for the normal prompt. */
1640 if (current_monitor
->getmem
.term
)
1642 monitor_expect (current_monitor
->getmem
.term
, NULL
, 0); /* get response */
1644 if (current_monitor
->getmem
.term_cmd
)
1646 monitor_printf (current_monitor
->getmem
.term_cmd
);
1647 monitor_expect_prompt (NULL
, 0);
1651 monitor_expect_prompt (NULL
, 0); /* get response */
1654 val
= strtoul (membuf
, &p
, 16);
1656 if (val
== 0 && membuf
== p
)
1657 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.",
1660 /* supply register stores in target byte order, so swap here */
1662 store_unsigned_integer (myaddr
, len
, val
);
1667 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1668 memory at MEMADDR. Returns length moved. Currently, we do no more
1669 than 16 bytes at a time. */
1672 monitor_read_memory (memaddr
, myaddr
, len
)
1684 if (remote_debug
) printf("MON read block ta(%08x) ha(%08x) %d\n",
1685 (unsigned long) memaddr
, (unsigned long)myaddr
, len
);
1687 if (current_monitor
->flags
& MO_ADDR_BITS_REMOVE
)
1688 memaddr
= ADDR_BITS_REMOVE (memaddr
);
1690 if (current_monitor
->flags
& MO_GETMEM_READ_SINGLE
)
1691 return monitor_read_memory_single (memaddr
, myaddr
, len
);
1693 len
= min (len
, 16);
1695 /* Some dumpers align the first data with the preceeding 16
1696 byte boundary. Some print blanks and start at the
1697 requested boundary. EXACT_DUMPADDR
1700 dumpaddr
= (current_monitor
->flags
& MO_EXACT_DUMPADDR
)
1701 ? memaddr
: memaddr
& ~ 0x0f ;
1703 /* See if xfer would cross a 16 byte boundary. If so, clip it. */
1704 if (((memaddr
^ (memaddr
+ len
- 1)) & ~0xf) != 0)
1705 len
= ((memaddr
+ len
) & ~0xf) - memaddr
;
1707 /* send the memory examine command */
1709 if (current_monitor
->flags
& MO_GETMEM_NEEDS_RANGE
)
1710 monitor_printf (current_monitor
->getmem
.cmdb
, memaddr
, memaddr
+ len
- 1);
1711 else if (current_monitor
->flags
& MO_GETMEM_16_BOUNDARY
)
1712 monitor_printf (current_monitor
->getmem
.cmdb
, dumpaddr
);
1714 monitor_printf (current_monitor
->getmem
.cmdb
, memaddr
, len
);
1716 /* If TERM is present, we wait for that to show up. Also, (if TERM
1717 is present), we will send TERM_CMD if that is present. In any
1718 case, we collect all of the output into buf, and then wait for
1719 the normal prompt. */
1721 if (current_monitor
->getmem
.term
)
1723 resp_len
= monitor_expect (current_monitor
->getmem
.term
, buf
, sizeof buf
); /* get response */
1726 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.",
1727 memaddr
, resp_len
, buf
);
1729 if (current_monitor
->getmem
.term_cmd
)
1731 SERIAL_WRITE (monitor_desc
, current_monitor
->getmem
.term_cmd
,
1732 strlen (current_monitor
->getmem
.term_cmd
));
1733 monitor_expect_prompt (NULL
, 0);
1737 resp_len
= monitor_expect_prompt (buf
, sizeof buf
); /* get response */
1741 /* If RESP_DELIM is specified, we search for that as a leading
1742 delimiter for the values. Otherwise, we just start searching
1743 from the start of the buf. */
1745 if (current_monitor
->getmem
.resp_delim
)
1748 struct re_registers resp_strings
;
1749 RDEBUG(("MON getmem.resp_delim %s\n",current_monitor
->getmem
.resp_delim
)) ;
1752 retval
= re_search (&getmem_resp_delim_pattern
, p
, tmp
, 0, tmp
,
1756 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1757 memaddr
, resp_len
, buf
);
1759 p
+= resp_strings
.end
[0];
1761 p
= strstr (p
, current_monitor
->getmem
.resp_delim
);
1763 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.",
1764 memaddr
, resp_len
, buf
);
1765 p
+= strlen (current_monitor
->getmem
.resp_delim
);
1768 if (remote_debug
) printf("MON scanning %d ,%08x '%s'\n",len
,p
,p
) ;
1769 if (current_monitor
->flags
& MO_GETMEM_16_BOUNDARY
)
1777 while (!(c
== '\000' || c
== '\n' || c
== '\r') && i
> 0)
1779 { if ((dumpaddr
>= memaddr
) && (i
> 0))
1780 { val
= fromhex (c
) * 16 + fromhex (*(p
+1));
1782 if (remote_debug
) printf("[%02x]",val
) ;
1789 ++p
; /* skip a blank or other non hex char */
1792 if (fetched
== 0) error("Failed to read via monitor") ;
1793 if (remote_debug
) printf("\n") ;
1794 return fetched
; /* Return the number of bytes actually read */
1796 RDEBUG(("MON scanning bytes\n")) ;
1798 for (i
= len
; i
> 0; i
--)
1800 /* Skip non-hex chars, but bomb on end of string and newlines */
1807 if (*p
== '\000' || *p
== '\n' || *p
== '\r')
1808 error ("monitor_read_memory (0x%x): badly terminated response from monitor: %.*s", memaddr
, resp_len
, buf
);
1812 val
= strtoul (p
, &p1
, 16);
1814 if (val
== 0 && p
== p1
)
1815 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr
,
1829 /* This version supports very large reads by looping on multiline
1830 dump bytes outputs. Beware of buffering limits.
1832 static int monotor_read_memory_block(memaddr
,myaddr
,len
)
1840 monitor_xfer_memory (memaddr
, myaddr
, len
, write
, target
)
1845 struct target_ops
*target
; /* ignored */
1847 return dcache_xfer_memory (remote_dcache
, memaddr
, myaddr
, len
, write
);
1853 return; /* ignore attempts to kill target system */
1856 /* All we actually do is set the PC to the start address of exec_bfd, and start
1857 the program at that point. */
1860 monitor_create_inferior (exec_file
, args
, env
)
1865 if (args
&& (*args
!= '\000'))
1866 error ("Args are not supported by the monitor.");
1869 clear_proceed_status ();
1870 proceed (bfd_get_start_address (exec_bfd
), TARGET_SIGNAL_0
, 0);
1873 /* Clean up when a program exits.
1874 The program actually lives on in the remote processor's RAM, and may be
1875 run again without a download. Don't leave it full of breakpoint
1879 monitor_mourn_inferior ()
1881 unpush_target (targ_ops
);
1882 generic_mourn_inferior (); /* Do all the proper things now */
1885 #define NUM_MONITOR_BREAKPOINTS 8
1887 static CORE_ADDR breakaddr
[NUM_MONITOR_BREAKPOINTS
] = {0};
1889 /* Tell the monitor to add a breakpoint. */
1892 monitor_insert_breakpoint (addr
, shadow
)
1900 RDEBUG(("MON inst bkpt %08x\n",addr
))
1901 if (current_monitor
->set_break
== NULL
)
1902 error ("No set_break defined for this monitor");
1904 if (current_monitor
->flags
& MO_ADDR_BITS_REMOVE
)
1905 addr
= ADDR_BITS_REMOVE (addr
);
1907 /* Determine appropriate breakpoint size for this address. */
1908 bp
= memory_breakpoint_from_pc (&addr
, &bplen
);
1910 for (i
= 0; i
< NUM_MONITOR_BREAKPOINTS
; i
++)
1912 if (breakaddr
[i
] == 0)
1914 breakaddr
[i
] = addr
;
1915 monitor_read_memory (addr
, shadow
, bplen
);
1916 monitor_printf (current_monitor
->set_break
, addr
);
1917 monitor_expect_prompt (NULL
, 0);
1922 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS
);
1925 /* Tell the monitor to remove a breakpoint. */
1928 monitor_remove_breakpoint (addr
, shadow
)
1934 RDEBUG(("MON rmbkpt %08x\n",addr
))
1935 if (current_monitor
->clr_break
== NULL
)
1936 error ("No clr_break defined for this monitor");
1938 if (current_monitor
->flags
& MO_ADDR_BITS_REMOVE
)
1939 addr
= ADDR_BITS_REMOVE (addr
);
1941 for (i
= 0; i
< NUM_MONITOR_BREAKPOINTS
; i
++)
1943 if (breakaddr
[i
] == addr
)
1946 /* some monitors remove breakpoints based on the address */
1947 if (current_monitor
->flags
& MO_CLR_BREAK_USES_ADDR
)
1948 monitor_printf (current_monitor
->clr_break
, addr
);
1949 else if (current_monitor
->flags
& MO_CLR_BREAK_1_BASED
)
1950 monitor_printf (current_monitor
->clr_break
, i
+ 1);
1952 monitor_printf (current_monitor
->clr_break
, i
);
1953 monitor_expect_prompt (NULL
, 0);
1957 fprintf_unfiltered (stderr
, "Can't find breakpoint associated with 0x%x\n", addr
);
1961 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
1962 an S-record. Return non-zero if the ACK is received properly. */
1965 monitor_wait_srec_ack ()
1969 if (current_monitor
->flags
& MO_SREC_ACK_PLUS
)
1971 return (readchar (timeout
) == '+');
1973 else if (current_monitor
->flags
& MO_SREC_ACK_ROTATE
)
1975 /* Eat two backspaces, a "rotating" char (|/-\), and a space. */
1976 if ((ch
= readchar (1)) < 0)
1978 if ((ch
= readchar (1)) < 0)
1980 if ((ch
= readchar (1)) < 0)
1982 if ((ch
= readchar (1)) < 0)
1988 /* monitor_load -- download a file. */
1991 monitor_load (file
, from_tty
)
1995 dcache_flush (remote_dcache
);
1996 RDEBUG(("MON load\n"))
1998 if (current_monitor
->load_routine
)
1999 current_monitor
->load_routine (monitor_desc
, file
, hashmark
);
2001 { /* The default is ascii S-records */
2003 unsigned long load_offset
;
2006 /* enable user to specify address for downloading as 2nd arg to load */
2007 n
= sscanf (file
, "%s 0x%lx", buf
, &load_offset
);
2013 monitor_printf (current_monitor
->load
);
2014 if (current_monitor
->loadresp
)
2015 monitor_expect (current_monitor
->loadresp
, NULL
, 0);
2017 load_srec (monitor_desc
, file
, (bfd_vma
) load_offset
,
2018 32, SREC_ALL
, hashmark
,
2019 current_monitor
->flags
& MO_SREC_ACK
?
2020 monitor_wait_srec_ack
: NULL
);
2022 monitor_expect_prompt (NULL
, 0);
2025 /* Finally, make the PC point at the start address */
2028 write_pc (bfd_get_start_address (exec_bfd
));
2030 inferior_pid
= 0; /* No process now */
2032 /* This is necessary because many things were based on the PC at the time that
2033 we attached to the monitor, which is no longer valid now that we have loaded
2034 new code (and just changed the PC). Another way to do this might be to call
2035 normal_stop, except that the stack may not be valid, and things would get
2036 horribly confused... */
2038 clear_symtab_users ();
2044 RDEBUG(("MON stop\n")) ;
2045 if ((current_monitor
->flags
& MO_SEND_BREAK_ON_STOP
) != 0)
2046 SERIAL_SEND_BREAK (monitor_desc
);
2047 if (current_monitor
->stop
)
2048 monitor_printf_noecho (current_monitor
->stop
);
2051 /* Put a command string, in args, out to MONITOR. Output from MONITOR
2052 is placed on the users terminal until the prompt is seen. FIXME: We
2053 read the characters ourseleves here cause of a nasty echo. */
2056 monitor_command (args
, from_tty
)
2064 if (monitor_desc
== NULL
)
2065 error ("monitor target not open.");
2067 p
= current_monitor
->prompt
;
2069 /* Send the command. Note that if no args were supplied, then we're
2070 just sending the monitor a newline, which is sometimes useful. */
2072 monitor_printf ("%s\r", (args
? args
: ""));
2074 resp_len
= monitor_expect_prompt (buf
, sizeof buf
);
2076 fputs_unfiltered (buf
, gdb_stdout
); /* Output the response */
2079 /* Convert hex digit A to a number. */
2086 if (a
>= '0' && a
<= '9')
2088 if (a
>= 'a' && a
<= 'f')
2089 return a
- 'a' + 10;
2090 if (a
>= 'A' && a
<= 'F')
2091 return a
- 'A' + 10;
2093 error ("Reply contains invalid hex digit 0x%x", a
);
2098 monitor_get_dev_name ()
2103 static struct target_ops monitor_ops
=
2105 NULL
, /* to_shortname */
2106 NULL
, /* to_longname */
2109 monitor_close
, /* to_close */
2110 NULL
, /* to_attach */
2111 monitor_detach
, /* to_detach */
2112 monitor_resume
, /* to_resume */
2113 monitor_wait
, /* to_wait */
2114 monitor_fetch_registers
, /* to_fetch_registers */
2115 monitor_store_registers
, /* to_store_registers */
2116 monitor_prepare_to_store
, /* to_prepare_to_store */
2117 monitor_xfer_memory
, /* to_xfer_memory */
2118 monitor_files_info
, /* to_files_info */
2119 monitor_insert_breakpoint
, /* to_insert_breakpoint */
2120 monitor_remove_breakpoint
, /* to_remove_breakpoint */
2121 0, /* to_terminal_init */
2122 0, /* to_terminal_inferior */
2123 0, /* to_terminal_ours_for_output */
2124 0, /* to_terminal_ours */
2125 0, /* to_terminal_info */
2126 monitor_kill
, /* to_kill */
2127 monitor_load
, /* to_load */
2128 0, /* to_lookup_symbol */
2129 monitor_create_inferior
, /* to_create_inferior */
2130 monitor_mourn_inferior
, /* to_mourn_inferior */
2132 0, /* to_notice_signals */
2133 0, /* to_thread_alive */
2134 monitor_stop
, /* to_stop */
2135 process_stratum
, /* to_stratum */
2137 1, /* to_has_all_memory */
2138 1, /* to_has_memory */
2139 1, /* to_has_stack */
2140 1, /* to_has_registers */
2141 1, /* to_has_execution */
2143 0, /* sections_end */
2144 OPS_MAGIC
/* to_magic */
2147 /* Init the target_ops structure pointed at by OPS */
2150 init_monitor_ops (ops
)
2151 struct target_ops
*ops
;
2153 memcpy (ops
, &monitor_ops
, sizeof monitor_ops
);
2156 /* Define additional commands that are usually only used by monitors. */
2159 _initialize_remote_monitors ()
2161 add_show_from_set (add_set_cmd ("hash", no_class
, var_boolean
,
2163 "Set display of activity while downloading a file.\n\
2164 When enabled, a hashmark \'#\' is displayed.",
2168 add_com ("monitor", class_obscure
, monitor_command
,
2169 "Send a command to the debug monitor.");