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