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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [gdb/] [remote-mips.c] - Blame information for rev 862

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

Line No. Rev Author Line
1 227 jeremybenn
/* Remote debugging interface for MIPS remote debugging protocol.
2
 
3
   Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
4
   2003, 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
5
 
6
   Contributed by Cygnus Support.  Written by Ian Lance Taylor
7
   <ian@cygnus.com>.
8
 
9
   This file is part of GDB.
10
 
11
   This program is free software; you can redistribute it and/or modify
12
   it under the terms of the GNU General Public License as published by
13
   the Free Software Foundation; either version 3 of the License, or
14
   (at your option) any later version.
15
 
16
   This program is distributed in the hope that it will be useful,
17
   but WITHOUT ANY WARRANTY; without even the implied warranty of
18
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
   GNU General Public License for more details.
20
 
21
   You should have received a copy of the GNU General Public License
22
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
23
 
24
#include "defs.h"
25
#include "inferior.h"
26
#include "bfd.h"
27
#include "symfile.h"
28
#include "gdbcmd.h"
29
#include "gdbcore.h"
30
#include "serial.h"
31
#include "target.h"
32
#include "exceptions.h"
33
#include "gdb_string.h"
34
#include "gdb_stat.h"
35
#include "regcache.h"
36
#include <ctype.h>
37
#include "mips-tdep.h"
38
 
39
 
40
/* Breakpoint types.  Values 0, 1, and 2 must agree with the watch
41
   types passed by breakpoint.c to target_insert_watchpoint.
42
   Value 3 is our own invention, and is used for ordinary instruction
43
   breakpoints.  Value 4 is used to mark an unused watchpoint in tables.  */
44
enum break_type
45
  {
46
    BREAK_WRITE,                /* 0 */
47
    BREAK_READ,                 /* 1 */
48
    BREAK_ACCESS,               /* 2 */
49
    BREAK_FETCH,                /* 3 */
50
    BREAK_UNUSED                /* 4 */
51
  };
52
 
53
/* Prototypes for local functions.  */
54
 
55
static int mips_readchar (int timeout);
56
 
57
static int mips_receive_header (unsigned char *hdr, int *pgarbage,
58
                                int ch, int timeout);
59
 
60
static int mips_receive_trailer (unsigned char *trlr, int *pgarbage,
61
                                 int *pch, int timeout);
62
 
63
static int mips_cksum (const unsigned char *hdr,
64
                       const unsigned char *data, int len);
65
 
66
static void mips_send_packet (const char *s, int get_ack);
67
 
68
static void mips_send_command (const char *cmd, int prompt);
69
 
70
static int mips_receive_packet (char *buff, int throw_error, int timeout);
71
 
72
static ULONGEST mips_request (int cmd, ULONGEST addr, ULONGEST data,
73
                              int *perr, int timeout, char *buff);
74
 
75
static void mips_initialize (void);
76
 
77
static void mips_open (char *name, int from_tty);
78
 
79
static void pmon_open (char *name, int from_tty);
80
 
81
static void ddb_open (char *name, int from_tty);
82
 
83
static void lsi_open (char *name, int from_tty);
84
 
85
static void mips_close (int quitting);
86
 
87
static void mips_detach (struct target_ops *ops, char *args, int from_tty);
88
 
89
static int mips_map_regno (struct gdbarch *, int);
90
 
91
static void mips_prepare_to_store (struct regcache *regcache);
92
 
93
static unsigned int mips_fetch_word (CORE_ADDR addr);
94
 
95
static int mips_store_word (CORE_ADDR addr, unsigned int value,
96
                            int *old_contents);
97
 
98
static int mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
99
                             int write,
100
                             struct mem_attrib *attrib,
101
                             struct target_ops *target);
102
 
103
static void mips_files_info (struct target_ops *ignore);
104
 
105
static void mips_mourn_inferior (struct target_ops *ops);
106
 
107
static int pmon_makeb64 (unsigned long v, char *p, int n, int *chksum);
108
 
109
static int pmon_zeroset (int recsize, char **buff, int *amount,
110
                         unsigned int *chksum);
111
 
112
static int pmon_checkset (int recsize, char **buff, int *value);
113
 
114
static void pmon_make_fastrec (char **outbuf, unsigned char *inbuf,
115
                               int *inptr, int inamount, int *recsize,
116
                               unsigned int *csum, unsigned int *zerofill);
117
 
118
static int pmon_check_ack (char *mesg);
119
 
120
static void pmon_start_download (void);
121
 
122
static void pmon_end_download (int final, int bintotal);
123
 
124
static void pmon_download (char *buffer, int length);
125
 
126
static void pmon_load_fast (char *file);
127
 
128
static void mips_load (char *file, int from_tty);
129
 
130
static int mips_make_srec (char *buffer, int type, CORE_ADDR memaddr,
131
                           unsigned char *myaddr, int len);
132
 
133
static int mips_set_breakpoint (CORE_ADDR addr, int len, enum break_type type);
134
 
135
static int mips_clear_breakpoint (CORE_ADDR addr, int len,
136
                                  enum break_type type);
137
 
138
static int mips_common_breakpoint (int set, CORE_ADDR addr, int len,
139
                                   enum break_type type);
140
 
141
/* Forward declarations.  */
142
extern struct target_ops mips_ops;
143
extern struct target_ops pmon_ops;
144
extern struct target_ops ddb_ops;
145
/* *INDENT-OFF* */
146
/* The MIPS remote debugging interface is built on top of a simple
147
   packet protocol.  Each packet is organized as follows:
148
 
149
   SYN  The first character is always a SYN (ASCII 026, or ^V).  SYN
150
   may not appear anywhere else in the packet.  Any time a SYN is
151
   seen, a new packet should be assumed to have begun.
152
 
153
   TYPE_LEN
154
   This byte contains the upper five bits of the logical length
155
   of the data section, plus a single bit indicating whether this
156
   is a data packet or an acknowledgement.  The documentation
157
   indicates that this bit is 1 for a data packet, but the actual
158
   board uses 1 for an acknowledgement.  The value of the byte is
159
   0x40 + (ack ? 0x20 : 0) + (len >> 6)
160
   (we always have 0 <= len < 1024).  Acknowledgement packets do
161
   not carry data, and must have a data length of 0.
162
 
163
   LEN1 This byte contains the lower six bits of the logical length of
164
   the data section.  The value is
165
   0x40 + (len & 0x3f)
166
 
167
   SEQ  This byte contains the six bit sequence number of the packet.
168
   The value is
169
   0x40 + seq
170
   An acknowlegment packet contains the sequence number of the
171
   packet being acknowledged plus 1 modulo 64.  Data packets are
172
   transmitted in sequence.  There may only be one outstanding
173
   unacknowledged data packet at a time.  The sequence numbers
174
   are independent in each direction.  If an acknowledgement for
175
   the previous packet is received (i.e., an acknowledgement with
176
   the sequence number of the packet just sent) the packet just
177
   sent should be retransmitted.  If no acknowledgement is
178
   received within a timeout period, the packet should be
179
   retransmitted.  This has an unfortunate failure condition on a
180
   high-latency line, as a delayed acknowledgement may lead to an
181
   endless series of duplicate packets.
182
 
183
   DATA The actual data bytes follow.  The following characters are
184
   escaped inline with DLE (ASCII 020, or ^P):
185
   SYN (026)    DLE S
186
   DLE (020)    DLE D
187
   ^C  (003)    DLE C
188
   ^S  (023)    DLE s
189
   ^Q  (021)    DLE q
190
   The additional DLE characters are not counted in the logical
191
   length stored in the TYPE_LEN and LEN1 bytes.
192
 
193
   CSUM1
194
   CSUM2
195
   CSUM3
196
   These bytes contain an 18 bit checksum of the complete
197
   contents of the packet excluding the SEQ byte and the
198
   CSUM[123] bytes.  The checksum is simply the twos complement
199
   addition of all the bytes treated as unsigned characters.  The
200
   values of the checksum bytes are:
201
   CSUM1: 0x40 + ((cksum >> 12) & 0x3f)
202
   CSUM2: 0x40 + ((cksum >> 6) & 0x3f)
203
   CSUM3: 0x40 + (cksum & 0x3f)
204
 
205
   It happens that the MIPS remote debugging protocol always
206
   communicates with ASCII strings.  Because of this, this
207
   implementation doesn't bother to handle the DLE quoting mechanism,
208
   since it will never be required.  */
209
/* *INDENT-ON* */
210
 
211
 
212
/* The SYN character which starts each packet.  */
213
#define SYN '\026'
214
 
215
/* The 0x40 used to offset each packet (this value ensures that all of
216
   the header and trailer bytes, other than SYN, are printable ASCII
217
   characters).  */
218
#define HDR_OFFSET 0x40
219
 
220
/* The indices of the bytes in the packet header.  */
221
#define HDR_INDX_SYN 0
222
#define HDR_INDX_TYPE_LEN 1
223
#define HDR_INDX_LEN1 2
224
#define HDR_INDX_SEQ 3
225
#define HDR_LENGTH 4
226
 
227
/* The data/ack bit in the TYPE_LEN header byte.  */
228
#define TYPE_LEN_DA_BIT 0x20
229
#define TYPE_LEN_DATA 0
230
#define TYPE_LEN_ACK TYPE_LEN_DA_BIT
231
 
232
/* How to compute the header bytes.  */
233
#define HDR_SET_SYN(data, len, seq) (SYN)
234
#define HDR_SET_TYPE_LEN(data, len, seq) \
235
  (HDR_OFFSET \
236
   + ((data) ? TYPE_LEN_DATA : TYPE_LEN_ACK) \
237
   + (((len) >> 6) & 0x1f))
238
#define HDR_SET_LEN1(data, len, seq) (HDR_OFFSET + ((len) & 0x3f))
239
#define HDR_SET_SEQ(data, len, seq) (HDR_OFFSET + (seq))
240
 
241
/* Check that a header byte is reasonable.  */
242
#define HDR_CHECK(ch) (((ch) & HDR_OFFSET) == HDR_OFFSET)
243
 
244
/* Get data from the header.  These macros evaluate their argument
245
   multiple times.  */
246
#define HDR_IS_DATA(hdr) \
247
  (((hdr)[HDR_INDX_TYPE_LEN] & TYPE_LEN_DA_BIT) == TYPE_LEN_DATA)
248
#define HDR_GET_LEN(hdr) \
249
  ((((hdr)[HDR_INDX_TYPE_LEN] & 0x1f) << 6) + (((hdr)[HDR_INDX_LEN1] & 0x3f)))
250
#define HDR_GET_SEQ(hdr) ((unsigned int)(hdr)[HDR_INDX_SEQ] & 0x3f)
251
 
252
/* The maximum data length.  */
253
#define DATA_MAXLEN 1023
254
 
255
/* The trailer offset.  */
256
#define TRLR_OFFSET HDR_OFFSET
257
 
258
/* The indices of the bytes in the packet trailer.  */
259
#define TRLR_INDX_CSUM1 0
260
#define TRLR_INDX_CSUM2 1
261
#define TRLR_INDX_CSUM3 2
262
#define TRLR_LENGTH 3
263
 
264
/* How to compute the trailer bytes.  */
265
#define TRLR_SET_CSUM1(cksum) (TRLR_OFFSET + (((cksum) >> 12) & 0x3f))
266
#define TRLR_SET_CSUM2(cksum) (TRLR_OFFSET + (((cksum) >>  6) & 0x3f))
267
#define TRLR_SET_CSUM3(cksum) (TRLR_OFFSET + (((cksum)      ) & 0x3f))
268
 
269
/* Check that a trailer byte is reasonable.  */
270
#define TRLR_CHECK(ch) (((ch) & TRLR_OFFSET) == TRLR_OFFSET)
271
 
272
/* Get data from the trailer.  This evaluates its argument multiple
273
   times.  */
274
#define TRLR_GET_CKSUM(trlr) \
275
  ((((trlr)[TRLR_INDX_CSUM1] & 0x3f) << 12) \
276
   + (((trlr)[TRLR_INDX_CSUM2] & 0x3f) <<  6) \
277
   + ((trlr)[TRLR_INDX_CSUM3] & 0x3f))
278
 
279
/* The sequence number modulos.  */
280
#define SEQ_MODULOS (64)
281
 
282
/* PMON commands to load from the serial port or UDP socket.  */
283
#define LOAD_CMD        "load -b -s tty0\r"
284
#define LOAD_CMD_UDP    "load -b -s udp\r"
285
 
286
/* The target vectors for the four different remote MIPS targets.
287
   These are initialized with code in _initialize_remote_mips instead
288
   of static initializers, to make it easier to extend the target_ops
289
   vector later.  */
290
struct target_ops mips_ops, pmon_ops, ddb_ops, lsi_ops;
291
 
292
enum mips_monitor_type
293
  {
294
    /* IDT/SIM monitor being used: */
295
    MON_IDT,
296
    /* PMON monitor being used: */
297
    MON_PMON,                   /* 3.0.83 [COGENT,EB,FP,NET] Algorithmics Ltd. Nov  9 1995 17:19:50 */
298
    MON_DDB,                    /* 2.7.473 [DDBVR4300,EL,FP,NET] Risq Modular Systems,  Thu Jun 6 09:28:40 PDT 1996 */
299
    MON_LSI,                    /* 4.3.12 [EB,FP], LSI LOGIC Corp. Tue Feb 25 13:22:14 1997 */
300
    /* Last and unused value, for sizing vectors, etc. */
301
    MON_LAST
302
  };
303
static enum mips_monitor_type mips_monitor = MON_LAST;
304
 
305
/* The monitor prompt text.  If the user sets the PMON prompt
306
   to some new value, the GDB `set monitor-prompt' command must also
307
   be used to inform GDB about the expected prompt.  Otherwise, GDB
308
   will not be able to connect to PMON in mips_initialize().
309
   If the `set monitor-prompt' command is not used, the expected
310
   default prompt will be set according the target:
311
   target               prompt
312
   -----                -----
313
   pmon         PMON>
314
   ddb          NEC010>
315
   lsi          PMON>
316
 */
317
static char *mips_monitor_prompt;
318
 
319
/* Set to 1 if the target is open.  */
320
static int mips_is_open;
321
 
322
/* Currently active target description (if mips_is_open == 1) */
323
static struct target_ops *current_ops;
324
 
325
/* Set to 1 while the connection is being initialized.  */
326
static int mips_initializing;
327
 
328
/* Set to 1 while the connection is being brought down.  */
329
static int mips_exiting;
330
 
331
/* The next sequence number to send.  */
332
static unsigned int mips_send_seq;
333
 
334
/* The next sequence number we expect to receive.  */
335
static unsigned int mips_receive_seq;
336
 
337
/* The time to wait before retransmitting a packet, in seconds.  */
338
static int mips_retransmit_wait = 3;
339
 
340
/* The number of times to try retransmitting a packet before giving up.  */
341
static int mips_send_retries = 10;
342
 
343
/* The number of garbage characters to accept when looking for an
344
   SYN for the next packet.  */
345
static int mips_syn_garbage = 10;
346
 
347
/* The time to wait for a packet, in seconds.  */
348
static int mips_receive_wait = 5;
349
 
350
/* Set if we have sent a packet to the board but have not yet received
351
   a reply.  */
352
static int mips_need_reply = 0;
353
 
354
/* Handle used to access serial I/O stream.  */
355
static struct serial *mips_desc;
356
 
357
/* UDP handle used to download files to target.  */
358
static struct serial *udp_desc;
359
static int udp_in_use;
360
 
361
/* TFTP filename used to download files to DDB board, in the form
362
   host:filename.  */
363
static char *tftp_name;         /* host:filename */
364
static char *tftp_localname;    /* filename portion of above */
365
static int tftp_in_use;
366
static FILE *tftp_file;
367
 
368
/* Counts the number of times the user tried to interrupt the target (usually
369
   via ^C.  */
370
static int interrupt_count;
371
 
372
/* If non-zero, means that the target is running. */
373
static int mips_wait_flag = 0;
374
 
375
/* If non-zero, monitor supports breakpoint commands. */
376
static int monitor_supports_breakpoints = 0;
377
 
378
/* Data cache header.  */
379
 
380
#if 0                           /* not used (yet?) */
381
static DCACHE *mips_dcache;
382
#endif
383
 
384
/* Non-zero means that we've just hit a read or write watchpoint */
385
static int hit_watchpoint;
386
 
387
/* Table of breakpoints/watchpoints (used only on LSI PMON target).
388
   The table is indexed by a breakpoint number, which is an integer
389
   from 0 to 255 returned by the LSI PMON when a breakpoint is set.
390
 */
391
#define MAX_LSI_BREAKPOINTS 256
392
struct lsi_breakpoint_info
393
  {
394
    enum break_type type;       /* type of breakpoint */
395
    CORE_ADDR addr;             /* address of breakpoint */
396
    int len;                    /* length of region being watched */
397
    unsigned long value;        /* value to watch */
398
  }
399
lsi_breakpoints[MAX_LSI_BREAKPOINTS];
400
 
