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