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