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