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