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