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