Adjust all targets to new target_stop interface.
[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 (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_thread_silent (inferior_ptid);
821
822   /* Give monitor_wait something to read */
823
824   monitor_printf (current_monitor->line_term);
825
826   start_remote (from_tty);
827 }
828
829 /* Close out all files and local state before this target loses
830    control.  */
831
832 void
833 monitor_close (int quitting)
834 {
835   if (monitor_desc)
836     serial_close (monitor_desc);
837
838   /* Free breakpoint memory */
839   if (breakaddr != NULL)
840     {
841       xfree (breakaddr);
842       breakaddr = NULL;
843     }
844
845   monitor_desc = NULL;
846
847   delete_thread_silent (monitor_ptid);
848 }
849
850 /* Terminate the open connection to the remote debugger.  Use this
851    when you want to detach and do something else with your gdb.  */
852
853 static void
854 monitor_detach (char *args, int from_tty)
855 {
856   pop_target ();                /* calls monitor_close to do the real work */
857   if (from_tty)
858     printf_unfiltered (_("Ending remote %s debugging\n"), target_shortname);
859 }
860
861 /* Convert VALSTR into the target byte-ordered value of REGNO and store it.  */
862
863 char *
864 monitor_supply_register (struct regcache *regcache, int regno, char *valstr)
865 {
866   ULONGEST val;
867   unsigned char regbuf[MAX_REGISTER_SIZE];
868   char *p;
869
870   val = 0;
871   p = valstr;
872   while (p && *p != '\0')
873     {
874       if (*p == '\r' || *p == '\n')
875         {
876           while (*p != '\0') 
877               p++;
878           break;
879         }
880       if (isspace (*p))
881         {
882           p++;
883           continue;
884         }
885       if (!isxdigit (*p) && *p != 'x')
886         {
887           break;
888         }
889
890       val <<= 4;
891       val += fromhex (*p++);
892     }
893   monitor_debug ("Supplying Register %d %s\n", regno, valstr);
894
895   if (val == 0 && valstr == p)
896     error (_("monitor_supply_register (%d):  bad value from monitor: %s."),
897            regno, valstr);
898
899   /* supply register stores in target byte order, so swap here */
900
901   store_unsigned_integer (regbuf,
902                           register_size (get_regcache_arch (regcache), regno),
903                           val);
904
905   regcache_raw_supply (regcache, regno, regbuf);
906
907   return p;
908 }
909
910 /* Tell the remote machine to resume.  */
911
912 static void
913 monitor_resume (ptid_t ptid, int step, enum target_signal sig)
914 {
915   /* Some monitors require a different command when starting a program */
916   monitor_debug ("MON resume\n");
917   if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1)
918     {
919       first_time = 0;
920       monitor_printf ("run\r");
921       if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
922         dump_reg_flag = 1;
923       return;
924     }
925   if (step)
926     monitor_printf (current_monitor->step);
927   else
928     {
929       if (current_monitor->continue_hook)
930         (*current_monitor->continue_hook) ();
931       else
932         monitor_printf (current_monitor->cont);
933       if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT)
934         dump_reg_flag = 1;
935     }
936 }
937
938 /* Parse the output of a register dump command.  A monitor specific
939    regexp is used to extract individual register descriptions of the
940    form REG=VAL.  Each description is split up into a name and a value
941    string which are passed down to monitor specific code.  */
942
943 static void
944 parse_register_dump (struct regcache *regcache, char *buf, int len)
945 {
946   monitor_debug ("MON Parsing  register dump\n");
947   while (1)
948     {
949       int regnamelen, vallen;
950       char *regname, *val;
951       /* Element 0 points to start of register name, and element 1
952          points to the start of the register value.  */
953       struct re_registers register_strings;
954
955       memset (&register_strings, 0, sizeof (struct re_registers));
956
957       if (re_search (&register_pattern, buf, len, 0, len,
958                      &register_strings) == -1)
959         break;
960
961       regnamelen = register_strings.end[1] - register_strings.start[1];
962       regname = buf + register_strings.start[1];
963       vallen = register_strings.end[2] - register_strings.start[2];
964       val = buf + register_strings.start[2];
965
966       current_monitor->supply_register (regcache, regname, regnamelen,
967                                         val, vallen);
968
969       buf += register_strings.end[0];
970       len -= register_strings.end[0];
971     }
972 }
973
974 /* Send ^C to target to halt it.  Target will respond, and send us a
975    packet.  */
976
977 static void
978 monitor_interrupt (int signo)
979 {
980   /* If this doesn't work, try more severe steps.  */
981   signal (signo, monitor_interrupt_twice);
982
983   if (monitor_debug_p || remote_debug)
984     fprintf_unfiltered (gdb_stdlog, "monitor_interrupt called\n");
985
986   target_stop (inferior_ptid);
987 }
988
989 /* The user typed ^C twice.  */
990
991 static void
992 monitor_interrupt_twice (int signo)
993 {
994   signal (signo, ofunc);
995
996   monitor_interrupt_query ();
997
998   signal (signo, monitor_interrupt);
999 }
1000
1001 /* Ask the user what to do when an interrupt is received.  */
1002
1003 static void
1004 monitor_interrupt_query (void)
1005 {
1006   target_terminal_ours ();
1007
1008   if (query ("Interrupted while waiting for the program.\n\
1009 Give up (and stop debugging it)? "))
1010     {
1011       target_mourn_inferior ();
1012       deprecated_throw_reason (RETURN_QUIT);
1013     }
1014
1015   target_terminal_inferior ();
1016 }
1017
1018 static void
1019 monitor_wait_cleanup (void *old_timeout)
1020 {
1021   timeout = *(int *) old_timeout;
1022   signal (SIGINT, ofunc);
1023   in_monitor_wait = 0;
1024 }
1025
1026
1027
1028 static void
1029 monitor_wait_filter (char *buf,
1030                      int bufmax,
1031                      int *ext_resp_len,
1032                      struct target_waitstatus *status)
1033 {
1034   int resp_len;
1035   do
1036     {
1037       resp_len = monitor_expect_prompt (buf, bufmax);
1038       *ext_resp_len = resp_len;
1039
1040       if (resp_len <= 0)
1041         fprintf_unfiltered (gdb_stderr, "monitor_wait:  excessive response from monitor: %s.", buf);
1042     }
1043   while (resp_len < 0);
1044
1045   /* Print any output characters that were preceded by ^O.  */
1046   /* FIXME - This would be great as a user settabgle flag */
1047   if (monitor_debug_p || remote_debug
1048       || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
1049     {
1050       int i;
1051
1052       for (i = 0; i < resp_len - 1; i++)
1053         if (buf[i] == 0x0f)
1054           putchar_unfiltered (buf[++i]);
1055     }
1056 }
1057
1058
1059
1060 /* Wait until the remote machine stops, then return, storing status in
1061    status just as `wait' would.  */
1062
1063 static ptid_t
1064 monitor_wait (ptid_t ptid, struct target_waitstatus *status)
1065 {
1066   int old_timeout = timeout;
1067   char buf[TARGET_BUF_SIZE];
1068   int resp_len;
1069   struct cleanup *old_chain;
1070
1071   status->kind = TARGET_WAITKIND_EXITED;
1072   status->value.integer = 0;
1073
1074   old_chain = make_cleanup (monitor_wait_cleanup, &old_timeout);
1075   monitor_debug ("MON wait\n");
1076
1077 #if 0
1078   /* This is somthing other than a maintenance command */
1079     in_monitor_wait = 1;
1080   timeout = watchdog > 0 ? watchdog : -1;
1081 #else
1082   timeout = -1;         /* Don't time out -- user program is running. */
1083 #endif
1084
1085   ofunc = (void (*)()) signal (SIGINT, monitor_interrupt);
1086
1087   if (current_monitor->wait_filter)
1088     (*current_monitor->wait_filter) (buf, sizeof (buf), &resp_len, status);
1089   else
1090     monitor_wait_filter (buf, sizeof (buf), &resp_len, status);
1091
1092 #if 0                           /* Transferred to monitor wait filter */
1093   do
1094     {
1095       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1096
1097       if (resp_len <= 0)
1098         fprintf_unfiltered (gdb_stderr, "monitor_wait:  excessive response from monitor: %s.", buf);
1099     }
1100   while (resp_len < 0);
1101
1102   /* Print any output characters that were preceded by ^O.  */
1103   /* FIXME - This would be great as a user settabgle flag */
1104   if (monitor_debug_p || remote_debug
1105       || current_monitor->flags & MO_PRINT_PROGRAM_OUTPUT)
1106     {
1107       int i;
1108
1109       for (i = 0; i < resp_len - 1; i++)
1110         if (buf[i] == 0x0f)
1111           putchar_unfiltered (buf[++i]);
1112     }
1113 #endif
1114
1115   signal (SIGINT, ofunc);
1116
1117   timeout = old_timeout;
1118 #if 0
1119   if (dump_reg_flag && current_monitor->dump_registers)
1120     {
1121       dump_reg_flag = 0;
1122       monitor_printf (current_monitor->dump_registers);
1123       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1124     }
1125
1126   if (current_monitor->register_pattern)
1127     parse_register_dump (get_current_regcache (), buf, resp_len);
1128 #else
1129   monitor_debug ("Wait fetching registers after stop\n");
1130   monitor_dump_regs (get_current_regcache ());
1131 #endif
1132
1133   status->kind = TARGET_WAITKIND_STOPPED;
1134   status->value.sig = TARGET_SIGNAL_TRAP;
1135
1136   discard_cleanups (old_chain);
1137
1138   in_monitor_wait = 0;
1139
1140   return inferior_ptid;
1141 }
1142
1143 /* Fetch register REGNO, or all registers if REGNO is -1. Returns
1144    errno value.  */
1145
1146 static void
1147 monitor_fetch_register (struct regcache *regcache, int regno)
1148 {
1149   const char *name;
1150   char *zerobuf;
1151   char *regbuf;
1152   int i;
1153
1154   regbuf  = alloca (MAX_REGISTER_SIZE * 2 + 1);
1155   zerobuf = alloca (MAX_REGISTER_SIZE);
1156   memset (zerobuf, 0, MAX_REGISTER_SIZE);
1157
1158   if (current_monitor->regname != NULL)
1159     name = current_monitor->regname (regno);
1160   else
1161     name = current_monitor->regnames[regno];
1162   monitor_debug ("MON fetchreg %d '%s'\n", regno, name ? name : "(null name)");
1163
1164   if (!name || (*name == '\0'))
1165     {
1166       monitor_debug ("No register known for %d\n", regno);
1167       regcache_raw_supply (regcache, regno, zerobuf);
1168       return;
1169     }
1170
1171   /* send the register examine command */
1172
1173   monitor_printf (current_monitor->getreg.cmd, name);
1174
1175   /* If RESP_DELIM is specified, we search for that as a leading
1176      delimiter for the register value.  Otherwise, we just start
1177      searching from the start of the buf.  */
1178
1179   if (current_monitor->getreg.resp_delim)
1180     {
1181       monitor_debug ("EXP getreg.resp_delim\n");
1182       monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1183       /* Handle case of first 32 registers listed in pairs.  */
1184       if (current_monitor->flags & MO_32_REGS_PAIRED
1185           && (regno & 1) != 0 && regno < 32)
1186         {
1187           monitor_debug ("EXP getreg.resp_delim\n");
1188           monitor_expect (current_monitor->getreg.resp_delim, NULL, 0);
1189         }
1190     }
1191
1192   /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */
1193   if (current_monitor->flags & MO_HEX_PREFIX)
1194     {
1195       int c;
1196       c = readchar (timeout);
1197       while (c == ' ')
1198         c = readchar (timeout);
1199       if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1200         ;
1201       else
1202         error (_("Bad value returned from monitor while fetching register %x."),
1203                regno);
1204     }
1205
1206   /* Read upto the maximum number of hex digits for this register, skipping
1207      spaces, but stop reading if something else is seen.  Some monitors
1208      like to drop leading zeros.  */
1209
1210   for (i = 0; i < register_size (get_regcache_arch (regcache), regno) * 2; i++)
1211     {
1212       int c;
1213       c = readchar (timeout);
1214       while (c == ' ')
1215         c = readchar (timeout);
1216
1217       if (!isxdigit (c))
1218         break;
1219
1220       regbuf[i] = c;
1221     }
1222
1223   regbuf[i] = '\000';           /* terminate the number */
1224   monitor_debug ("REGVAL '%s'\n", regbuf);
1225
1226   /* If TERM is present, we wait for that to show up.  Also, (if TERM
1227      is present), we will send TERM_CMD if that is present.  In any
1228      case, we collect all of the output into buf, and then wait for
1229      the normal prompt.  */
1230
1231   if (current_monitor->getreg.term)
1232     {
1233       monitor_debug ("EXP getreg.term\n");
1234       monitor_expect (current_monitor->getreg.term, NULL, 0);           /* get response */
1235     }
1236
1237   if (current_monitor->getreg.term_cmd)
1238     {
1239       monitor_debug ("EMIT getreg.term.cmd\n");
1240       monitor_printf (current_monitor->getreg.term_cmd);
1241     }
1242   if (!current_monitor->getreg.term ||  /* Already expected or */
1243       current_monitor->getreg.term_cmd)         /* ack expected */
1244     monitor_expect_prompt (NULL, 0);    /* get response */
1245
1246   monitor_supply_register (regcache, regno, regbuf);
1247 }
1248
1249 /* Sometimes, it takes several commands to dump the registers */
1250 /* This is a primitive for use by variations of monitor interfaces in
1251    case they need to compose the operation.
1252  */
1253 int
1254 monitor_dump_reg_block (struct regcache *regcache, char *block_cmd)
1255 {
1256   char buf[TARGET_BUF_SIZE];
1257   int resp_len;
1258   monitor_printf (block_cmd);
1259   resp_len = monitor_expect_prompt (buf, sizeof (buf));
1260   parse_register_dump (regcache, buf, resp_len);
1261   return 1;
1262 }
1263
1264
1265 /* Read the remote registers into the block regs.  */
1266 /* Call the specific function if it has been provided */
1267
1268 static void
1269 monitor_dump_regs (struct regcache *regcache)
1270 {
1271   char buf[TARGET_BUF_SIZE];
1272   int resp_len;
1273   if (current_monitor->dumpregs)
1274     (*(current_monitor->dumpregs)) (regcache);  /* call supplied function */
1275   else if (current_monitor->dump_registers)     /* default version */
1276     {
1277       monitor_printf (current_monitor->dump_registers);
1278       resp_len = monitor_expect_prompt (buf, sizeof (buf));
1279       parse_register_dump (regcache, buf, resp_len);
1280     }
1281   else
1282     internal_error (__FILE__, __LINE__, _("failed internal consistency check"));                        /* Need some way to read registers */
1283 }
1284
1285 static void
1286 monitor_fetch_registers (struct regcache *regcache, int regno)
1287 {
1288   monitor_debug ("MON fetchregs\n");
1289   if (current_monitor->getreg.cmd)
1290     {
1291       if (regno >= 0)
1292         {
1293           monitor_fetch_register (regcache, regno);
1294           return;
1295         }
1296
1297       for (regno = 0; regno < gdbarch_num_regs (get_regcache_arch (regcache));
1298            regno++)
1299         monitor_fetch_register (regcache, regno);
1300     }
1301   else
1302     {
1303       monitor_dump_regs (regcache);
1304     }
1305 }
1306
1307 /* Store register REGNO, or all if REGNO == 0.  Return errno value.  */
1308
1309 static void
1310 monitor_store_register (struct regcache *regcache, int regno)
1311 {
1312   const char *name;
1313   ULONGEST val;
1314   
1315   if (current_monitor->regname != NULL)
1316     name = current_monitor->regname (regno);
1317   else
1318     name = current_monitor->regnames[regno];
1319   
1320   if (!name || (*name == '\0'))
1321     {
1322       monitor_debug ("MON Cannot store unknown register\n");
1323       return;
1324     }
1325
1326   regcache_cooked_read_unsigned (regcache, regno, &val);
1327   monitor_debug ("MON storeg %d %s\n", regno,
1328                  phex (val,
1329                        register_size (get_regcache_arch (regcache), regno)));
1330
1331   /* send the register deposit command */
1332
1333   if (current_monitor->flags & MO_REGISTER_VALUE_FIRST)
1334     monitor_printf (current_monitor->setreg.cmd, val, name);
1335   else if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1336     monitor_printf (current_monitor->setreg.cmd, name);
1337   else
1338     monitor_printf (current_monitor->setreg.cmd, name, val);
1339
1340   if (current_monitor->setreg.resp_delim)
1341     {
1342       monitor_debug ("EXP setreg.resp_delim\n");
1343       monitor_expect_regexp (&setreg_resp_delim_pattern, NULL, 0);
1344       if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1345         monitor_printf ("%s\r", paddr_nz (val));
1346     }
1347   if (current_monitor->setreg.term)
1348     {
1349       monitor_debug ("EXP setreg.term\n");
1350       monitor_expect (current_monitor->setreg.term, NULL, 0);
1351       if (current_monitor->flags & MO_SETREG_INTERACTIVE)
1352         monitor_printf ("%s\r", paddr_nz (val));
1353       monitor_expect_prompt (NULL, 0);
1354     }
1355   else
1356     monitor_expect_prompt (NULL, 0);
1357   if (current_monitor->setreg.term_cmd)         /* Mode exit required */
1358     {
1359       monitor_debug ("EXP setreg_termcmd\n");
1360       monitor_printf ("%s", current_monitor->setreg.term_cmd);
1361       monitor_expect_prompt (NULL, 0);
1362     }
1363 }                               /* monitor_store_register */
1364
1365 /* Store the remote registers.  */
1366
1367 static void
1368 monitor_store_registers (struct regcache *regcache, int regno)
1369 {
1370   if (regno >= 0)
1371     {
1372       monitor_store_register (regcache, regno);
1373       return;
1374     }
1375
1376   for (regno = 0; regno < gdbarch_num_regs (get_regcache_arch (regcache));
1377        regno++)
1378     monitor_store_register (regcache, regno);
1379 }
1380
1381 /* Get ready to modify the registers array.  On machines which store
1382    individual registers, this doesn't need to do anything.  On machines
1383    which store all the registers in one fell swoop, this makes sure
1384    that registers contains all the registers from the program being
1385    debugged.  */
1386
1387 static void
1388 monitor_prepare_to_store (struct regcache *regcache)
1389 {
1390   /* Do nothing, since we can store individual regs */
1391 }
1392
1393 static void
1394 monitor_files_info (struct target_ops *ops)
1395 {
1396   printf_unfiltered (_("\tAttached to %s at %d baud.\n"), dev_name, baud_rate);
1397 }
1398
1399 static int
1400 monitor_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
1401 {
1402   unsigned int val, hostval;
1403   char *cmd;
1404   int i;
1405
1406   monitor_debug ("MON write %d %s\n", len, paddr (memaddr));
1407
1408   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1409     memaddr = gdbarch_addr_bits_remove (current_gdbarch, memaddr);
1410
1411   /* Use memory fill command for leading 0 bytes.  */
1412
1413   if (current_monitor->fill)
1414     {
1415       for (i = 0; i < len; i++)
1416         if (myaddr[i] != 0)
1417           break;
1418
1419       if (i > 4)                /* More than 4 zeros is worth doing */
1420         {
1421           monitor_debug ("MON FILL %d\n", i);
1422           if (current_monitor->flags & MO_FILL_USES_ADDR)
1423             monitor_printf (current_monitor->fill, memaddr, (memaddr + i) - 1, 0);
1424           else
1425             monitor_printf (current_monitor->fill, memaddr, i, 0);
1426
1427           monitor_expect_prompt (NULL, 0);
1428
1429           return i;
1430         }
1431     }
1432
1433 #if 0
1434   /* Can't actually use long longs if VAL is an int (nice idea, though).  */
1435   if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll)
1436     {
1437       len = 8;
1438       cmd = current_monitor->setmem.cmdll;
1439     }
1440   else
1441 #endif
1442   if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl)
1443     {
1444       len = 4;
1445       cmd = current_monitor->setmem.cmdl;
1446     }
1447   else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw)
1448     {
1449       len = 2;
1450       cmd = current_monitor->setmem.cmdw;
1451     }
1452   else
1453     {
1454       len = 1;
1455       cmd = current_monitor->setmem.cmdb;
1456     }
1457
1458   val = extract_unsigned_integer (myaddr, len);
1459
1460   if (len == 4)
1461     {
1462       hostval = *(unsigned int *) myaddr;
1463       monitor_debug ("Hostval(%08x) val(%08x)\n", hostval, val);
1464     }
1465
1466
1467   if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM)
1468     monitor_printf_noecho (cmd, memaddr, val);
1469   else if (current_monitor->flags & MO_SETMEM_INTERACTIVE)
1470     {
1471
1472       monitor_printf_noecho (cmd, memaddr);
1473
1474       if (current_monitor->setmem.resp_delim)
1475         {
1476           monitor_debug ("EXP setmem.resp_delim");
1477           monitor_expect_regexp (&setmem_resp_delim_pattern, NULL, 0); 
1478           monitor_printf ("%x\r", val);
1479        }
1480       if (current_monitor->setmem.term)
1481         {
1482           monitor_debug ("EXP setmem.term");
1483           monitor_expect (current_monitor->setmem.term, NULL, 0);
1484           monitor_printf ("%x\r", val);
1485         }
1486       if (current_monitor->setmem.term_cmd)
1487         {                       /* Emit this to get out of the memory editing state */
1488           monitor_printf ("%s", current_monitor->setmem.term_cmd);
1489           /* Drop through to expecting a prompt */
1490         }
1491     }
1492   else
1493     monitor_printf (cmd, memaddr, val);
1494
1495   monitor_expect_prompt (NULL, 0);
1496
1497   return len;
1498 }
1499
1500
1501 static int
1502 monitor_write_memory_bytes (CORE_ADDR memaddr, char *myaddr, int len)
1503 {
1504   unsigned char val;
1505   int written = 0;
1506   if (len == 0)
1507     return 0;
1508   /* Enter the sub mode */
1509   monitor_printf (current_monitor->setmem.cmdb, memaddr);
1510   monitor_expect_prompt (NULL, 0);
1511   while (len)
1512     {
1513       val = *myaddr;
1514       monitor_printf ("%x\r", val);
1515       myaddr++;
1516       memaddr++;
1517       written++;
1518       /* If we wanted to, here we could validate the address */
1519       monitor_expect_prompt (NULL, 0);
1520       len--;
1521     }
1522   /* Now exit the sub mode */
1523   monitor_printf (current_monitor->getreg.term_cmd);
1524   monitor_expect_prompt (NULL, 0);
1525   return written;
1526 }
1527
1528
1529 static void
1530 longlongendswap (unsigned char *a)
1531 {
1532   int i, j;
1533   unsigned char x;
1534   i = 0;
1535   j = 7;
1536   while (i < 4)
1537     {
1538       x = *(a + i);
1539       *(a + i) = *(a + j);
1540       *(a + j) = x;
1541       i++, j--;
1542     }
1543 }
1544 /* Format 32 chars of long long value, advance the pointer */
1545 static char *hexlate = "0123456789abcdef";
1546 static char *
1547 longlong_hexchars (unsigned long long value,
1548                    char *outbuff)
1549 {
1550   if (value == 0)
1551     {
1552       *outbuff++ = '0';
1553       return outbuff;
1554     }
1555   else
1556     {
1557       static unsigned char disbuf[8];   /* disassembly buffer */
1558       unsigned char *scan, *limit;      /* loop controls */
1559       unsigned char c, nib;
1560       int leadzero = 1;
1561       scan = disbuf;
1562       limit = scan + 8;
1563       {
1564         unsigned long long *dp;
1565         dp = (unsigned long long *) scan;
1566         *dp = value;
1567       }
1568       longlongendswap (disbuf); /* FIXME: ONly on big endian hosts */
1569       while (scan < limit)
1570         {
1571           c = *scan++;          /* a byte of our long long value */
1572           if (leadzero)
1573             {
1574               if (c == 0)
1575                 continue;
1576               else
1577                 leadzero = 0;   /* henceforth we print even zeroes */
1578             }
1579           nib = c >> 4;         /* high nibble bits */
1580           *outbuff++ = hexlate[nib];
1581           nib = c & 0x0f;       /* low nibble bits */
1582           *outbuff++ = hexlate[nib];
1583         }
1584       return outbuff;
1585     }
1586 }                               /* longlong_hexchars */
1587
1588
1589
1590 /* I am only going to call this when writing virtual byte streams.
1591    Which possably entails endian conversions
1592  */
1593 static int
1594 monitor_write_memory_longlongs (CORE_ADDR memaddr, char *myaddr, int len)
1595 {
1596   static char hexstage[20];     /* At least 16 digits required, plus null */
1597   char *endstring;
1598   long long *llptr;
1599   long long value;
1600   int written = 0;
1601   llptr = (unsigned long long *) myaddr;
1602   if (len == 0)
1603     return 0;
1604   monitor_printf (current_monitor->setmem.cmdll, memaddr);
1605   monitor_expect_prompt (NULL, 0);
1606   while (len >= 8)
1607     {
1608       value = *llptr;
1609       endstring = longlong_hexchars (*llptr, hexstage);
1610       *endstring = '\0';        /* NUll terminate for printf */
1611       monitor_printf ("%s\r", hexstage);
1612       llptr++;
1613       memaddr += 8;
1614       written += 8;
1615       /* If we wanted to, here we could validate the address */
1616       monitor_expect_prompt (NULL, 0);
1617       len -= 8;
1618     }
1619   /* Now exit the sub mode */
1620   monitor_printf (current_monitor->getreg.term_cmd);
1621   monitor_expect_prompt (NULL, 0);
1622   return written;
1623 }                               /* */
1624
1625
1626
1627 /* ----- MONITOR_WRITE_MEMORY_BLOCK ---------------------------- */
1628 /* This is for the large blocks of memory which may occur in downloading.
1629    And for monitors which use interactive entry,
1630    And for monitors which do not have other downloading methods.
1631    Without this, we will end up calling monitor_write_memory many times
1632    and do the entry and exit of the sub mode many times
1633    This currently assumes...
1634    MO_SETMEM_INTERACTIVE
1635    ! MO_NO_ECHO_ON_SETMEM
1636    To use this, the you have to patch the monitor_cmds block with
1637    this function. Otherwise, its not tuned up for use by all
1638    monitor variations.
1639  */
1640
1641 static int
1642 monitor_write_memory_block (CORE_ADDR memaddr, char *myaddr, int len)
1643 {
1644   int written;
1645   written = 0;
1646   /* FIXME: This would be a good place to put the zero test */
1647 #if 1
1648   if ((len > 8) && (((len & 0x07)) == 0) && current_monitor->setmem.cmdll)
1649     {
1650       return monitor_write_memory_longlongs (memaddr, myaddr, len);
1651     }
1652 #endif
1653   written = monitor_write_memory_bytes (memaddr, myaddr, len);
1654   return written;
1655 }
1656
1657 /* This is an alternate form of monitor_read_memory which is used for monitors
1658    which can only read a single byte/word/etc. at a time.  */
1659
1660 static int
1661 monitor_read_memory_single (CORE_ADDR memaddr, char *myaddr, int len)
1662 {
1663   unsigned int val;
1664   char membuf[sizeof (int) * 2 + 1];
1665   char *p;
1666   char *cmd;
1667
1668   monitor_debug ("MON read single\n");
1669 #if 0
1670   /* Can't actually use long longs (nice idea, though).  In fact, the
1671      call to strtoul below will fail if it tries to convert a value
1672      that's too big to fit in a long.  */
1673   if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll)
1674     {
1675       len = 8;
1676       cmd = current_monitor->getmem.cmdll;
1677     }
1678   else
1679 #endif
1680   if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl)
1681     {
1682       len = 4;
1683       cmd = current_monitor->getmem.cmdl;
1684     }
1685   else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw)
1686     {
1687       len = 2;
1688       cmd = current_monitor->getmem.cmdw;
1689     }
1690   else
1691     {
1692       len = 1;
1693       cmd = current_monitor->getmem.cmdb;
1694     }
1695
1696   /* Send the examine command.  */
1697
1698   monitor_printf (cmd, memaddr);
1699
1700   /* If RESP_DELIM is specified, we search for that as a leading
1701      delimiter for the memory value.  Otherwise, we just start
1702      searching from the start of the buf.  */
1703
1704   if (current_monitor->getmem.resp_delim)
1705     {
1706       monitor_debug ("EXP getmem.resp_delim\n");
1707       monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0);
1708     }
1709
1710   /* Now, read the appropriate number of hex digits for this loc,
1711      skipping spaces.  */
1712
1713   /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */
1714   if (current_monitor->flags & MO_HEX_PREFIX)
1715     {
1716       int c;
1717
1718       c = readchar (timeout);
1719       while (c == ' ')
1720         c = readchar (timeout);
1721       if ((c == '0') && ((c = readchar (timeout)) == 'x'))
1722         ;
1723       else
1724         monitor_error ("monitor_read_memory_single", 
1725                        "bad response from monitor",
1726                        memaddr, 0, NULL, 0);
1727     }
1728
1729   {
1730     int i;
1731     for (i = 0; i < len * 2; i++)
1732       {
1733         int c;
1734
1735         while (1)
1736           {
1737             c = readchar (timeout);
1738             if (isxdigit (c))
1739               break;
1740             if (c == ' ')
1741               continue;
1742             
1743             monitor_error ("monitor_read_memory_single",
1744                            "bad response from monitor",
1745                            memaddr, i, membuf, 0);
1746           }
1747       membuf[i] = c;
1748     }
1749     membuf[i] = '\000';         /* terminate the number */
1750   }
1751
1752 /* If TERM is present, we wait for that to show up.  Also, (if TERM is
1753    present), we will send TERM_CMD if that is present.  In any case, we collect
1754    all of the output into buf, and then wait for the normal prompt.  */
1755
1756   if (current_monitor->getmem.term)
1757     {
1758       monitor_expect (current_monitor->getmem.term, NULL, 0);   /* get response */
1759
1760       if (current_monitor->getmem.term_cmd)
1761         {
1762           monitor_printf (current_monitor->getmem.term_cmd);
1763           monitor_expect_prompt (NULL, 0);
1764         }
1765     }
1766   else
1767     monitor_expect_prompt (NULL, 0);    /* get response */
1768
1769   p = membuf;
1770   val = strtoul (membuf, &p, 16);
1771
1772   if (val == 0 && membuf == p)
1773     monitor_error ("monitor_read_memory_single",
1774                    "bad value from monitor",
1775                    memaddr, 0, membuf, 0);
1776
1777   /* supply register stores in target byte order, so swap here */
1778
1779   store_unsigned_integer (myaddr, len, val);
1780
1781   return len;
1782 }
1783
1784 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
1785    memory at MEMADDR.  Returns length moved.  Currently, we do no more
1786    than 16 bytes at a time.  */
1787
1788 static int
1789 monitor_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
1790 {
1791   unsigned int val;
1792   char buf[512];
1793   char *p, *p1;
1794   int resp_len;
1795   int i;
1796   CORE_ADDR dumpaddr;
1797
1798   if (len <= 0)
1799     {
1800       monitor_debug ("Zero length call to monitor_read_memory\n");
1801       return 0;
1802     }
1803
1804   monitor_debug ("MON read block ta(%s) ha(%lx) %d\n",
1805                  paddr_nz (memaddr), (long) myaddr, len);
1806
1807   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
1808     memaddr = gdbarch_addr_bits_remove (current_gdbarch, memaddr);
1809
1810   if (current_monitor->flags & MO_GETMEM_READ_SINGLE)
1811     return monitor_read_memory_single (memaddr, myaddr, len);
1812
1813   len = min (len, 16);
1814
1815   /* Some dumpers align the first data with the preceeding 16
1816      byte boundary. Some print blanks and start at the
1817      requested boundary. EXACT_DUMPADDR
1818    */
1819
1820   dumpaddr = (current_monitor->flags & MO_EXACT_DUMPADDR)
1821     ? memaddr : memaddr & ~0x0f;
1822
1823   /* See if xfer would cross a 16 byte boundary.  If so, clip it.  */
1824   if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0)
1825     len = ((memaddr + len) & ~0xf) - memaddr;
1826
1827   /* send the memory examine command */
1828
1829   if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE)
1830     monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len);
1831   else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1832     monitor_printf (current_monitor->getmem.cmdb, dumpaddr);
1833   else
1834     monitor_printf (current_monitor->getmem.cmdb, memaddr, len);
1835
1836   /* If TERM is present, we wait for that to show up.  Also, (if TERM
1837      is present), we will send TERM_CMD if that is present.  In any
1838      case, we collect all of the output into buf, and then wait for
1839      the normal prompt.  */
1840
1841   if (current_monitor->getmem.term)
1842     {
1843       resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf);        /* get response */
1844
1845       if (resp_len <= 0)
1846         monitor_error ("monitor_read_memory",
1847                        "excessive response from monitor",
1848                        memaddr, resp_len, buf, 0);
1849
1850       if (current_monitor->getmem.term_cmd)
1851         {
1852           serial_write (monitor_desc, current_monitor->getmem.term_cmd,
1853                         strlen (current_monitor->getmem.term_cmd));
1854           monitor_expect_prompt (NULL, 0);
1855         }
1856     }
1857   else
1858     resp_len = monitor_expect_prompt (buf, sizeof buf);         /* get response */
1859
1860   p = buf;
1861
1862   /* If RESP_DELIM is specified, we search for that as a leading
1863      delimiter for the values.  Otherwise, we just start searching
1864      from the start of the buf.  */
1865
1866   if (current_monitor->getmem.resp_delim)
1867     {
1868       int retval, tmp;
1869       struct re_registers resp_strings;
1870       monitor_debug ("MON getmem.resp_delim %s\n", current_monitor->getmem.resp_delim);
1871
1872       memset (&resp_strings, 0, sizeof (struct re_registers));
1873       tmp = strlen (p);
1874       retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp,
1875                           &resp_strings);
1876
1877       if (retval < 0)
1878         monitor_error ("monitor_read_memory",
1879                        "bad response from monitor",
1880                        memaddr, resp_len, buf, 0);
1881
1882       p += resp_strings.end[0];
1883 #if 0
1884       p = strstr (p, current_monitor->getmem.resp_delim);
1885       if (!p)
1886         monitor_error ("monitor_read_memory",
1887                        "bad response from monitor",
1888                        memaddr, resp_len, buf, 0);
1889       p += strlen (current_monitor->getmem.resp_delim);
1890 #endif
1891     }
1892   monitor_debug ("MON scanning  %d ,%lx '%s'\n", len, (long) p, p);
1893   if (current_monitor->flags & MO_GETMEM_16_BOUNDARY)
1894     {
1895       char c;
1896       int fetched = 0;
1897       i = len;
1898       c = *p;
1899
1900
1901       while (!(c == '\000' || c == '\n' || c == '\r') && i > 0)
1902         {
1903           if (isxdigit (c))
1904             {
1905               if ((dumpaddr >= memaddr) && (i > 0))
1906                 {
1907                   val = fromhex (c) * 16 + fromhex (*(p + 1));
1908                   *myaddr++ = val;
1909                   if (monitor_debug_p || remote_debug)
1910                     fprintf_unfiltered (gdb_stdlog, "[%02x]", val);
1911                   --i;
1912                   fetched++;
1913                 }
1914               ++dumpaddr;
1915               ++p;
1916             }
1917           ++p;                  /* skip a blank or other non hex char */
1918           c = *p;
1919         }
1920       if (fetched == 0)
1921         error (_("Failed to read via monitor"));
1922       if (monitor_debug_p || remote_debug)
1923         fprintf_unfiltered (gdb_stdlog, "\n");
1924       return fetched;           /* Return the number of bytes actually read */
1925     }
1926   monitor_debug ("MON scanning bytes\n");
1927
1928   for (i = len; i > 0; i--)
1929     {
1930       /* Skip non-hex chars, but bomb on end of string and newlines */
1931
1932       while (1)
1933         {
1934           if (isxdigit (*p))
1935             break;
1936
1937           if (*p == '\000' || *p == '\n' || *p == '\r')
1938             monitor_error ("monitor_read_memory",
1939                            "badly terminated response from monitor",
1940                            memaddr, resp_len, buf, 0);
1941           p++;
1942         }
1943
1944       val = strtoul (p, &p1, 16);
1945
1946       if (val == 0 && p == p1)
1947         monitor_error ("monitor_read_memory",
1948                        "bad value from monitor",
1949                        memaddr, resp_len, buf, 0);
1950
1951       *myaddr++ = val;
1952
1953       if (i == 1)
1954         break;
1955
1956       p = p1;
1957     }
1958
1959   return len;
1960 }
1961
1962 /* Transfer LEN bytes between target address MEMADDR and GDB address
1963    MYADDR.  Returns 0 for success, errno code for failure. TARGET is
1964    unused. */
1965
1966 static int
1967 monitor_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
1968                      struct mem_attrib *attrib, struct target_ops *target)
1969 {
1970   int res;
1971
1972   if (write)
1973     {
1974       if (current_monitor->flags & MO_HAS_BLOCKWRITES)
1975         res = monitor_write_memory_block(memaddr, myaddr, len);
1976       else
1977         res = monitor_write_memory(memaddr, myaddr, len);
1978     }
1979   else
1980     {
1981       res = monitor_read_memory(memaddr, myaddr, len);
1982     }
1983
1984   return res;
1985 }
1986
1987 static void
1988 monitor_kill (void)
1989 {
1990   return;                       /* ignore attempts to kill target system */
1991 }
1992
1993 /* All we actually do is set the PC to the start address of exec_bfd.  */
1994
1995 static void
1996 monitor_create_inferior (char *exec_file, char *args, char **env,
1997                          int from_tty)
1998 {
1999   if (args && (*args != '\000'))
2000     error (_("Args are not supported by the monitor."));
2001
2002   first_time = 1;
2003   clear_proceed_status ();
2004   write_pc (bfd_get_start_address (exec_bfd));
2005 }
2006
2007 /* Clean up when a program exits.
2008    The program actually lives on in the remote processor's RAM, and may be
2009    run again without a download.  Don't leave it full of breakpoint
2010    instructions.  */
2011
2012 static void
2013 monitor_mourn_inferior (void)
2014 {
2015   unpush_target (targ_ops);
2016   generic_mourn_inferior ();    /* Do all the proper things now */
2017   delete_thread_silent (monitor_ptid);
2018 }
2019
2020 /* Tell the monitor to add a breakpoint.  */
2021
2022 static int
2023 monitor_insert_breakpoint (struct bp_target_info *bp_tgt)
2024 {
2025   CORE_ADDR addr = bp_tgt->placed_address;
2026   int i;
2027   const unsigned char *bp;
2028   int bplen;
2029
2030   monitor_debug ("MON inst bkpt %s\n", paddr (addr));
2031   if (current_monitor->set_break == NULL)
2032     error (_("No set_break defined for this monitor"));
2033
2034   if (current_monitor->flags & MO_ADDR_BITS_REMOVE)
2035     addr = gdbarch_addr_bits_remove (current_gdbarch, addr);
2036
2037   /* Determine appropriate breakpoint size for this address.  */
2038   bp = gdbarch_breakpoint_from_pc (current_gdbarch, &addr, &bplen);
2039   bp_tgt->placed_address = addr;
2040   bp_tgt->placed_size = bplen;
2041
2042   for (i = 0; i < current_monitor->num_breakpoints; i++)
2043     {
2044       if (breakaddr[i] == 0)
2045         {
2046           breakaddr[i] = addr;
2047           monitor_printf (current_monitor->set_break, addr);
2048           monitor_expect_prompt (NULL, 0);
2049           return 0;
2050         }
2051     }
2052
2053   error (_("Too many breakpoints (> %d) for monitor."), current_monitor->num_breakpoints);
2054 }
2055
2056 /* Tell the monitor to remove a breakpoint.  */
2057
2058 static int
2059 monitor_remove_breakpoint (struct bp_target_info *bp_tgt)
2060 {
2061   CORE_ADDR addr = bp_tgt->placed_address;
2062   int i;
2063
2064   monitor_debug ("MON rmbkpt %s\n", paddr (addr));
2065   if (current_monitor->clr_break == NULL)
2066     error (_("No clr_break defined for this monitor"));
2067
2068   for (i = 0; i < current_monitor->num_breakpoints; i++)
2069     {
2070       if (breakaddr[i] == addr)
2071         {
2072           breakaddr[i] = 0;
2073           /* some monitors remove breakpoints based on the address */
2074           if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR)
2075             monitor_printf (current_monitor->clr_break, addr);
2076           else if (current_monitor->flags & MO_CLR_BREAK_1_BASED)
2077             monitor_printf (current_monitor->clr_break, i + 1);
2078           else
2079             monitor_printf (current_monitor->clr_break, i);
2080           monitor_expect_prompt (NULL, 0);
2081           return 0;
2082         }
2083     }
2084   fprintf_unfiltered (gdb_stderr,
2085                       "Can't find breakpoint associated with 0x%s\n",
2086                       paddr_nz (addr));
2087   return 1;
2088 }
2089
2090 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for
2091    an S-record.  Return non-zero if the ACK is received properly.  */
2092
2093 static int
2094 monitor_wait_srec_ack (void)
2095 {
2096   int ch;
2097
2098   if (current_monitor->flags & MO_SREC_ACK_PLUS)
2099     {
2100       return (readchar (timeout) == '+');
2101     }
2102   else if (current_monitor->flags & MO_SREC_ACK_ROTATE)
2103     {
2104       /* Eat two backspaces, a "rotating" char (|/-\), and a space.  */
2105       if ((ch = readchar (1)) < 0)
2106         return 0;
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     }
2114   return 1;
2115 }
2116
2117 /* monitor_load -- download a file. */
2118
2119 static void
2120 monitor_load (char *file, int from_tty)
2121 {
2122   monitor_debug ("MON load\n");
2123
2124   if (current_monitor->load_routine)
2125     current_monitor->load_routine (monitor_desc, file, hashmark);
2126   else
2127     {                           /* The default is ascii S-records */
2128       int n;
2129       unsigned long load_offset;
2130       char buf[128];
2131
2132       /* enable user to specify address for downloading as 2nd arg to load */
2133       n = sscanf (file, "%s 0x%lx", buf, &load_offset);
2134       if (n > 1)
2135         file = buf;
2136       else
2137         load_offset = 0;
2138
2139       monitor_printf (current_monitor->load);
2140       if (current_monitor->loadresp)
2141         monitor_expect (current_monitor->loadresp, NULL, 0);
2142
2143       load_srec (monitor_desc, file, (bfd_vma) load_offset,
2144                  32, SREC_ALL, hashmark,
2145                  current_monitor->flags & MO_SREC_ACK ?
2146                  monitor_wait_srec_ack : NULL);
2147
2148       monitor_expect_prompt (NULL, 0);
2149     }
2150
2151   /* Finally, make the PC point at the start address */
2152   if (exec_bfd)
2153     write_pc (bfd_get_start_address (exec_bfd));
2154
2155   /* There used to be code here which would clear inferior_ptid and
2156      call clear_symtab_users.  None of that should be necessary:
2157      monitor targets should behave like remote protocol targets, and
2158      since generic_load does none of those things, this function
2159      shouldn't either.
2160
2161      Furthermore, clearing inferior_ptid is *incorrect*.  After doing
2162      a load, we still have a valid connection to the monitor, with a
2163      live processor state to fiddle with.  The user can type
2164      `continue' or `jump *start' and make the program run.  If they do
2165      these things, however, GDB will be talking to a running program
2166      while inferior_ptid is null_ptid; this makes things like
2167      reinit_frame_cache very confused.  */
2168 }
2169
2170 static void
2171 monitor_stop (ptid_t ptid)
2172 {
2173   monitor_debug ("MON stop\n");
2174   if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0)
2175     serial_send_break (monitor_desc);
2176   if (current_monitor->stop)
2177     monitor_printf_noecho (current_monitor->stop);
2178 }
2179
2180 /* Put a COMMAND string out to MONITOR.  Output from MONITOR is placed
2181    in OUTPUT until the prompt is seen. FIXME: We read the characters
2182    ourseleves here cause of a nasty echo.  */
2183
2184 static void
2185 monitor_rcmd (char *command,
2186               struct ui_file *outbuf)
2187 {
2188   char *p;
2189   int resp_len;
2190   char buf[1000];
2191
2192   if (monitor_desc == NULL)
2193     error (_("monitor target not open."));
2194
2195   p = current_monitor->prompt;
2196
2197   /* Send the command.  Note that if no args were supplied, then we're
2198      just sending the monitor a newline, which is sometimes useful.  */
2199
2200   monitor_printf ("%s\r", (command ? command : ""));
2201
2202   resp_len = monitor_expect_prompt (buf, sizeof buf);
2203
2204   fputs_unfiltered (buf, outbuf);       /* Output the response */
2205 }
2206
2207 /* Convert hex digit A to a number.  */
2208
2209 #if 0
2210 static int
2211 from_hex (int a)
2212 {
2213   if (a >= '0' && a <= '9')
2214     return a - '0';
2215   if (a >= 'a' && a <= 'f')
2216     return a - 'a' + 10;
2217   if (a >= 'A' && a <= 'F')
2218     return a - 'A' + 10;
2219
2220   error (_("Reply contains invalid hex digit 0x%x"), a);
2221 }
2222 #endif
2223
2224 char *
2225 monitor_get_dev_name (void)
2226 {
2227   return dev_name;
2228 }
2229
2230 /* Check to see if a thread is still alive.  */
2231
2232 static int
2233 monitor_thread_alive (ptid_t ptid)
2234 {
2235   if (ptid_equal (ptid, monitor_ptid))
2236     /* The monitor's task is always alive.  */
2237     return 1;
2238
2239   return 0;
2240 }
2241
2242 /* Convert a thread ID to a string.  Returns the string in a static
2243    buffer.  */
2244
2245 static char *
2246 monitor_pid_to_str (ptid_t ptid)
2247 {
2248   static char buf[64];
2249
2250   if (ptid_equal (monitor_ptid, ptid))
2251     {
2252       xsnprintf (buf, sizeof buf, "Thread <main>");
2253       return buf;
2254     }
2255
2256   return normal_pid_to_str (ptid);
2257 }
2258
2259 static struct target_ops monitor_ops;
2260
2261 static void
2262 init_base_monitor_ops (void)
2263 {
2264   monitor_ops.to_close = monitor_close;
2265   monitor_ops.to_detach = monitor_detach;
2266   monitor_ops.to_resume = monitor_resume;
2267   monitor_ops.to_wait = monitor_wait;
2268   monitor_ops.to_fetch_registers = monitor_fetch_registers;
2269   monitor_ops.to_store_registers = monitor_store_registers;
2270   monitor_ops.to_prepare_to_store = monitor_prepare_to_store;
2271   monitor_ops.deprecated_xfer_memory = monitor_xfer_memory;
2272   monitor_ops.to_files_info = monitor_files_info;
2273   monitor_ops.to_insert_breakpoint = monitor_insert_breakpoint;
2274   monitor_ops.to_remove_breakpoint = monitor_remove_breakpoint;
2275   monitor_ops.to_kill = monitor_kill;
2276   monitor_ops.to_load = monitor_load;
2277   monitor_ops.to_create_inferior = monitor_create_inferior;
2278   monitor_ops.to_mourn_inferior = monitor_mourn_inferior;
2279   monitor_ops.to_stop = monitor_stop;
2280   monitor_ops.to_rcmd = monitor_rcmd;
2281   monitor_ops.to_log_command = serial_log_command;
2282   monitor_ops.to_thread_alive = monitor_thread_alive;
2283   monitor_ops.to_pid_to_str = monitor_pid_to_str;
2284   monitor_ops.to_stratum = process_stratum;
2285   monitor_ops.to_has_all_memory = 1;
2286   monitor_ops.to_has_memory = 1;
2287   monitor_ops.to_has_stack = 1;
2288   monitor_ops.to_has_registers = 1;
2289   monitor_ops.to_has_execution = 1;
2290   monitor_ops.to_magic = OPS_MAGIC;
2291 }                               /* init_base_monitor_ops */
2292
2293 /* Init the target_ops structure pointed at by OPS */
2294
2295 void
2296 init_monitor_ops (struct target_ops *ops)
2297 {
2298   if (monitor_ops.to_magic != OPS_MAGIC)
2299     init_base_monitor_ops ();
2300
2301   memcpy (ops, &monitor_ops, sizeof monitor_ops);
2302 }
2303
2304 /* Define additional commands that are usually only used by monitors.  */
2305
2306 extern initialize_file_ftype _initialize_remote_monitors; /* -Wmissing-prototypes */
2307
2308 void
2309 _initialize_remote_monitors (void)
2310 {
2311   init_base_monitor_ops ();
2312   add_setshow_boolean_cmd ("hash", no_class, &hashmark, _("\
2313 Set display of activity while downloading a file."), _("\
2314 Show display of activity while downloading a file."), _("\
2315 When enabled, a hashmark \'#\' is displayed."),
2316                            NULL,
2317                            NULL, /* FIXME: i18n: */
2318                            &setlist, &showlist);
2319
2320   add_setshow_zinteger_cmd ("monitor", no_class, &monitor_debug_p, _("\
2321 Set debugging of remote monitor communication."), _("\
2322 Show debugging of remote monitor communication."), _("\
2323 When enabled, communication between GDB and the remote monitor\n\
2324 is displayed."),
2325                             NULL,
2326                             NULL, /* FIXME: i18n: */
2327                             &setdebuglist, &showdebuglist);
2328
2329   /* Yes, 42000 is arbitrary.  The only sense out of it, is that it
2330      isn't 0.  */
2331   monitor_ptid = ptid_build (42000, 0, 42000);
2332 }