OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [monitor.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.