401
/* Error/warning codes returned by LSI PMON for breakpoint commands.
402
   Warning values may be ORed together; error values may not.  */
403
#define W_WARN  0x100           /* This bit is set if the error code is a warning */
404
#define W_MSK   0x101           /* warning: Range feature is supported via mask */
405
#define W_VAL   0x102           /* warning: Value check is not supported in hardware */
406
#define W_QAL   0x104           /* warning: Requested qualifiers are not supported in hardware */
407
 
408
#define E_ERR   0x200           /* This bit is set if the error code is an error */
409
#define E_BPT   0x200           /* error: No such breakpoint number */
410
#define E_RGE   0x201           /* error: Range is not supported */
411
#define E_QAL   0x202           /* error: The requested qualifiers can not be used */
412
#define E_OUT   0x203           /* error: Out of hardware resources */
413
#define E_NON   0x204           /* error: Hardware breakpoint not supported */
414
 
415
struct lsi_error
416
  {
417
    int code;                   /* error code */
418
    char *string;               /* string associated with this code */
419
  };
420
 
421
struct lsi_error lsi_warning_table[] =
422
{
423
  {W_MSK, "Range feature is supported via mask"},
424
  {W_VAL, "Value check is not supported in hardware"},
425
  {W_QAL, "Requested qualifiers are not supported in hardware"},
426
  {0, NULL}
427
};
428
 
429
struct lsi_error lsi_error_table[] =
430
{
431
  {E_BPT, "No such breakpoint number"},
432
  {E_RGE, "Range is not supported"},
433
  {E_QAL, "The requested qualifiers can not be used"},
434
  {E_OUT, "Out of hardware resources"},
435
  {E_NON, "Hardware breakpoint not supported"},
436
  {0, NULL}
437
};
438
 
439
/* Set to 1 with the 'set monitor-warnings' command to enable printing
440
   of warnings returned by PMON when hardware breakpoints are used.  */
441
static int monitor_warnings;
442
 
443
 
444
static void
445
close_ports (void)
446
{
447
  mips_is_open = 0;
448
  serial_close (mips_desc);
449
 
450
  if (udp_in_use)
451
    {
452
      serial_close (udp_desc);
453
      udp_in_use = 0;
454
    }
455
  tftp_in_use = 0;
456
}
457
 
458
/* Handle low-level error that we can't recover from.  Note that just
459
   error()ing out from target_wait or some such low-level place will cause
460
   all hell to break loose--the rest of GDB will tend to get left in an
461
   inconsistent state.  */
462
 
463
static NORETURN void
464
mips_error (char *string,...)
465
{
466
  va_list args;
467
 
468
  va_start (args, string);
469
 
470
  target_terminal_ours ();
471
  wrap_here ("");               /* Force out any buffered output */
472
  gdb_flush (gdb_stdout);
473
  if (error_pre_print)
474
    fputs_filtered (error_pre_print, gdb_stderr);
475
  vfprintf_filtered (gdb_stderr, string, args);
476
  fprintf_filtered (gdb_stderr, "\n");
477
  va_end (args);
478
  gdb_flush (gdb_stderr);
479
 
480
  /* Clean up in such a way that mips_close won't try to talk to the
481
     board (it almost surely won't work since we weren't able to talk to
482
     it).  */
483
  close_ports ();
484
 
485
  printf_unfiltered ("Ending remote MIPS debugging.\n");
486
  target_mourn_inferior ();
487
 
488
  deprecated_throw_reason (RETURN_ERROR);
489
}
490
 
491
/* putc_readable - print a character, displaying non-printable chars in
492
   ^x notation or in hex.  */
493
 
494
static void
495
fputc_readable (int ch, struct ui_file *file)
496
{
497
  if (ch == '\n')
498
    fputc_unfiltered ('\n', file);
499
  else if (ch == '\r')
500
    fprintf_unfiltered (file, "\\r");
501
  else if (ch < 0x20)           /* ASCII control character */
502
    fprintf_unfiltered (file, "^%c", ch + '@');
503
  else if (ch >= 0x7f)          /* non-ASCII characters (rubout or greater) */
504
    fprintf_unfiltered (file, "[%02x]", ch & 0xff);
505
  else
506
    fputc_unfiltered (ch, file);
507
}
508
 
509
 
510
/* puts_readable - print a string, displaying non-printable chars in
511
   ^x notation or in hex.  */
512
 
513
static void
514
fputs_readable (const char *string, struct ui_file *file)
515
{
516
  int c;
517
 
518
  while ((c = *string++) != '\0')
519
    fputc_readable (c, file);
520
}
521
 
522
 
523
/* Wait until STRING shows up in mips_desc.  Returns 1 if successful, else 0 if
524
   timed out.  TIMEOUT specifies timeout value in seconds.
525
 */
526
 
527
static int
528
mips_expect_timeout (const char *string, int timeout)
529
{
530
  const char *p = string;
531
 
532
  if (remote_debug)
533
    {
534
      fprintf_unfiltered (gdb_stdlog, "Expected \"");
535
      fputs_readable (string, gdb_stdlog);
536
      fprintf_unfiltered (gdb_stdlog, "\", got \"");
537
    }
538
 
539
  immediate_quit++;
540
  while (1)
541
    {
542
      int c;
543
 
544
      /* Must use serial_readchar() here cuz mips_readchar would get
545
         confused if we were waiting for the mips_monitor_prompt... */
546
 
547
      c = serial_readchar (mips_desc, timeout);
548
 
549
      if (c == SERIAL_TIMEOUT)
550
        {
551
          if (remote_debug)
552
            fprintf_unfiltered (gdb_stdlog, "\": FAIL\n");
553
          return 0;
554
        }
555
 
556
      if (remote_debug)
557
        fputc_readable (c, gdb_stdlog);
558
 
559
      if (c == *p++)
560
        {
561
          if (*p == '\0')
562
            {
563
              immediate_quit--;
564
              if (remote_debug)
565
                fprintf_unfiltered (gdb_stdlog, "\": OK\n");
566
              return 1;
567
            }
568
        }
569
      else
570
        {
571
          p = string;
572
          if (c == *p)
573
            p++;
574
        }
575
    }
576
}
577
 
578
/* Wait until STRING shows up in mips_desc.  Returns 1 if successful, else 0 if
579
   timed out.  The timeout value is hard-coded to 2 seconds.  Use
580
   mips_expect_timeout if a different timeout value is needed.
581
 */
582
 
583
static int
584
mips_expect (const char *string)
585
{
586
  return mips_expect_timeout (string, remote_timeout);
587
}
588
 
589
/* Read a character from the remote, aborting on error.  Returns
590
   SERIAL_TIMEOUT on timeout (since that's what serial_readchar()
591
   returns).  FIXME: If we see the string mips_monitor_prompt from the
592
   board, then we are debugging on the main console port, and we have
593
   somehow dropped out of remote debugging mode.  In this case, we
594
   automatically go back in to remote debugging mode.  This is a hack,
595
   put in because I can't find any way for a program running on the
596
   remote board to terminate without also ending remote debugging
597
   mode.  I assume users won't have any trouble with this; for one
598
   thing, the IDT documentation generally assumes that the remote
599
   debugging port is not the console port.  This is, however, very
600
   convenient for DejaGnu when you only have one connected serial
601
   port.  */
602
 
603
static int
604
mips_readchar (int timeout)
605
{
606
  int ch;
607
  static int state = 0;
608
  int mips_monitor_prompt_len = strlen (mips_monitor_prompt);
609
 
610
  {
611
    int i;
612
 
613
    i = timeout;
614
    if (i == -1 && watchdog > 0)
615
      i = watchdog;
616
  }
617
 
618
  if (state == mips_monitor_prompt_len)
619
    timeout = 1;
620
  ch = serial_readchar (mips_desc, timeout);
621
 
622
  if (ch == SERIAL_TIMEOUT && timeout == -1)    /* Watchdog went off */
623
    {
624
      target_mourn_inferior ();
625
      error ("Watchdog has expired.  Target detached.\n");
626
    }
627
 
628
  if (ch == SERIAL_EOF)
629
    mips_error ("End of file from remote");
630
  if (ch == SERIAL_ERROR)
631
    mips_error ("Error reading from remote: %s", safe_strerror (errno));
632
  if (remote_debug > 1)
633
    {
634
      /* Don't use _filtered; we can't deal with a QUIT out of
635
         target_wait, and I think this might be called from there.  */
636
      if (ch != SERIAL_TIMEOUT)
637
        fprintf_unfiltered (gdb_stdlog, "Read '%c' %d 0x%x\n", ch, ch, ch);
638
      else
639
        fprintf_unfiltered (gdb_stdlog, "Timed out in read\n");
640
    }
641
 
642
  /* If we have seen mips_monitor_prompt and we either time out, or
643
     we see a @ (which was echoed from a packet we sent), reset the
644
     board as described above.  The first character in a packet after
645
     the SYN (which is not echoed) is always an @ unless the packet is
646
     more than 64 characters long, which ours never are.  */
647
  if ((ch == SERIAL_TIMEOUT || ch == '@')
648
      && state == mips_monitor_prompt_len
649
      && !mips_initializing
650
      && !mips_exiting)
651
    {
652
      if (remote_debug > 0)
653
        /* Don't use _filtered; we can't deal with a QUIT out of
654
           target_wait, and I think this might be called from there.  */
655
        fprintf_unfiltered (gdb_stdlog, "Reinitializing MIPS debugging mode\n");
656
 
657
      mips_need_reply = 0;
658
      mips_initialize ();
659
 
660
      state = 0;
661
 
662
      /* At this point, about the only thing we can do is abort the command
663
         in progress and get back to command level as quickly as possible. */
664
 
665
      error ("Remote board reset, debug protocol re-initialized.");
666
    }
667
 
668
  if (ch == mips_monitor_prompt[state])
669
    ++state;
670
  else
671
    state = 0;
672
 
673
  return ch;
674
}
675
 
676
/* Get a packet header, putting the data in the supplied buffer.
677
   PGARBAGE is a pointer to the number of garbage characters received
678
   so far.  CH is the last character received.  Returns 0 for success,
679
   or -1 for timeout.  */
680
 
681
static int
682
mips_receive_header (unsigned char *hdr, int *pgarbage, int ch, int timeout)
683
{
684
  int i;
685
 
686
  while (1)
687
    {
688
      /* Wait for a SYN.  mips_syn_garbage is intended to prevent
689
         sitting here indefinitely if the board sends us one garbage
690
         character per second.  ch may already have a value from the
691
         last time through the loop.  */
692
      while (ch != SYN)
693
        {
694
          ch = mips_readchar (timeout);
695
          if (ch == SERIAL_TIMEOUT)
696
            return -1;
697
          if (ch != SYN)
698
            {
699
              /* Printing the character here lets the user of gdb see
700
                 what the program is outputting, if the debugging is
701
                 being done on the console port.  Don't use _filtered:
702
                 we can't deal with a QUIT out of target_wait and
703
                 buffered target output confuses the user. */
704
              if (!mips_initializing || remote_debug > 0)
705
                {
706
                  if (isprint (ch) || isspace (ch))
707
                    {
708
                      fputc_unfiltered (ch, gdb_stdtarg);
709
                    }
710
                  else
711
                    {
712
                      fputc_readable (ch, gdb_stdtarg);
713
                    }
714
                  gdb_flush (gdb_stdtarg);
715
                }
716
 
717
              /* Only count unprintable characters. */
718
              if (! (isprint (ch) || isspace (ch)))
719
                (*pgarbage) += 1;
720
 
721
              if (mips_syn_garbage > 0
722
                  && *pgarbage > mips_syn_garbage)
723
                mips_error ("Debug protocol failure:  more than %d characters before a sync.",
724
                            mips_syn_garbage);
725
            }
726
        }
727
 
728
      /* Get the packet header following the SYN.  */
729
      for (i = 1; i < HDR_LENGTH; i++)
730
        {
731
          ch = mips_readchar (timeout);
732
          if (ch == SERIAL_TIMEOUT)
733
            return -1;
734
          /* Make sure this is a header byte.  */
735
          if (ch == SYN || !HDR_CHECK (ch))
736
            break;
737
 
738
          hdr[i] = ch;
739
        }
740
 
741
      /* If we got the complete header, we can return.  Otherwise we
742
         loop around and keep looking for SYN.  */
743
      if (i >= HDR_LENGTH)
744
        return 0;
745
    }
746
}
747
 
748
/* Get a packet header, putting the data in the supplied buffer.
749
   PGARBAGE is a pointer to the number of garbage characters received
750
   so far.  The last character read is returned in *PCH.  Returns 0
751
   for success, -1 for timeout, -2 for error.  */
752
 
753
static int
754
mips_receive_trailer (unsigned char *trlr, int *pgarbage, int *pch, int timeout)
755
{
756
  int i;
757
  int ch;
758
 
759
  for (i = 0; i < TRLR_LENGTH; i++)
760
    {
761
      ch = mips_readchar (timeout);
762
      *pch = ch;
763
      if (ch == SERIAL_TIMEOUT)
764
        return -1;
765
      if (!TRLR_CHECK (ch))
766
        return -2;
767
      trlr[i] = ch;
768
    }
769
  return 0;
770
}
771
 
772
/* Get the checksum of a packet.  HDR points to the packet header.
773
   DATA points to the packet data.  LEN is the length of DATA.  */
774
 
775
static int
776
mips_cksum (const unsigned char *hdr, const unsigned char *data, int len)
777
{
778
  const unsigned char *p;
779
  int c;
780
  int cksum;
781
 
782
  cksum = 0;
783
 
784
  /* The initial SYN is not included in the checksum.  */
785
  c = HDR_LENGTH - 1;
786
  p = hdr + 1;
787
  while (c-- != 0)
788
    cksum += *p++;
789
 
790
  c = len;
791
  p = data;
792
  while (c-- != 0)
793
    cksum += *p++;
794
 
795
  return cksum;
796
}
797
 
798
/* Send a packet containing the given ASCII string.  */
799
 
