1 /* Remote debugging interface for boot monitors, for GDB.
2 
3    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4    1999, 2000, 2001, 2002 Free Software Foundation, Inc.
5 
6    Contributed by Cygnus Support.  Written by Rob Savoye for Cygnus.
7    Resurrected from the ashes by Stu Grossman.
8 
9    This file is part of GDB.
10 
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 2 of the License, or
14    (at your option) any later version.
15 
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20 
21    You should have received a copy of the GNU General Public License
22    along with this program; if not, write to the Free Software
23    Foundation, Inc., 59 Temple Place - Suite 330,
24    Boston, MA 02111-1307, USA.  */
25 
26 /* This file was derived from various remote-* modules. It is a collection
27    of generic support functions so GDB can talk directly to a ROM based
28    monitor. This saves use from having to hack an exception based handler
29    into existence, and makes for quick porting.
30 
31    This module talks to a debug monitor called 'MONITOR', which
32    We communicate with MONITOR via either a direct serial line, or a TCP
33    (or possibly TELNET) stream to a terminal multiplexor,
34    which in turn talks to the target board.  */
35 
36 /* FIXME 32x64: This code assumes that registers and addresses are at
37    most 32 bits long.  If they can be larger, you will need to declare
38    values as LONGEST and use %llx or some such to print values when
39    building commands to send to the monitor.  Since we don't know of
40    any actual 64-bit targets with ROM monitors that use this code,
41    it's not an issue right now.  -sts 4/18/96  */
42 
43 #include "defs.h"
44 #include "gdbcore.h"
45 #include "target.h"
46 #include "exceptions.h"
47 #include <signal.h>
48 #include <ctype.h>
49 #include "gdb_string.h"
50 #include <sys/types.h>
51 #include "command.h"
52 #include "serial.h"
53 #include "monitor.h"
54 #include "gdbcmd.h"
55 #include "inferior.h"
56 #include "gdb_regex.h"
57 #include "srec.h"
58 #include "regcache.h"
59 
60 static char *dev_name;
61 static struct target_ops *targ_ops;
62 
63 static void monitor_vsprintf (char *sndbuf, char *pattern, va_list args);
64 
65 static int readchar (int timeout);
66 
67 static void monitor_fetch_register (int regno);
68 static void monitor_store_register (int regno);
69 
70 static void monitor_printable_string (char *newstr, char *oldstr, int len);
71 static void monitor_error (char *function, char *message, CORE_ADDR memaddr, int len, char *string, int final_char);
72 static void monitor_detach (char *args, int from_tty);
73 static void monitor_resume (ptid_t ptid, int step, enum target_signal sig);
74 static void monitor_interrupt (int signo);
75 static void monitor_interrupt_twice (int signo);
76 static void monitor_interrupt_query (void);
77 static void monitor_wait_cleanup (void *old_timeout);
78 
79 static ptid_t monitor_wait (ptid_t ptid, struct target_waitstatus *status);
80 static void monitor_fetch_registers (int regno);
81 static void monitor_store_registers (int regno);
82 static void monitor_prepare_to_store (void);
83 static int monitor_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
84 				int write,
85 				struct mem_attrib *attrib,
86 				struct target_ops *target);
87 static void monitor_files_info (struct target_ops *ops);
88 static int monitor_insert_breakpoint (CORE_ADDR addr, char *shadow);
89 static int monitor_remove_breakpoint (CORE_ADDR addr, char *shadow);
90 static void monitor_kill (void);
91 static void monitor_load (char *file, int from_tty);
92 static void monitor_mourn_inferior (void);
93 static void monitor_stop (void);
94 
95 static int monitor_read_memory (CORE_ADDR addr, char *myaddr, int len);
96 static int monitor_write_memory (CORE_ADDR addr, char *myaddr, int len);
97 static int monitor_write_memory_bytes (CORE_ADDR addr, char *myaddr, int len);
98 static int monitor_write_memory_block (CORE_ADDR memaddr,
99 				       char *myaddr, int len);
100 static int monitor_expect_regexp (struct re_pattern_buffer *pat,
101 				  char *buf, int buflen);
102 static void monitor_dump_regs (void);
103 #if 0
104 static int from_hex (int a);
105 static unsigned long get_hex_word (void);
106 #endif
107 static void parse_register_dump (char *, int);
108 
109 static struct monitor_ops *current_monitor;
110 
111 static int hashmark;		/* flag set by "set hash" */
112 
113 static int timeout = 30;
114 
115 static int in_monitor_wait = 0;	/* Non-zero means we are in monitor_wait() */
116 
117 static void (*ofunc) ();	/* Old SIGINT signal handler */
118 
119 static CORE_ADDR *breakaddr;
120 
121 /* Descriptor for I/O to remote machine.  Initialize it to NULL so
122    that monitor_open knows that we don't have a file open when the
123    program starts.  */
124 
125 static struct serial *monitor_desc = NULL;
126 
127 /* Pointer to regexp pattern matching data */
128 
129 static struct re_pattern_buffer register_pattern;
130 static char register_fastmap[256];
131 
132 static struct re_pattern_buffer getmem_resp_delim_pattern;
133 static char getmem_resp_delim_fastmap[256];
134 
135 static struct re_pattern_buffer setmem_resp_delim_pattern;
136 static char setmem_resp_delim_fastmap[256];
137 
138 static struct re_pattern_buffer setreg_resp_delim_pattern;
139 static char setreg_resp_delim_fastmap[256];
140 
141 static int dump_reg_flag;	/* Non-zero means do a dump_registers cmd when
142 				   monitor_wait wakes up.  */
143 
144 static int first_time = 0;	/* is this the first time we're executing after
145 				   gaving created the child proccess? */
146 
147 #define TARGET_BUF_SIZE 2048
148 
149 /* Monitor specific debugging information.  Typically only useful to
150    the developer of a new monitor interface. */
151 
152 static void monitor_debug (const char *fmt, ...) ATTR_FORMAT(printf, 1, 2);
153 
154 static int monitor_debug_p = 0;
155 
156 /* NOTE: This file alternates between monitor_debug_p and remote_debug
157    when determining if debug information is printed.  Perhaps this
158    could be simplified. */
159 
160 static void
monitor_debug(const char * fmt,...)161 monitor_debug (const char *fmt, ...)
162 {
163   if (monitor_debug_p)
164     {
165       va_list args;
166       va_start (args, fmt);
167       vfprintf_filtered (gdb_stdlog, fmt, args);
168       va_end (args);
169     }
170 }
171 
172 
173 /* Convert a string into a printable representation, Return # byte in
174    the new string.  When LEN is >0 it specifies the size of the
175    string.  Otherwize strlen(oldstr) is used. */
176 
177 static void
monitor_printable_string(char * newstr,char * oldstr,int len)178 monitor_printable_string (char *newstr, char *oldstr, int len)
179 {
180   int ch;
181   int i;
182 
183   if (len <= 0)
184     len = strlen (oldstr);
185 
186   for (i = 0; i < len; i++)
187     {
188       ch = oldstr[i];
189       switch (ch)
190 	{
191 	default:
192 	  if (isprint (ch))
193 	    *newstr++ = ch;
194 
195 	  else
196 	    {
197 	      sprintf (newstr, "\\x%02x", ch & 0xff);
198 	      newstr += 4;
199 	    }
200 	  break;
201 
202 	case '\\':
203 	  *newstr++ = '\\';
204 	  *newstr++ = '\\';
205 	  break;
206 	case '\b':
207 	  *newstr++ = '\\';
208 	  *newstr++ = 'b';
209 	  break;
210 	case '\f':
211 	  *newstr++ = '\\';
212 	  *newstr++ = 't';
213 	  break;
214 	case '\n':
215 	  *newstr++ = '\\';
216 	  *newstr++ = 'n';
217 	  break;
218 	case '\r':
219 	  *newstr++ = '\\';
220 	  *newstr++ = 'r';
221 	  break;
222 	case '\t':
223 	  *newstr++ = '\\';
224 	  *newstr++ = 't';
225 	  break;
226 	case '\v':
227 	  *newstr++ = '\\';
228 	  *newstr++ = 'v';
229 	  break;
230 	}
231     }
232 
233   *newstr++ = '\0';
234 }
235 
236 /* Print monitor errors with a string, converting the string to printable
237    representation.  */
238 
239 static void
monitor_error(char * function,char * message,CORE_ADDR memaddr,int len,char * string,int final_char)240 monitor_error (char *function, char *message,
241 	       CORE_ADDR memaddr, int len, char *string, int final_char)
242 {
243   int real_len = (len == 0 && string != (char *) 0) ? strlen (string) : len;
244   char *safe_string = alloca ((real_len * 4) + 1);
245   monitor_printable_string (safe_string, string, real_len);
246 
247   if (final_char)
248     error (_("%s (0x%s): %s: %s%c"), function, paddr_nz (memaddr), message, safe_string, final_char);
249   else
250     error (_("%s (0x%s): %s: %s"), function, paddr_nz (memaddr), message, safe_string);
251 }
252 
253 /* Convert hex digit A to a number.  */
254 
255 static int
fromhex(int a)256 fromhex (int a)
257 {
258   if (a >= '0' && a <= '9')
259     return a - '0';
260   else if (a >= 'a' && a <= 'f')
261     return a - 'a' + 10;
262   else if (a >= 'A' && a <= 'F')
263     return a - 'A' + 10;
264   else
265     error (_("Invalid hex digit %d"), a);
266 }
267 
268 /* monitor_vsprintf - similar to vsprintf but handles 64-bit addresses
269 
270    This function exists to get around the problem that many host platforms
271    don't have a printf that can print 64-bit addresses.  The %A format
272    specification is recognized as a special case, and causes the argument
273    to be printed as a 64-bit hexadecimal address.
274 
275    Only format specifiers of the form "[0-9]*[a-z]" are recognized.
276    If it is a '%s' format, the argument is a string; otherwise the
277    argument is assumed to be a long integer.
278 
279    %% is also turned into a single %.
280  */
281 
282 static void
monitor_vsprintf(char * sndbuf,char * pattern,va_list args)283 monitor_vsprintf (char *sndbuf, char *pattern, va_list args)
284 {
285   char format[10];
286   char fmt;
287   char *p;
288   int i;
289   long arg_int;
290   CORE_ADDR arg_addr;
291   char *arg_string;
292 
293   for (p = pattern; *p; p++)
294     {
295       if (*p == '%')
296 	{
297 	  /* Copy the format specifier to a separate buffer.  */
298 	  format[0] = *p++;
299 	  for (i = 1; *p >= '0' && *p <= '9' && i < (int) sizeof (format) - 2;
300 	       i++, p++)
301 	    format[i] = *p;
302 	  format[i] = fmt = *p;
303 	  format[i + 1] = '\0';
304 
305 	  /* Fetch the next argument and print it.  */
306 	  switch (fmt)
307 	    {
308 	    case '%':
309 	      strcpy (sndbuf, "%");
310 	      break;
311 	    case 'A':
312 	      arg_addr = va_arg (args, CORE_ADDR);
313 	      strcpy (sndbuf, paddr_nz (arg_addr));
314 	      break;
315 	    case 's':
316 	      arg_string = va_arg (args, char *);
317 	      sprintf (sndbuf, format, arg_string);
318 	      break;
319 	    default:
320 	      arg_int = va_arg (args, long);
321 	      sprintf (sndbuf, format, arg_int);
322 	      break;
323 	    }
324 	  sndbuf += strlen (sndbuf);
325 	}
326       else
327 	*sndbuf++ = *p;
328     }
329   *sndbuf = '\0';
330 }
331 
332 
333 /* monitor_printf_noecho -- Send data to monitor, but don't expect an echo.
334    Works just like printf.  */
335 
336 void
monitor_printf_noecho(char * pattern,...)337 monitor_printf_noecho (char *pattern,...)
338 {
339   va_list args;
340   char sndbuf[2000];
341   int len;
342 
343   va_start (args, pattern);
344 
345   monitor_vsprintf (sndbuf, pattern, args);
346 
347   len = strlen (sndbuf);
348   if (len + 1 > sizeof sndbuf)
349     internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
350 
351   if (monitor_debug_p)
352     {
353       char *safe_string = (char *) alloca ((strlen (sndbuf) * 4) + 1);
354       monitor_printable_string (safe_string, sndbuf, 0);
355       fprintf_unfiltered (gdb_stdlog, "sent[%s]\n", safe_string);
356     }
357 
358   monitor_write (sndbuf, len);
359 }
360 
361 /* monitor_printf -- Send data to monitor and check the echo.  Works just like
362    printf.  */
363 
364 void
monitor_printf(char * pattern,...)365 monitor_printf (char *pattern,...)
366 {
367   va_list args;
368   char sndbuf[2000];
369   int len;
370 
371   va_start (args, pattern);
372 
373   monitor_vsprintf (sndbuf, pattern, args);
374 
375   len = strlen (sndbuf);
376   if (len + 1 > sizeof sndbuf)
377     internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
378 
379   if (monitor_debug_p)
380     {
381       char *safe_string = (char *) alloca ((len * 4) + 1);
382       monitor_printable_string (safe_string, sndbuf, 0);
383       fprintf_unfiltered (gdb_stdlog, "sent[%s]\n", safe_string);
384     }
385 
386   monitor_write (sndbuf, len);
387 
388   /* We used to expect that the next immediate output was the characters we
389      just output, but sometimes some extra junk appeared before the characters
390      we expected, like an extra prompt, or a portmaster sending telnet negotiations.
391      So, just start searching for what we sent, and skip anything unknown.  */
392   monitor_debug ("ExpectEcho\n");
393   monitor_expect (sndbuf, (char *) 0, 0);
394 }
395 
396 
397 /* Write characters to the remote system.  */
398 
399 void
monitor_write(char * buf,int buflen)400 monitor_write (char *buf, int buflen)
401 {
402   if (serial_write (monitor_desc, buf, buflen))
403     fprintf_unfiltered (gdb_stderr, "serial_write failed: %s\n",
404 			safe_strerror (errno));
405 }
406 
407 
408 /* Read a binary character from the remote system, doing all the fancy
409    timeout stuff, but without interpreting the character in any way,
410    and without printing remote debug information.  */
411 
412 int
monitor_readchar(void)413 monitor_readchar (void)
414 {
415   int c;
416   int looping;
417 
418   do
419     {
420       looping = 0;
421       c = serial_readchar (monitor_desc, timeout);
422 
423       if (c >= 0)
424 	c &= 0xff;		/* don't lose bit 7 */
425     }
426   while (looping);
427 
428   if (c >= 0)
429     return c;
430 
431   if (c == SERIAL_TIMEOUT)
432     error (_("Timeout reading from remote system."));
433 
434   perror_with_name (_("remote-monitor"));
435 }
436 
437 
438 /* Read a character from the remote system, doing all the fancy
439    timeout stuff.  */
440 
441 static int
readchar(int timeout)442 readchar (int timeout)
443 {
444   int c;
445   static enum
446     {
447       last_random, last_nl, last_cr, last_crnl
448     }
449   state = last_random;
450   int looping;
451 
452   do
453     {
454       looping = 0;
455       c = serial_readchar (monitor_desc, timeout);
456 
457       if (c >= 0)
458 	{
459 	  c &= 0x7f;
460 	  /* This seems to interfere with proper function of the
461 	     input stream */
462 	  if (monitor_debug_p || remote_debug)
463 	    {
464 	      char buf[2];
465 	      buf[0] = c;
466 	      buf[1] = '\0';
467 	      puts_debug ("read -->", buf, "<--");
468 	    }
469 
470 	}
471 
472       /* Canonicialize \n\r combinations into one \r */
473       if ((current_monitor->flags & MO_HANDLE_NL) != 0)
474 	{
475 	  if ((c == '\r' && state == last_nl)
476 	      || (c == '\n' && state == last_cr))
477 	    {
478 	      state = last_crnl;
479 	      looping = 1;
480 	    }
481 	  else if (c == '\r')
482 	    state = last_cr;
483 	  else if (c != '\n')
484 	    state = last_random;
485 	  else
486 	    {
487 	      state = last_nl;
488 	      c = '\r';
489 	    }
490 	}
491     }
492   while (looping);
493 
494   if (c >= 0)
495     return c;
496 
497   if (c == SERIAL_TIMEOUT)
498 #if 0
499     /* I fail to see how detaching here can be useful */
500     if (in_monitor_wait)	/* Watchdog went off */
501       {
502 	target_mourn_inferior ();
503 	error (_("GDB serial timeout has expired.  Target detached."));
504       }
505     else
506 #endif
507       error (_("Timeout reading from remote system."));
508 
509   perror_with_name (_("remote-monitor"));
510 }
511 
512 /* Scan input from the remote system, until STRING is found.  If BUF is non-
513    zero, then collect input until we have collected either STRING or BUFLEN-1
514    chars.  In either case we terminate BUF with a 0.  If input overflows BUF
515    because STRING can't be found, return -1, else return number of chars in BUF
516    (minus the terminating NUL).  Note that in the non-overflow case, STRING
517    will be at the end of BUF.  */
518 
519 int
monitor_expect(char * string,char * buf,int buflen)520 monitor_expect (char *string, char *buf, int buflen)
521 {
522   char *p = string;
523   int obuflen = buflen;
524   int c;
525 
526   if (monitor_debug_p)
527     {
528       char *safe_string = (char *) alloca ((strlen (string) * 4) + 1);
529       monitor_printable_string (safe_string, string, 0);
530       fprintf_unfiltered (gdb_stdlog, "MON Expecting '%s'\n", safe_string);
531     }
532 
533   immediate_quit++;
534   while (1)
535     {
536       if (buf)
537 	{
538 	  if (buflen < 2)
539 	    {
540 	      *buf = '\000';
541 	      immediate_quit--;
542 	      return -1;
543 	    }
544 
545 	  c = readchar (timeout);
546 	  if (c == '\000')
547 	    continue;
548 	  *buf++ = c;
549 	  buflen--;
550 	}
551       else
552 	c = readchar (timeout);
553 
554       /* Don't expect any ^C sent to be echoed */
555 
556       if (*p == '\003' || c == *p)
557 	{
558 	  p++;
559 	  if (*p == '\0')
560 	    {
561 	      immediate_quit--;
562 
563 	      if (buf)
564 		{
565 		  *buf++ = '\000';
566 		  return obuflen - buflen;
567 		}
568 	      else
569 		return 0;
570 	    }
571 	}
572       else
573 	{
574 	  /* We got a character that doesn't match the string.  We need to
575 	     back up p, but how far?  If we're looking for "..howdy" and the
576 	     monitor sends "...howdy"?  There's certainly a match in there,
577 	     but when we receive the third ".", we won't find it if we just
578 	     restart the matching at the beginning of the string.
579 
580 	     This is a Boyer-Moore kind of situation.  We want to reset P to
581 	     the end of the longest prefix of STRING that is a suffix of
582 	     what we've read so far.  In the example above, that would be
583 	     ".." --- the longest prefix of "..howdy" that is a suffix of
584 	     "...".  This longest prefix could be the empty string, if C
585 	     is nowhere to be found in STRING.
586 
587 	     If this longest prefix is not the empty string, it must contain
588 	     C, so let's search from the end of STRING for instances of C,
589 	     and see if the portion of STRING before that is a suffix of
590 	     what we read before C.  Actually, we can search backwards from
591 	     p, since we know no prefix can be longer than that.
592 
593 	     Note that we can use STRING itself, along with C, as a record
594 	     of what we've received so far.  :) */
595 	  int i;
596 
597 	  for (i = (p - string) - 1; i >= 0; i--)
598 	    if (string[i] == c)
599 	      {
600 		/* Is this prefix a suffix of what we've read so far?
601 		   In other words, does
602                      string[0 .. i-1] == string[p - i, p - 1]? */
603 		if (! memcmp (string, p - i, i))
604 		  {
605 		    p = string + i + 1;
606 		    break;
607 		  }
608 	      }
609 	  if (i < 0)
610 	    p = string;
611 	}
612     }
613 }
614 
615 /* Search for a regexp.  */
616 
617 static int
monitor_expect_regexp(struct re_pattern_buffer * pat,char * buf,int buflen)618 monitor_expect_regexp (struct re_pattern_buffer *pat, char *buf, int buflen)
619 {
620   char *mybuf;
621   char *p;
622   monitor_debug ("MON Expecting regexp\n");
623   if (buf)
624     mybuf = buf;
625   else
626     {
627       mybuf = alloca (TARGET_BUF_SIZE);
628       buflen = TARGET_BUF_SIZE;
629     }
630 
631   p = mybuf;
632   while (1)
633     {
634       int retval;
635 
636       if (p - mybuf >= buflen)
637 	{			/* Buffer about to overflow */
638 
639 /* On overflow, we copy the upper half of the buffer to the lower half.  Not
640    great, but it usually works... */
641 
642 	  memcpy (mybuf, mybuf + buflen / 2, buflen / 2);
643 	  p = mybuf + buflen / 2;
644 	}
645 
646       *p++ = readchar (timeout);
647 
648       retval = re_search (pat, mybuf, p - mybuf, 0, p - mybuf, NULL);
649       if (retval >= 0)
650 	return 1;
651     }
652 }
653 
654 /* Keep discarding input until we see the MONITOR prompt.
655 
656    The convention for dealing with the prompt is that you
657    o give your command
658    o *then* wait for the prompt.
659 
660    Thus the last thing that a procedure does with the serial line will
661    be an monitor_expect_prompt().  Exception: monitor_resume does not
662    wait for the prompt, because the terminal is being handed over to
663    the inferior.  However, the next thing which happens after that is
664    a monitor_wait which does wait for the prompt.  Note that this
665    includes abnormal exit, e.g. error().  This is necessary to prevent
666    getting into states from which we can't recover.  */
667 
668 int
monitor_expect_prompt(char * buf,int buflen)669 monitor_expect_prompt (char *buf, int buflen)
670 {
671   monitor_debug ("MON Expecting prompt\n");
672   return monitor_expect (current_monitor->prompt, buf, buflen);
673 }
674 
675 /* Get N 32-bit words from remote, each preceded by a space, and put
676    them in registers starting at REGNO.  */
677 
678 #if 0
679 static unsigned long
680 get_hex_word (void)
681 {
682   unsigned long val;
683   int i;
684   int ch;
685 
686   do
687     ch = readchar (timeout);
688   while (isspace (ch));
689 
690   val = from_hex (ch);
691 
692   for (i = 7; i >= 1; i--)
693     {
694       ch = readchar (timeout);
695       if (!isxdigit (ch))
696 	break;
697       val = (val << 4) | from_hex (ch);
698     }
699 
700   return val;
701 }
702 #endif
703 
704 static void
compile_pattern(char * pattern,struct re_pattern_buffer * compiled_pattern,char * fastmap)705 compile_pattern (char *pattern, struct re_pattern_buffer *compiled_pattern,
706 		 char *fastmap)
707 {
708   int tmp;
709   const char *val;
710 
711   compiled_pattern->fastmap = fastmap;
712 
713   tmp = re_set_syntax (RE_SYNTAX_EMACS);
714   val = re_compile_pattern (pattern,
715 			    strlen (pattern),
716 			    compiled_pattern);
717   re_set_syntax (tmp);
718 
719   if (val)
720     error (_("compile_pattern: Can't compile pattern string `%s': %s!"), pattern, val);
721 
722   if (fastmap)
723     re_compile_fastmap (compiled_pattern);
724 }
725 
726 /* Open a connection to a remote debugger. NAME is the filename used
727    for communication.  */
728 
729 void
monitor_open(char * args,struct monitor_ops * mon_ops,int from_tty)730 monitor_open (char *args, struct monitor_ops *mon_ops, int from_tty)
731 {
732   char *name;
733   char **p;
734 
735   if (mon_ops->magic != MONITOR_OPS_MAGIC)
736     error (_("Magic number of monitor_ops struct wrong."));
737 
738   targ_ops = mon_ops->target;
739   name = targ_ops->to_shortname;
740 
741   if (!args)
742     error (_("Use `target %s DEVICE-NAME' to use a serial port, or \n\
743 `target %s HOST-NAME:PORT-NUMBER' to use a network connection."), name, name);
744 
745   target_preopen (from_tty);
746 
747   /* Setup pattern for register dump */
748 
749   if (mon_ops->register_pattern)
750     compile_pattern (mon_ops->register_pattern, &register_pattern,
751 		     register_fastmap);
752 
753   if (mon_ops->getmem.resp_delim)
754     compile_pattern (mon_ops->getmem.resp_delim, &getmem_resp_delim_pattern,
755 		     getmem_resp_delim_fastmap);
756 
757   if (mon_ops->setmem.resp_delim)
758     compile_pattern (mon_ops->setmem.resp_delim, &setmem_resp_delim_pattern,
759                      setmem_resp_delim_fastmap);
760 
761   if (mon_ops->setreg.resp_delim)
762     compile_pattern (mon_ops->setreg.resp_delim, &setreg_resp_delim_pattern,
763                      setreg_resp_delim_fastmap);
764 
765   unpush_target (targ_ops);
766 
767   if (dev_name)
768     xfree (dev_name);
769   dev_name = xstrdup (args);
770 
771   monitor_desc = serial_open (dev_name);
772 
773   if (!monitor_desc)
774     perror_with_name (dev_name);
775 
776   if (baud_rate != -1)
777     {
778       if (serial_setbaudrate (monitor_desc, baud_rate))
779 	{
780 	  serial_close (monitor_desc);
781 	  perror_with_name (dev_name);
782 	}
783     }
784 
785   serial_raw (monitor_desc);
786 
787   serial_flush_input (monitor_desc);
788 
789   /* some systems only work with 2 stop bits */
790 
791   serial_setstopbits (monitor_desc, mon_ops->stopbits);
792 
793   current_monitor = mon_ops;
794 
795   /* See if we can wake up the monitor.  First, try sending a stop sequence,
796      then send the init strings.  Last, remove all breakpoints.  */
797 
798   if (current_monitor->stop)
799     {
800       monitor_stop ();
801       if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
802 	{
803 	  monitor_debug ("EXP Open echo\n");
804 	  monitor_expect_prompt (NULL, 0);
805 	}
806     }
807 
808   /* wake up the monitor and see if it's alive */
809   for (p = mon_ops->init; *p != NULL; p++)
810     {
811       /* Some of the characters we send may not be echoed,
812          but we hope to get a prompt at the end of it all. */
813 
814       if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0)
815 	monitor_printf (*p);
816       else
817 	monitor_printf_noecho (*p);
818       monitor_expect_prompt (NULL, 0);
819     }
820 
821   serial_flush_input (monitor_desc);
822 
823   /* Alloc breakpoints */
824   if (mon_ops->set_break != NULL)
825     {
826       if (mon_ops->num_breakpoints == 0)
827 	mon_ops->num_breakpoints = 8;
828 
829       breakaddr = (CORE_ADDR *) xmalloc (mon_ops->num_breakpoints * sizeof (CORE_ADDR));
830       memset (breakaddr, 0, mon_ops->num_breakpoints * sizeof (CORE_ADDR));
831     }
832 
833   /* Remove all breakpoints */
834 
835   if (mon_ops->clr_all_break)
836     {
837       monitor_printf (mon_ops->clr_all_break);
838       monitor_expect_prompt (NULL, 0);
839     }
840 
841   if (from_tty)
842     printf_unfiltered (_("Remote target %s connected to %s\n"), name, dev_name);
843 
844   push_target (targ_ops);
845 
846   inferior_ptid = pid_to_ptid (42000);	/* Make run command think we are busy... */
847 
848   /* Give monitor_wait something to read */
849 
850   monitor_printf (current_monitor->line_term);
851 
852   start_remote ();
853 }
854 
855 /* Close out all files and local state before this target loses
856    control.  */
857 
858 void
monitor_close(int quitting)859 monitor_close (int quitting)
860 {
861   if (monitor_desc)
862     serial_close (monitor_desc);
863 
864   /* Free breakpoint memory */
865   if (breakaddr != NULL)
866     {
867       xfree (breakaddr);
868       breakaddr = NULL;
869     }
870 
871   monitor_desc = NULL;
872 }
873 
874 /* Terminate the open connection to the remote debugger.  Use this
875    when you want to detach and do something else with your gdb.  */
876 
877 static void
monitor_detach(char * args,int from_tty)878 monitor_detach (char *args, int from_tty)
879 {
880   pop_target ();		/* calls monitor_close to do the real work */
881   if (from_tty)
882     printf_unfiltered (_("Ending remote %s debugging\n"), target_shortname);
883 }
884 
885 /* Convert VALSTR into the target byte-ordered value of REGNO and store it.  */
886 
887 char *
monitor_supply_register(int regno,char * valstr)888 monitor_supply_register (int regno, char *valstr)
889 {
890   ULONGEST val;
891   unsigned char regbuf[MAX_REGISTER_SIZE];
892   char *p;
893 
894   val = 0;
895   p = valstr;
896   while (p && *p != '\0')
897     {
898       if (*p == '\r' || *p == '\n')
899         {
900           while (*p != '\0')
901               p++;
902           break;
903         }
904       if (isspace (*p))
905         {
906           p++;
907           continue;
908         }
909       if (!isxdigit (*p) && *p != 'x')
910         {
911           break;
912         }
913 
914       val <<= 4;
915       val += fromhex (*p++);
916     }
917   monitor_debug ("Supplying Register %d %s\n", regno, valstr);
918 
919   if (val == 0 && valstr == p)
920     error (_("monitor_supply_register (%d):  bad value from monitor: %s."),
921 	   regno, valstr);
922 
923   /* supply register stores in target byte order, so swap here */
924 
925   store_unsigned_integer (regbuf, register_size (current_gdbarch, regno), val);
926 
927   regcache_raw_supply (current_regcache, regno, regbuf);
928 
929   return p;
930 }
931 
932 /* Tell the remote machine to resume.  */
933 
934 static void
monitor_resume(ptid_t ptid,int step,enum target_signal sig)935 monitor_resume (ptid_t ptid, int step, enum target_signal sig)
936 {
937   /* Some monitors require a different command when starting a program */
938   monitor_debug ("MON resume\n");
939   if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
940     {
941       first_time = 0;
942       monitor_printf ("run\r");
943       if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
944 	dump_reg_flag = 1;
945       return;
946     }
947   if (step)
948     monitor_printf (current_monitor->step);
949   else
950     {
951       if (current_monitor->continue_hook)
952 	(*current_monitor->continue_hook) ();
953       else
954 	monitor_printf (current_monitor->cont);
955       if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
956 	dump_reg_flag = 1;
957     }
958 }
959 
960 /* Parse the output of a register dump command.  A monitor specific
961    regexp is used to extract individual register descriptions of the
962    form REG=VAL.  Each description is split up into a name and a value
963    string which are passed down to monitor specific code.  */
964 
965 static void
parse_register_dump(char * buf,int len)966 parse_register_dump (char *buf, int len)
967 {
968   monitor_debug ("MON Parsing  register dump\n");
969   while (1)
970     {
971       int regnamelen, vallen;
972       char *regname, *val;
973       /* Element 0 points to start of register name, and element 1
974          points to the start of the register value.  */
975       struct re_registers register_strings;
976 
977       memset (&register_strings, 0, sizeof (struct re_registers));
978 
979       if (re_search (&register_pattern, buf, len, 0, len,
980 		     &register_strings) == -1)
981 	break;
982 
983       regnamelen = register_strings.end[1] - register_strings.start[1];
984       regname = buf + register_strings.start[1];
985       vallen = register_strings.end[2] - register_strings.start[2];
986       val = buf + register_strings.start[2];
987 
988       current_monitor->supply_register (regname, regnamelen, val, vallen);
989 
990       buf += register_strings.end[0];
991       len -= register_strings.end[0];
992     }
993 }
994 
995 /* Send ^C to target to halt it.  Target will respond, and send us a
996    packet.  */
997 
998 static void
monitor_interrupt(int signo)999 monitor_interrupt (int signo)
1000 {
1001   /* If this doesn't work, try more severe steps.  */
1002   signal (signo, monitor_interrupt_twice);
1003 
1004   if (monitor_debug_p || remote_debug)
1005     fprintf_unfiltered (gdb_stdlog, "monitor_interrupt called\n");
1006 
1007   target_stop ();
1008 }
1009 
1010 /* The user typed ^C twice.  */
1011 
1012 static void
monitor_interrupt_twice(int signo)1013 monitor_interrupt_twice (int signo)
1014 {
1015   signal (signo, ofunc);
1016 
1017   monitor_interrupt_query ();
1018 
1019   signal (signo, monitor_interrupt);
1020 }
1021 
1022 /* Ask the user what to do when an interrupt is received.  */
1023 
1024 static void
monitor_interrupt_query(void)1025 monitor_interrupt_query (void)
1026 {
1027   target_terminal_ours ();
1028 
1029   if (query ("Interrupted while waiting for the program.\n\
1030 Give up (and stop debugging it)? "))
1031     {
1032       target_mourn_inferior ();
1033       deprecated_throw_reason (RETURN_QUIT);
1034     }
1035 
1036   target_terminal_inferior ();
1037 }
1038 
1039 static void
monitor_wait_cleanup(void * old_timeout)1040 monitor_wait_cleanup (void *old_timeout)
1041 {
1042   timeout = *(int *) old_timeout;
1043   signal (SIGINT, ofunc);
1044   in_monitor_wait = 0;
1045 }
1046 
1047 
1048 
1049 static void
monitor_wait_filter(char * buf,int bufmax,int * ext_resp_len,struct target_waitstatus * status)1050 monitor_wait_filter (char *buf,
1051 		     int bufmax,
1052 		     int *ext_resp_len,
1053 		     struct target_waitstatus *status)
1054 {
1055   int resp_len;
1056   do
1057     {
1058       resp_len = monitor_expect_prompt (buf, bufmax);
1059       *ext_resp_len = resp_len;
1060 
1061       if (resp_len <= 0)
1062 	fprintf_unfiltered (gdb_stderr, "monitor_wait:  excessive response from monitor: %s.", buf);
1063     }
1064   while (resp_len < 0);
1065 
1066   /* Print any output characters that were preceded by ^O.  */
1067   /* FIXME - This would be great as a user settabgle flag */
1068   if (monitor_debug_p || remote_debug
1069       || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
1070     {
1071       int i;
1072 
1073       for (i = 0; i < resp_len - 1; i++)
1074 	if (buf[i] == 0x0f)
1075 	  putchar_unfiltered (buf[++i]);
1076     }
1077 }
1078 
1079 
1080 
1081 /* Wait until the remote machine stops, then return, storing status in
1082    status just as `wait' would.  */
1083 
1084 static ptid_t
monitor_wait(ptid_t ptid,struct target_waitstatus * status)1085 monitor_wait (ptid_t ptid, struct target_waitstatus *status)
1086 {
1087   int old_timeout = timeout;
1088   char buf[TARGET_BUF_SIZE];
1089   int resp_len;
1090   struct cleanup *old_chain;
1091 
1092   status->kind = TARGET_WAITKIND_EXITED;
1093   status->value.integer = 0;
1094 
1095   old_chain = make_cleanup (monitor_wait_cleanup, &old_timeout);
1096   monitor_debug ("MON wait\n");
1097 
1098 #if 0
1099   /* This is somthing other than a maintenance command */
1100     in_monitor_wait = 1;
1101   timeout = watchdog > 0 ? watchdog : -1;
1102 #else
1103   timeout = -1;		/* Don't time out -- user program is running. */
1104 #endif
1105 
1106   ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
1107 
1108   if (current_monitor->wait_filter)
1109     (*current_monitor->wait_filter) (buf, sizeof (buf), &resp_len, status);
1110   else
1111     monitor_wait_filter (buf, sizeof (buf), &resp_len, status);
1112 
1113 #if 0				/* Transferred to monitor wait filter */
1114   do
1115     {
1116       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1117 
1118       if (resp_len <= 0)
1119 	fprintf_unfiltered (gdb_stderr, "monitor_wait:  excessive response from monitor: %s.", buf);
1120     }
1121   while (resp_len < 0);
1122 
1123   /* Print any output characters that were preceded by ^O.  */
1124   /* FIXME - This would be great as a user settabgle flag */
1125   if (monitor_debug_p || remote_debug
1126       || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
1127     {
1128       int i;
1129 
1130       for (i = 0; i < resp_len - 1; i++)
1131 	if (buf[i] == 0x0f)
1132 	  putchar_unfiltered (buf[++i]);
1133     }
1134 #endif
1135 
1136   signal (SIGINT, ofunc);
1137 
1138   timeout = old_timeout;
1139 #if 0
1140   if (dump_reg_flag && current_monitor->dump_registers)
1141     {
1142       dump_reg_flag = 0;
1143       monitor_printf (current_monitor->dump_registers);
1144       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1145     }
1146 
1147   if (current_monitor->register_pattern)
1148     parse_register_dump (buf, resp_len);
1149 #else
1150   monitor_debug ("Wait fetching registers after stop\n");
1151   monitor_dump_regs ();
1152 #endif
1153 
1154   status->kind = TARGET_WAITKIND_STOPPED;
1155   status->value.sig = TARGET_SIGNAL_TRAP;
1156 
1157   discard_cleanups (old_chain);
1158 
1159   in_monitor_wait = 0;
1160 
1161   return inferior_ptid;
1162 }
1163 
1164 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
1165    errno value.  */
1166 
1167 static void
monitor_fetch_register(int regno)1168 monitor_fetch_register (int regno)
1169 {
1170   const char *name;
1171   char *zerobuf;
1172   char *regbuf;
1173   int i;
1174 
1175   regbuf  = alloca (MAX_REGISTER_SIZE * 2 + 1);
1176   zerobuf = alloca (MAX_REGISTER_SIZE);
1177   memset (zerobuf, 0, MAX_REGISTER_SIZE);
1178 
1179   if (current_monitor->regname != NULL)
1180     name = current_monitor->regname (regno);
1181   else
1182     name = current_monitor->regnames[regno];
1183   monitor_debug ("MON fetchreg %d '%s'\n", regno, name ? name : "(null name)");
1184 
1185   if (!name || (*name == '\0'))
1186     {
1187       monitor_debug ("No register known for %d\n", regno);
1188       regcache_raw_supply (current_regcache, regno, zerobuf);
1189       return;
1190     }
1191 
1192   /* send the register examine command */
1193 
1194   monitor_printf (current_monitor->getreg.cmd, name);
1195 
1196   /* If RESP_DELIM is specified, we search for that as a leading
1197      delimiter for the register value.  Otherwise, we just start
1198      searching from the start of the buf.  */
1199 
1200   if (current_monitor->getreg.resp_delim)
1201     {
1202       monitor_debug ("EXP getreg.resp_delim\n");
1203       monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1204       /* Handle case of first 32 registers listed in pairs.  */
1205       if (current_monitor->flags & MO_32_REGS_PAIRED
1206 	  && (regno & 1) != 0 && regno < 32)
1207 	{
1208 	  monitor_debug ("EXP getreg.resp_delim\n");
1209 	  monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1210 	}
1211     }
1212 
1213   /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
1214   if (current_monitor->flags & MO_HEX_PREFIX)
1215     {
1216       int c;
1217       c = readchar (timeout);
1218       while (c == ' ')
1219 	c = readchar (timeout);
1220       if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1221 	;
1222       else
1223 	error (_("Bad value returned from monitor while fetching register %x."),
1224 	       regno);
1225     }
1226 
1227   /* Read upto the maximum number of hex digits for this register, skipping
1228      spaces, but stop reading if something else is seen.  Some monitors
1229      like to drop leading zeros.  */
1230 
1231   for (i = 0; i < register_size (current_gdbarch, regno) * 2; i++)
1232     {
1233       int c;
1234       c = readchar (timeout);
1235       while (c == ' ')
1236 	c = readchar (timeout);
1237 
1238       if (!isxdigit (c))
1239 	break;
1240 
1241       regbuf[i] = c;
1242     }
1243 
1244   regbuf[i] = '\000';		/* terminate the number */
1245   monitor_debug ("REGVAL '%s'\n", regbuf);
1246 
1247   /* If TERM is present, we wait for that to show up.  Also, (if TERM
1248      is present), we will send TERM_CMD if that is present.  In any
1249      case, we collect all of the output into buf, and then wait for
1250      the normal prompt.  */
1251 
1252   if (current_monitor->getreg.term)
1253     {
1254       monitor_debug ("EXP getreg.term\n");
1255       monitor_expect (current_monitor->getreg.term, NULL, 0);		/* get response */
1256     }
1257 
1258   if (current_monitor->getreg.term_cmd)
1259     {
1260       monitor_debug ("EMIT getreg.term.cmd\n");
1261       monitor_printf (current_monitor->getreg.term_cmd);
1262     }
1263   if (!current_monitor->getreg.term ||	/* Already expected or */
1264       current_monitor->getreg.term_cmd)		/* ack expected */
1265     monitor_expect_prompt (NULL, 0);	/* get response */
1266 
1267   monitor_supply_register (regno, regbuf);
1268 }
1269 
1270 /* Sometimes, it takes several commands to dump the registers */
1271 /* This is a primitive for use by variations of monitor interfaces in
1272    case they need to compose the operation.
1273  */
1274 int
monitor_dump_reg_block(char * block_cmd)1275 monitor_dump_reg_block (char *block_cmd)
1276 {
1277   char buf[TARGET_BUF_SIZE];
1278   int resp_len;
1279   monitor_printf (block_cmd);
1280   resp_len = monitor_expect_prompt (buf, sizeof (buf));
1281   parse_register_dump (buf, resp_len);
1282   return 1;
1283 }
1284 
1285 
1286 /* Read the remote registers into the block regs.  */
1287 /* Call the specific function if it has been provided */
1288 
1289 static void
monitor_dump_regs(void)1290 monitor_dump_regs (void)
1291 {
1292   char buf[TARGET_BUF_SIZE];
1293   int resp_len;
1294   if (current_monitor->dumpregs)
1295     (*(current_monitor->dumpregs)) ();	/* call supplied function */
1296   else if (current_monitor->dump_registers)	/* default version */
1297     {
1298       monitor_printf (current_monitor->dump_registers);
1299       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1300       parse_register_dump (buf, resp_len);
1301     }
1302   else
1303     internal_error (__FILE__, __LINE__, _("failed internal consistency check"));			/* Need some way to read registers */
1304 }
1305 
1306 static void
monitor_fetch_registers(int regno)1307 monitor_fetch_registers (int regno)
1308 {
1309   monitor_debug ("MON fetchregs\n");
1310   if (current_monitor->getreg.cmd)
1311     {
1312       if (regno >= 0)
1313 	{
1314 	  monitor_fetch_register (regno);
1315 	  return;
1316 	}
1317 
1318       for (regno = 0; regno < NUM_REGS; regno++)
1319 	monitor_fetch_register (regno);
1320     }
1321   else
1322     {
1323       monitor_dump_regs ();
1324     }
1325 }
1326 
1327 /* Store register REGNO, or all if REGNO == 0.  Return errno value.  */
1328 
1329 static void
monitor_store_register(int regno)1330 monitor_store_register (int regno)
1331 {
1332   const char *name;
1333   ULONGEST val;
1334 
1335   if (current_monitor->regname != NULL)
1336     name = current_monitor->regname (regno);
1337   else
1338     name = current_monitor->regnames[regno];
1339 
1340   if (!name || (*name == '\0'))
1341     {
1342       monitor_debug ("MON Cannot store unknown register\n");
1343       return;
1344     }
1345 
1346   val = read_register (regno);
1347   monitor_debug ("MON storeg %d %s\n", regno,
1348 		 phex (val, register_size (current_gdbarch, regno)));
1349 
1350   /* send the register deposit command */
1351 
1352   if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
1353     monitor_printf (current_monitor->setreg.cmd, val, name);
1354   else if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1355     monitor_printf (current_monitor->setreg.cmd, name);
1356   else
1357     monitor_printf (current_monitor->setreg.cmd, name, val);
1358 
1359   if (current_monitor->setreg.resp_delim)
1360     {
1361       monitor_debug ("EXP setreg.resp_delim\n");
1362       monitor_expect_regexp (&setreg_resp_delim_pattern, NULL, 0);
1363       if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1364 	monitor_printf ("%s\r", paddr_nz (val));
1365     }
1366   if (current_monitor->setreg.term)
1367     {
1368       monitor_debug ("EXP setreg.term\n");
1369       monitor_expect (current_monitor->setreg.term, NULL, 0);
1370       if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1371 	monitor_printf ("%s\r", paddr_nz (val));
1372       monitor_expect_prompt (NULL, 0);
1373     }
1374   else
1375     monitor_expect_prompt (NULL, 0);
1376   if (current_monitor->setreg.term_cmd)		/* Mode exit required */
1377     {
1378       monitor_debug ("EXP setreg_termcmd\n");
1379       monitor_printf ("%s", current_monitor->setreg.term_cmd);
1380       monitor_expect_prompt (NULL, 0);
1381     }
1382 }				/* monitor_store_register */
1383 
1384 /* Store the remote registers.  */
1385 
1386 static void
monitor_store_registers(int regno)1387 monitor_store_registers (int regno)
1388 {
1389   if (regno >= 0)
1390     {
1391       monitor_store_register (regno);
1392       return;
1393     }
1394 
1395   for (regno = 0; regno < NUM_REGS; regno++)
1396     monitor_store_register (regno);
1397 }
1398 
1399 /* Get ready to modify the registers array.  On machines which store
1400    individual registers, this doesn't need to do anything.  On machines
1401    which store all the registers in one fell swoop, this makes sure
1402    that registers contains all the registers from the program being
1403    debugged.  */
1404 
1405 static void
monitor_prepare_to_store(void)1406 monitor_prepare_to_store (void)
1407 {
1408   /* Do nothing, since we can store individual regs */
1409 }
1410 
1411 static void
monitor_files_info(struct target_ops * ops)1412 monitor_files_info (struct target_ops *ops)
1413 {
1414   printf_unfiltered (_("\tAttached to %s at %d baud.\n"), dev_name, baud_rate);
1415 }
1416 
1417 static int
monitor_write_memory(CORE_ADDR memaddr,char * myaddr,int len)1418 monitor_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
1419 {
1420   unsigned int val, hostval;
1421   char *cmd;
1422   int i;
1423 
1424   monitor_debug ("MON write %d %s\n", len, paddr (memaddr));
1425 
1426   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1427     memaddr = ADDR_BITS_REMOVE (memaddr);
1428 
1429   /* Use memory fill command for leading 0 bytes.  */
1430 
1431   if (current_monitor->fill)
1432     {
1433       for (i = 0; i < len; i++)
1434 	if (myaddr[i] != 0)
1435 	  break;
1436 
1437       if (i > 4)		/* More than 4 zeros is worth doing */
1438 	{
1439 	  monitor_debug ("MON FILL %d\n", i);
1440 	  if (current_monitor->flags & MO_FILL_USES_ADDR)
1441 	    monitor_printf (current_monitor->fill, memaddr, (memaddr + i) - 1, 0);
1442 	  else
1443 	    monitor_printf (current_monitor->fill, memaddr, i, 0);
1444 
1445 	  monitor_expect_prompt (NULL, 0);
1446 
1447 	  return i;
1448 	}
1449     }
1450 
1451 #if 0
1452   /* Can't actually use long longs if VAL is an int (nice idea, though).  */
1453   if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1454     {
1455       len = 8;
1456       cmd = current_monitor->setmem.cmdll;
1457     }
1458   else
1459 #endif
1460   if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1461     {
1462       len = 4;
1463       cmd = current_monitor->setmem.cmdl;
1464     }
1465   else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1466     {
1467       len = 2;
1468       cmd = current_monitor->setmem.cmdw;
1469     }
1470   else
1471     {
1472       len = 1;
1473       cmd = current_monitor->setmem.cmdb;
1474     }
1475 
1476   val = extract_unsigned_integer (myaddr, len);
1477 
1478   if (len == 4)
1479     {
1480       hostval = *(unsigned int *) myaddr;
1481       monitor_debug ("Hostval(%08x) val(%08x)\n", hostval, val);
1482     }
1483 
1484 
1485   if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1486     monitor_printf_noecho (cmd, memaddr, val);
1487   else if (current_monitor->flags & MO_SETMEM_INTERACTIVE)
1488     {
1489 
1490       monitor_printf_noecho (cmd, memaddr);
1491 
1492       if (current_monitor->setmem.resp_delim)
1493         {
1494           monitor_debug ("EXP setmem.resp_delim");
1495           monitor_expect_regexp (&setmem_resp_delim_pattern, NULL, 0);
1496 	  monitor_printf ("%x\r", val);
1497        }
1498       if (current_monitor->setmem.term)
1499 	{
1500 	  monitor_debug ("EXP setmem.term");
1501 	  monitor_expect (current_monitor->setmem.term, NULL, 0);
1502 	  monitor_printf ("%x\r", val);
1503 	}
1504       if (current_monitor->setmem.term_cmd)
1505 	{			/* Emit this to get out of the memory editing state */
1506 	  monitor_printf ("%s", current_monitor->setmem.term_cmd);
1507 	  /* Drop through to expecting a prompt */
1508 	}
1509     }
1510   else
1511     monitor_printf (cmd, memaddr, val);
1512 
1513   monitor_expect_prompt (NULL, 0);
1514 
1515   return len;
1516 }
1517 
1518 
1519 static int
monitor_write_memory_bytes(CORE_ADDR memaddr,char * myaddr,int len)1520 monitor_write_memory_bytes (CORE_ADDR memaddr, char *myaddr, int len)
1521 {
1522   unsigned char val;
1523   int written = 0;
1524   if (len == 0)
1525     return 0;
1526   /* Enter the sub mode */
1527   monitor_printf (current_monitor->setmem.cmdb, memaddr);
1528   monitor_expect_prompt (NULL, 0);
1529   while (len)
1530     {
1531       val = *myaddr;
1532       monitor_printf ("%x\r", val);
1533       myaddr++;
1534       memaddr++;
1535       written++;
1536       /* If we wanted to, here we could validate the address */
1537       monitor_expect_prompt (NULL, 0);
1538       len--;
1539     }
1540   /* Now exit the sub mode */
1541   monitor_printf (current_monitor->getreg.term_cmd);
1542   monitor_expect_prompt (NULL, 0);
1543   return written;
1544 }
1545 
1546 
1547 static void
longlongendswap(unsigned char * a)1548 longlongendswap (unsigned char *a)
1549 {
1550   int i, j;
1551   unsigned char x;
1552   i = 0;
1553   j = 7;
1554   while (i < 4)
1555     {
1556       x = *(a + i);
1557       *(a + i) = *(a + j);
1558       *(a + j) = x;
1559       i++, j--;
1560     }
1561 }
1562 /* Format 32 chars of long long value, advance the pointer */
1563 static char *hexlate = "0123456789abcdef";
1564 static char *
longlong_hexchars(unsigned long long value,char * outbuff)1565 longlong_hexchars (unsigned long long value,
1566 		   char *outbuff)
1567 {
1568   if (value == 0)
1569     {
1570       *outbuff++ = '0';
1571       return outbuff;
1572     }
1573   else
1574     {
1575       static unsigned char disbuf[8];	/* disassembly buffer */
1576       unsigned char *scan, *limit;	/* loop controls */
1577       unsigned char c, nib;
1578       int leadzero = 1;
1579       scan = disbuf;
1580       limit = scan + 8;
1581       {
1582 	unsigned long long *dp;
1583 	dp = (unsigned long long *) scan;
1584 	*dp = value;
1585       }
1586       longlongendswap (disbuf);	/* FIXME: ONly on big endian hosts */
1587       while (scan < limit)
1588 	{
1589 	  c = *scan++;		/* a byte of our long long value */
1590 	  if (leadzero)
1591 	    {
1592 	      if (c == 0)
1593 		continue;
1594 	      else
1595 		leadzero = 0;	/* henceforth we print even zeroes */
1596 	    }
1597 	  nib = c >> 4;		/* high nibble bits */
1598 	  *outbuff++ = hexlate[nib];
1599 	  nib = c & 0x0f;	/* low nibble bits */
1600 	  *outbuff++ = hexlate[nib];
1601 	}
1602       return outbuff;
1603     }
1604 }				/* longlong_hexchars */
1605 
1606 
1607 
1608 /* I am only going to call this when writing virtual byte streams.
1609    Which possably entails endian conversions
1610  */
1611 static int
monitor_write_memory_longlongs(CORE_ADDR memaddr,char * myaddr,int len)1612 monitor_write_memory_longlongs (CORE_ADDR memaddr, char *myaddr, int len)
1613 {
1614   static char hexstage[20];	/* At least 16 digits required, plus null */
1615   char *endstring;
1616   long long *llptr;
1617   long long value;
1618   int written = 0;
1619   llptr = (unsigned long long *) myaddr;
1620   if (len == 0)
1621     return 0;
1622   monitor_printf (current_monitor->setmem.cmdll, memaddr);
1623   monitor_expect_prompt (NULL, 0);
1624   while (len >= 8)
1625     {
1626       value = *llptr;
1627       endstring = longlong_hexchars (*llptr, hexstage);
1628       *endstring = '\0';	/* NUll terminate for printf */
1629       monitor_printf ("%s\r", hexstage);
1630       llptr++;
1631       memaddr += 8;
1632       written += 8;
1633       /* If we wanted to, here we could validate the address */
1634       monitor_expect_prompt (NULL, 0);
1635       len -= 8;
1636     }
1637   /* Now exit the sub mode */
1638   monitor_printf (current_monitor->getreg.term_cmd);
1639   monitor_expect_prompt (NULL, 0);
1640   return written;
1641 }				/* */
1642 
1643 
1644 
1645 /* ----- MONITOR_WRITE_MEMORY_BLOCK ---------------------------- */
1646 /* This is for the large blocks of memory which may occur in downloading.
1647    And for monitors which use interactive entry,
1648    And for monitors which do not have other downloading methods.
1649    Without this, we will end up calling monitor_write_memory many times
1650    and do the entry and exit of the sub mode many times
1651    This currently assumes...
1652    MO_SETMEM_INTERACTIVE
1653    ! MO_NO_ECHO_ON_SETMEM
1654    To use this, the you have to patch the monitor_cmds block with
1655    this function. Otherwise, its not tuned up for use by all
1656    monitor variations.
1657  */
1658 
1659 static int
monitor_write_memory_block(CORE_ADDR memaddr,char * myaddr,int len)1660 monitor_write_memory_block (CORE_ADDR memaddr, char *myaddr, int len)
1661 {
1662   int written;
1663   written = 0;
1664   /* FIXME: This would be a good place to put the zero test */
1665 #if 1
1666   if ((len > 8) && (((len & 0x07)) == 0) && current_monitor->setmem.cmdll)
1667     {
1668       return monitor_write_memory_longlongs (memaddr, myaddr, len);
1669     }
1670 #endif
1671   written = monitor_write_memory_bytes (memaddr, myaddr, len);
1672   return written;
1673 }
1674 
1675 /* This is an alternate form of monitor_read_memory which is used for monitors
1676    which can only read a single byte/word/etc. at a time.  */
1677 
1678 static int
monitor_read_memory_single(CORE_ADDR memaddr,char * myaddr,int len)1679 monitor_read_memory_single (CORE_ADDR memaddr, char *myaddr, int len)
1680 {
1681   unsigned int val;
1682   char membuf[sizeof (int) * 2 + 1];
1683   char *p;
1684   char *cmd;
1685 
1686   monitor_debug ("MON read single\n");
1687 #if 0
1688   /* Can't actually use long longs (nice idea, though).  In fact, the
1689      call to strtoul below will fail if it tries to convert a value
1690      that's too big to fit in a long.  */
1691   if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1692     {
1693       len = 8;
1694       cmd = current_monitor->getmem.cmdll;
1695     }
1696   else
1697 #endif
1698   if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1699     {
1700       len = 4;
1701       cmd = current_monitor->getmem.cmdl;
1702     }
1703   else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1704     {
1705       len = 2;
1706       cmd = current_monitor->getmem.cmdw;
1707     }
1708   else
1709     {
1710       len = 1;
1711       cmd = current_monitor->getmem.cmdb;
1712     }
1713 
1714   /* Send the examine command.  */
1715 
1716   monitor_printf (cmd, memaddr);
1717 
1718   /* If RESP_DELIM is specified, we search for that as a leading
1719      delimiter for the memory value.  Otherwise, we just start
1720      searching from the start of the buf.  */
1721 
1722   if (current_monitor->getmem.resp_delim)
1723     {
1724       monitor_debug ("EXP getmem.resp_delim\n");
1725       monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1726     }
1727 
1728   /* Now, read the appropriate number of hex digits for this loc,
1729      skipping spaces.  */
1730 
1731   /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
1732   if (current_monitor->flags & MO_HEX_PREFIX)
1733     {
1734       int c;
1735 
1736       c = readchar (timeout);
1737       while (c == ' ')
1738 	c = readchar (timeout);
1739       if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1740 	;
1741       else
1742 	monitor_error ("monitor_read_memory_single",
1743 		       "bad response from monitor",
1744 		       memaddr, 0, NULL, 0);
1745     }
1746 
1747   {
1748     int i;
1749     for (i = 0; i < len * 2; i++)
1750       {
1751 	int c;
1752 
1753 	while (1)
1754 	  {
1755 	    c = readchar (timeout);
1756 	    if (isxdigit (c))
1757 	      break;
1758 	    if (c == ' ')
1759 	      continue;
1760 
1761 	    monitor_error ("monitor_read_memory_single",
1762 			   "bad response from monitor",
1763 			   memaddr, i, membuf, 0);
1764 	  }
1765       membuf[i] = c;
1766     }
1767     membuf[i] = '\000';		/* terminate the number */
1768   }
1769 
1770 /* If TERM is present, we wait for that to show up.  Also, (if TERM is
1771    present), we will send TERM_CMD if that is present.  In any case, we collect
1772    all of the output into buf, and then wait for the normal prompt.  */
1773 
1774   if (current_monitor->getmem.term)
1775     {
1776       monitor_expect (current_monitor->getmem.term, NULL, 0);	/* get response */
1777 
1778       if (current_monitor->getmem.term_cmd)
1779 	{
1780 	  monitor_printf (current_monitor->getmem.term_cmd);
1781 	  monitor_expect_prompt (NULL, 0);
1782 	}
1783     }
1784   else
1785     monitor_expect_prompt (NULL, 0);	/* get response */
1786 
1787   p = membuf;
1788   val = strtoul (membuf, &p, 16);
1789 
1790   if (val == 0 && membuf == p)
1791     monitor_error ("monitor_read_memory_single",
1792 		   "bad value from monitor",
1793 		   memaddr, 0, membuf, 0);
1794 
1795   /* supply register stores in target byte order, so swap here */
1796 
1797   store_unsigned_integer (myaddr, len, val);
1798 
1799   return len;
1800 }
1801 
1802 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1803    memory at MEMADDR.  Returns length moved.  Currently, we do no more
1804    than 16 bytes at a time.  */
1805 
1806 static int
monitor_read_memory(CORE_ADDR memaddr,char * myaddr,int len)1807 monitor_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
1808 {
1809   unsigned int val;
1810   char buf[512];
1811   char *p, *p1;
1812   int resp_len;
1813   int i;
1814   CORE_ADDR dumpaddr;
1815 
1816   if (len <= 0)
1817     {
1818       monitor_debug ("Zero length call to monitor_read_memory\n");
1819       return 0;
1820     }
1821 
1822   monitor_debug ("MON read block ta(%s) ha(%lx) %d\n",
1823 		 paddr_nz (memaddr), (long) myaddr, len);
1824 
1825   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1826     memaddr = ADDR_BITS_REMOVE (memaddr);
1827 
1828   if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1829     return monitor_read_memory_single (memaddr, myaddr, len);
1830 
1831   len = min (len, 16);
1832 
1833   /* Some dumpers align the first data with the preceeding 16
1834      byte boundary. Some print blanks and start at the
1835      requested boundary. EXACT_DUMPADDR
1836    */
1837 
1838   dumpaddr = (current_monitor->flags & MO_EXACT_DUMPADDR)
1839     ? memaddr : memaddr & ~0x0f;
1840 
1841   /* See if xfer would cross a 16 byte boundary.  If so, clip it.  */
1842   if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1843     len = ((memaddr + len) & ~0xf) - memaddr;
1844 
1845   /* send the memory examine command */
1846 
1847   if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1848     monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len);
1849   else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1850     monitor_printf (current_monitor->getmem.cmdb, dumpaddr);
1851   else
1852     monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1853 
1854   /* If TERM is present, we wait for that to show up.  Also, (if TERM
1855      is present), we will send TERM_CMD if that is present.  In any
1856      case, we collect all of the output into buf, and then wait for
1857      the normal prompt.  */
1858 
1859   if (current_monitor->getmem.term)
1860     {
1861       resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf);	/* get response */
1862 
1863       if (resp_len <= 0)
1864 	monitor_error ("monitor_read_memory",
1865 		       "excessive response from monitor",
1866 		       memaddr, resp_len, buf, 0);
1867 
1868       if (current_monitor->getmem.term_cmd)
1869 	{
1870 	  serial_write (monitor_desc, current_monitor->getmem.term_cmd,
1871 			strlen (current_monitor->getmem.term_cmd));
1872 	  monitor_expect_prompt (NULL, 0);
1873 	}
1874     }
1875   else
1876     resp_len = monitor_expect_prompt (buf, sizeof buf);		/* get response */
1877 
1878   p = buf;
1879 
1880   /* If RESP_DELIM is specified, we search for that as a leading
1881      delimiter for the values.  Otherwise, we just start searching
1882      from the start of the buf.  */
1883 
1884   if (current_monitor->getmem.resp_delim)
1885     {
1886       int retval, tmp;
1887       struct re_registers resp_strings;
1888       monitor_debug ("MON getmem.resp_delim %s\n", current_monitor->getmem.resp_delim);
1889 
1890       memset (&resp_strings, 0, sizeof (struct re_registers));
1891       tmp = strlen (p);
1892       retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1893 			  &resp_strings);
1894 
1895       if (retval < 0)
1896 	monitor_error ("monitor_read_memory",
1897 		       "bad response from monitor",
1898 		       memaddr, resp_len, buf, 0);
1899 
1900       p += resp_strings.end[0];
1901 #if 0
1902       p = strstr (p, current_monitor->getmem.resp_delim);
1903       if (!p)
1904 	monitor_error ("monitor_read_memory",
1905 		       "bad response from monitor",
1906 		       memaddr, resp_len, buf, 0);
1907       p += strlen (current_monitor->getmem.resp_delim);
1908 #endif
1909     }
1910   monitor_debug ("MON scanning  %d ,%lx '%s'\n", len, (long) p, p);
1911   if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1912     {
1913       char c;
1914       int fetched = 0;
1915       i = len;
1916       c = *p;
1917 
1918 
1919       while (!(c == '\000' || c == '\n' || c == '\r') && i > 0)
1920 	{
1921 	  if (isxdigit (c))
1922 	    {
1923 	      if ((dumpaddr >= memaddr) && (i > 0))
1924 		{
1925 		  val = fromhex (c) * 16 + fromhex (*(p + 1));
1926 		  *myaddr++ = val;
1927 		  if (monitor_debug_p || remote_debug)
1928 		    fprintf_unfiltered (gdb_stdlog, "[%02x]", val);
1929 		  --i;
1930 		  fetched++;
1931 		}
1932 	      ++dumpaddr;
1933 	      ++p;
1934 	    }
1935 	  ++p;			/* skip a blank or other non hex char */
1936 	  c = *p;
1937 	}
1938       if (fetched == 0)
1939 	error (_("Failed to read via monitor"));
1940       if (monitor_debug_p || remote_debug)
1941 	fprintf_unfiltered (gdb_stdlog, "\n");
1942       return fetched;		/* Return the number of bytes actually read */
1943     }
1944   monitor_debug ("MON scanning bytes\n");
1945 
1946   for (i = len; i > 0; i--)
1947     {
1948       /* Skip non-hex chars, but bomb on end of string and newlines */
1949 
1950       while (1)
1951 	{
1952 	  if (isxdigit (*p))
1953 	    break;
1954 
1955 	  if (*p == '\000' || *p == '\n' || *p == '\r')
1956 	    monitor_error ("monitor_read_memory",
1957 			   "badly terminated response from monitor",
1958 			   memaddr, resp_len, buf, 0);
1959 	  p++;
1960 	}
1961 
1962       val = strtoul (p, &p1, 16);
1963 
1964       if (val == 0 && p == p1)
1965 	monitor_error ("monitor_read_memory",
1966 		       "bad value from monitor",
1967 		       memaddr, resp_len, buf, 0);
1968 
1969       *myaddr++ = val;
1970 
1971       if (i == 1)
1972 	break;
1973 
1974       p = p1;
1975     }
1976 
1977   return len;
1978 }
1979 
1980 /* Transfer LEN bytes between target address MEMADDR and GDB address
1981    MYADDR.  Returns 0 for success, errno code for failure. TARGET is
1982    unused. */
1983 
1984 static int
monitor_xfer_memory(CORE_ADDR memaddr,char * myaddr,int len,int write,struct mem_attrib * attrib,struct target_ops * target)1985 monitor_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
1986 		     struct mem_attrib *attrib, struct target_ops *target)
1987 {
1988   int res;
1989 
1990   if (write)
1991     {
1992       if (current_monitor->flags & MO_HAS_BLOCKWRITES)
1993 	res = monitor_write_memory_block(memaddr, myaddr, len);
1994       else
1995 	res = monitor_write_memory(memaddr, myaddr, len);
1996     }
1997   else
1998     {
1999       res = monitor_read_memory(memaddr, myaddr, len);
2000     }
2001 
2002   return res;
2003 }
2004 
2005 static void
monitor_kill(void)2006 monitor_kill (void)
2007 {
2008   return;			/* ignore attempts to kill target system */
2009 }
2010 
2011 /* All we actually do is set the PC to the start address of exec_bfd, and start
2012    the program at that point.  */
2013 
2014 static void
monitor_create_inferior(char * exec_file,char * args,char ** env,int from_tty)2015 monitor_create_inferior (char *exec_file, char *args, char **env,
2016 			 int from_tty)
2017 {
2018   if (args && (*args != '\000'))
2019     error (_("Args are not supported by the monitor."));
2020 
2021   first_time = 1;
2022   clear_proceed_status ();
2023   proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
2024 }
2025 
2026 /* Clean up when a program exits.
2027    The program actually lives on in the remote processor's RAM, and may be
2028    run again without a download.  Don't leave it full of breakpoint
2029    instructions.  */
2030 
2031 static void
monitor_mourn_inferior(void)2032 monitor_mourn_inferior (void)
2033 {
2034   unpush_target (targ_ops);
2035   generic_mourn_inferior ();	/* Do all the proper things now */
2036 }
2037 
2038 /* Tell the monitor to add a breakpoint.  */
2039 
2040 static int
monitor_insert_breakpoint(CORE_ADDR addr,char * shadow)2041 monitor_insert_breakpoint (CORE_ADDR addr, char *shadow)
2042 {
2043   int i;
2044   const unsigned char *bp;
2045   int bplen;
2046 
2047   monitor_debug ("MON inst bkpt %s\n", paddr (addr));
2048   if (current_monitor->set_break == NULL)
2049     error (_("No set_break defined for this monitor"));
2050 
2051   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
2052     addr = ADDR_BITS_REMOVE (addr);
2053 
2054   /* Determine appropriate breakpoint size for this address.  */
2055   bp = gdbarch_breakpoint_from_pc (current_gdbarch, &addr, &bplen);
2056 
2057   for (i = 0; i < current_monitor->num_breakpoints; i++)
2058     {
2059       if (breakaddr[i] == 0)
2060 	{
2061 	  breakaddr[i] = addr;
2062 	  monitor_read_memory (addr, shadow, bplen);
2063 	  monitor_printf (current_monitor->set_break, addr);
2064 	  monitor_expect_prompt (NULL, 0);
2065 	  return 0;
2066 	}
2067     }
2068 
2069   error (_("Too many breakpoints (> %d) for monitor."), current_monitor->num_breakpoints);
2070 }
2071 
2072 /* Tell the monitor to remove a breakpoint.  */
2073 
2074 static int
monitor_remove_breakpoint(CORE_ADDR addr,char * shadow)2075 monitor_remove_breakpoint (CORE_ADDR addr, char *shadow)
2076 {
2077   int i;
2078 
2079   monitor_debug ("MON rmbkpt %s\n", paddr (addr));
2080   if (current_monitor->clr_break == NULL)
2081     error (_("No clr_break defined for this monitor"));
2082 
2083   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
2084     addr = ADDR_BITS_REMOVE (addr);
2085 
2086   for (i = 0; i < current_monitor->num_breakpoints; i++)
2087     {
2088       if (breakaddr[i] == addr)
2089 	{
2090 	  breakaddr[i] = 0;
2091 	  /* some monitors remove breakpoints based on the address */
2092 	  if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
2093 	    monitor_printf (current_monitor->clr_break, addr);
2094 	  else if (current_monitor->flags & MO_CLR_BREAK_1_BASED)
2095 	    monitor_printf (current_monitor->clr_break, i + 1);
2096 	  else
2097 	    monitor_printf (current_monitor->clr_break, i);
2098 	  monitor_expect_prompt (NULL, 0);
2099 	  return 0;
2100 	}
2101     }
2102   fprintf_unfiltered (gdb_stderr,
2103 		      "Can't find breakpoint associated with 0x%s\n",
2104 		      paddr_nz (addr));
2105   return 1;
2106 }
2107 
2108 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
2109    an S-record.  Return non-zero if the ACK is received properly.  */
2110 
2111 static int
monitor_wait_srec_ack(void)2112 monitor_wait_srec_ack (void)
2113 {
2114   int ch;
2115 
2116   if (current_monitor->flags & MO_SREC_ACK_PLUS)
2117     {
2118       return (readchar (timeout) == '+');
2119     }
2120   else if (current_monitor->flags & MO_SREC_ACK_ROTATE)
2121     {
2122       /* Eat two backspaces, a "rotating" char (|/-\), and a space.  */
2123       if ((ch = readchar (1)) < 0)
2124 	return 0;
2125       if ((ch = readchar (1)) < 0)
2126 	return 0;
2127       if ((ch = readchar (1)) < 0)
2128 	return 0;
2129       if ((ch = readchar (1)) < 0)
2130 	return 0;
2131     }
2132   return 1;
2133 }
2134 
2135 /* monitor_load -- download a file. */
2136 
2137 static void
monitor_load(char * file,int from_tty)2138 monitor_load (char *file, int from_tty)
2139 {
2140   monitor_debug ("MON load\n");
2141 
2142   if (current_monitor->load_routine)
2143     current_monitor->load_routine (monitor_desc, file, hashmark);
2144   else
2145     {				/* The default is ascii S-records */
2146       int n;
2147       unsigned long load_offset;
2148       char buf[128];
2149 
2150       /* enable user to specify address for downloading as 2nd arg to load */
2151       n = sscanf (file, "%s 0x%lx", buf, &load_offset);
2152       if (n > 1)
2153 	file = buf;
2154       else
2155 	load_offset = 0;
2156 
2157       monitor_printf (current_monitor->load);
2158       if (current_monitor->loadresp)
2159 	monitor_expect (current_monitor->loadresp, NULL, 0);
2160 
2161       load_srec (monitor_desc, file, (bfd_vma) load_offset,
2162 		 32, SREC_ALL, hashmark,
2163 		 current_monitor->flags & MO_SREC_ACK ?
2164 		 monitor_wait_srec_ack : NULL);
2165 
2166       monitor_expect_prompt (NULL, 0);
2167     }
2168 
2169   /* Finally, make the PC point at the start address */
2170   if (exec_bfd)
2171     write_pc (bfd_get_start_address (exec_bfd));
2172 
2173   /* There used to be code here which would clear inferior_ptid and
2174      call clear_symtab_users.  None of that should be necessary:
2175      monitor targets should behave like remote protocol targets, and
2176      since generic_load does none of those things, this function
2177      shouldn't either.
2178 
2179      Furthermore, clearing inferior_ptid is *incorrect*.  After doing
2180      a load, we still have a valid connection to the monitor, with a
2181      live processor state to fiddle with.  The user can type
2182      `continue' or `jump *start' and make the program run.  If they do
2183      these things, however, GDB will be talking to a running program
2184      while inferior_ptid is null_ptid; this makes things like
2185      reinit_frame_cache very confused.  */
2186 }
2187 
2188 static void
monitor_stop(void)2189 monitor_stop (void)
2190 {
2191   monitor_debug ("MON stop\n");
2192   if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
2193     serial_send_break (monitor_desc);
2194   if (current_monitor->stop)
2195     monitor_printf_noecho (current_monitor->stop);
2196 }
2197 
2198 /* Put a COMMAND string out to MONITOR.  Output from MONITOR is placed
2199    in OUTPUT until the prompt is seen. FIXME: We read the characters
2200    ourseleves here cause of a nasty echo.  */
2201 
2202 static void
monitor_rcmd(char * command,struct ui_file * outbuf)2203 monitor_rcmd (char *command,
2204 	      struct ui_file *outbuf)
2205 {
2206   char *p;
2207   int resp_len;
2208   char buf[1000];
2209 
2210   if (monitor_desc == NULL)
2211     error (_("monitor target not open."));
2212 
2213   p = current_monitor->prompt;
2214 
2215   /* Send the command.  Note that if no args were supplied, then we're
2216      just sending the monitor a newline, which is sometimes useful.  */
2217 
2218   monitor_printf ("%s\r", (command ? command : ""));
2219 
2220   resp_len = monitor_expect_prompt (buf, sizeof buf);
2221 
2222   fputs_unfiltered (buf, outbuf);	/* Output the response */
2223 }
2224 
2225 /* Convert hex digit A to a number.  */
2226 
2227 #if 0
2228 static int
2229 from_hex (int a)
2230 {
2231   if (a >= '0' && a <= '9')
2232     return a - '0';
2233   if (a >= 'a' && a <= 'f')
2234     return a - 'a' + 10;
2235   if (a >= 'A' && a <= 'F')
2236     return a - 'A' + 10;
2237 
2238   error (_("Reply contains invalid hex digit 0x%x"), a);
2239 }
2240 #endif
2241 
2242 char *
monitor_get_dev_name(void)2243 monitor_get_dev_name (void)
2244 {
2245   return dev_name;
2246 }
2247 
2248 static struct target_ops monitor_ops;
2249 
2250 static void
init_base_monitor_ops(void)2251 init_base_monitor_ops (void)
2252 {
2253   monitor_ops.to_close = monitor_close;
2254   monitor_ops.to_detach = monitor_detach;
2255   monitor_ops.to_resume = monitor_resume;
2256   monitor_ops.to_wait = monitor_wait;
2257   monitor_ops.to_fetch_registers = monitor_fetch_registers;
2258   monitor_ops.to_store_registers = monitor_store_registers;
2259   monitor_ops.to_prepare_to_store = monitor_prepare_to_store;
2260   monitor_ops.deprecated_xfer_memory = monitor_xfer_memory;
2261   monitor_ops.to_files_info = monitor_files_info;
2262   monitor_ops.to_insert_breakpoint = monitor_insert_breakpoint;
2263   monitor_ops.to_remove_breakpoint = monitor_remove_breakpoint;
2264   monitor_ops.to_kill = monitor_kill;
2265   monitor_ops.to_load = monitor_load;
2266   monitor_ops.to_create_inferior = monitor_create_inferior;
2267   monitor_ops.to_mourn_inferior = monitor_mourn_inferior;
2268   monitor_ops.to_stop = monitor_stop;
2269   monitor_ops.to_rcmd = monitor_rcmd;
2270   monitor_ops.to_stratum = process_stratum;
2271   monitor_ops.to_has_all_memory = 1;
2272   monitor_ops.to_has_memory = 1;
2273   monitor_ops.to_has_stack = 1;
2274   monitor_ops.to_has_registers = 1;
2275   monitor_ops.to_has_execution = 1;
2276   monitor_ops.to_magic = OPS_MAGIC;
2277 }				/* init_base_monitor_ops */
2278 
2279 /* Init the target_ops structure pointed at by OPS */
2280 
2281 void
init_monitor_ops(struct target_ops * ops)2282 init_monitor_ops (struct target_ops *ops)
2283 {
2284   if (monitor_ops.to_magic != OPS_MAGIC)
2285     init_base_monitor_ops ();
2286 
2287   memcpy (ops, &monitor_ops, sizeof monitor_ops);
2288 }
2289 
2290 /* Define additional commands that are usually only used by monitors.  */
2291 
2292 extern initialize_file_ftype _initialize_remote_monitors; /* -Wmissing-prototypes */
2293 
2294 void
_initialize_remote_monitors(void)2295 _initialize_remote_monitors (void)
2296 {
2297   init_base_monitor_ops ();
2298   add_setshow_boolean_cmd ("hash", no_class, &hashmark, _("\
2299 Set display of activity while downloading a file."), _("\
2300 Show display of activity while downloading a file."), _("\
2301 When enabled, a hashmark \'#\' is displayed."),
2302 			   NULL,
2303 			   NULL, /* FIXME: i18n: */
2304 			   &setlist, &showlist);
2305 
2306   add_setshow_zinteger_cmd ("monitor", no_class, &monitor_debug_p, _("\
2307 Set debugging of remote monitor communication."), _("\
2308 Show debugging of remote monitor communication."), _("\
2309 When enabled, communication between GDB and the remote monitor\n\
2310 is displayed."),
2311 			    NULL,
2312 			    NULL, /* FIXME: i18n: */
2313 			    &setdebuglist, &showdebuglist);
2314 }
2315