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