800
static void
801
mips_send_packet (const char *s, int get_ack)
802
{
803
  /* unsigned */ int len;
804
  unsigned char *packet;
805
  int cksum;
806
  int try;
807
 
808
  len = strlen (s);
809
  if (len > DATA_MAXLEN)
810
    mips_error ("MIPS protocol data packet too long: %s", s);
811
 
812
  packet = (unsigned char *) alloca (HDR_LENGTH + len + TRLR_LENGTH + 1);
813
 
814
  packet[HDR_INDX_SYN] = HDR_SET_SYN (1, len, mips_send_seq);
815
  packet[HDR_INDX_TYPE_LEN] = HDR_SET_TYPE_LEN (1, len, mips_send_seq);
816
  packet[HDR_INDX_LEN1] = HDR_SET_LEN1 (1, len, mips_send_seq);
817
  packet[HDR_INDX_SEQ] = HDR_SET_SEQ (1, len, mips_send_seq);
818
 
819
  memcpy (packet + HDR_LENGTH, s, len);
820
 
821
  cksum = mips_cksum (packet, packet + HDR_LENGTH, len);
822
  packet[HDR_LENGTH + len + TRLR_INDX_CSUM1] = TRLR_SET_CSUM1 (cksum);
823
  packet[HDR_LENGTH + len + TRLR_INDX_CSUM2] = TRLR_SET_CSUM2 (cksum);
824
  packet[HDR_LENGTH + len + TRLR_INDX_CSUM3] = TRLR_SET_CSUM3 (cksum);
825
 
826
  /* Increment the sequence number.  This will set mips_send_seq to
827
     the sequence number we expect in the acknowledgement.  */
828
  mips_send_seq = (mips_send_seq + 1) % SEQ_MODULOS;
829
 
830
  /* We can only have one outstanding data packet, so we just wait for
831
     the acknowledgement here.  Keep retransmitting the packet until
832
     we get one, or until we've tried too many times.  */
833
  for (try = 0; try < mips_send_retries; try++)
834
    {
835
      int garbage;
836
      int ch;
837
 
838
      if (remote_debug > 0)
839
        {
840
          /* Don't use _filtered; we can't deal with a QUIT out of
841
             target_wait, and I think this might be called from there.  */
842
          packet[HDR_LENGTH + len + TRLR_LENGTH] = '\0';
843
          fprintf_unfiltered (gdb_stdlog, "Writing \"%s\"\n", packet + 1);
844
        }
845
 
846
      if (serial_write (mips_desc, packet,
847
                        HDR_LENGTH + len + TRLR_LENGTH) != 0)
848
        mips_error ("write to target failed: %s", safe_strerror (errno));
849
 
850
      if (!get_ack)
851
        return;
852
 
853
      garbage = 0;
854
      ch = 0;
855
      while (1)
856
        {
857
          unsigned char hdr[HDR_LENGTH + 1];
858
          unsigned char trlr[TRLR_LENGTH + 1];
859
          int err;
860
          unsigned int seq;
861
 
862
          /* Get the packet header.  If we time out, resend the data
863
             packet.  */
864
          err = mips_receive_header (hdr, &garbage, ch, mips_retransmit_wait);
865
          if (err != 0)
866
            break;
867
 
868
          ch = 0;
869
 
870
          /* If we get a data packet, assume it is a duplicate and
871
             ignore it.  FIXME: If the acknowledgement is lost, this
872
             data packet may be the packet the remote sends after the
873
             acknowledgement.  */
874
          if (HDR_IS_DATA (hdr))
875
            {
876
              int i;
877
 
878
              /* Ignore any errors raised whilst attempting to ignore
879
                 packet. */
880
 
881
              len = HDR_GET_LEN (hdr);
882
 
883
              for (i = 0; i < len; i++)
884
                {
885
                  int rch;
886
 
887
                  rch = mips_readchar (remote_timeout);
888
                  if (rch == SYN)
889
                    {
890
                      ch = SYN;
891
                      break;
892
                    }
893
                  if (rch == SERIAL_TIMEOUT)
894
                    break;
895
                  /* ignore the character */
896
                }
897
 
898
              if (i == len)
899
                (void) mips_receive_trailer (trlr, &garbage, &ch,
900
                                             remote_timeout);
901
 
902
              /* We don't bother checking the checksum, or providing an
903
                 ACK to the packet. */
904
              continue;
905
            }
906
 
907
          /* If the length is not 0, this is a garbled packet.  */
908
          if (HDR_GET_LEN (hdr) != 0)
909
            continue;
910
 
911
          /* Get the packet trailer.  */
912
          err = mips_receive_trailer (trlr, &garbage, &ch,
913
                                      mips_retransmit_wait);
914
 
915
          /* If we timed out, resend the data packet.  */
916
          if (err == -1)
917
            break;
918
 
919
          /* If we got a bad character, reread the header.  */
920
          if (err != 0)
921
            continue;
922
 
923
          /* If the checksum does not match the trailer checksum, this
924
             is a bad packet; ignore it.  */
925
          if (mips_cksum (hdr, (unsigned char *) NULL, 0)
926
              != TRLR_GET_CKSUM (trlr))
927
            continue;
928
 
929
          if (remote_debug > 0)
930
            {
931
              hdr[HDR_LENGTH] = '\0';
932
              trlr[TRLR_LENGTH] = '\0';
933
              /* Don't use _filtered; we can't deal with a QUIT out of
934
                 target_wait, and I think this might be called from there.  */
935
              fprintf_unfiltered (gdb_stdlog, "Got ack %d \"%s%s\"\n",
936
                                  HDR_GET_SEQ (hdr), hdr + 1, trlr);
937
            }
938
 
939
          /* If this ack is for the current packet, we're done.  */
940
          seq = HDR_GET_SEQ (hdr);
941
          if (seq == mips_send_seq)
942
            return;
943
 
944
          /* If this ack is for the last packet, resend the current
945
             packet.  */
946
          if ((seq + 1) % SEQ_MODULOS == mips_send_seq)
947
            break;
948
 
949
          /* Otherwise this is a bad ack; ignore it.  Increment the
950
             garbage count to ensure that we do not stay in this loop
951
             forever.  */
952
          ++garbage;
953
        }
954
    }
955
 
956
  mips_error ("Remote did not acknowledge packet");
957
}
958
 
959
/* Receive and acknowledge a packet, returning the data in BUFF (which
960
   should be DATA_MAXLEN + 1 bytes).  The protocol documentation
961
   implies that only the sender retransmits packets, so this code just
962
   waits silently for a packet.  It returns the length of the received
963
   packet.  If THROW_ERROR is nonzero, call error() on errors.  If not,
964
   don't print an error message and return -1.  */
965
 
966
static int
967
mips_receive_packet (char *buff, int throw_error, int timeout)
968
{
969
  int ch;
970
  int garbage;
971
  int len;
972
  unsigned char ack[HDR_LENGTH + TRLR_LENGTH + 1];
973
  int cksum;
974
 
975
  ch = 0;
976
  garbage = 0;
977
  while (1)
978
    {
979
      unsigned char hdr[HDR_LENGTH];
980
      unsigned char trlr[TRLR_LENGTH];
981
      int i;
982
      int err;
983
 
984
      if (mips_receive_header (hdr, &garbage, ch, timeout) != 0)
985
        {
986
          if (throw_error)
987
            mips_error ("Timed out waiting for remote packet");
988
          else
989
            return -1;
990
        }
991
 
992
      ch = 0;
993
 
994
      /* An acknowledgement is probably a duplicate; ignore it.  */
995
      if (!HDR_IS_DATA (hdr))
996
        {
997
          len = HDR_GET_LEN (hdr);
998
          /* Check if the length is valid for an ACK, we may aswell
999
             try and read the remainder of the packet: */
1000
          if (len == 0)
1001
            {
1002
              /* Ignore the error condition, since we are going to
1003
                 ignore the packet anyway. */
1004
              (void) mips_receive_trailer (trlr, &garbage, &ch, timeout);
1005
            }
1006
          /* Don't use _filtered; we can't deal with a QUIT out of
1007
             target_wait, and I think this might be called from there.  */
1008
          if (remote_debug > 0)
1009
            fprintf_unfiltered (gdb_stdlog, "Ignoring unexpected ACK\n");
1010
          continue;
1011
        }
1012
 
1013
      len = HDR_GET_LEN (hdr);
1014
      for (i = 0; i < len; i++)
1015
        {
1016
          int rch;
1017
 
1018
          rch = mips_readchar (timeout);
1019
          if (rch == SYN)
1020
            {
1021
              ch = SYN;
1022
              break;
1023
            }
1024
          if (rch == SERIAL_TIMEOUT)
1025
            {
1026
              if (throw_error)
1027
                mips_error ("Timed out waiting for remote packet");
1028
              else
1029
                return -1;
1030
            }
1031
          buff[i] = rch;
1032
        }
1033
 
1034
      if (i < len)
1035
        {
1036
          /* Don't use _filtered; we can't deal with a QUIT out of
1037
             target_wait, and I think this might be called from there.  */
1038
          if (remote_debug > 0)
1039
            fprintf_unfiltered (gdb_stdlog,
1040
                                "Got new SYN after %d chars (wanted %d)\n",
1041
                                i, len);
1042
          continue;
1043
        }
1044
 
1045
      err = mips_receive_trailer (trlr, &garbage, &ch, timeout);
1046
      if (err == -1)
1047
        {
1048
          if (throw_error)
1049
            mips_error ("Timed out waiting for packet");
1050
          else
1051
            return -1;
1052
        }
1053
      if (err == -2)
1054
        {
1055
          /* Don't use _filtered; we can't deal with a QUIT out of
1056
             target_wait, and I think this might be called from there.  */
1057
          if (remote_debug > 0)
1058
            fprintf_unfiltered (gdb_stdlog, "Got SYN when wanted trailer\n");
1059
          continue;
1060
        }
1061
 
1062
      /* If this is the wrong sequence number, ignore it.  */
1063
      if (HDR_GET_SEQ (hdr) != mips_receive_seq)
1064
        {
1065
          /* Don't use _filtered; we can't deal with a QUIT out of
1066
             target_wait, and I think this might be called from there.  */
1067
          if (remote_debug > 0)
1068
            fprintf_unfiltered (gdb_stdlog,
1069
                                "Ignoring sequence number %d (want %d)\n",
1070
                                HDR_GET_SEQ (hdr), mips_receive_seq);
1071
          continue;
1072
        }
1073
 
1074
      if (mips_cksum (hdr, buff, len) == TRLR_GET_CKSUM (trlr))
1075
        break;
1076
 
1077
      if (remote_debug > 0)
1078
        /* Don't use _filtered; we can't deal with a QUIT out of
1079
           target_wait, and I think this might be called from there.  */
1080
        printf_unfiltered ("Bad checksum; data %d, trailer %d\n",
1081
                           mips_cksum (hdr, buff, len),
1082
                           TRLR_GET_CKSUM (trlr));
1083
 
1084
      /* The checksum failed.  Send an acknowledgement for the
1085
         previous packet to tell the remote to resend the packet.  */
1086
      ack[HDR_INDX_SYN] = HDR_SET_SYN (0, 0, mips_receive_seq);
1087
      ack[HDR_INDX_TYPE_LEN] = HDR_SET_TYPE_LEN (0, 0, mips_receive_seq);
1088
      ack[HDR_INDX_LEN1] = HDR_SET_LEN1 (0, 0, mips_receive_seq);
1089
      ack[HDR_INDX_SEQ] = HDR_SET_SEQ (0, 0, mips_receive_seq);
1090
 
1091
      cksum = mips_cksum (ack, (unsigned char *) NULL, 0);
1092
 
1093
      ack[HDR_LENGTH + TRLR_INDX_CSUM1] = TRLR_SET_CSUM1 (cksum);
1094
      ack[HDR_LENGTH + TRLR_INDX_CSUM2] = TRLR_SET_CSUM2 (cksum);
1095
      ack[HDR_LENGTH + TRLR_INDX_CSUM3] = TRLR_SET_CSUM3 (cksum);
1096
 
1097
      if (remote_debug > 0)
1098
        {
1099
          ack[HDR_LENGTH + TRLR_LENGTH] = '\0';
1100
          /* Don't use _filtered; we can't deal with a QUIT out of
1101
             target_wait, and I think this might be called from there.  */
1102
          printf_unfiltered ("Writing ack %d \"%s\"\n", mips_receive_seq,
1103
                             ack + 1);
1104
        }
1105
 
1106
      if (serial_write (mips_desc, ack, HDR_LENGTH + TRLR_LENGTH) != 0)
1107
        {
1108
          if (throw_error)
1109
            mips_error ("write to target failed: %s", safe_strerror (errno));
1110
          else
1111
            return -1;
1112
        }
1113
    }
1114
 
1115
  if (remote_debug > 0)
1116
    {
1117
      buff[len] = '\0';
1118
      /* Don't use _filtered; we can't deal with a QUIT out of
1119
         target_wait, and I think this might be called from there.  */
1120
      printf_unfiltered ("Got packet \"%s\"\n", buff);
1121
    }
1122
 
1123
  /* We got the packet.  Send an acknowledgement.  */
1124
  mips_receive_seq = (mips_receive_seq + 1) % SEQ_MODULOS;
1125
 
1126
  ack[HDR_INDX_SYN] = HDR_SET_SYN (0, 0, mips_receive_seq);
1127
  ack[HDR_INDX_TYPE_LEN] = HDR_SET_TYPE_LEN (0, 0, mips_receive_seq);
1128
  ack[HDR_INDX_LEN1] = HDR_SET_LEN1 (0, 0, mips_receive_seq);
1129
  ack[HDR_INDX_SEQ] = HDR_SET_SEQ (0, 0, mips_receive_seq);
1130
 
1131
  cksum = mips_cksum (ack, (unsigned char *) NULL, 0);
1132
 
1133
  ack[HDR_LENGTH + TRLR_INDX_CSUM1] = TRLR_SET_CSUM1 (cksum);
1134
  ack[HDR_LENGTH + TRLR_INDX_CSUM2] = TRLR_SET_CSUM2 (cksum);
1135
  ack[HDR_LENGTH + TRLR_INDX_CSUM3] = TRLR_SET_CSUM3 (cksum);
1136
 
1137
  if (remote_debug > 0)
1138
    {
1139
      ack[HDR_LENGTH + TRLR_LENGTH] = '\0';
1140
      /* Don't use _filtered; we can't deal with a QUIT out of
1141
         target_wait, and I think this might be called from there.  */
1142
      printf_unfiltered ("Writing ack %d \"%s\"\n", mips_receive_seq,
1143
                         ack + 1);
1144
    }
1145
 
1146
  if (serial_write (mips_desc, ack, HDR_LENGTH + TRLR_LENGTH) != 0)
1147
    {
1148
      if (throw_error)
1149
        mips_error ("write to target failed: %s", safe_strerror (errno));
1150
      else
1151
        return -1;
1152
    }
1153
 
1154
  return len;
1155
}
1156
 
1157
/* Optionally send a request to the remote system and optionally wait
1158
   for the reply.  This implements the remote debugging protocol,
1159
   which is built on top of the packet protocol defined above.  Each
1160
   request has an ADDR argument and a DATA argument.  The following
1161
   requests are defined:
1162
 
1163
   \0   don't send a request; just wait for a reply
1164
   i    read word from instruction space at ADDR
1165
   d    read word from data space at ADDR
1166
   I    write DATA to instruction space at ADDR
1167
   D    write DATA to data space at ADDR
1168
   r    read register number ADDR
1169
   R    set register number ADDR to value DATA
1170
   c    continue execution (if ADDR != 1, set pc to ADDR)
1171
   s    single step (if ADDR != 1, set pc to ADDR)
1172
 
1173
   The read requests return the value requested.  The write requests
1174
   return the previous value in the changed location.  The execution
1175
   requests return a UNIX wait value (the approximate signal which
1176
   caused execution to stop is in the upper eight bits).
1177
 
1178
   If PERR is not NULL, this function waits for a reply.  If an error
1179
   occurs, it sets *PERR to 1 and sets errno according to what the
1180
   target board reports.  */
1181
 
1182
static ULONGEST
1183
mips_request (int cmd,
1184
              ULONGEST addr,
1185
              ULONGEST data,
1186
              int *perr,
1187
              int timeout,
1188
              char *buff)
1189
{
1190
  int addr_size = gdbarch_addr_bit (target_gdbarch) / 8;
1191
  char myBuff[DATA_MAXLEN + 1];
1192
  int len;
1193
  int rpid;
1194
  char rcmd;
1195
  int rerrflg;
1196
  unsigned long rresponse;
1197
 
1198
  if (buff == (char *) NULL)
1199
    buff = myBuff;
1200
 
1201
  if (cmd != '\0')
1202
    {
1203
      if (mips_need_reply)
1204
        internal_error (__FILE__, __LINE__,
1205
                        _("mips_request: Trying to send command before reply"));
1206
      sprintf (buff, "0x0 %c 0x%s 0x%s", cmd,
1207
               phex_nz (addr, addr_size), phex_nz (data, addr_size));
1208
      mips_send_packet (buff, 1);
1209
      mips_need_reply = 1;
1210
    }
1211
 
1212
  if (perr == (int *) NULL)
1213
    return 0;
1214
 
1215
  if (!mips_need_reply)
1216
    internal_error (__FILE__, __LINE__,
1217
                    _("mips_request: Trying to get reply before command"));
1218
 
1219
  mips_need_reply = 0;
1220
 
1221
  len = mips_receive_packet (buff, 1, timeout);
1222
  buff[len] = '\0';
1223
 
1224
  if (sscanf (buff, "0x%x %c 0x%x 0x%lx",
1225
              &rpid, &rcmd, &rerrflg, &rresponse) != 4
1226
      || (cmd != '\0' && rcmd != cmd))
1227
    mips_error ("Bad response from remote board");
1228
 
1229
  if (rerrflg != 0)
1230
    {
1231
      *perr = 1;
1232
 
1233
      /* FIXME: This will returns MIPS errno numbers, which may or may
1234
         not be the same as errno values used on other systems.  If
1235
         they stick to common errno values, they will be the same, but
1236
         if they don't, they must be translated.  */
1237
      errno = rresponse;
1238
 
1239
      return 0;
1240
    }
1241
 
1242
  *perr = 0;
1243
  return rresponse;
1244
}
1245
 
1246
static void
1247
mips_initialize_cleanups (void *arg)
1248
{
1249
  mips_initializing = 0;
1250
}
1251
 
1252
static void
1253
mips_exit_cleanups (void *arg)
1254
{
1255
  mips_exiting = 0;
1256
}
1257
 
1258
static void
1259
mips_send_command (const char *cmd, int prompt)
1260
{
1261
  serial_write (mips_desc, cmd, strlen (cmd));
1262
  mips_expect (cmd);
1263
  mips_expect ("\n");
1264
  if (prompt)
1265
    mips_expect (mips_monitor_prompt);
1266
}
1267
 
1268
/* Enter remote (dbx) debug mode: */
1269
static void
1270
mips_enter_debug (void)
1271
{
1272
  /* Reset the sequence numbers, ready for the new debug sequence: */
1273
  mips_send_seq = 0;
1274
  mips_receive_seq = 0;
1275
 
1276
  if (mips_monitor != MON_IDT)
1277
    mips_send_command ("debug\r", 0);
1278
  else                          /* assume IDT monitor by default */
1279
    mips_send_command ("db tty0\r", 0);
1280
 
1281
  sleep (1);
1282
  serial_write (mips_desc, "\r", sizeof "\r" - 1);
1283
 
1284
  /* We don't need to absorb any spurious characters here, since the
1285
     mips_receive_header will eat up a reasonable number of characters
1286
     whilst looking for the SYN, however this avoids the "garbage"
1287
     being displayed to the user. */
1288
  if (mips_monitor != MON_IDT)
1289
    mips_expect ("\r");
1290
 
1291
  {
1292
    char buff[DATA_MAXLEN + 1];
1293
    if (mips_receive_packet (buff, 1, 3) < 0)
1294
      mips_error ("Failed to initialize (didn't receive packet).");
1295
  }
1296
}
1297
 
