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