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