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