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