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