1298
/* Exit remote (dbx) debug mode, returning to the monitor prompt: */
1299
static int
1300
mips_exit_debug (void)
1301
{
1302
  int err;
1303
  struct cleanup *old_cleanups = make_cleanup (mips_exit_cleanups, NULL);
1304
 
1305
  mips_exiting = 1;
1306
 
1307
  if (mips_monitor != MON_IDT)
1308
    {
1309
      /* The DDB (NEC) and MiniRISC (LSI) versions of PMON exit immediately,
1310
         so we do not get a reply to this command: */
1311
      mips_request ('x', 0, 0, NULL, mips_receive_wait, NULL);
1312
      mips_need_reply = 0;
1313
      if (!mips_expect (" break!"))
1314
        return -1;
1315
    }
1316
  else
1317
    mips_request ('x', 0, 0, &err, mips_receive_wait, NULL);
1318
 
1319
  if (!mips_expect (mips_monitor_prompt))
1320
    return -1;
1321
 
1322
  do_cleanups (old_cleanups);
1323
 
1324
  return 0;
1325
}
1326
 
1327
/* Initialize a new connection to the MIPS board, and make sure we are
1328
   really connected.  */
1329
 
1330
static void
1331
mips_initialize (void)
1332
{
1333
  int err;
1334
  struct cleanup *old_cleanups = make_cleanup (mips_initialize_cleanups, NULL);
1335
  int j;
1336
 
1337
  /* What is this code doing here?  I don't see any way it can happen, and
1338
     it might mean mips_initializing didn't get cleared properly.
1339
     So I'll make it a warning.  */
1340
 
1341
  if (mips_initializing)
1342
    {
1343
      warning ("internal error: mips_initialize called twice");
1344
      return;
1345
    }
1346
 
1347
  mips_wait_flag = 0;
1348
  mips_initializing = 1;
1349
 
1350
  /* At this point, the packit protocol isn't responding.  We'll try getting
1351
     into the monitor, and restarting the protocol.  */
1352
 
1353
  /* Force the system into the monitor.  After this we *should* be at
1354
     the mips_monitor_prompt.  */
1355
  if (mips_monitor != MON_IDT)
1356
    j = 0;                       /* start by checking if we are already at the prompt */
1357
  else
1358
    j = 1;                      /* start by sending a break */
1359
  for (; j <= 4; j++)
1360
    {
1361
      switch (j)
1362
        {
1363
        case 0:          /* First, try sending a CR */
1364
          serial_flush_input (mips_desc);
1365
          serial_write (mips_desc, "\r", 1);
1366
          break;
1367
        case 1:         /* First, try sending a break */
1368
          serial_send_break (mips_desc);
1369
          break;
1370
        case 2:         /* Then, try a ^C */
1371
          serial_write (mips_desc, "\003", 1);
1372
          break;
1373
        case 3:         /* Then, try escaping from download */
1374
          {
1375
            if (mips_monitor != MON_IDT)
1376
              {
1377
                char tbuff[7];
1378
 
1379
                /* We shouldn't need to send multiple termination
1380
                   sequences, since the target performs line (or
1381
                   block) reads, and then processes those
1382
                   packets. In-case we were downloading a large packet
1383
                   we flush the output buffer before inserting a
1384
                   termination sequence. */
1385
                serial_flush_output (mips_desc);
1386
                sprintf (tbuff, "\r/E/E\r");
1387
                serial_write (mips_desc, tbuff, 6);
1388
              }
1389
            else
1390
              {
1391
                char srec[10];
1392
                int i;
1393
 
1394
                /* We are possibly in binary download mode, having
1395
                   aborted in the middle of an S-record.  ^C won't
1396
                   work because of binary mode.  The only reliable way
1397
                   out is to send enough termination packets (8 bytes)
1398
                   to fill up and then overflow the largest size
1399
                   S-record (255 bytes in this case).  This amounts to
1400
                   256/8 + 1 packets.
1401
                 */
1402
 
1403
                mips_make_srec (srec, '7', 0, NULL, 0);
1404
 
1405
                for (i = 1; i <= 33; i++)
1406
                  {
1407
                    serial_write (mips_desc, srec, 8);
1408
 
1409
                    if (serial_readchar (mips_desc, 0) >= 0)
1410
                      break;    /* Break immediatly if we get something from
1411
                                   the board. */
1412
                  }
1413
              }
1414
          }
1415
          break;
1416
        case 4:
1417
          mips_error ("Failed to initialize.");
1418
        }
1419
 
1420
      if (mips_expect (mips_monitor_prompt))
1421
        break;
1422
    }
1423
 
1424
  if (mips_monitor != MON_IDT)
1425
    {
1426
      /* Sometimes PMON ignores the first few characters in the first
1427
         command sent after a load.  Sending a blank command gets
1428
         around that.  */
1429
      mips_send_command ("\r", -1);
1430
 
1431
      /* Ensure the correct target state: */
1432
      if (mips_monitor != MON_LSI)
1433
        mips_send_command ("set regsize 64\r", -1);
1434
      mips_send_command ("set hostport tty0\r", -1);
1435
      mips_send_command ("set brkcmd \"\"\r", -1);
1436
      /* Delete all the current breakpoints: */
1437
      mips_send_command ("db *\r", -1);
1438
      /* NOTE: PMON does not have breakpoint support through the
1439
         "debug" mode, only at the monitor command-line. */
1440
    }
1441
 
1442
  mips_enter_debug ();
1443
 
1444
  /* Clear all breakpoints: */
1445
  if ((mips_monitor == MON_IDT
1446
       && mips_clear_breakpoint (-1, 0, BREAK_UNUSED) == 0)
1447
      || mips_monitor == MON_LSI)
1448
    monitor_supports_breakpoints = 1;
1449
  else
1450
    monitor_supports_breakpoints = 0;
1451
 
1452
  do_cleanups (old_cleanups);
1453
 
1454
  /* If this doesn't call error, we have connected; we don't care if
1455
     the request itself succeeds or fails.  */
1456
 
1457
  mips_request ('r', 0, 0, &err, mips_receive_wait, NULL);
1458
}
1459
 
1460
/* Open a connection to the remote board.  */
1461
static void
1462
common_open (struct target_ops *ops, char *name, int from_tty,
1463
             enum mips_monitor_type new_monitor,
1464
             const char *new_monitor_prompt)
1465
{
1466
  char *ptype;
1467
  char *serial_port_name;
1468
  char *remote_name = 0;
1469
  char *local_name = 0;
1470
  char **argv;
1471
 
1472
  if (name == 0)
1473
    error (
1474
            "To open a MIPS remote debugging connection, you need to specify what serial\n\
1475
device is attached to the target board (e.g., /dev/ttya).\n"
1476
            "If you want to use TFTP to download to the board, specify the name of a\n"
1477
            "temporary file to be used by GDB for downloads as the second argument.\n"
1478
            "This filename must be in the form host:filename, where host is the name\n"
1479
            "of the host running the TFTP server, and the file must be readable by the\n"
1480
            "world.  If the local name of the temporary file differs from the name as\n"
1481
            "seen from the board via TFTP, specify that name as the third parameter.\n");
1482
 
1483
  /* Parse the serial port name, the optional TFTP name, and the
1484
     optional local TFTP name.  */
1485
  argv = gdb_buildargv (name);
1486
  make_cleanup_freeargv (argv);
1487
 
1488
  serial_port_name = xstrdup (argv[0]);
1489
  if (argv[1])                  /* remote TFTP name specified? */
1490
    {
1491
      remote_name = argv[1];
1492
      if (argv[2])              /* local TFTP filename specified? */
1493
        local_name = argv[2];
1494
    }
1495
 
1496
  target_preopen (from_tty);
1497
 
1498
  if (mips_is_open)
1499
    unpush_target (current_ops);
1500
 
1501
  /* Open and initialize the serial port.  */
1502
  mips_desc = serial_open (serial_port_name);
1503
  if (mips_desc == NULL)
1504
    perror_with_name (serial_port_name);
1505
 
1506
  if (baud_rate != -1)
1507
    {
1508
      if (serial_setbaudrate (mips_desc, baud_rate))
1509
        {
1510
          serial_close (mips_desc);
1511
          perror_with_name (serial_port_name);
1512
        }
1513
    }
1514
 
1515
  serial_raw (mips_desc);
1516
 
1517
  /* Open and initialize the optional download port.  If it is in the form
1518
     hostname#portnumber, it's a UDP socket.  If it is in the form
1519
     hostname:filename, assume it's the TFTP filename that must be
1520
     passed to the DDB board to tell it where to get the load file.  */
1521
  if (remote_name)
1522
    {
1523
      if (strchr (remote_name, '#'))
1524
        {
1525
          udp_desc = serial_open (remote_name);
1526
          if (!udp_desc)
1527
            perror_with_name ("Unable to open UDP port");
1528
          udp_in_use = 1;
1529
        }
1530
      else
1531
        {
1532
          /* Save the remote and local names of the TFTP temp file.  If
1533
             the user didn't specify a local name, assume it's the same
1534
             as the part of the remote name after the "host:".  */
1535
          if (tftp_name)
1536
            xfree (tftp_name);
1537
          if (tftp_localname)
1538
            xfree (tftp_localname);
1539
          if (local_name == NULL)
1540
            if ((local_name = strchr (remote_name, ':')) != NULL)
1541
              local_name++;     /* skip over the colon */
1542
          if (local_name == NULL)
1543
            local_name = remote_name;   /* local name same as remote name */
1544
          tftp_name = xstrdup (remote_name);
1545
          tftp_localname = xstrdup (local_name);
1546
          tftp_in_use = 1;
1547
        }
1548
    }
1549
 
1550
  current_ops = ops;
1551
  mips_is_open = 1;
1552
 
1553
  /* Reset the expected monitor prompt if it's never been set before.  */
1554
  if (mips_monitor_prompt == NULL)
1555
    mips_monitor_prompt = xstrdup (new_monitor_prompt);
1556
  mips_monitor = new_monitor;
1557
 
1558
  mips_initialize ();
1559
 
1560
  if (from_tty)
1561
    printf_unfiltered ("Remote MIPS debugging using %s\n", serial_port_name);
1562
 
1563
  /* Switch to using remote target now.  */
1564
  push_target (ops);
1565
 
1566
  /* FIXME: Should we call start_remote here?  */
1567
 
1568
  /* Try to figure out the processor model if possible.  */
1569
  deprecated_mips_set_processor_regs_hack ();
1570
 
1571
  /* This is really the job of start_remote however, that makes an
1572
     assumption that the target is about to print out a status message
1573
     of some sort.  That doesn't happen here (in fact, it may not be
1574
     possible to get the monitor to send the appropriate packet).  */
1575
 
1576
  reinit_frame_cache ();
1577
  registers_changed ();
1578
  stop_pc = regcache_read_pc (get_current_regcache ());
1579
  print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
1580
  xfree (serial_port_name);
1581
}
1582
 
1583
static void
1584
mips_open (char *name, int from_tty)
1585
{
1586
  const char *monitor_prompt = NULL;
1587
  if (gdbarch_bfd_arch_info (target_gdbarch) != NULL
1588
      && gdbarch_bfd_arch_info (target_gdbarch)->arch == bfd_arch_mips)
1589
    {
1590
    switch (gdbarch_bfd_arch_info (target_gdbarch)->mach)
1591
      {
1592
      case bfd_mach_mips4100:
1593
      case bfd_mach_mips4300:
1594
      case bfd_mach_mips4600:
1595
      case bfd_mach_mips4650:
1596
      case bfd_mach_mips5000:
1597
        monitor_prompt = "<RISQ> ";
1598
        break;
1599
      }
1600
    }
1601
  if (monitor_prompt == NULL)
1602
    monitor_prompt = "<IDT>";
1603
  common_open (&mips_ops, name, from_tty, MON_IDT, monitor_prompt);
1604
}
1605
 
1606
static void
1607
pmon_open (char *name, int from_tty)
1608
{
1609
  common_open (&pmon_ops, name, from_tty, MON_PMON, "PMON> ");
1610
}
1611
 
1612
static void
1613
ddb_open (char *name, int from_tty)
1614
{
1615
  common_open (&ddb_ops, name, from_tty, MON_DDB, "NEC010>");
1616
}
1617
 
1618
static void
1619
lsi_open (char *name, int from_tty)
1620
{
1621
  int i;
1622
 
1623
  /* Clear the LSI breakpoint table.  */
1624
  for (i = 0; i < MAX_LSI_BREAKPOINTS; i++)
1625
    lsi_breakpoints[i].type = BREAK_UNUSED;
1626
 
1627
  common_open (&lsi_ops, name, from_tty, MON_LSI, "PMON> ");
1628
}
1629
 
1630
/* Close a connection to the remote board.  */
1631
 
1632
static void
1633
mips_close (int quitting)
1634
{
1635
  if (mips_is_open)
1636
    {
1637
      /* Get the board out of remote debugging mode.  */
1638
      (void) mips_exit_debug ();
1639
 
1640
      close_ports ();
1641
    }
1642
}
1643
 
1644
/* Detach from the remote board.  */
1645
 
1646
static void
1647
mips_detach (struct target_ops *ops, char *args, int from_tty)
1648
{
1649
  if (args)
1650
    error ("Argument given to \"detach\" when remotely debugging.");
1651
 
1652
  pop_target ();
1653
 
1654
  mips_close (1);
1655
 
1656
  if (from_tty)
1657
    printf_unfiltered ("Ending remote MIPS debugging.\n");
1658
}
1659
 
1660
/* Tell the target board to resume.  This does not wait for a reply
1661
   from the board, except in the case of single-stepping on LSI boards,
1662
   where PMON does return a reply.  */
1663
 
1664
static void
1665
mips_resume (struct target_ops *ops,
1666
             ptid_t ptid, int step, enum target_signal siggnal)
1667
{
1668
  int err;
1669
 
1670
  /* LSI PMON requires returns a reply packet "0x1 s 0x0 0x57f" after
1671
     a single step, so we wait for that.  */
1672
  mips_request (step ? 's' : 'c', 1, siggnal,
1673
                mips_monitor == MON_LSI && step ? &err : (int *) NULL,
1674
                mips_receive_wait, NULL);
1675
}
1676
 
1677
/* Return the signal corresponding to SIG, where SIG is the number which
1678
   the MIPS protocol uses for the signal.  */
1679
static enum target_signal
1680
mips_signal_from_protocol (int sig)
1681
{
1682
  /* We allow a few more signals than the IDT board actually returns, on
1683
     the theory that there is at least *some* hope that perhaps the numbering
1684
     for these signals is widely agreed upon.  */
1685
  if (sig <= 0
1686
      || sig > 31)
1687
    return TARGET_SIGNAL_UNKNOWN;
1688
 
1689
  /* Don't want to use target_signal_from_host because we are converting
1690
     from MIPS signal numbers, not host ones.  Our internal numbers
1691
     match the MIPS numbers for the signals the board can return, which
1692
     are: SIGINT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, SIGTRAP.  */
1693
  return (enum target_signal) sig;
1694
}
1695
 
1696
/* Wait until the remote stops, and return a wait status.  */
1697
 
1698
static ptid_t
1699
mips_wait (struct target_ops *ops,
1700
           ptid_t ptid, struct target_waitstatus *status, int options)
