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