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