1701
{
1702
  int rstatus;
1703
  int err;
1704
  char buff[DATA_MAXLEN];
1705
  int rpc, rfp, rsp;
1706
  char flags[20];
1707
  int nfields;
1708
  int i;
1709
 
1710
  interrupt_count = 0;
1711
  hit_watchpoint = 0;
1712
 
1713
  /* If we have not sent a single step or continue command, then the
1714
     board is waiting for us to do something.  Return a status
1715
     indicating that it is stopped.  */
1716
  if (!mips_need_reply)
1717
    {
1718
      status->kind = TARGET_WAITKIND_STOPPED;
1719
      status->value.sig = TARGET_SIGNAL_TRAP;
1720
      return inferior_ptid;
1721
    }
1722
 
1723
  /* No timeout; we sit here as long as the program continues to execute.  */
1724
  mips_wait_flag = 1;
1725
  rstatus = mips_request ('\000', 0, 0, &err, -1, buff);
1726
  mips_wait_flag = 0;
1727
  if (err)
1728
    mips_error ("Remote failure: %s", safe_strerror (errno));
1729
 
1730
  /* On returning from a continue, the PMON monitor seems to start
1731
     echoing back the messages we send prior to sending back the
1732
     ACK. The code can cope with this, but to try and avoid the
1733
     unnecessary serial traffic, and "spurious" characters displayed
1734
     to the user, we cheat and reset the debug protocol. The problems
1735
     seems to be caused by a check on the number of arguments, and the
1736
     command length, within the monitor causing it to echo the command
1737
     as a bad packet. */
1738
  if (mips_monitor == MON_PMON)
1739
    {
1740
      mips_exit_debug ();
1741
      mips_enter_debug ();
1742
    }
1743
 
1744
  /* See if we got back extended status.  If so, pick out the pc, fp, sp, etc... */
1745
 
1746
  nfields = sscanf (buff, "0x%*x %*c 0x%*x 0x%*x 0x%x 0x%x 0x%x 0x%*x %s",
1747
                    &rpc, &rfp, &rsp, flags);
1748
  if (nfields >= 3)
1749
    {
1750
      struct regcache *regcache = get_current_regcache ();
1751
      struct gdbarch *gdbarch = get_regcache_arch (regcache);
1752
      enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1753
      char buf[MAX_REGISTER_SIZE];
1754
 
1755
      store_unsigned_integer
1756
        (buf, register_size (gdbarch, gdbarch_pc_regnum (gdbarch)),
1757
         byte_order, rpc);
1758
      regcache_raw_supply (regcache, gdbarch_pc_regnum (gdbarch), buf);
1759
 
1760
      store_unsigned_integer
1761
        (buf, register_size (gdbarch, gdbarch_pc_regnum (gdbarch)),
1762
         byte_order, rfp);
1763
      regcache_raw_supply (regcache, 30, buf);  /* This register they are avoiding and so it is unnamed */
1764
 
1765
      store_unsigned_integer
1766
        (buf, register_size (gdbarch, gdbarch_sp_regnum (gdbarch)),
1767
         byte_order, rsp);
1768
      regcache_raw_supply (regcache, gdbarch_sp_regnum (gdbarch), buf);
1769
 
1770
      store_unsigned_integer
1771
        (buf, register_size (gdbarch, gdbarch_deprecated_fp_regnum (gdbarch)),
1772
         byte_order, 0);
1773
      regcache_raw_supply (regcache,
1774
                           gdbarch_deprecated_fp_regnum (gdbarch), buf);
1775
 
1776
      if (nfields == 9)
1777
        {
1778
          int i;
1779
 
1780
          for (i = 0; i <= 2; i++)
1781
            if (flags[i] == 'r' || flags[i] == 'w')
1782
              hit_watchpoint = 1;
1783
            else if (flags[i] == '\000')
1784
              break;
1785
        }
1786
    }
1787
 
1788
  if (strcmp (target_shortname, "lsi") == 0)
1789
    {
1790
#if 0
1791
      /* If this is an LSI PMON target, see if we just hit a hardrdware watchpoint.
1792
         Right now, PMON doesn't give us enough information to determine which
1793
         breakpoint we hit.  So we have to look up the PC in our own table
1794
         of breakpoints, and if found, assume it's just a normal instruction
1795
         fetch breakpoint, not a data watchpoint.  FIXME when PMON
1796
         provides some way to tell us what type of breakpoint it is.  */
1797
      int i;
1798
      CORE_ADDR pc = regcache_read_pc (get_current_regcache ());
1799
 
1800
      hit_watchpoint = 1;
1801
      for (i = 0; i < MAX_LSI_BREAKPOINTS; i++)
1802
        {
1803
          if (lsi_breakpoints[i].addr == pc
1804
              && lsi_breakpoints[i].type == BREAK_FETCH)
1805
            {
1806
              hit_watchpoint = 0;
1807
              break;
1808
            }
1809
        }
1810
#else
1811
      /* If a data breakpoint was hit, PMON returns the following packet:
1812
         0x1 c 0x0 0x57f 0x1
1813
         The return packet from an ordinary breakpoint doesn't have the
1814
         extra 0x01 field tacked onto the end.  */
1815
      if (nfields == 1 && rpc == 1)
1816
        hit_watchpoint = 1;
1817
#endif
1818
    }
1819
 
1820
  /* NOTE: The following (sig) numbers are defined by PMON:
1821
     SPP_SIGTRAP     5       breakpoint
1822
     SPP_SIGINT      2
1823
     SPP_SIGSEGV     11
1824
     SPP_SIGBUS      10
1825
     SPP_SIGILL      4
1826
     SPP_SIGFPE      8
1827
     SPP_SIGTERM     15 */
1828
 
1829
  /* Translate a MIPS waitstatus.  We use constants here rather than WTERMSIG
1830
     and so on, because the constants we want here are determined by the
1831
     MIPS protocol and have nothing to do with what host we are running on.  */
1832
  if ((rstatus & 0xff) == 0)
1833
    {
1834
      status->kind = TARGET_WAITKIND_EXITED;
1835
      status->value.integer = (((rstatus) >> 8) & 0xff);
1836
    }
1837
  else if ((rstatus & 0xff) == 0x7f)
1838
    {
1839
      status->kind = TARGET_WAITKIND_STOPPED;
1840
      status->value.sig = mips_signal_from_protocol (((rstatus) >> 8) & 0xff);
1841
 
1842
      /* If the stop PC is in the _exit function, assume
1843
         we hit the 'break 0x3ff' instruction in _exit, so this
1844
         is not a normal breakpoint.  */
1845
      if (strcmp (target_shortname, "lsi") == 0)
1846
        {
1847
          char *func_name;
1848
          CORE_ADDR func_start;
1849
          CORE_ADDR pc = regcache_read_pc (get_current_regcache ());
1850
 
1851
          find_pc_partial_function (pc, &func_name, &func_start, NULL);
1852
          if (func_name != NULL && strcmp (func_name, "_exit") == 0
1853
              && func_start == pc)
1854
            status->kind = TARGET_WAITKIND_EXITED;
1855
        }
1856
    }
1857
  else
1858
    {
1859
      status->kind = TARGET_WAITKIND_SIGNALLED;
1860
      status->value.sig = mips_signal_from_protocol (rstatus & 0x7f);
1861
    }
1862
 
1863
  return inferior_ptid;
1864
}
1865
 
1866
/* We have to map between the register numbers used by gdb and the
1867
   register numbers used by the debugging protocol.  */
1868
 
1869
#define REGNO_OFFSET 96
1870
 
1871
static int
1872
mips_map_regno (struct gdbarch *gdbarch, int regno)
1873
{
1874
  if (regno < 32)
1875
    return regno;
1876
  if (regno >= mips_regnum (gdbarch)->fp0
1877
      && regno < mips_regnum (gdbarch)->fp0 + 32)
1878
    return regno - mips_regnum (gdbarch)->fp0 + 32;
1879
  else if (regno == mips_regnum (gdbarch)->pc)
1880
    return REGNO_OFFSET + 0;
1881
  else if (regno == mips_regnum (gdbarch)->cause)
1882
    return REGNO_OFFSET + 1;
1883
  else if (regno == mips_regnum (gdbarch)->hi)
1884
    return REGNO_OFFSET + 2;
1885
  else if (regno == mips_regnum (gdbarch)->lo)
1886
    return REGNO_OFFSET + 3;
1887
  else if (regno == mips_regnum (gdbarch)->fp_control_status)
1888
    return REGNO_OFFSET + 4;
1889
  else if (regno == mips_regnum (gdbarch)->fp_implementation_revision)
1890
    return REGNO_OFFSET + 5;
1891
  else
1892
    /* FIXME: Is there a way to get the status register?  */
1893
    return 0;
1894
}
1895
 
1896
/* Fetch the remote registers.  */
1897
 
1898
static void
1899
mips_fetch_registers (struct target_ops *ops,
1900
                      struct regcache *regcache, int regno)
1901
{
1902
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
1903
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1904
  unsigned LONGEST val;
1905
  int err;
1906
 
1907
  if (regno == -1)
1908
    {
1909
      for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
1910
        mips_fetch_registers (ops, regcache, regno);
1911
      return;
1912
    }
1913
 
1914
  if (regno == gdbarch_deprecated_fp_regnum (gdbarch)
1915
      || regno == MIPS_ZERO_REGNUM)
1916
    /* gdbarch_deprecated_fp_regnum on the mips is a hack which is just
1917
       supposed to read zero (see also mips-nat.c).  */
1918
    val = 0;
1919
  else
1920
    {
1921
      /* If PMON doesn't support this register, don't waste serial
1922
         bandwidth trying to read it.  */
1923
      int pmon_reg = mips_map_regno (gdbarch, regno);
1924
      if (regno != 0 && pmon_reg == 0)
1925
        val = 0;
1926
      else
1927
        {
1928
          /* Unfortunately the PMON version in the Vr4300 board has been
1929
             compiled without the 64bit register access commands. This
1930
             means we cannot get hold of the full register width. */
1931
          if (mips_monitor == MON_DDB)
1932
            val = (unsigned) mips_request ('t', pmon_reg, 0,
1933
                                           &err, mips_receive_wait, NULL);
1934
          else
1935
            val = mips_request ('r', pmon_reg, 0,
1936
                                &err, mips_receive_wait, NULL);
1937
          if (err)
1938
            mips_error ("Can't read register %d: %s", regno,
1939
                        safe_strerror (errno));
1940
        }
1941
    }
1942
 
1943
  {
1944
    char buf[MAX_REGISTER_SIZE];
1945
 
1946
    /* We got the number the register holds, but gdb expects to see a
1947
       value in the target byte ordering.  */
1948
    store_unsigned_integer (buf, register_size (gdbarch, regno),
1949
                            byte_order, val);
1950
    regcache_raw_supply (regcache, regno, buf);
1951
  }
1952
}
1953
 
1954
/* Prepare to store registers.  The MIPS protocol can store individual
1955
   registers, so this function doesn't have to do anything.  */
1956
 
1957
static void
1958
mips_prepare_to_store (struct regcache *regcache)
1959
{
1960
}
1961
 
1962
/* Store remote register(s).  */
1963
 
1964
static void
1965
mips_store_registers (struct target_ops *ops,
1966
                      struct regcache *regcache, int regno)
1967
{
1968
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
1969
  ULONGEST val;
1970
  int err;
1971
 
1972
  if (regno == -1)
1973
    {
1974
      for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
1975
        mips_store_registers (ops, regcache, regno);
1976
      return;
1977
    }
1978
 
1979
  regcache_cooked_read_unsigned (regcache, regno, &val);
1980
  mips_request ('R', mips_map_regno (gdbarch, regno), val,
1981
                &err, mips_receive_wait, NULL);
1982
  if (err)
1983
    mips_error ("Can't write register %d: %s", regno, safe_strerror (errno));
1984
}
1985
 
1986
/* Fetch a word from the target board.  */
1987
 
1988
static unsigned int
1989
mips_fetch_word (CORE_ADDR addr)
1990
{
1991
  unsigned int val;
1992
  int err;
1993
 
1994
  val = mips_request ('d', addr, 0, &err, mips_receive_wait, NULL);
1995
  if (err)
1996
    {
1997
      /* Data space failed; try instruction space.  */
1998
      val = mips_request ('i', addr, 0, &err,
1999
                          mips_receive_wait, NULL);
2000
      if (err)
2001
        mips_error ("Can't read address %s: %s",
2002
                    paddress (target_gdbarch, addr), safe_strerror (errno));
2003
    }
2004
  return val;
2005
}
2006
 
2007
/* Store a word to the target board.  Returns errno code or zero for
2008
   success.  If OLD_CONTENTS is non-NULL, put the old contents of that
2009
   memory location there.  */
2010
 
2011
/* FIXME! make sure only 32-bit quantities get stored! */
2012
static int
2013
mips_store_word (CORE_ADDR addr, unsigned int val, int *old_contents)
2014
{
2015
  int err;
2016
  unsigned int oldcontents;
2017
 
2018
  oldcontents = mips_request ('D', addr, val, &err,
2019
                              mips_receive_wait, NULL);
2020
  if (err)
2021
    {
2022
      /* Data space failed; try instruction space.  */
2023
      oldcontents = mips_request ('I', addr, val, &err,
2024
                                  mips_receive_wait, NULL);
2025
      if (err)
2026
        return errno;
2027
    }
2028
  if (old_contents != NULL)
2029
    *old_contents = oldcontents;
2030
  return 0;
2031
}
2032
 
2033
/* Read or write LEN bytes from inferior memory at MEMADDR,
2034
   transferring to or from debugger address MYADDR.  Write to inferior
2035
   if SHOULD_WRITE is nonzero.  Returns length of data written or
2036
   read; 0 for error.  Note that protocol gives us the correct value
2037
   for a longword, since it transfers values in ASCII.  We want the
2038
   byte values, so we have to swap the longword values.  */
2039
 
2040
static int mask_address_p = 1;
2041
 
2042
static int
2043
mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
2044
                  struct mem_attrib *attrib, struct target_ops *target)
2045
{
2046
  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
2047
  int i;
2048
  CORE_ADDR addr;
2049
  int count;
2050
  char *buffer;
2051
  int status;
2052
 
2053
  /* PMON targets do not cope well with 64 bit addresses.  Mask the
2054
     value down to 32 bits. */
2055
  if (mask_address_p)
2056
    memaddr &= (CORE_ADDR) 0xffffffff;
2057
 
2058
  /* Round starting address down to longword boundary.  */
2059
  addr = memaddr & ~3;
2060
  /* Round ending address up; get number of longwords that makes.  */
2061
  count = (((memaddr + len) - addr) + 3) / 4;
2062
  /* Allocate buffer of that many longwords.  */
2063
  buffer = alloca (count * 4);
2064
 
2065
  if (write)
2066
    {
2067
      /* Fill start and end extra bytes of buffer with existing data.  */
2068
      if (addr != memaddr || len < 4)
2069
        {
2070
          /* Need part of initial word -- fetch it.  */
2071
          store_unsigned_integer (&buffer[0], 4, byte_order,
2072
                                  mips_fetch_word (addr));
2073
        }
2074
 
2075
      if (count > 1)
2076
        {
2077
          /* Need part of last word -- fetch it.  FIXME: we do this even
2078
             if we don't need it.  */
2079
          store_unsigned_integer (&buffer[(count - 1) * 4], 4, byte_order,
2080
                                  mips_fetch_word (addr + (count - 1) * 4));
2081
        }
2082
 
2083
      /* Copy data to be written over corresponding part of buffer */
2084
 
2085
      memcpy ((char *) buffer + (memaddr & 3), myaddr, len);
2086
 
2087
      /* Write the entire buffer.  */
2088
 
2089
      for (i = 0; i < count; i++, addr += 4)
2090
        {
2091
          int word;
2092
          word = extract_unsigned_integer (&buffer[i * 4], 4, byte_order);
2093
          status = mips_store_word (addr, word, NULL);
2094
          /* Report each kilobyte (we download 32-bit words at a time) */
2095
          if (i % 256 == 255)
2096
            {
2097
              printf_unfiltered ("*");
2098
              gdb_flush (gdb_stdout);
2099
            }
2100
          if (status)
2101
            {
2102
              errno = status;
2103
              return 0;
2104
            }
2105
          /* FIXME: Do we want a QUIT here?  */
2106
        }
2107
      if (count >= 256)
2108
        printf_unfiltered ("\n");
2109
    }
2110
  else
2111
    {
2112
      /* Read all the longwords */
2113
      for (i = 0; i < count; i++, addr += 4)
2114
        {
2115
          store_unsigned_integer (&buffer[i * 4], 4, byte_order,
2116
                                  mips_fetch_word (addr));
2117
          QUIT;
2118
        }
2119
 
2120
      /* Copy appropriate bytes out of the buffer.  */
2121
      memcpy (myaddr, buffer + (memaddr & 3), len);
2122
    }
2123
  return len;
2124
}
2125
 
2126
/* Print info on this target.  */
2127
 
2128
static void
2129
mips_files_info (struct target_ops *ignore)
2130
{
2131
  printf_unfiltered ("Debugging a MIPS board over a serial line.\n");
2132
}
2133
 
2134
/* Kill the process running on the board.  This will actually only
2135
   work if we are doing remote debugging over the console input.  I
2136
   think that if IDT/sim had the remote debug interrupt enabled on the
2137
   right port, we could interrupt the process with a break signal.  */
2138
 
