* monitor.c (monitor_open): If a dcache has already been created,
[external/binutils.git] / gdb / monitor.c
1 /* Remote debugging interface for boot monitors, for GDB.
2    Copyright 1990-1993, 1995-1997, 1999-2000 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 existance, 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 "gdb_wait.h"
44 #include <signal.h>
45 #include <ctype.h>
46 #include "gdb_string.h"
47 #include <sys/types.h>
48 #include "command.h"
49 #include "serial.h"
50 #include "monitor.h"
51 #include "gdbcmd.h"
52 #include "inferior.h"
53 #include "gdb_regex.h"
54 #include "dcache.h"
55 #include "srec.h"
56
57 static char *dev_name;
58 static struct target_ops *targ_ops;
59
60 static void monitor_vsprintf (char *sndbuf, char *pattern, va_list args);
61
62 static int readchar (int timeout);
63
64 static void monitor_fetch_register (int regno);
65 static void monitor_store_register (int regno);
66
67 static void monitor_printable_string (char *newstr, char *oldstr, int len);
68 static void monitor_error (char *function, char *message, CORE_ADDR memaddr, int len, char *string, int final_char);
69 static void monitor_detach (char *args, int from_tty);
70 static void monitor_resume (int pid, int step, enum target_signal sig);
71 static void monitor_interrupt (int signo);
72 static void monitor_interrupt_twice (int signo);
73 static void monitor_interrupt_query (void);
74 static void monitor_wait_cleanup (void *old_timeout);
75
76 static int monitor_wait (int pid, struct target_waitstatus *status);
77 static void monitor_fetch_registers (int regno);
78 static void monitor_store_registers (int regno);
79 static void monitor_prepare_to_store (void);
80 static int monitor_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
81                                 int write, struct target_ops *target);
82 static void monitor_files_info (struct target_ops *ops);
83 static int monitor_insert_breakpoint (CORE_ADDR addr, char *shadow);
84 static int monitor_remove_breakpoint (CORE_ADDR addr, char *shadow);
85 static void monitor_kill (void);
86 static void monitor_load (char *file, int from_tty);
87 static void monitor_mourn_inferior (void);
88 static void monitor_stop (void);
89
90 static int monitor_read_memory (CORE_ADDR addr, char *myaddr, int len);
91 static int monitor_write_memory (CORE_ADDR addr, char *myaddr, int len);
92 static int monitor_write_memory_bytes (CORE_ADDR addr, char *myaddr, int len);
93 static int monitor_write_memory_block (CORE_ADDR memaddr,
94                                        char *myaddr, int len);
95 static int monitor_expect_regexp (struct re_pattern_buffer *pat,
96                                   char *buf, int buflen);
97 static void monitor_dump_regs (void);
98 #if 0
99 static int from_hex (int a);
100 static unsigned long get_hex_word (void);
101 #endif
102 static void parse_register_dump (char *, int);
103
104 static struct monitor_ops *current_monitor;
105
106 static int hashmark;            /* flag set by "set hash" */
107
108 static int timeout = 30;
109
110 static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */
111
112 static void (*ofunc) ();        /* Old SIGINT signal handler */
113
114 static CORE_ADDR *breakaddr;
115
116 /* Descriptor for I/O to remote machine.  Initialize it to NULL so
117    that monitor_open knows that we don't have a file open when the
118    program starts.  */
119
120 static serial_t monitor_desc = NULL;
121
122 /* Pointer to regexp pattern matching data */
123
124 static struct re_pattern_buffer register_pattern;
125 static char register_fastmap[256];
126
127 static struct re_pattern_buffer getmem_resp_delim_pattern;
128 static char getmem_resp_delim_fastmap[256];
129
130 static int dump_reg_flag;       /* Non-zero means do a dump_registers cmd when
131                                    monitor_wait wakes up.  */
132
133 static DCACHE *remote_dcache;
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     abort ();
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     abort ();
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 = 1;
525   while (1)
526     {
527       if (buf)
528         {
529           if (buflen < 2)
530             {
531               *buf = '\000';
532               immediate_quit = 0;
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 = 0;
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     free (dev_name);
758   dev_name = strsave (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   if (!remote_dcache)
842     {
843       if (current_monitor->flags & MO_HAS_BLOCKWRITES)
844         remote_dcache = dcache_init (monitor_read_memory, 
845                                      monitor_write_memory_block);
846       else
847         remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory);
848     }
849   else
850     dcache_flush (remote_dcache);
851
852   start_remote ();
853 }
854
855 /* Close out all files and local state before this target loses
856    control.  */
857
858 void
859 monitor_close (int quitting)
860 {
861   if (monitor_desc)
862     SERIAL_CLOSE (monitor_desc);
863
864   /* Free breakpoint memory */
865   if (breakaddr != NULL)
866     {
867       free (breakaddr);
868       breakaddr = NULL;
869     }
870
871   monitor_desc = NULL;
872 }
873
874 /* Terminate the open connection to the remote debugger.  Use this
875    when you want to detach and do something else with your gdb.  */
876
877 static void
878 monitor_detach (char *args, int from_tty)
879 {
880   pop_target ();                /* calls monitor_close to do the real work */
881   if (from_tty)
882     printf_unfiltered ("Ending remote %s debugging\n", target_shortname);
883 }
884
885 /* Convert VALSTR into the target byte-ordered value of REGNO and store it.  */
886
887 char *
888 monitor_supply_register (int regno, char *valstr)
889 {
890   ULONGEST val;
891   unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
892   char *p;
893
894   val = 0;
895   p = valstr;
896   while (p && *p != '\0')
897     {
898       if (*p == '\r' || *p == '\n')
899         {
900           while (*p != '\0') 
901               p++;
902           break;
903         }
904       if (isspace (*p))
905         {
906           p++;
907           continue;
908         }
909       if (!isxdigit (*p) && *p != 'x')
910         {
911           break;
912         }
913
914       val <<= 4;
915       val += fromhex (*p++);
916     }
917   monitor_debug ("Supplying Register %d %s\n", regno, valstr);
918
919   if (*p != '\0')
920     error ("monitor_supply_register (%d):  bad value from monitor: %s.",
921            regno, valstr);
922
923   /* supply register stores in target byte order, so swap here */
924
925   store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
926
927   supply_register (regno, regbuf);
928
929   return p;
930 }
931
932 /* Tell the remote machine to resume.  */
933
934 void
935 flush_monitor_dcache (void)
936 {
937   dcache_flush (remote_dcache);
938 }
939
940 static void
941 monitor_resume (int pid, int step, enum target_signal sig)
942 {
943   /* Some monitors require a different command when starting a program */
944   monitor_debug ("MON resume\n");
945   if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
946     {
947       first_time = 0;
948       monitor_printf ("run\r");
949       if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
950         dump_reg_flag = 1;
951       return;
952     }
953   dcache_flush (remote_dcache);
954   if (step)
955     monitor_printf (current_monitor->step);
956   else
957     {
958       if (current_monitor->continue_hook)
959         (*current_monitor->continue_hook) ();
960       else
961         monitor_printf (current_monitor->cont);
962       if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
963         dump_reg_flag = 1;
964     }
965 }
966
967 /* Parse the output of a register dump command.  A monitor specific
968    regexp is used to extract individual register descriptions of the
969    form REG=VAL.  Each description is split up into a name and a value
970    string which are passed down to monitor specific code.  */
971
972 static void
973 parse_register_dump (char *buf, int len)
974 {
975   monitor_debug ("MON Parsing  register dump\n");
976   while (1)
977     {
978       int regnamelen, vallen;
979       char *regname, *val;
980       /* Element 0 points to start of register name, and element 1
981          points to the start of the register value.  */
982       struct re_registers register_strings;
983
984       memset (&register_strings, 0, sizeof (struct re_registers));
985
986       if (re_search (&register_pattern, buf, len, 0, len,
987                      &register_strings) == -1)
988         break;
989
990       regnamelen = register_strings.end[1] - register_strings.start[1];
991       regname = buf + register_strings.start[1];
992       vallen = register_strings.end[2] - register_strings.start[2];
993       val = buf + register_strings.start[2];
994
995       current_monitor->supply_register (regname, regnamelen, val, vallen);
996
997       buf += register_strings.end[0];
998       len -= register_strings.end[0];
999     }
1000 }
1001
1002 /* Send ^C to target to halt it.  Target will respond, and send us a
1003    packet.  */
1004
1005 static void
1006 monitor_interrupt (int signo)
1007 {
1008   /* If this doesn't work, try more severe steps.  */
1009   signal (signo, monitor_interrupt_twice);
1010
1011   if (monitor_debug_p || remote_debug)
1012     fprintf_unfiltered (gdb_stdlog, "monitor_interrupt called\n");
1013
1014   target_stop ();
1015 }
1016
1017 /* The user typed ^C twice.  */
1018
1019 static void
1020 monitor_interrupt_twice (int signo)
1021 {
1022   signal (signo, ofunc);
1023
1024   monitor_interrupt_query ();
1025
1026   signal (signo, monitor_interrupt);
1027 }
1028
1029 /* Ask the user what to do when an interrupt is received.  */
1030
1031 static void
1032 monitor_interrupt_query (void)
1033 {
1034   target_terminal_ours ();
1035
1036   if (query ("Interrupted while waiting for the program.\n\
1037 Give up (and stop debugging it)? "))
1038     {
1039       target_mourn_inferior ();
1040       return_to_top_level (RETURN_QUIT);
1041     }
1042
1043   target_terminal_inferior ();
1044 }
1045
1046 static void
1047 monitor_wait_cleanup (void *old_timeout)
1048 {
1049   timeout = *(int *) old_timeout;
1050   signal (SIGINT, ofunc);
1051   in_monitor_wait = 0;
1052 }
1053
1054
1055
1056 void
1057 monitor_wait_filter (char *buf,
1058                      int bufmax,
1059                      int *ext_resp_len,
1060                      struct target_waitstatus *status
1061 )
1062 {
1063   int resp_len;
1064   do
1065     {
1066       resp_len = monitor_expect_prompt (buf, bufmax);
1067       *ext_resp_len = resp_len;
1068
1069       if (resp_len <= 0)
1070         fprintf_unfiltered (gdb_stderr, "monitor_wait:  excessive response from monitor: %s.", buf);
1071     }
1072   while (resp_len < 0);
1073
1074   /* Print any output characters that were preceded by ^O.  */
1075   /* FIXME - This would be great as a user settabgle flag */
1076   if (monitor_debug_p || remote_debug
1077       || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
1078     {
1079       int i;
1080
1081       for (i = 0; i < resp_len - 1; i++)
1082         if (buf[i] == 0x0f)
1083           putchar_unfiltered (buf[++i]);
1084     }
1085 }
1086
1087
1088
1089 /* Wait until the remote machine stops, then return, storing status in
1090    status just as `wait' would.  */
1091
1092 static int
1093 monitor_wait (int pid, struct target_waitstatus *status)
1094 {
1095   int old_timeout = timeout;
1096   char buf[TARGET_BUF_SIZE];
1097   int resp_len;
1098   struct cleanup *old_chain;
1099
1100   status->kind = TARGET_WAITKIND_EXITED;
1101   status->value.integer = 0;
1102
1103   old_chain = make_cleanup (monitor_wait_cleanup, &old_timeout);
1104   monitor_debug ("MON wait\n");
1105
1106 #if 0
1107   /* This is somthing other than a maintenance command */
1108     in_monitor_wait = 1;
1109   timeout = watchdog > 0 ? watchdog : -1;
1110 #else
1111   timeout = -1;         /* Don't time out -- user program is running. */
1112 #endif
1113
1114   ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
1115
1116   if (current_monitor->wait_filter)
1117     (*current_monitor->wait_filter) (buf, sizeof (buf), &resp_len, status);
1118   else
1119     monitor_wait_filter (buf, sizeof (buf), &resp_len, status);
1120
1121 #if 0                           /* Transferred to monitor wait filter */
1122   do
1123     {
1124       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1125
1126       if (resp_len <= 0)
1127         fprintf_unfiltered (gdb_stderr, "monitor_wait:  excessive response from monitor: %s.", buf);
1128     }
1129   while (resp_len < 0);
1130
1131   /* Print any output characters that were preceded by ^O.  */
1132   /* FIXME - This would be great as a user settabgle flag */
1133   if (monitor_debug_p || remote_debug
1134       || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
1135     {
1136       int i;
1137
1138       for (i = 0; i < resp_len - 1; i++)
1139         if (buf[i] == 0x0f)
1140           putchar_unfiltered (buf[++i]);
1141     }
1142 #endif
1143
1144   signal (SIGINT, ofunc);
1145
1146   timeout = old_timeout;
1147 #if 0
1148   if (dump_reg_flag && current_monitor->dump_registers)
1149     {
1150       dump_reg_flag = 0;
1151       monitor_printf (current_monitor->dump_registers);
1152       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1153     }
1154
1155   if (current_monitor->register_pattern)
1156     parse_register_dump (buf, resp_len);
1157 #else
1158   monitor_debug ("Wait fetching registers after stop\n");
1159   monitor_dump_regs ();
1160 #endif
1161
1162   status->kind = TARGET_WAITKIND_STOPPED;
1163   status->value.sig = TARGET_SIGNAL_TRAP;
1164
1165   discard_cleanups (old_chain);
1166
1167   in_monitor_wait = 0;
1168
1169   return inferior_pid;
1170 }
1171
1172 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
1173    errno value.  */
1174
1175 static void
1176 monitor_fetch_register (int regno)
1177 {
1178   char *name;
1179   char *zerobuf;
1180   char *regbuf;
1181   int i;
1182
1183   regbuf  = alloca (MAX_REGISTER_RAW_SIZE * 2 + 1);
1184   zerobuf = alloca (MAX_REGISTER_RAW_SIZE);
1185   memset (zerobuf, 0, MAX_REGISTER_RAW_SIZE);
1186
1187   name = current_monitor->regnames[regno];
1188   monitor_debug ("MON fetchreg %d '%s'\n", regno, name ? name : "(null name)");
1189
1190   if (!name || (*name == '\0'))
1191     {
1192       monitor_debug ("No register known for %d\n", regno);
1193       supply_register (regno, zerobuf);
1194       return;
1195     }
1196
1197   /* send the register examine command */
1198
1199   monitor_printf (current_monitor->getreg.cmd, name);
1200
1201   /* If RESP_DELIM is specified, we search for that as a leading
1202      delimiter for the register value.  Otherwise, we just start
1203      searching from the start of the buf.  */
1204
1205   if (current_monitor->getreg.resp_delim)
1206     {
1207       monitor_debug ("EXP getreg.resp_delim\n");
1208       monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1209       /* Handle case of first 32 registers listed in pairs.  */
1210       if (current_monitor->flags & MO_32_REGS_PAIRED
1211           && (regno & 1) != 0 && regno < 32)
1212         {
1213           monitor_debug ("EXP getreg.resp_delim\n");
1214           monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1215         }
1216     }
1217
1218   /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
1219   if (current_monitor->flags & MO_HEX_PREFIX)
1220     {
1221       int c;
1222       c = readchar (timeout);
1223       while (c == ' ')
1224         c = readchar (timeout);
1225       if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1226         ;
1227       else
1228         error ("Bad value returned from monitor while fetching register %x.",
1229                regno);
1230     }
1231
1232   /* Read upto the maximum number of hex digits for this register, skipping
1233      spaces, but stop reading if something else is seen.  Some monitors
1234      like to drop leading zeros.  */
1235
1236   for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++)
1237     {
1238       int c;
1239       c = readchar (timeout);
1240       while (c == ' ')
1241         c = readchar (timeout);
1242
1243       if (!isxdigit (c))
1244         break;
1245
1246       regbuf[i] = c;
1247     }
1248
1249   regbuf[i] = '\000';           /* terminate the number */
1250   monitor_debug ("REGVAL '%s'\n", regbuf);
1251
1252   /* If TERM is present, we wait for that to show up.  Also, (if TERM
1253      is present), we will send TERM_CMD if that is present.  In any
1254      case, we collect all of the output into buf, and then wait for
1255      the normal prompt.  */
1256
1257   if (current_monitor->getreg.term)
1258     {
1259       monitor_debug ("EXP getreg.term\n");
1260       monitor_expect (current_monitor->getreg.term, NULL, 0);           /* get response */
1261     }
1262
1263   if (current_monitor->getreg.term_cmd)
1264     {
1265       monitor_debug ("EMIT getreg.term.cmd\n");
1266       monitor_printf (current_monitor->getreg.term_cmd);
1267     }
1268   if (!current_monitor->getreg.term ||  /* Already expected or */
1269       current_monitor->getreg.term_cmd)         /* ack expected */
1270     monitor_expect_prompt (NULL, 0);    /* get response */
1271
1272   monitor_supply_register (regno, regbuf);
1273 }
1274
1275 /* Sometimes, it takes several commands to dump the registers */
1276 /* This is a primitive for use by variations of monitor interfaces in
1277    case they need to compose the operation.
1278  */
1279 int
1280 monitor_dump_reg_block (char *block_cmd)
1281 {
1282   char buf[TARGET_BUF_SIZE];
1283   int resp_len;
1284   monitor_printf (block_cmd);
1285   resp_len = monitor_expect_prompt (buf, sizeof (buf));
1286   parse_register_dump (buf, resp_len);
1287   return 1;
1288 }
1289
1290
1291 /* Read the remote registers into the block regs.  */
1292 /* Call the specific function if it has been provided */
1293
1294 static void
1295 monitor_dump_regs (void)
1296 {
1297   char buf[TARGET_BUF_SIZE];
1298   int resp_len;
1299   if (current_monitor->dumpregs)
1300     (*(current_monitor->dumpregs)) ();  /* call supplied function */
1301   else if (current_monitor->dump_registers)     /* default version */
1302     {
1303       monitor_printf (current_monitor->dump_registers);
1304       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1305       parse_register_dump (buf, resp_len);
1306     }
1307   else
1308     abort ();                   /* Need some way to read registers */
1309 }
1310
1311 static void
1312 monitor_fetch_registers (int regno)
1313 {
1314   monitor_debug ("MON fetchregs\n");
1315   if (current_monitor->getreg.cmd)
1316     {
1317       if (regno >= 0)
1318         {
1319           monitor_fetch_register (regno);
1320           return;
1321         }
1322
1323       for (regno = 0; regno < NUM_REGS; regno++)
1324         monitor_fetch_register (regno);
1325     }
1326   else
1327     {
1328       monitor_dump_regs ();
1329     }
1330 }
1331
1332 /* Store register REGNO, or all if REGNO == 0.  Return errno value.  */
1333
1334 static void
1335 monitor_store_register (int regno)
1336 {
1337   char *name;
1338   ULONGEST val;
1339
1340   name = current_monitor->regnames[regno];
1341   if (!name || (*name == '\0'))
1342     {
1343       monitor_debug ("MON Cannot store unknown register\n");
1344       return;
1345     }
1346
1347   val = read_register (regno);
1348   monitor_debug ("MON storeg %d %s\n", regno,
1349                  phex (val, REGISTER_RAW_SIZE (regno)));
1350
1351   /* send the register deposit command */
1352
1353   if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
1354     monitor_printf (current_monitor->setreg.cmd, val, name);
1355   else if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1356     monitor_printf (current_monitor->setreg.cmd, name);
1357   else
1358     monitor_printf (current_monitor->setreg.cmd, name, val);
1359
1360   if (current_monitor->setreg.term)
1361     {
1362       monitor_debug ("EXP setreg.term\n");
1363       monitor_expect (current_monitor->setreg.term, NULL, 0);
1364       if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1365         monitor_printf ("%s\r", paddr_nz (val));
1366       monitor_expect_prompt (NULL, 0);
1367     }
1368   else
1369     monitor_expect_prompt (NULL, 0);
1370   if (current_monitor->setreg.term_cmd)         /* Mode exit required */
1371     {
1372       monitor_debug ("EXP setreg_termcmd\n");
1373       monitor_printf ("%s", current_monitor->setreg.term_cmd);
1374       monitor_expect_prompt (NULL, 0);
1375     }
1376 }                               /* monitor_store_register */
1377
1378 /* Store the remote registers.  */
1379
1380 static void
1381 monitor_store_registers (int regno)
1382 {
1383   if (regno >= 0)
1384     {
1385       monitor_store_register (regno);
1386       return;
1387     }
1388
1389   for (regno = 0; regno < NUM_REGS; regno++)
1390     monitor_store_register (regno);
1391 }
1392
1393 /* Get ready to modify the registers array.  On machines which store
1394    individual registers, this doesn't need to do anything.  On machines
1395    which store all the registers in one fell swoop, this makes sure
1396    that registers contains all the registers from the program being
1397    debugged.  */
1398
1399 static void
1400 monitor_prepare_to_store (void)
1401 {
1402   /* Do nothing, since we can store individual regs */
1403 }
1404
1405 static void
1406 monitor_files_info (struct target_ops *ops)
1407 {
1408   printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate);
1409 }
1410
1411 static int
1412 monitor_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
1413 {
1414   unsigned int val, hostval;
1415   char *cmd;
1416   int i;
1417
1418   monitor_debug ("MON write %d %s\n", len, paddr (memaddr));
1419
1420   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1421     memaddr = ADDR_BITS_REMOVE (memaddr);
1422
1423   /* Use memory fill command for leading 0 bytes.  */
1424
1425   if (current_monitor->fill)
1426     {
1427       for (i = 0; i < len; i++)
1428         if (myaddr[i] != 0)
1429           break;
1430
1431       if (i > 4)                /* More than 4 zeros is worth doing */
1432         {
1433           monitor_debug ("MON FILL %d\n", i);
1434           if (current_monitor->flags & MO_FILL_USES_ADDR)
1435             monitor_printf (current_monitor->fill, memaddr, (memaddr + i) - 1, 0);
1436           else
1437             monitor_printf (current_monitor->fill, memaddr, i, 0);
1438
1439           monitor_expect_prompt (NULL, 0);
1440
1441           return i;
1442         }
1443     }
1444
1445 #if 0
1446   /* Can't actually use long longs if VAL is an int (nice idea, though).  */
1447   if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1448     {
1449       len = 8;
1450       cmd = current_monitor->setmem.cmdll;
1451     }
1452   else
1453 #endif
1454   if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1455     {
1456       len = 4;
1457       cmd = current_monitor->setmem.cmdl;
1458     }
1459   else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1460     {
1461       len = 2;
1462       cmd = current_monitor->setmem.cmdw;
1463     }
1464   else
1465     {
1466       len = 1;
1467       cmd = current_monitor->setmem.cmdb;
1468     }
1469
1470   val = extract_unsigned_integer (myaddr, len);
1471
1472   if (len == 4)
1473     {
1474       hostval = *(unsigned int *) myaddr;
1475       monitor_debug ("Hostval(%08x) val(%08x)\n", hostval, val);
1476     }
1477
1478
1479   if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1480     monitor_printf_noecho (cmd, memaddr, val);
1481   else if (current_monitor->flags & MO_SETMEM_INTERACTIVE)
1482     {
1483
1484       monitor_printf_noecho (cmd, memaddr);
1485
1486       if (current_monitor->setmem.term)
1487         {
1488           monitor_debug ("EXP setmem.term");
1489           monitor_expect (current_monitor->setmem.term, NULL, 0);
1490           monitor_printf ("%x\r", val);
1491         }
1492       if (current_monitor->setmem.term_cmd)
1493         {                       /* Emit this to get out of the memory editing state */
1494           monitor_printf ("%s", current_monitor->setmem.term_cmd);
1495           /* Drop through to expecting a prompt */
1496         }
1497     }
1498   else
1499     monitor_printf (cmd, memaddr, val);
1500
1501   monitor_expect_prompt (NULL, 0);
1502
1503   return len;
1504 }
1505
1506
1507 static int
1508 monitor_write_even_block (CORE_ADDR memaddr, char *myaddr, int len)
1509 {
1510   unsigned int val;
1511   int written = 0;;
1512   /* Enter the sub mode */
1513   monitor_printf (current_monitor->setmem.cmdl, memaddr);
1514   monitor_expect_prompt (NULL, 0);
1515
1516   while (len)
1517     {
1518       val = extract_unsigned_integer (myaddr, 4);       /* REALLY */
1519       monitor_printf ("%x\r", val);
1520       myaddr += 4;
1521       memaddr += 4;
1522       written += 4;
1523       monitor_debug (" @ %s\n", paddr (memaddr));
1524       /* If we wanted to, here we could validate the address */
1525       monitor_expect_prompt (NULL, 0);
1526     }
1527   /* Now exit the sub mode */
1528   monitor_printf (current_monitor->getreg.term_cmd);
1529   monitor_expect_prompt (NULL, 0);
1530   return written;
1531 }
1532
1533
1534 static int
1535 monitor_write_memory_bytes (CORE_ADDR memaddr, char *myaddr, int len)
1536 {
1537   unsigned char val;
1538   int written = 0;
1539   if (len == 0)
1540     return 0;
1541   /* Enter the sub mode */
1542   monitor_printf (current_monitor->setmem.cmdb, memaddr);
1543   monitor_expect_prompt (NULL, 0);
1544   while (len)
1545     {
1546       val = *myaddr;
1547       monitor_printf ("%x\r", val);
1548       myaddr++;
1549       memaddr++;
1550       written++;
1551       /* If we wanted to, here we could validate the address */
1552       monitor_expect_prompt (NULL, 0);
1553       len--;
1554     }
1555   /* Now exit the sub mode */
1556   monitor_printf (current_monitor->getreg.term_cmd);
1557   monitor_expect_prompt (NULL, 0);
1558   return written;
1559 }
1560
1561
1562 static void
1563 longlongendswap (unsigned char *a)
1564 {
1565   int i, j;
1566   unsigned char x;
1567   i = 0;
1568   j = 7;
1569   while (i < 4)
1570     {
1571       x = *(a + i);
1572       *(a + i) = *(a + j);
1573       *(a + j) = x;
1574       i++, j--;
1575     }
1576 }
1577 /* Format 32 chars of long long value, advance the pointer */
1578 static char *hexlate = "0123456789abcdef";
1579 static char *
1580 longlong_hexchars (unsigned long long value,
1581                    char *outbuff)
1582 {
1583   if (value == 0)
1584     {
1585       *outbuff++ = '0';
1586       return outbuff;
1587     }
1588   else
1589     {
1590       static unsigned char disbuf[8];   /* disassembly buffer */
1591       unsigned char *scan, *limit;      /* loop controls */
1592       unsigned char c, nib;
1593       int leadzero = 1;
1594       scan = disbuf;
1595       limit = scan + 8;
1596       {
1597         unsigned long long *dp;
1598         dp = (unsigned long long *) scan;
1599         *dp = value;
1600       }
1601       longlongendswap (disbuf); /* FIXME: ONly on big endian hosts */
1602       while (scan < limit)
1603         {
1604           c = *scan++;          /* a byte of our long long value */
1605           if (leadzero)
1606             {
1607               if (c == 0)
1608                 continue;
1609               else
1610                 leadzero = 0;   /* henceforth we print even zeroes */
1611             }
1612           nib = c >> 4;         /* high nibble bits */
1613           *outbuff++ = hexlate[nib];
1614           nib = c & 0x0f;       /* low nibble bits */
1615           *outbuff++ = hexlate[nib];
1616         }
1617       return outbuff;
1618     }
1619 }                               /* longlong_hexchars */
1620
1621
1622
1623 /* I am only going to call this when writing virtual byte streams.
1624    Which possably entails endian conversions
1625  */
1626 static int
1627 monitor_write_memory_longlongs (CORE_ADDR memaddr, char *myaddr, int len)
1628 {
1629   static char hexstage[20];     /* At least 16 digits required, plus null */
1630   char *endstring;
1631   long long *llptr;
1632   long long value;
1633   int written = 0;
1634   llptr = (unsigned long long *) myaddr;
1635   if (len == 0)
1636     return 0;
1637   monitor_printf (current_monitor->setmem.cmdll, memaddr);
1638   monitor_expect_prompt (NULL, 0);
1639   while (len >= 8)
1640     {
1641       value = *llptr;
1642       endstring = longlong_hexchars (*llptr, hexstage);
1643       *endstring = '\0';        /* NUll terminate for printf */
1644       monitor_printf ("%s\r", hexstage);
1645       llptr++;
1646       memaddr += 8;
1647       written += 8;
1648       /* If we wanted to, here we could validate the address */
1649       monitor_expect_prompt (NULL, 0);
1650       len -= 8;
1651     }
1652   /* Now exit the sub mode */
1653   monitor_printf (current_monitor->getreg.term_cmd);
1654   monitor_expect_prompt (NULL, 0);
1655   return written;
1656 }                               /* */
1657
1658
1659
1660 /* ----- MONITOR_WRITE_MEMORY_BLOCK ---------------------------- */
1661 /* This is for the large blocks of memory which may occur in downloading.
1662    And for monitors which use interactive entry,
1663    And for monitors which do not have other downloading methods.
1664    Without this, we will end up calling monitor_write_memory many times
1665    and do the entry and exit of the sub mode many times
1666    This currently assumes...
1667    MO_SETMEM_INTERACTIVE
1668    ! MO_NO_ECHO_ON_SETMEM
1669    To use this, the you have to patch the monitor_cmds block with
1670    this function. Otherwise, its not tuned up for use by all
1671    monitor variations.
1672  */
1673
1674 static int
1675 monitor_write_memory_block (CORE_ADDR memaddr, char *myaddr, int len)
1676 {
1677   int written;
1678   written = 0;
1679   /* FIXME: This would be a good place to put the zero test */
1680 #if 1
1681   if ((len > 8) && (((len & 0x07)) == 0) && current_monitor->setmem.cmdll)
1682     {
1683       return monitor_write_memory_longlongs (memaddr, myaddr, len);
1684     }
1685 #endif
1686 #if 0
1687   if (len > 4)
1688     {
1689       int sublen;
1690       written = monitor_write_even_block (memaddr, myaddr, len);
1691       /* Adjust calling parameters by written amount */
1692       memaddr += written;
1693       myaddr += written;
1694       len -= written;
1695     }
1696 #endif
1697   written = monitor_write_memory_bytes (memaddr, myaddr, len);
1698   return written;
1699 }
1700
1701 /* This is an alternate form of monitor_read_memory which is used for monitors
1702    which can only read a single byte/word/etc. at a time.  */
1703
1704 static int
1705 monitor_read_memory_single (CORE_ADDR memaddr, char *myaddr, int len)
1706 {
1707   unsigned int val;
1708   char membuf[sizeof (int) * 2 + 1];
1709   char *p;
1710   char *cmd;
1711   int i;
1712
1713   monitor_debug ("MON read single\n");
1714 #if 0
1715   /* Can't actually use long longs (nice idea, though).  In fact, the
1716      call to strtoul below will fail if it tries to convert a value
1717      that's too big to fit in a long.  */
1718   if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1719     {
1720       len = 8;
1721       cmd = current_monitor->getmem.cmdll;
1722     }
1723   else
1724 #endif
1725   if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1726     {
1727       len = 4;
1728       cmd = current_monitor->getmem.cmdl;
1729     }
1730   else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1731     {
1732       len = 2;
1733       cmd = current_monitor->getmem.cmdw;
1734     }
1735   else
1736     {
1737       len = 1;
1738       cmd = current_monitor->getmem.cmdb;
1739     }
1740
1741   /* Send the examine command.  */
1742
1743   monitor_printf (cmd, memaddr);
1744
1745   /* If RESP_DELIM is specified, we search for that as a leading
1746      delimiter for the memory value.  Otherwise, we just start
1747      searching from the start of the buf.  */
1748
1749   if (current_monitor->getmem.resp_delim)
1750     {
1751       monitor_debug ("EXP getmem.resp_delim\n");
1752       monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1753     }
1754
1755   /* Now, read the appropriate number of hex digits for this loc,
1756      skipping spaces.  */
1757
1758   /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
1759   if (current_monitor->flags & MO_HEX_PREFIX)
1760     {
1761       int c;
1762
1763       c = readchar (timeout);
1764       while (c == ' ')
1765         c = readchar (timeout);
1766       if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1767         ;
1768       else
1769         monitor_error ("monitor_read_memory_single", 
1770                        "bad response from monitor",
1771                        memaddr, i, membuf, c);
1772     }
1773   for (i = 0; i < len * 2; i++)
1774     {
1775       int c;
1776
1777       while (1)
1778         {
1779           c = readchar (timeout);
1780           if (isxdigit (c))
1781             break;
1782           if (c == ' ')
1783             continue;
1784
1785           monitor_error ("monitor_read_memory_single",
1786                          "bad response from monitor",
1787                          memaddr, i, membuf, c);
1788         }
1789
1790       membuf[i] = c;
1791     }
1792
1793   membuf[i] = '\000';           /* terminate the number */
1794
1795 /* If TERM is present, we wait for that to show up.  Also, (if TERM is
1796    present), we will send TERM_CMD if that is present.  In any case, we collect
1797    all of the output into buf, and then wait for the normal prompt.  */
1798
1799   if (current_monitor->getmem.term)
1800     {
1801       monitor_expect (current_monitor->getmem.term, NULL, 0);   /* get response */
1802
1803       if (current_monitor->getmem.term_cmd)
1804         {
1805           monitor_printf (current_monitor->getmem.term_cmd);
1806           monitor_expect_prompt (NULL, 0);
1807         }
1808     }
1809   else
1810     monitor_expect_prompt (NULL, 0);    /* get response */
1811
1812   p = membuf;
1813   val = strtoul (membuf, &p, 16);
1814
1815   if (val == 0 && membuf == p)
1816     monitor_error ("monitor_read_memory_single",
1817                    "bad value from monitor",
1818                    memaddr, 0, membuf, 0);
1819
1820   /* supply register stores in target byte order, so swap here */
1821
1822   store_unsigned_integer (myaddr, len, val);
1823
1824   return len;
1825 }
1826
1827 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1828    memory at MEMADDR.  Returns length moved.  Currently, we do no more
1829    than 16 bytes at a time.  */
1830
1831 static int
1832 monitor_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
1833 {
1834   unsigned int val;
1835   char buf[512];
1836   char *p, *p1;
1837   int resp_len;
1838   int i;
1839   CORE_ADDR dumpaddr;
1840
1841   if (len <= 0)
1842     {
1843       monitor_debug ("Zero length call to monitor_read_memory\n");
1844       return 0;
1845     }
1846
1847   monitor_debug ("MON read block ta(%s) ha(%lx) %d\n",
1848                  paddr_nz (memaddr), (long) myaddr, len);
1849
1850   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1851     memaddr = ADDR_BITS_REMOVE (memaddr);
1852
1853   if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1854     return monitor_read_memory_single (memaddr, myaddr, len);
1855
1856   len = min (len, 16);
1857
1858   /* Some dumpers align the first data with the preceeding 16
1859      byte boundary. Some print blanks and start at the
1860      requested boundary. EXACT_DUMPADDR
1861    */
1862
1863   dumpaddr = (current_monitor->flags & MO_EXACT_DUMPADDR)
1864     ? memaddr : memaddr & ~0x0f;
1865
1866   /* See if xfer would cross a 16 byte boundary.  If so, clip it.  */
1867   if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1868     len = ((memaddr + len) & ~0xf) - memaddr;
1869
1870   /* send the memory examine command */
1871
1872   if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1873     monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len);
1874   else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1875     monitor_printf (current_monitor->getmem.cmdb, dumpaddr);
1876   else
1877     monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1878
1879   /* If TERM is present, we wait for that to show up.  Also, (if TERM
1880      is present), we will send TERM_CMD if that is present.  In any
1881      case, we collect all of the output into buf, and then wait for
1882      the normal prompt.  */
1883
1884   if (current_monitor->getmem.term)
1885     {
1886       resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf);        /* get response */
1887
1888       if (resp_len <= 0)
1889         monitor_error ("monitor_read_memory",
1890                        "excessive response from monitor",
1891                        memaddr, resp_len, buf, 0);
1892
1893       if (current_monitor->getmem.term_cmd)
1894         {
1895           SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd,
1896                         strlen (current_monitor->getmem.term_cmd));
1897           monitor_expect_prompt (NULL, 0);
1898         }
1899     }
1900   else
1901     resp_len = monitor_expect_prompt (buf, sizeof buf);         /* get response */
1902
1903   p = buf;
1904
1905   /* If RESP_DELIM is specified, we search for that as a leading
1906      delimiter for the values.  Otherwise, we just start searching
1907      from the start of the buf.  */
1908
1909   if (current_monitor->getmem.resp_delim)
1910     {
1911       int retval, tmp;
1912       struct re_registers resp_strings;
1913       monitor_debug ("MON getmem.resp_delim %s\n", current_monitor->getmem.resp_delim);
1914
1915       memset (&resp_strings, 0, sizeof (struct re_registers));
1916       tmp = strlen (p);
1917       retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1918                           &resp_strings);
1919
1920       if (retval < 0)
1921         monitor_error ("monitor_read_memory",
1922                        "bad response from monitor",
1923                        memaddr, resp_len, buf, 0);
1924
1925       p += resp_strings.end[0];
1926 #if 0
1927       p = strstr (p, current_monitor->getmem.resp_delim);
1928       if (!p)
1929         monitor_error ("monitor_read_memory",
1930                        "bad response from monitor",
1931                        memaddr, resp_len, buf, 0);
1932       p += strlen (current_monitor->getmem.resp_delim);
1933 #endif
1934     }
1935   monitor_debug ("MON scanning  %d ,%lx '%s'\n", len, (long) p, p);
1936   if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1937     {
1938       char c;
1939       int fetched = 0;
1940       i = len;
1941       c = *p;
1942
1943
1944       while (!(c == '\000' || c == '\n' || c == '\r') && i > 0)
1945         {
1946           if (isxdigit (c))
1947             {
1948               if ((dumpaddr >= memaddr) && (i > 0))
1949                 {
1950                   val = fromhex (c) * 16 + fromhex (*(p + 1));
1951                   *myaddr++ = val;
1952                   if (monitor_debug_p || remote_debug)
1953                     fprintf_unfiltered (gdb_stdlog, "[%02x]", val);
1954                   --i;
1955                   fetched++;
1956                 }
1957               ++dumpaddr;
1958               ++p;
1959             }
1960           ++p;                  /* skip a blank or other non hex char */
1961           c = *p;
1962         }
1963       if (fetched == 0)
1964         error ("Failed to read via monitor");
1965       if (monitor_debug_p || remote_debug)
1966         fprintf_unfiltered (gdb_stdlog, "\n");
1967       return fetched;           /* Return the number of bytes actually read */
1968     }
1969   monitor_debug ("MON scanning bytes\n");
1970
1971   for (i = len; i > 0; i--)
1972     {
1973       /* Skip non-hex chars, but bomb on end of string and newlines */
1974
1975       while (1)
1976         {
1977           if (isxdigit (*p))
1978             break;
1979
1980           if (*p == '\000' || *p == '\n' || *p == '\r')
1981             monitor_error ("monitor_read_memory",
1982                            "badly terminated response from monitor",
1983                            memaddr, resp_len, buf, 0);
1984           p++;
1985         }
1986
1987       val = strtoul (p, &p1, 16);
1988
1989       if (val == 0 && p == p1)
1990         monitor_error ("monitor_read_memory",
1991                        "bad value from monitor",
1992                        memaddr, resp_len, buf, 0);
1993
1994       *myaddr++ = val;
1995
1996       if (i == 1)
1997         break;
1998
1999       p = p1;
2000     }
2001
2002   return len;
2003 }
2004
2005 static int
2006 monitor_xfer_memory (memaddr, myaddr, len, write, target)
2007      CORE_ADDR memaddr;
2008      char *myaddr;
2009      int len;
2010      int write;
2011      struct target_ops *target; /* ignored */
2012 {
2013   return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write);
2014 }
2015
2016 static void
2017 monitor_kill (void)
2018 {
2019   return;                       /* ignore attempts to kill target system */
2020 }
2021
2022 /* All we actually do is set the PC to the start address of exec_bfd, and start
2023    the program at that point.  */
2024
2025 static void
2026 monitor_create_inferior (char *exec_file, char *args, char **env)
2027 {
2028   if (args && (*args != '\000'))
2029     error ("Args are not supported by the monitor.");
2030
2031   first_time = 1;
2032   clear_proceed_status ();
2033   proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
2034 }
2035
2036 /* Clean up when a program exits.
2037    The program actually lives on in the remote processor's RAM, and may be
2038    run again without a download.  Don't leave it full of breakpoint
2039    instructions.  */
2040
2041 static void
2042 monitor_mourn_inferior (void)
2043 {
2044   unpush_target (targ_ops);
2045   generic_mourn_inferior ();    /* Do all the proper things now */
2046 }
2047
2048 /* Tell the monitor to add a breakpoint.  */
2049
2050 static int
2051 monitor_insert_breakpoint (CORE_ADDR addr, char *shadow)
2052 {
2053   int i;
2054   unsigned char *bp;
2055   int bplen;
2056
2057   monitor_debug ("MON inst bkpt %s\n", paddr (addr));
2058   if (current_monitor->set_break == NULL)
2059     error ("No set_break defined for this monitor");
2060
2061   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
2062     addr = ADDR_BITS_REMOVE (addr);
2063
2064   /* Determine appropriate breakpoint size for this address.  */
2065   bp = memory_breakpoint_from_pc (&addr, &bplen);
2066
2067   for (i = 0; i < current_monitor->num_breakpoints; i++)
2068     {
2069       if (breakaddr[i] == 0)
2070         {
2071           breakaddr[i] = addr;
2072           monitor_read_memory (addr, shadow, bplen);
2073           monitor_printf (current_monitor->set_break, addr);
2074           monitor_expect_prompt (NULL, 0);
2075           return 0;
2076         }
2077     }
2078
2079   error ("Too many breakpoints (> %d) for monitor.", current_monitor->num_breakpoints);
2080 }
2081
2082 /* Tell the monitor to remove a breakpoint.  */
2083
2084 static int
2085 monitor_remove_breakpoint (CORE_ADDR addr, char *shadow)
2086 {
2087   int i;
2088
2089   monitor_debug ("MON rmbkpt %s\n", paddr (addr));
2090   if (current_monitor->clr_break == NULL)
2091     error ("No clr_break defined for this monitor");
2092
2093   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
2094     addr = ADDR_BITS_REMOVE (addr);
2095
2096   for (i = 0; i < current_monitor->num_breakpoints; i++)
2097     {
2098       if (breakaddr[i] == addr)
2099         {
2100           breakaddr[i] = 0;
2101           /* some monitors remove breakpoints based on the address */
2102           if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
2103             monitor_printf (current_monitor->clr_break, addr);
2104           else if (current_monitor->flags & MO_CLR_BREAK_1_BASED)
2105             monitor_printf (current_monitor->clr_break, i + 1);
2106           else
2107             monitor_printf (current_monitor->clr_break, i);
2108           monitor_expect_prompt (NULL, 0);
2109           return 0;
2110         }
2111     }
2112   fprintf_unfiltered (gdb_stderr,
2113                       "Can't find breakpoint associated with 0x%s\n",
2114                       paddr_nz (addr));
2115   return 1;
2116 }
2117
2118 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
2119    an S-record.  Return non-zero if the ACK is received properly.  */
2120
2121 static int
2122 monitor_wait_srec_ack (void)
2123 {
2124   int ch;
2125
2126   if (current_monitor->flags & MO_SREC_ACK_PLUS)
2127     {
2128       return (readchar (timeout) == '+');
2129     }
2130   else if (current_monitor->flags & MO_SREC_ACK_ROTATE)
2131     {
2132       /* Eat two backspaces, a "rotating" char (|/-\), and a space.  */
2133       if ((ch = readchar (1)) < 0)
2134         return 0;
2135       if ((ch = readchar (1)) < 0)
2136         return 0;
2137       if ((ch = readchar (1)) < 0)
2138         return 0;
2139       if ((ch = readchar (1)) < 0)
2140         return 0;
2141     }
2142   return 1;
2143 }
2144
2145 /* monitor_load -- download a file. */
2146
2147 static void
2148 monitor_load (char *file, int from_tty)
2149 {
2150   dcache_flush (remote_dcache);
2151   monitor_debug ("MON load\n");
2152
2153   if (current_monitor->load_routine)
2154     current_monitor->load_routine (monitor_desc, file, hashmark);
2155   else
2156     {                           /* The default is ascii S-records */
2157       int n;
2158       unsigned long load_offset;
2159       char buf[128];
2160
2161       /* enable user to specify address for downloading as 2nd arg to load */
2162       n = sscanf (file, "%s 0x%lx", buf, &load_offset);
2163       if (n > 1)
2164         file = buf;
2165       else
2166         load_offset = 0;
2167
2168       monitor_printf (current_monitor->load);
2169       if (current_monitor->loadresp)
2170         monitor_expect (current_monitor->loadresp, NULL, 0);
2171
2172       load_srec (monitor_desc, file, (bfd_vma) load_offset,
2173                  32, SREC_ALL, hashmark,
2174                  current_monitor->flags & MO_SREC_ACK ?
2175                  monitor_wait_srec_ack : NULL);
2176
2177       monitor_expect_prompt (NULL, 0);
2178     }
2179
2180 /* Finally, make the PC point at the start address */
2181
2182   if (exec_bfd)
2183     write_pc (bfd_get_start_address (exec_bfd));
2184
2185   inferior_pid = 0;             /* No process now */
2186
2187 /* This is necessary because many things were based on the PC at the time that
2188    we attached to the monitor, which is no longer valid now that we have loaded
2189    new code (and just changed the PC).  Another way to do this might be to call
2190    normal_stop, except that the stack may not be valid, and things would get
2191    horribly confused... */
2192
2193   clear_symtab_users ();
2194 }
2195
2196 static void
2197 monitor_stop (void)
2198 {
2199   monitor_debug ("MON stop\n");
2200   if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
2201     SERIAL_SEND_BREAK (monitor_desc);
2202   if (current_monitor->stop)
2203     monitor_printf_noecho (current_monitor->stop);
2204 }
2205
2206 /* Put a COMMAND string out to MONITOR.  Output from MONITOR is placed
2207    in OUTPUT until the prompt is seen. FIXME: We read the characters
2208    ourseleves here cause of a nasty echo.  */
2209
2210 static void
2211 monitor_rcmd (char *command,
2212               struct ui_file *outbuf)
2213 {
2214   char *p;
2215   int resp_len;
2216   char buf[1000];
2217
2218   if (monitor_desc == NULL)
2219     error ("monitor target not open.");
2220
2221   p = current_monitor->prompt;
2222
2223   /* Send the command.  Note that if no args were supplied, then we're
2224      just sending the monitor a newline, which is sometimes useful.  */
2225
2226   monitor_printf ("%s\r", (command ? command : ""));
2227
2228   resp_len = monitor_expect_prompt (buf, sizeof buf);
2229
2230   fputs_unfiltered (buf, outbuf);       /* Output the response */
2231 }
2232
2233 /* Convert hex digit A to a number.  */
2234
2235 #if 0
2236 static int
2237 from_hex (int a)
2238 {
2239   if (a >= '0' && a <= '9')
2240     return a - '0';
2241   if (a >= 'a' && a <= 'f')
2242     return a - 'a' + 10;
2243   if (a >= 'A' && a <= 'F')
2244     return a - 'A' + 10;
2245
2246   error ("Reply contains invalid hex digit 0x%x", a);
2247 }
2248 #endif
2249
2250 char *
2251 monitor_get_dev_name (void)
2252 {
2253   return dev_name;
2254 }
2255
2256 static struct target_ops monitor_ops;
2257
2258 static void
2259 init_base_monitor_ops (void)
2260 {
2261   monitor_ops.to_shortname = NULL;
2262   monitor_ops.to_longname = NULL;
2263   monitor_ops.to_doc = NULL;
2264   monitor_ops.to_open = NULL;
2265   monitor_ops.to_close = monitor_close;
2266   monitor_ops.to_attach = NULL;
2267   monitor_ops.to_post_attach = NULL;
2268   monitor_ops.to_require_attach = NULL;
2269   monitor_ops.to_detach = monitor_detach;
2270   monitor_ops.to_require_detach = NULL;
2271   monitor_ops.to_resume = monitor_resume;
2272   monitor_ops.to_wait = monitor_wait;
2273   monitor_ops.to_post_wait = NULL;
2274   monitor_ops.to_fetch_registers = monitor_fetch_registers;
2275   monitor_ops.to_store_registers = monitor_store_registers;
2276   monitor_ops.to_prepare_to_store = monitor_prepare_to_store;
2277   monitor_ops.to_xfer_memory = monitor_xfer_memory;
2278   monitor_ops.to_files_info = monitor_files_info;
2279   monitor_ops.to_insert_breakpoint = monitor_insert_breakpoint;
2280   monitor_ops.to_remove_breakpoint = monitor_remove_breakpoint;
2281   monitor_ops.to_terminal_init = 0;
2282   monitor_ops.to_terminal_inferior = 0;
2283   monitor_ops.to_terminal_ours_for_output = 0;
2284   monitor_ops.to_terminal_ours = 0;
2285   monitor_ops.to_terminal_info = 0;
2286   monitor_ops.to_kill = monitor_kill;
2287   monitor_ops.to_load = monitor_load;
2288   monitor_ops.to_lookup_symbol = 0;
2289   monitor_ops.to_create_inferior = monitor_create_inferior;
2290   monitor_ops.to_post_startup_inferior = NULL;
2291   monitor_ops.to_acknowledge_created_inferior = NULL;
2292   monitor_ops.to_clone_and_follow_inferior = NULL;
2293   monitor_ops.to_post_follow_inferior_by_clone = NULL;
2294   monitor_ops.to_insert_fork_catchpoint = NULL;
2295   monitor_ops.to_remove_fork_catchpoint = NULL;
2296   monitor_ops.to_insert_vfork_catchpoint = NULL;
2297   monitor_ops.to_remove_vfork_catchpoint = NULL;
2298   monitor_ops.to_has_forked = NULL;
2299   monitor_ops.to_has_vforked = NULL;
2300   monitor_ops.to_can_follow_vfork_prior_to_exec = NULL;
2301   monitor_ops.to_post_follow_vfork = NULL;
2302   monitor_ops.to_insert_exec_catchpoint = NULL;
2303   monitor_ops.to_remove_exec_catchpoint = NULL;
2304   monitor_ops.to_has_execd = NULL;
2305   monitor_ops.to_reported_exec_events_per_exec_call = NULL;
2306   monitor_ops.to_has_exited = NULL;
2307   monitor_ops.to_mourn_inferior = monitor_mourn_inferior;
2308   monitor_ops.to_can_run = 0;
2309   monitor_ops.to_notice_signals = 0;
2310   monitor_ops.to_thread_alive = 0;
2311   monitor_ops.to_stop = monitor_stop;
2312   monitor_ops.to_rcmd = monitor_rcmd;
2313   monitor_ops.to_pid_to_exec_file = NULL;
2314   monitor_ops.to_core_file_to_sym_file = NULL;
2315   monitor_ops.to_stratum = process_stratum;
2316   monitor_ops.DONT_USE = 0;
2317   monitor_ops.to_has_all_memory = 1;
2318   monitor_ops.to_has_memory = 1;
2319   monitor_ops.to_has_stack = 1;
2320   monitor_ops.to_has_registers = 1;
2321   monitor_ops.to_has_execution = 1;
2322   monitor_ops.to_sections = 0;
2323   monitor_ops.to_sections_end = 0;
2324   monitor_ops.to_magic = OPS_MAGIC;
2325 }                               /* init_base_monitor_ops */
2326
2327 /* Init the target_ops structure pointed at by OPS */
2328
2329 void
2330 init_monitor_ops (struct target_ops *ops)
2331 {
2332   if (monitor_ops.to_magic != OPS_MAGIC)
2333     init_base_monitor_ops ();
2334
2335   memcpy (ops, &monitor_ops, sizeof monitor_ops);
2336 }
2337
2338 /* Define additional commands that are usually only used by monitors.  */
2339
2340 void
2341 _initialize_remote_monitors (void)
2342 {
2343   init_base_monitor_ops ();
2344   add_show_from_set (add_set_cmd ("hash", no_class, var_boolean,
2345                                   (char *) &hashmark,
2346                                   "Set display of activity while downloading a file.\n\
2347 When enabled, a hashmark \'#\' is displayed.",
2348                                   &setlist),
2349                      &showlist);
2350
2351   add_show_from_set
2352     (add_set_cmd ("monitor", no_class, var_zinteger,
2353                   (char *) &monitor_debug_p,
2354                   "Set debugging of remote monitor communication.\n\
2355 When enabled, communication between GDB and the remote monitor\n\
2356 is displayed.", &setdebuglist),
2357      &showdebuglist);
2358 }