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

Subversion Repositories or1k

[/] [or1k/] [tags/] [start/] [insight/] [gdb/] [monitor.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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