2139
static void
2140
mips_kill (struct target_ops *ops)
2141
{
2142
  if (!mips_wait_flag)
2143
    return;
2144
 
2145
  interrupt_count++;
2146
 
2147
  if (interrupt_count >= 2)
2148
    {
2149
      interrupt_count = 0;
2150
 
2151
      target_terminal_ours ();
2152
 
2153
      if (query (_("Interrupted while waiting for the program.\n\
2154
Give up (and stop debugging it)? ")))
2155
        {
2156
          /* Clean up in such a way that mips_close won't try to talk to the
2157
             board (it almost surely won't work since we weren't able to talk to
2158
             it).  */
2159
          mips_wait_flag = 0;
2160
          close_ports ();
2161
 
2162
          printf_unfiltered ("Ending remote MIPS debugging.\n");
2163
          target_mourn_inferior ();
2164
 
2165
          deprecated_throw_reason (RETURN_QUIT);
2166
        }
2167
 
2168
      target_terminal_inferior ();
2169
    }
2170
 
2171
  if (remote_debug > 0)
2172
    printf_unfiltered ("Sending break\n");
2173
 
2174
  serial_send_break (mips_desc);
2175
 
2176
#if 0
2177
  if (mips_is_open)
2178
    {
2179
      char cc;
2180
 
2181
      /* Send a ^C.  */
2182
      cc = '\003';
2183
      serial_write (mips_desc, &cc, 1);
2184
      sleep (1);
2185
      target_mourn_inferior ();
2186
    }
2187
#endif
2188
}
2189
 
2190
/* Start running on the target board.  */
2191
 
2192
static void
2193
mips_create_inferior (struct target_ops *ops, char *execfile,
2194
                      char *args, char **env, int from_tty)
2195
{
2196
  CORE_ADDR entry_pt;
2197
 
2198
  if (args && *args)
2199
    {
2200
      warning ("\
2201
Can't pass arguments to remote MIPS board; arguments ignored.");
2202
      /* And don't try to use them on the next "run" command.  */
2203
      execute_command ("set args", 0);
2204
    }
2205
 
2206
  if (execfile == 0 || exec_bfd == 0)
2207
    error ("No executable file specified");
2208
 
2209
  entry_pt = (CORE_ADDR) bfd_get_start_address (exec_bfd);
2210
 
2211
  init_wait_for_inferior ();
2212
 
2213
  /* FIXME: Should we set inferior_ptid here?  */
2214
 
2215
  regcache_write_pc (get_current_regcache (), entry_pt);
2216
}
2217
 
2218
/* Clean up after a process.  Actually nothing to do.  */
2219
 
2220
static void
2221
mips_mourn_inferior (struct target_ops *ops)
2222
{
2223
  if (current_ops != NULL)
2224
    unpush_target (current_ops);
2225
  generic_mourn_inferior ();
2226
}
2227
 
2228
/* We can write a breakpoint and read the shadow contents in one
2229
   operation.  */
2230
 
2231
/* Insert a breakpoint.  On targets that don't have built-in
2232
   breakpoint support, we read the contents of the target location and
2233
   stash it, then overwrite it with a breakpoint instruction.  ADDR is
2234
   the target location in the target machine.  BPT is the breakpoint
2235
   being inserted or removed, which contains memory for saving the
2236
   target contents.  */
2237
 
2238
static int
2239
mips_insert_breakpoint (struct gdbarch *gdbarch,
2240
                        struct bp_target_info *bp_tgt)
2241
{
2242
  if (monitor_supports_breakpoints)
2243
    return mips_set_breakpoint (bp_tgt->placed_address, MIPS_INSN32_SIZE,
2244
                                BREAK_FETCH);
2245
  else
2246
    return memory_insert_breakpoint (gdbarch, bp_tgt);
2247
}
2248
 
2249
static int
2250
mips_remove_breakpoint (struct gdbarch *gdbarch,
2251
                        struct bp_target_info *bp_tgt)
2252
{
2253
  if (monitor_supports_breakpoints)
2254
    return mips_clear_breakpoint (bp_tgt->placed_address, MIPS_INSN32_SIZE,
2255
                                  BREAK_FETCH);
2256
  else
2257
    return memory_remove_breakpoint (gdbarch, bp_tgt);
2258
}
2259
 
2260
/* Tell whether this target can support a hardware breakpoint.  CNT
2261
   is the number of hardware breakpoints already installed.  This
2262
   implements the target_can_use_hardware_watchpoint macro.  */
2263
 
2264
int
2265
mips_can_use_watchpoint (int type, int cnt, int othertype)
2266
{
2267
  return cnt < MAX_LSI_BREAKPOINTS && strcmp (target_shortname, "lsi") == 0;
2268
}
2269
 
2270
 
2271
/* Compute a don't care mask for the region bounding ADDR and ADDR + LEN - 1.
2272
   This is used for memory ref breakpoints.  */
2273
 
2274
static unsigned long
2275
calculate_mask (CORE_ADDR addr, int len)
2276
{
2277
  unsigned long mask;
2278
  int i;
2279
 
2280
  mask = addr ^ (addr + len - 1);
2281
 
2282
  for (i = 32; i >= 0; i--)
2283
    if (mask == 0)
2284
      break;
2285
    else
2286
      mask >>= 1;
2287
 
2288
  mask = (unsigned long) 0xffffffff >> i;
2289
 
2290
  return mask;
2291
}
2292
 
2293
 
2294
/* Set a data watchpoint.  ADDR and LEN should be obvious.  TYPE is 0
2295
   for a write watchpoint, 1 for a read watchpoint, or 2 for a read/write
2296
   watchpoint. */
2297
 
2298
int
2299
mips_insert_watchpoint (CORE_ADDR addr, int len, int type)
2300
{
2301
  if (mips_set_breakpoint (addr, len, type))
2302
    return -1;
2303
 
2304
  return 0;
2305
}
2306
 
2307
int
2308
mips_remove_watchpoint (CORE_ADDR addr, int len, int type)
2309
{
2310
  if (mips_clear_breakpoint (addr, len, type))
2311
    return -1;
2312
 
2313
  return 0;
2314
}
2315
 
2316
int
2317
mips_stopped_by_watchpoint (void)
2318
{
2319
  return hit_watchpoint;
2320
}
2321
 
2322
 
2323
/* Insert a breakpoint.  */
2324
 
2325
static int
2326
mips_set_breakpoint (CORE_ADDR addr, int len, enum break_type type)
2327
{
2328
  return mips_common_breakpoint (1, addr, len, type);
2329
}
2330
 
2331
 
2332
/* Clear a breakpoint.  */
2333
 
2334
static int
2335
mips_clear_breakpoint (CORE_ADDR addr, int len, enum break_type type)
2336
{
2337
  return mips_common_breakpoint (0, addr, len, type);
2338
}
2339
 
2340
 
2341
/* Check the error code from the return packet for an LSI breakpoint
2342
   command.  If there's no error, just return 0.  If it's a warning,
2343
   print the warning text and return 0.  If it's an error, print
2344
   the error text and return 1.  <ADDR> is the address of the breakpoint
2345
   that was being set.  <RERRFLG> is the error code returned by PMON.
2346
   This is a helper function for mips_common_breakpoint.  */
2347
 
2348
static int
2349
mips_check_lsi_error (CORE_ADDR addr, int rerrflg)
2350
{
2351
  struct lsi_error *err;
2352
  char *saddr = paddress (target_gdbarch, addr);
2353
 
2354
  if (rerrflg == 0)              /* no error */
2355
    return 0;
2356
 
2357
  /* Warnings can be ORed together, so check them all.  */
2358
  if (rerrflg & W_WARN)
2359
    {
2360
      if (monitor_warnings)
2361
        {
2362
          int found = 0;
2363
          for (err = lsi_warning_table; err->code != 0; err++)
2364
            {
2365
              if ((err->code & rerrflg) == err->code)
2366
                {
2367
                  found = 1;
2368
                  fprintf_unfiltered (gdb_stderr, "\
2369
mips_common_breakpoint (%s): Warning: %s\n",
2370
                                      saddr,
2371
                                      err->string);
2372
                }
2373
            }
2374
          if (!found)
2375
            fprintf_unfiltered (gdb_stderr, "\
2376
mips_common_breakpoint (%s): Unknown warning: 0x%x\n",
2377
                                saddr,
2378
                                rerrflg);
2379
        }
2380
      return 0;
2381
    }
2382
 
2383
  /* Errors are unique, i.e. can't be ORed together.  */
2384
  for (err = lsi_error_table; err->code != 0; err++)
2385
    {
2386
      if ((err->code & rerrflg) == err->code)
2387
        {
2388
          fprintf_unfiltered (gdb_stderr, "\
2389
mips_common_breakpoint (%s): Error: %s\n",
2390
                              saddr,
2391
                              err->string);
2392
          return 1;
2393
        }
2394
    }
2395
  fprintf_unfiltered (gdb_stderr, "\
2396
mips_common_breakpoint (%s): Unknown error: 0x%x\n",
2397
                      saddr,
2398
                      rerrflg);
2399
  return 1;
2400
}
2401
 
2402
 
2403
/* This routine sends a breakpoint command to the remote target.
2404
 
2405
   <SET> is 1 if setting a breakpoint, or 0 if clearing a breakpoint.
2406
   <ADDR> is the address of the breakpoint.
2407
   <LEN> the length of the region to break on.
2408
   <TYPE> is the type of breakpoint:
2409
 
2410
   1 = read                     (BREAK_READ)
2411
   2 = read/write               (BREAK_ACCESS)
2412
   3 = instruction fetch        (BREAK_FETCH)
2413
 
2414
   Return 0 if successful; otherwise 1.  */
2415
 
2416
static int
2417
mips_common_breakpoint (int set, CORE_ADDR addr, int len, enum break_type type)
2418
{
2419
  int addr_size = gdbarch_addr_bit (target_gdbarch) / 8;
2420
  char buf[DATA_MAXLEN + 1];
2421
  char cmd, rcmd;
2422
  int rpid, rerrflg, rresponse, rlen;
2423
  int nfields;
2424
 
2425
  addr = gdbarch_addr_bits_remove (target_gdbarch, addr);
2426
 
2427
  if (mips_monitor == MON_LSI)
2428
    {
2429
      if (set == 0)              /* clear breakpoint */
2430
        {
2431
          /* The LSI PMON "clear breakpoint" has this form:
2432
             <pid> 'b' <bptn> 0x0
2433
             reply:
2434
             <pid> 'b' 0x0 <code>
2435
 
2436
             <bptn> is a breakpoint number returned by an earlier 'B' command.
2437
             Possible return codes: OK, E_BPT.  */
2438
 
2439
          int i;
2440
 
2441
          /* Search for the breakpoint in the table.  */
2442
          for (i = 0; i < MAX_LSI_BREAKPOINTS; i++)
2443
            if (lsi_breakpoints[i].type == type
2444
                && lsi_breakpoints[i].addr == addr
2445
                && lsi_breakpoints[i].len == len)
2446
              break;
2447
 
2448
          /* Clear the table entry and tell PMON to clear the breakpoint.  */
2449
          if (i == MAX_LSI_BREAKPOINTS)
2450
            {
2451
              warning ("\
2452
mips_common_breakpoint: Attempt to clear bogus breakpoint at %s\n",
2453
                       paddress (target_gdbarch, addr));
2454
              return 1;
2455
            }
2456
 
2457
          lsi_breakpoints[i].type = BREAK_UNUSED;
2458
          sprintf (buf, "0x0 b 0x%x 0x0", i);
2459
          mips_send_packet (buf, 1);
2460
 
2461
          rlen = mips_receive_packet (buf, 1, mips_receive_wait);
2462
          buf[rlen] = '\0';
2463
 
2464
          nfields = sscanf (buf, "0x%x b 0x0 0x%x", &rpid, &rerrflg);
2465
          if (nfields != 2)
2466
            mips_error ("\
2467
mips_common_breakpoint: Bad response from remote board: %s",
2468
                        buf);
2469
 
2470
          return (mips_check_lsi_error (addr, rerrflg));
2471
        }
2472
      else
2473
        /* set a breakpoint */
2474
        {
2475
          /* The LSI PMON "set breakpoint" command has this form:
2476
             <pid> 'B' <addr> 0x0
2477
             reply:
2478
             <pid> 'B' <bptn> <code>
2479
 
2480
             The "set data breakpoint" command has this form:
2481
 
2482
             <pid> 'A' <addr1> <type> [<addr2>  [<value>]]
2483
 
2484
             where: type= "0x1" = read
2485
             "0x2" = write
2486
             "0x3" = access (read or write)
2487
 
2488
             The reply returns two values:
2489
             bptn - a breakpoint number, which is a small integer with
2490
             possible values of zero through 255.
2491
             code - an error return code, a value of zero indicates a
2492
             succesful completion, other values indicate various
2493
             errors and warnings.
2494
 
2495
             Possible return codes: OK, W_QAL, E_QAL, E_OUT, E_NON.
2496
 
2497
           */
2498
 
2499
          if (type == BREAK_FETCH)      /* instruction breakpoint */
2500
            {
2501
              cmd = 'B';
2502
              sprintf (buf, "0x0 B 0x%s 0x0", phex_nz (addr, addr_size));
2503
            }
2504
          else
2505
            /* watchpoint */
2506
            {
2507
              cmd = 'A';
2508
              sprintf (buf, "0x0 A 0x%s 0x%x 0x%s",
2509
                       phex_nz (addr, addr_size),
2510
                       type == BREAK_READ ? 1 : (type == BREAK_WRITE ? 2 : 3),
2511
                       phex_nz (addr + len - 1, addr_size));
2512
            }
2513
          mips_send_packet (buf, 1);
2514
 
2515
          rlen = mips_receive_packet (buf, 1, mips_receive_wait);
2516
          buf[rlen] = '\0';
2517
 
2518
          nfields = sscanf (buf, "0x%x %c 0x%x 0x%x",
2519
                            &rpid, &rcmd, &rresponse, &rerrflg);
2520
          if (nfields != 4 || rcmd != cmd || rresponse > 255)
2521
            mips_error ("\
2522
mips_common_breakpoint: Bad response from remote board: %s",
2523
                        buf);
2524
 
2525
          if (rerrflg != 0)
2526
            if (mips_check_lsi_error (addr, rerrflg))
2527
              return 1;
2528
 
2529
          /* rresponse contains PMON's breakpoint number.  Record the
2530
             information for this breakpoint so we can clear it later.  */
2531
          lsi_breakpoints[rresponse].type = type;
2532
          lsi_breakpoints[rresponse].addr = addr;
2533
          lsi_breakpoints[rresponse].len = len;
2534
 
2535
          return 0;
2536
        }
2537
    }
2538
  else
2539
    {
2540
      /* On non-LSI targets, the breakpoint command has this form:
2541
         0x0 <CMD> <ADDR> <MASK> <FLAGS>
2542
         <MASK> is a don't care mask for addresses.
2543
         <FLAGS> is any combination of `r', `w', or `f' for read/write/fetch.
2544
       */
2545
      unsigned long mask;
2546
 
2547
      mask = calculate_mask (addr, len);
2548
      addr &= ~mask;
2549
 
2550
      if (set)                  /* set a breakpoint */
2551
        {
2552
          char *flags;
2553
          switch (type)
2554
            {
2555
            case BREAK_WRITE:   /* write */
2556
              flags = "w";
2557
              break;
2558
            case BREAK_READ:    /* read */
2559
              flags = "r";
2560
              break;
2561
            case BREAK_ACCESS:  /* read/write */
2562
              flags = "rw";
2563
              break;
2564
            case BREAK_FETCH:   /* fetch */
2565
              flags = "f";
2566
              break;
2567
            default:
2568
              internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
2569
            }
2570
 
2571
          cmd = 'B';
2572
          sprintf (buf, "0x0 B 0x%s 0x%s %s", phex_nz (addr, addr_size),
2573
                   phex_nz (mask, addr_size), flags);
2574
        }
2575
      else
2576
        {
2577
          cmd = 'b';
2578
          sprintf (buf, "0x0 b 0x%s", phex_nz (addr, addr_size));
2579
        }
2580
 
2581
      mips_send_packet (buf, 1);
2582
 
2583
      rlen = mips_receive_packet (buf, 1, mips_receive_wait);
2584
      buf[rlen] = '\0';
2585
 
2586
      nfields = sscanf (buf, "0x%x %c 0x%x 0x%x",
2587
                        &rpid, &rcmd, &rerrflg, &rresponse);
2588
 
2589
      if (nfields != 4 || rcmd != cmd)
2590
        mips_error ("\
2591
mips_common_breakpoint: Bad response from remote board: %s",
2592
                    buf);
2593
 
2594
      if (rerrflg != 0)
2595
        {
2596
          /* Ddb returns "0x0 b 0x16 0x0\000", whereas
2597
             Cogent returns "0x0 b 0xffffffff 0x16\000": */
2598
          if (mips_monitor == MON_DDB)
2599
            rresponse = rerrflg;
2600
          if (rresponse != 22)  /* invalid argument */
2601
            fprintf_unfiltered (gdb_stderr, "\
2602
mips_common_breakpoint (%s):  Got error: 0x%x\n",
2603
                                paddress (target_gdbarch, addr), rresponse);
2604
          return 1;
2605
        }
2606
    }
2607
  return 0;
2608
}
2609
 
2610
static void
2611
send_srec (char *srec, int len, CORE_ADDR addr)
2612
{
2613
  while (1)
2614
    {
2615
      int ch;
2616
 
2617
      serial_write (mips_desc, srec, len);
2618
 
2619
      ch = mips_readchar (remote_timeout);
2620
 
2621
      switch (ch)
2622
        {
2623
        case SERIAL_TIMEOUT:
2624
          error ("Timeout during download.");
2625
          break;
2626
        case 0x6:               /* ACK */
2627
          return;
2628
        case 0x15:              /* NACK */
2629
          fprintf_unfiltered (gdb_stderr, "Download got a NACK at byte %s!  Retrying.\n",
2630
                              paddress (target_gdbarch, addr));
2631
          continue;
2632
        default:
2633
          error ("Download got unexpected ack char: 0x%x, retrying.\n", ch);
2634
        }
2635
    }
2636
}
2637
 
2638
/*  Download a binary file by converting it to S records. */
2639
 
2640
static void
2641
mips_load_srec (char *args)
2642
{
2643
  bfd *abfd;
2644
  asection *s;
2645
  char *buffer, srec[1024];
2646
  unsigned int i;
2647
  unsigned int srec_frame = 200;
2648
  int reclen;
2649
  static int hashmark = 1;
2650
 
2651
  buffer = alloca (srec_frame * 2 + 256);
2652
 
2653
  abfd = bfd_openr (args, 0);
2654
  if (!abfd)
2655
    {
2656
      printf_filtered ("Unable to open file %s\n", args);
2657
      return;
2658
    }
2659
 
2660
  if (bfd_check_format (abfd, bfd_object) == 0)
2661
    {
2662
      printf_filtered ("File is not an object file\n");
2663
      return;
2664
    }
2665
 
2666
/* This actually causes a download in the IDT binary format: */
2667
  mips_send_command (LOAD_CMD, 0);
2668
 
2669
  for (s = abfd->sections; s; s = s->next)
2670
    {
2671
      if (s->flags & SEC_LOAD)
2672
        {
2673
          unsigned int numbytes;
2674
 
2675
          /* FIXME!  vma too small????? */
2676
          printf_filtered ("%s\t: 0x%4lx .. 0x%4lx  ", s->name,
2677
                           (long) s->vma,
2678
                           (long) (s->vma + bfd_get_section_size (s)));
2679
          gdb_flush (gdb_stdout);
2680
 
2681
          for (i = 0; i < bfd_get_section_size (s); i += numbytes)
2682
            {
2683
              numbytes = min (srec_frame, bfd_get_section_size (s) - i);
2684
 
2685
              bfd_get_section_contents (abfd, s, buffer, i, numbytes);
2686
 
2687
              reclen = mips_make_srec (srec, '3', s->vma + i,
2688
                                       buffer, numbytes);
2689
              send_srec (srec, reclen, s->vma + i);
2690
 
2691
              if (deprecated_ui_load_progress_hook)
2692
                deprecated_ui_load_progress_hook (s->name, i);
2693
 
2694
              if (hashmark)
2695
                {
2696
                  putchar_unfiltered ('#');
2697
                  gdb_flush (gdb_stdout);
2698
                }
2699
 
2700
            }                   /* Per-packet (or S-record) loop */
2701
 
2702
          putchar_unfiltered ('\n');
2703
        }                       /* Loadable sections */
2704
    }
2705
  if (hashmark)
2706
    putchar_unfiltered ('\n');
2707
 
2708
  /* Write a type 7 terminator record. no data for a type 7, and there
2709
     is no data, so len is 0.  */
2710
 
2711
  reclen = mips_make_srec (srec, '7', abfd->start_address, NULL, 0);
2712
 
2713
  send_srec (srec, reclen, abfd->start_address);
2714
 
2715
  serial_flush_input (mips_desc);
2716
}
2717
 
2718
/*
2719
 * mips_make_srec -- make an srecord. This writes each line, one at a
2720
 *      time, each with it's own header and trailer line.
2721
 *      An srecord looks like this:
2722
 *
2723
 * byte count-+     address
2724
 * start ---+ |        |       data        +- checksum
2725
 *          | |        |                   |
2726
 *        S01000006F6B692D746573742E73726563E4
2727
 *        S315000448600000000000000000FC00005900000000E9
2728
 *        S31A0004000023C1400037DE00F023604000377B009020825000348D
2729
 *        S30B0004485A0000000000004E
2730
 *        S70500040000F6
2731
 *
2732
 *      S<type><length><address><data><checksum>
2733
 *
2734
 *      Where
2735
 *      - length
2736
 *        is the number of bytes following upto the checksum. Note that
2737
 *        this is not the number of chars following, since it takes two
2738
 *        chars to represent a byte.
2739
 *      - type
2740
 *        is one of:
2741
 *        0) header record
2742
 *        1) two byte address data record
2743
 *        2) three byte address data record
2744
 *        3) four byte address data record
2745
 *        7) four byte address termination record
2746
 *        8) three byte address termination record
2747
 *        9) two byte address termination record
2748
 *
2749
 *      - address
2750
 *        is the start address of the data following, or in the case of
2751
 *        a termination record, the start address of the image
2752
 *      - data
2753
 *        is the data.
2754
 *      - checksum
2755
 *        is the sum of all the raw byte data in the record, from the length
2756
 *        upwards, modulo 256 and subtracted from 255.
2757
 *
2758
 * This routine returns the length of the S-record.
2759
 *
2760
 */
2761
 
2762
static int
2763
mips_make_srec (char *buf, int type, CORE_ADDR memaddr, unsigned char *myaddr,
2764
                int len)
2765
{
2766
  unsigned char checksum;
2767
  int i;
2768
 
2769
  /* Create the header for the srec. addr_size is the number of bytes in the address,
2770
     and 1 is the number of bytes in the count.  */
2771
 
2772
  /* FIXME!! bigger buf required for 64-bit! */
2773
  buf[0] = 'S';
2774
  buf[1] = type;
2775
  buf[2] = len + 4 + 1;         /* len + 4 byte address + 1 byte checksum */
2776
  /* This assumes S3 style downloads (4byte addresses). There should
2777
     probably be a check, or the code changed to make it more
2778
     explicit. */
2779
  buf[3] = memaddr >> 24;
2780
  buf[4] = memaddr >> 16;
2781
  buf[5] = memaddr >> 8;
2782
  buf[6] = memaddr;
2783
  memcpy (&buf[7], myaddr, len);
2784
 
2785
  /* Note that the checksum is calculated on the raw data, not the
2786
     hexified data.  It includes the length, address and the data
2787
     portions of the packet.  */
2788
  checksum = 0;
2789
  buf += 2;                     /* Point at length byte */
2790
  for (i = 0; i < len + 4 + 1; i++)
2791
    checksum += *buf++;
2792
 
2793
  *buf = ~checksum;
2794
 
2795
  return len + 8;
2796
}
2797
 
2798
/* The following manifest controls whether we enable the simple flow
2799
   control support provided by the monitor. If enabled the code will
2800
   wait for an affirmative ACK between transmitting packets. */
2801
#define DOETXACK (1)
2802
 
2803
/* The PMON fast-download uses an encoded packet format constructed of
2804
   3byte data packets (encoded as 4 printable ASCII characters), and
2805
   escape sequences (preceded by a '/'):
2806
 
2807
   'K'     clear checksum
2808
   'C'     compare checksum (12bit value, not included in checksum calculation)
2809
   'S'     define symbol name (for addr) terminated with "," and padded to 4char boundary
2810
   'Z'     zero fill multiple of 3bytes
2811
   'B'     byte (12bit encoded value, of 8bit data)
2812
   'A'     address (36bit encoded value)
2813
   'E'     define entry as original address, and exit load
2814
 
2815
   The packets are processed in 4 character chunks, so the escape
2816
   sequences that do not have any data (or variable length data)
2817
   should be padded to a 4 character boundary.  The decoder will give
2818
   an error if the complete message block size is not a multiple of
2819
   4bytes (size of record).
2820
 
2821
   The encoding of numbers is done in 6bit fields.  The 6bit value is
2822
   used to index into this string to get the specific character
2823
   encoding for the value: */
2824
static char encoding[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.";
2825
 
2826
/* Convert the number of bits required into an encoded number, 6bits
2827
   at a time (range 0..63).  Keep a checksum if required (passed
2828
   pointer non-NULL). The function returns the number of encoded
2829
   characters written into the buffer. */
2830
static int
2831
pmon_makeb64 (unsigned long v, char *p, int n, int *chksum)
2832
{
2833
  int count = (n / 6);
2834
 
2835
  if ((n % 12) != 0)
2836
    {
2837
      fprintf_unfiltered (gdb_stderr,
2838
                          "Fast encoding bitcount must be a multiple of 12bits: %dbit%s\n", n, (n == 1) ? "" : "s");
2839
      return (0);
2840
    }
2841
  if (n > 36)
2842
    {
2843
      fprintf_unfiltered (gdb_stderr,
2844
                          "Fast encoding cannot process more than 36bits at the moment: %dbits\n", n);
2845
      return (0);
2846
    }
2847
 
2848
  /* Deal with the checksum: */
2849
  if (chksum != NULL)
2850
    {
2851
      switch (n)
2852
        {
2853
        case 36:
2854
          *chksum += ((v >> 24) & 0xFFF);
2855
        case 24:
2856
          *chksum += ((v >> 12) & 0xFFF);
2857
        case 12:
2858
          *chksum += ((v >> 0) & 0xFFF);
2859
        }
2860
    }
2861
 
2862
  do
2863
    {
2864
      n -= 6;
2865
      *p++ = encoding[(v >> n) & 0x3F];
2866
    }
2867
  while (n > 0);
2868
 
2869
  return (count);
2870
}
2871
 
2872
/* Shorthand function (that could be in-lined) to output the zero-fill
2873
   escape sequence into the data stream. */
2874
static int
2875
pmon_zeroset (int recsize, char **buff, int *amount, unsigned int *chksum)
2876
{
2877
  int count;
2878
 
2879
  sprintf (*buff, "/Z");
2880
  count = pmon_makeb64 (*amount, (*buff + 2), 12, chksum);
2881
  *buff += (count + 2);
2882
  *amount = 0;
2883
  return (recsize + count + 2);
2884
}
2885
 
2886
static int
2887
pmon_checkset (int recsize, char **buff, int *value)
2888
{
2889
  int count;
2890
 
2891
  /* Add the checksum (without updating the value): */
2892
  sprintf (*buff, "/C");
2893
  count = pmon_makeb64 (*value, (*buff + 2), 12, NULL);
2894
  *buff += (count + 2);
2895
  sprintf (*buff, "\n");
2896
  *buff += 2;                   /* include zero terminator */
2897
  /* Forcing a checksum validation clears the sum: */
2898
  *value = 0;
2899
  return (recsize + count + 3);
2900
}
2901
 
2902
/* Amount of padding we leave after at the end of the output buffer,
2903
   for the checksum and line termination characters: */
2904
#define CHECKSIZE (4 + 4 + 4 + 2)
2905
/* zero-fill, checksum, transfer end and line termination space. */
2906
 
2907
/* The amount of binary data loaded from the object file in a single
2908
   operation: */
2909
#define BINCHUNK (1024)
2910
 
2911
/* Maximum line of data accepted by the monitor: */
2912
#define MAXRECSIZE (550)
2913
/* NOTE: This constant depends on the monitor being used. This value
2914
   is for PMON 5.x on the Cogent Vr4300 board. */
2915
 
2916
static void
2917
pmon_make_fastrec (char **outbuf, unsigned char *inbuf, int *inptr,
2918
                   int inamount, int *recsize, unsigned int *csum,
2919
                   unsigned int *zerofill)
2920
{
2921
  int count = 0;
2922
  char *p = *outbuf;
2923
 
2924
  /* This is a simple check to ensure that our data will fit within
2925
     the maximum allowable record size. Each record output is 4bytes
2926
     in length. We must allow space for a pending zero fill command,
2927
     the record, and a checksum record. */
2928
  while ((*recsize < (MAXRECSIZE - CHECKSIZE)) && ((inamount - *inptr) > 0))
2929
    {
2930
      /* Process the binary data: */
2931
      if ((inamount - *inptr) < 3)
2932
        {
2933
          if (*zerofill != 0)
2934
            *recsize = pmon_zeroset (*recsize, &p, zerofill, csum);
2935
          sprintf (p, "/B");
2936
          count = pmon_makeb64 (inbuf[*inptr], &p[2], 12, csum);
2937
          p += (2 + count);
2938
          *recsize += (2 + count);
2939
          (*inptr)++;
2940
        }
2941
      else
2942
        {
2943
          unsigned int value = ((inbuf[*inptr + 0] << 16) | (inbuf[*inptr + 1] << 8) | inbuf[*inptr + 2]);
2944
          /* Simple check for zero data. TODO: A better check would be
2945
             to check the last, and then the middle byte for being zero
2946
             (if the first byte is not). We could then check for
2947
             following runs of zeros, and if above a certain size it is
2948
             worth the 4 or 8 character hit of the byte insertions used
2949
             to pad to the start of the zeroes. NOTE: This also depends
2950
             on the alignment at the end of the zero run. */
2951
          if (value == 0x00000000)
2952
            {
2953
              (*zerofill)++;
2954
              if (*zerofill == 0xFFF)   /* 12bit counter */
2955
                *recsize = pmon_zeroset (*recsize, &p, zerofill, csum);
2956
            }
2957
          else
2958
            {
2959
              if (*zerofill != 0)
2960
                *recsize = pmon_zeroset (*recsize, &p, zerofill, csum);
2961
              count = pmon_makeb64 (value, p, 24, csum);
2962
              p += count;
2963
              *recsize += count;
2964
            }
2965
          *inptr += 3;
2966
        }
2967
    }
2968
 
2969
  *outbuf = p;
2970
  return;
2971
}
2972
 
2973
static int
2974
pmon_check_ack (char *mesg)
2975
{
2976
#if defined(DOETXACK)
2977
  int c;
2978
 
2979
  if (!tftp_in_use)
2980
    {
2981
      c = serial_readchar (udp_in_use ? udp_desc : mips_desc,
2982
                           remote_timeout);
2983
      if ((c == SERIAL_TIMEOUT) || (c != 0x06))
2984
        {
2985
          fprintf_unfiltered (gdb_stderr,
2986
                              "Failed to receive valid ACK for %s\n", mesg);
2987
          return (-1);          /* terminate the download */
2988
        }
2989
    }
2990
#endif /* DOETXACK */
2991
  return (0);
2992
}
2993
 
2994
/* pmon_download - Send a sequence of characters to the PMON download port,
2995
   which is either a serial port or a UDP socket.  */
2996
 
2997
static void
2998
pmon_start_download (void)
2999
{
3000
  if (tftp_in_use)
3001
    {
3002
      /* Create the temporary download file.  */
3003
      if ((tftp_file = fopen (tftp_localname, "w")) == NULL)
3004
        perror_with_name (tftp_localname);
3005
    }
3006
  else
3007
    {
3008
      mips_send_command (udp_in_use ? LOAD_CMD_UDP : LOAD_CMD, 0);
3009
      mips_expect ("Downloading from ");
3010
      mips_expect (udp_in_use ? "udp" : "tty0");
3011
      mips_expect (", ^C to abort\r\n");
3012
    }
3013
}
3014
 
3015
static int
3016
mips_expect_download (char *string)
3017
{
3018
  if (!mips_expect (string))
3019
    {
3020
      fprintf_unfiltered (gdb_stderr, "Load did not complete successfully.\n");
3021
      if (tftp_in_use)
3022
        remove (tftp_localname);        /* Remove temporary file */
3023
      return 0;
3024
    }
3025
  else
3026
    return 1;
3027
}
3028
 
3029
static void
3030
pmon_check_entry_address (char *entry_address, int final)
3031
{
3032
  char hexnumber[9];            /* includes '\0' space */
3033
  mips_expect_timeout (entry_address, tftp_in_use ? 15 : remote_timeout);
3034
  sprintf (hexnumber, "%x", final);
3035
  mips_expect (hexnumber);
3036
  mips_expect ("\r\n");
3037
}
3038
 
3039
static int
3040
pmon_check_total (int bintotal)
3041
{
3042
  char hexnumber[9];            /* includes '\0' space */
3043
  mips_expect ("\r\ntotal = 0x");
3044
  sprintf (hexnumber, "%x", bintotal);
3045
  mips_expect (hexnumber);
3046
  return mips_expect_download (" bytes\r\n");
3047
}
3048
 
3049
static void
3050
pmon_end_download (int final, int bintotal)
3051
{
3052
  char hexnumber[9];            /* includes '\0' space */
3053
 
3054
  if (tftp_in_use)
3055
    {
3056
      static char *load_cmd_prefix = "load -b -s ";
3057
      char *cmd;
3058
      struct stat stbuf;
3059
 
3060
      /* Close off the temporary file containing the load data.  */
3061
      fclose (tftp_file);
3062
      tftp_file = NULL;
3063
 
3064
      /* Make the temporary file readable by the world.  */
3065
      if (stat (tftp_localname, &stbuf) == 0)
3066
        chmod (tftp_localname, stbuf.st_mode | S_IROTH);
3067
 
3068
      /* Must reinitialize the board to prevent PMON from crashing.  */
3069
      mips_send_command ("initEther\r", -1);
3070
 
3071
      /* Send the load command.  */
3072
      cmd = xmalloc (strlen (load_cmd_prefix) + strlen (tftp_name) + 2);
3073
      strcpy (cmd, load_cmd_prefix);
3074
      strcat (cmd, tftp_name);
3075
      strcat (cmd, "\r");
3076
      mips_send_command (cmd, 0);
3077
      xfree (cmd);
3078
      if (!mips_expect_download ("Downloading from "))
3079
        return;
3080
      if (!mips_expect_download (tftp_name))
3081
        return;
3082
      if (!mips_expect_download (", ^C to abort\r\n"))
3083
        return;
3084
    }
3085
 
3086
  /* Wait for the stuff that PMON prints after the load has completed.
3087
     The timeout value for use in the tftp case (15 seconds) was picked
3088
     arbitrarily but might be too small for really large downloads. FIXME. */
3089
  switch (mips_monitor)
3090
    {
3091
    case MON_LSI:
3092
      pmon_check_ack ("termination");
3093
      pmon_check_entry_address ("Entry address is ", final);
3094
      if (!pmon_check_total (bintotal))
3095
        return;
3096
      break;
3097
    default:
3098
      pmon_check_entry_address ("Entry Address  = ", final);
3099
      pmon_check_ack ("termination");
3100
      if (!pmon_check_total (bintotal))
3101
        return;
3102
      break;
3103
    }
3104
 
3105
  if (tftp_in_use)
3106
    remove (tftp_localname);    /* Remove temporary file */
3107
}
3108
 
3109
static void
3110
pmon_download (char *buffer, int length)
3111
{
3112
  if (tftp_in_use)
3113
    fwrite (buffer, 1, length, tftp_file);
3114
  else
3115
    serial_write (udp_in_use ? udp_desc : mips_desc, buffer, length);
3116
}
3117
 
3118
static void
3119
pmon_load_fast (char *file)
3120
{
3121
  bfd *abfd;
3122
  asection *s;
3123
  unsigned char *binbuf;
3124
  char *buffer;
3125
  int reclen;
3126
  unsigned int csum = 0;
3127
  int hashmark = !tftp_in_use;
3128
  int bintotal = 0;
3129
  int final = 0;
3130
  int finished = 0;
3131
 
3132
  buffer = (char *) xmalloc (MAXRECSIZE + 1);
3133
  binbuf = (unsigned char *) xmalloc (BINCHUNK);
3134
 
3135
  abfd = bfd_openr (file, 0);
3136
  if (!abfd)
3137
    {
3138
      printf_filtered ("Unable to open file %s\n", file);
3139
      return;
3140
    }
3141
 
3142
  if (bfd_check_format (abfd, bfd_object) == 0)
3143
    {
3144
      printf_filtered ("File is not an object file\n");
3145
      return;
3146
    }
3147
 
3148
  /* Setup the required download state: */
3149
  mips_send_command ("set dlproto etxack\r", -1);
3150
  mips_send_command ("set dlecho off\r", -1);
3151
  /* NOTE: We get a "cannot set variable" message if the variable is
3152
     already defined to have the argument we give. The code doesn't
3153
     care, since it just scans to the next prompt anyway. */
3154
  /* Start the download: */
3155
  pmon_start_download ();
3156
 
3157
  /* Zero the checksum */
3158
  sprintf (buffer, "/Kxx\n");
3159
  reclen = strlen (buffer);
3160
  pmon_download (buffer, reclen);
3161
  finished = pmon_check_ack ("/Kxx");
3162
 
3163
  for (s = abfd->sections; s && !finished; s = s->next)
3164
    if (s->flags & SEC_LOAD)    /* only deal with loadable sections */
3165
      {
3166
        bintotal += bfd_get_section_size (s);
3167
        final = (s->vma + bfd_get_section_size (s));
3168
 
3169
        printf_filtered ("%s\t: 0x%4x .. 0x%4x  ", s->name, (unsigned int) s->vma,
3170
                         (unsigned int) (s->vma + bfd_get_section_size (s)));
3171
        gdb_flush (gdb_stdout);
3172
 
3173
        /* Output the starting address */
3174
        sprintf (buffer, "/A");
3175
        reclen = pmon_makeb64 (s->vma, &buffer[2], 36, &csum);
3176
        buffer[2 + reclen] = '\n';
3177
        buffer[3 + reclen] = '\0';
3178
        reclen += 3;            /* for the initial escape code and carriage return */
3179
        pmon_download (buffer, reclen);
3180
        finished = pmon_check_ack ("/A");
3181
 
3182
        if (!finished)
3183
          {
3184
            unsigned int binamount;
3185
            unsigned int zerofill = 0;
3186
            char *bp = buffer;
3187
            unsigned int i;
3188
 
3189
            reclen = 0;
3190
 
3191
            for (i = 0;
3192
                 i < bfd_get_section_size (s) && !finished;
3193
                 i += binamount)
3194
              {
3195
                int binptr = 0;
3196
 
3197
                binamount = min (BINCHUNK, bfd_get_section_size (s) - i);
3198
 
3199
                bfd_get_section_contents (abfd, s, binbuf, i, binamount);
3200
 
3201
                /* This keeps a rolling checksum, until we decide to output
3202
                   the line: */
3203
                for (; ((binamount - binptr) > 0);)
3204
                  {
3205
                    pmon_make_fastrec (&bp, binbuf, &binptr, binamount,
3206
                                       &reclen, &csum, &zerofill);
3207
                    if (reclen >= (MAXRECSIZE - CHECKSIZE))
3208
                      {
3209
                        reclen = pmon_checkset (reclen, &bp, &csum);
3210
                        pmon_download (buffer, reclen);
3211
                        finished = pmon_check_ack ("data record");
3212
                        if (finished)
3213
                          {
3214
                            zerofill = 0;        /* do not transmit pending zerofills */
3215
                            break;
3216
                          }
3217
 
3218
                        if (deprecated_ui_load_progress_hook)
3219
                          deprecated_ui_load_progress_hook (s->name, i);
3220
 
3221
                        if (hashmark)
3222
                          {
3223
                            putchar_unfiltered ('#');
3224
                            gdb_flush (gdb_stdout);
3225
                          }
3226
 
3227
                        bp = buffer;
3228
                        reclen = 0;      /* buffer processed */
3229
                      }
3230
                  }
3231
              }
3232
 
3233
            /* Ensure no out-standing zerofill requests: */
3234
            if (zerofill != 0)
3235
              reclen = pmon_zeroset (reclen, &bp, &zerofill, &csum);
3236
 
3237
            /* and then flush the line: */
3238
            if (reclen > 0)
3239
              {
3240
                reclen = pmon_checkset (reclen, &bp, &csum);
3241
                /* Currently pmon_checkset outputs the line terminator by
3242
                   default, so we write out the buffer so far: */
3243
                pmon_download (buffer, reclen);
3244
                finished = pmon_check_ack ("record remnant");
3245
              }
3246
          }
3247
 
3248
        putchar_unfiltered ('\n');
3249
      }
3250
 
3251
  /* Terminate the transfer. We know that we have an empty output
3252
     buffer at this point. */
3253
  sprintf (buffer, "/E/E\n");   /* include dummy padding characters */
3254
  reclen = strlen (buffer);
3255
  pmon_download (buffer, reclen);
3256
 
3257
  if (finished)
3258
    {                           /* Ignore the termination message: */
3259
      serial_flush_input (udp_in_use ? udp_desc : mips_desc);
3260
    }
3261
  else
3262
    {                           /* Deal with termination message: */
3263
      pmon_end_download (final, bintotal);
3264
    }
3265
 
3266
  return;
3267
}
3268
 
3269
/* mips_load -- download a file. */
3270
 
3271
static void
3272
mips_load (char *file, int from_tty)
3273
{
3274
  struct regcache *regcache;
3275
 
3276
  /* Get the board out of remote debugging mode.  */
3277
  if (mips_exit_debug ())
3278
    error ("mips_load:  Couldn't get into monitor mode.");
3279
 
3280
  if (mips_monitor != MON_IDT)
3281
    pmon_load_fast (file);
3282
  else
3283
    mips_load_srec (file);
3284
 
3285
  mips_initialize ();
3286
 
3287
  /* Finally, make the PC point at the start address */
3288
  regcache = get_current_regcache ();
3289
  if (mips_monitor != MON_IDT)
3290
    {
3291
      /* Work around problem where PMON monitor updates the PC after a load
3292
         to a different value than GDB thinks it has. The following ensures
3293
         that the regcache_write_pc() WILL update the PC value: */
3294
      regcache_invalidate (regcache,
3295
                           gdbarch_pc_regnum (get_regcache_arch (regcache)));
3296
    }
3297
  if (exec_bfd)
3298
    regcache_write_pc (regcache, bfd_get_start_address (exec_bfd));
3299
 
3300
  inferior_ptid = null_ptid;    /* No process now */
3301
 
3302
/* This is necessary because many things were based on the PC at the time that
3303
   we attached to the monitor, which is no longer valid now that we have loaded
3304
   new code (and just changed the PC).  Another way to do this might be to call
3305
   normal_stop, except that the stack may not be valid, and things would get
3306
   horribly confused... */
3307
 
3308
  clear_symtab_users ();
3309
}
3310
 
3311
 
3312
/* Pass the command argument as a packet to PMON verbatim.  */
3313
 
3314
static void
3315
pmon_command (char *args, int from_tty)
3316
{
3317
  char buf[DATA_MAXLEN + 1];
3318
  int rlen;
3319
 
3320
  sprintf (buf, "0x0 %s", args);
3321
  mips_send_packet (buf, 1);
3322
  printf_filtered ("Send packet: %s\n", buf);
3323
 
3324
  rlen = mips_receive_packet (buf, 1, mips_receive_wait);
3325
  buf[rlen] = '\0';
3326
  printf_filtered ("Received packet: %s\n", buf);
3327
}
3328
 
3329
extern initialize_file_ftype _initialize_remote_mips; /* -Wmissing-prototypes */
3330
 
3331
void
3332
_initialize_remote_mips (void)
3333
{
3334
  /* Initialize the fields in mips_ops that are common to all four targets.  */
3335
  mips_ops.to_longname = "Remote MIPS debugging over serial line";
3336
  mips_ops.to_close = mips_close;
3337
  mips_ops.to_detach = mips_detach;
3338
  mips_ops.to_resume = mips_resume;
3339
  mips_ops.to_fetch_registers = mips_fetch_registers;
3340
  mips_ops.to_store_registers = mips_store_registers;
3341
  mips_ops.to_prepare_to_store = mips_prepare_to_store;
3342
  mips_ops.deprecated_xfer_memory = mips_xfer_memory;
3343
  mips_ops.to_files_info = mips_files_info;
3344
  mips_ops.to_insert_breakpoint = mips_insert_breakpoint;
3345
  mips_ops.to_remove_breakpoint = mips_remove_breakpoint;
3346
  mips_ops.to_insert_watchpoint = mips_insert_watchpoint;
3347
  mips_ops.to_remove_watchpoint = mips_remove_watchpoint;
3348
  mips_ops.to_stopped_by_watchpoint = mips_stopped_by_watchpoint;
3349
  mips_ops.to_can_use_hw_breakpoint = mips_can_use_watchpoint;
3350
  mips_ops.to_kill = mips_kill;
3351
  mips_ops.to_load = mips_load;
3352
  mips_ops.to_create_inferior = mips_create_inferior;
3353
  mips_ops.to_mourn_inferior = mips_mourn_inferior;
3354
  mips_ops.to_log_command = serial_log_command;
3355
  mips_ops.to_stratum = process_stratum;
3356
  mips_ops.to_has_all_memory = default_child_has_all_memory;
3357
  mips_ops.to_has_memory = default_child_has_memory;
3358
  mips_ops.to_has_stack = default_child_has_stack;
3359
  mips_ops.to_has_registers = default_child_has_registers;
3360
  mips_ops.to_has_execution = default_child_has_execution;
3361
  mips_ops.to_magic = OPS_MAGIC;
3362
 
3363
  /* Copy the common fields to all four target vectors.  */
3364
  pmon_ops = ddb_ops = lsi_ops = mips_ops;
3365
 
3366
  /* Initialize target-specific fields in the target vectors.  */
3367
  mips_ops.to_shortname = "mips";
3368
  mips_ops.to_doc = "\
3369
Debug a board using the MIPS remote debugging protocol over a serial line.\n\
3370
The argument is the device it is connected to or, if it contains a colon,\n\
3371
HOST:PORT to access a board over a network";
3372
  mips_ops.to_open = mips_open;
3373
  mips_ops.to_wait = mips_wait;
3374
 
3375
  pmon_ops.to_shortname = "pmon";
3376
  pmon_ops.to_doc = "\
3377
Debug a board using the PMON MIPS remote debugging protocol over a serial\n\
3378
line. The argument is the device it is connected to or, if it contains a\n\
3379
colon, HOST:PORT to access a board over a network";
3380
  pmon_ops.to_open = pmon_open;
3381
  pmon_ops.to_wait = mips_wait;
3382
 
3383
  ddb_ops.to_shortname = "ddb";
3384
  ddb_ops.to_doc = "\
3385
Debug a board using the PMON MIPS remote debugging protocol over a serial\n\
3386
line. The first argument is the device it is connected to or, if it contains\n\
3387
a colon, HOST:PORT to access a board over a network.  The optional second\n\
3388
parameter is the temporary file in the form HOST:FILENAME to be used for\n\
3389
TFTP downloads to the board.  The optional third parameter is the local name\n\
3390
of the TFTP temporary file, if it differs from the filename seen by the board.";
3391
  ddb_ops.to_open = ddb_open;
3392
  ddb_ops.to_wait = mips_wait;
3393
 
3394
  lsi_ops.to_shortname = "lsi";
3395
  lsi_ops.to_doc = pmon_ops.to_doc;
3396
  lsi_ops.to_open = lsi_open;
3397
  lsi_ops.to_wait = mips_wait;
3398
 
3399
  /* Add the targets.  */
3400
  add_target (&mips_ops);
3401
  add_target (&pmon_ops);
3402
  add_target (&ddb_ops);
3403
  add_target (&lsi_ops);
3404
 
3405
  add_setshow_zinteger_cmd ("timeout", no_class, &mips_receive_wait, _("\
3406
Set timeout in seconds for remote MIPS serial I/O."), _("\
3407
Show timeout in seconds for remote MIPS serial I/O."), NULL,
3408
                            NULL,
3409
                            NULL, /* FIXME: i18n: */
3410
                            &setlist, &showlist);
3411
 
3412
  add_setshow_zinteger_cmd ("retransmit-timeout", no_class,
3413
                            &mips_retransmit_wait, _("\
3414
Set retransmit timeout in seconds for remote MIPS serial I/O."), _("\
3415
Show retransmit timeout in seconds for remote MIPS serial I/O."), _("\
3416
This is the number of seconds to wait for an acknowledgement to a packet\n\
3417
before resending the packet."),
3418
                            NULL,
3419
                            NULL, /* FIXME: i18n: */
3420
                            &setlist, &showlist);
3421
 
3422
  add_setshow_zinteger_cmd ("syn-garbage-limit", no_class,
3423
                            &mips_syn_garbage,  _("\
3424
Set the maximum number of characters to ignore when scanning for a SYN."), _("\
3425
Show the maximum number of characters to ignore when scanning for a SYN."), _("\
3426
This is the maximum number of characters GDB will ignore when trying to\n\
3427
synchronize with the remote system.  A value of -1 means that there is no\n\
3428
limit. (Note that these characters are printed out even though they are\n\
3429
ignored.)"),
3430
                            NULL,
3431
                            NULL, /* FIXME: i18n: */
3432
                            &setlist, &showlist);
3433
 
3434
  add_setshow_string_cmd ("monitor-prompt", class_obscure,
3435
                          &mips_monitor_prompt, _("\
3436
Set the prompt that GDB expects from the monitor."), _("\
3437
Show the prompt that GDB expects from the monitor."), NULL,
3438
                          NULL,
3439
                          NULL, /* FIXME: i18n: */
3440
                          &setlist, &showlist);
3441
 
3442
  add_setshow_zinteger_cmd ("monitor-warnings", class_obscure,
3443
                            &monitor_warnings, _("\
3444
Set printing of monitor warnings."), _("\
3445
Show printing of monitor warnings."), _("\
3446
When enabled, monitor warnings about hardware breakpoints will be displayed."),
3447
                            NULL,
3448
                            NULL, /* FIXME: i18n: */
3449
                            &setlist, &showlist);
3450
 
3451
  add_com ("pmon", class_obscure, pmon_command,
3452
           _("Send a packet to PMON (must be in debug mode)."));
3453
 
3454
  add_setshow_boolean_cmd ("mask-address", no_class, &mask_address_p, _("\
3455
Set zeroing of upper 32 bits of 64-bit addresses when talking to PMON targets."), _("\
3456
Show zeroing of upper 32 bits of 64-bit addresses when talking to PMON targets."), _("\
3457
Use \"on\" to enable the masking and \"off\" to disable it."),
3458
                           NULL,
3459
                           NULL, /* FIXME: i18n: */
3460
                           &setlist, &showlist);
3461
}

powered by: WebSVN 2.1.0

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