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