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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [monitor.c] - Blame information for rev 853

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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