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