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