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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [dve3900-rom.c] - Blame information for rev 1774

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

Line No. Rev Author Line
1 104 markom
/* Remote debugging interface for Densan DVE-R3900 ROM monitor for
2
   GDB, the GNU debugger.
3
   Copyright 1997 Free Software Foundation, Inc.
4
 
5
   This file is part of GDB.
6
 
7
   This program is free software; you can redistribute it and/or modify
8
   it under the terms of the GNU General Public License as published by
9
   the Free Software Foundation; either version 2 of the License, or
10
   (at your option) any later version.
11
 
12
   This program is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
16
 
17
   You should have received a copy of the GNU General Public License
18
   along with this program; if not, write to the Free Software
19
   Foundation, Inc., 59 Temple Place - Suite 330,
20
   Boston, MA 02111-1307, USA.  */
21
 
22
#include "defs.h"
23
#include "gdbcore.h"
24
#include "target.h"
25
#include "monitor.h"
26
#include "serial.h"
27
#include "inferior.h"
28
#include "command.h"
29
#include "gdb_string.h"
30
#include <time.h>
31
 
32
/* Type of function passed to bfd_map_over_sections.  */
33
 
34
typedef void (*section_map_func) PARAMS ((bfd * abfd, asection * sect, PTR obj));
35
 
36
/* Packet escape character used by Densan monitor.  */
37
 
38
#define PESC 0xdc
39
 
40
/* Maximum packet size.  This is actually smaller than necessary
41
   just to be safe.  */
42
 
43
#define MAXPSIZE 1024
44
 
45
/* External functions.  */
46
 
47
extern void report_transfer_performance PARAMS ((unsigned long,
48
                                                 time_t, time_t));
49
 
50
/* Certain registers are "bitmapped", in that the monitor can only display
51
   them or let the user modify them as a series of named bitfields.
52
   This structure describes a field in a bitmapped register.  */
53
 
54
struct bit_field
55
  {
56
    char *prefix;               /* string appearing before the value */
57
    char *suffix;               /* string appearing after the value */
58
    char *user_name;            /* name used by human when entering field value */
59
    int length;                 /* number of bits in the field */
60
    int start;                  /* starting (least significant) bit number of field */
61
  };
62
 
63
/* Local functions for register manipulation.  */
64
 
65
static void r3900_supply_register PARAMS ((char *regname, int regnamelen,
66
                                           char *val, int vallen));
67
static void fetch_bad_vaddr PARAMS ((void));
68
static unsigned long fetch_fields PARAMS ((struct bit_field * bf));
69
static void fetch_bitmapped_register PARAMS ((int regno,
70
                                              struct bit_field * bf));
71
static void r3900_fetch_registers PARAMS ((int regno));
72
static void store_bitmapped_register PARAMS ((int regno,
73
                                              struct bit_field * bf));
74
static void r3900_store_registers PARAMS ((int regno));
75
 
76
/* Local functions for fast binary loading.  */
77
 
78
static void write_long PARAMS ((char *buf, long n));
79
static void write_long_le PARAMS ((char *buf, long n));
80
static int debug_readchar PARAMS ((int hex));
81
static void debug_write PARAMS ((unsigned char *buf, int buflen));
82
static void ignore_packet PARAMS ((void));
83
static void send_packet PARAMS ((char type, unsigned char *buf, int buflen,
84
                                 int seq));
85
static void process_read_request PARAMS ((unsigned char *buf, int buflen));
86
static void count_section PARAMS ((bfd * abfd, asection * s,
87
                                   unsigned int *section_count));
88
static void load_section PARAMS ((bfd * abfd, asection * s,
89
                                  unsigned int *data_count));
90
static void r3900_load PARAMS ((char *filename, int from_tty));
91
 
92
/* Miscellaneous local functions.  */
93
 
94
static void r3900_open PARAMS ((char *args, int from_tty));
95
 
96
 
97
/* Pointers to static functions in monitor.c for fetching and storing
98
   registers.  We can't use these function in certain cases where the Densan
99
   monitor acts perversely: for registers that it displays in bit-map
100
   format, and those that can't be modified at all.  In those cases
101
   we have to use our own functions to fetch and store their values.  */
102
 
103
static void (*orig_monitor_fetch_registers) PARAMS ((int regno));
104
static void (*orig_monitor_store_registers) PARAMS ((int regno));
105
 
106
/* Pointer to static function in monitor. for loading programs.
107
   We use this function for loading S-records via the serial link.  */
108
 
109
static void (*orig_monitor_load) PARAMS ((char *file, int from_tty));
110
 
111
/* This flag is set if a fast ethernet download should be used.  */
112
 
113
static int ethernet = 0;
114
 
115
/* This array of registers needs to match the indexes used by GDB. The
116
   whole reason this exists is because the various ROM monitors use
117
   different names than GDB does, and don't support all the registers
118
   either.  */
119
 
120
static char *r3900_regnames[NUM_REGS] =
121
{
122
  "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
123
  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
124
  "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
125
  "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
126
 
127
  "S",                          /* PS_REGNUM */
128
  "l",                          /* LO_REGNUM */
129
  "h",                          /* HI_REGNUM */
130
  "B",                          /* BADVADDR_REGNUM */
131
  "Pcause",                     /* CAUSE_REGNUM */
132
  "p"                           /* PC_REGNUM */
133
};
134
 
135
 
136
/* Table of register names produced by monitor's register dump command.  */
137
 
138
static struct reg_entry
139
  {
140
    char *name;
141
    int regno;
142
  }
143
reg_table[] =
144
{
145
  {
146
    "r0_zero", 0
147
  }
148
  ,
149
  {
150
    "r1_at", 1
151
  }
152
  ,
153
  {
154
    "r2_v0", 2
155
  }
156
  ,
157
  {
158
    "r3_v1", 3
159
  }
160
  ,
161
  {
162
    "r4_a0", 4
163
  }
164
  ,
165
  {
166
    "r5_a1", 5
167
  }
168
  ,
169
  {
170
    "r6_a2", 6
171
  }
172
  ,
173
  {
174
    "r7_a3", 7
175
  }
176
  ,
177
  {
178
    "r8_t0", 8
179
  }
180
  ,
181
  {
182
    "r9_t1", 9
183
  }
184
  ,
185
  {
186
    "r10_t2", 10
187
  }
188
  ,
189
  {
190
    "r11_t3", 11
191
  }
192
  ,
193
  {
194
    "r12_t4", 12
195
  }
196
  ,
197
  {
198
    "r13_t5", 13
199
  }
200
  ,
201
  {
202
    "r14_t6", 14
203
  }
204
  ,
205
  {
206
    "r15_t7", 15
207
  }
208
  ,
209
  {
210
    "r16_s0", 16
211
  }
212
  ,
213
  {
214
    "r17_s1", 17
215
  }
216
  ,
217
  {
218
    "r18_s2", 18
219
  }
220
  ,
221
  {
222
    "r19_s3", 19
223
  }
224
  ,
225
  {
226
    "r20_s4", 20
227
  }
228
  ,
229
  {
230
    "r21_s5", 21
231
  }
232
  ,
233
  {
234
    "r22_s6", 22
235
  }
236
  ,
237
  {
238
    "r23_s7", 23
239
  }
240
  ,
241
  {
242
    "r24_t8", 24
243
  }
244
  ,
245
  {
246
    "r25_t9", 25
247
  }
248
  ,
249
  {
250
    "r26_k0", 26
251
  }
252
  ,
253
  {
254
    "r27_k1", 27
255
  }
256
  ,
257
  {
258
    "r28_gp", 28
259
  }
260
  ,
261
  {
262
    "r29_sp", 29
263
  }
264
  ,
265
  {
266
    "r30_fp", 30
267
  }
268
  ,
269
  {
270
    "r31_ra", 31
271
  }
272
  ,
273
  {
274
    "HI", HI_REGNUM
275
  }
276
  ,
277
  {
278
    "LO", LO_REGNUM
279
  }
280
  ,
281
  {
282
    "PC", PC_REGNUM
283
  }
284
  ,
285
  {
286
    "BadV", BADVADDR_REGNUM
287
  }
288
  ,
289
  {
290
    NULL, 0
291
  }
292
};
293
 
294
 
295
/* The monitor displays the cache register along with the status register,
296
   as if they were a single register.  So when we want to fetch the
297
   status register, parse but otherwise ignore the fields of the
298
   cache register that the monitor displays.  Register fields that should
299
   be ignored have a length of zero in the tables below.  */
300
 
301
static struct bit_field status_fields[] =
302
{
303
  /* Status register portion */
304
  {"SR[<CU=", " ", "cu", 4, 28},
305
  {"RE=", " ", "re", 1, 25},
306
  {"BEV=", " ", "bev", 1, 22},
307
  {"TS=", " ", "ts", 1, 21},
308
  {"Nmi=", " ", "nmi", 1, 20},
309
  {"INT=", " ", "int", 6, 10},
310
  {"SW=", ">]", "sw", 2, 8},
311
  {"[<KUO=", " ", "kuo", 1, 5},
312
  {"IEO=", " ", "ieo", 1, 4},
313
  {"KUP=", " ", "kup", 1, 3},
314
  {"IEP=", " ", "iep", 1, 2},
315
  {"KUC=", " ", "kuc", 1, 1},
316
  {"IEC=", ">]", "iec", 1, 0},
317
 
318
  /* Cache register portion (dummy for parsing only) */
319
  {"CR[<IalO=", " ", "ialo", 0, 13},
320
  {"DalO=", " ", "dalo", 0, 12},
321
  {"IalP=", " ", "ialp", 0, 11},
322
  {"DalP=", " ", "dalp", 0, 10},
323
  {"IalC=", " ", "ialc", 0, 9},
324
  {"DalC=", ">] ", "dalc", 0, 8},
325
 
326
  {NULL, NULL, 0, 0}              /* end of table marker */
327
};
328
 
329
 
330
#if 0                           /* FIXME: Enable when we add support for modifying cache register.  */
331
static struct bit_field cache_fields[] =
332
{
333
  /* Status register portion (dummy for parsing only) */
334
  {"SR[<CU=", " ", "cu", 0, 28},
335
  {"RE=", " ", "re", 0, 25},
336
  {"BEV=", " ", "bev", 0, 22},
337
  {"TS=", " ", "ts", 0, 21},
338
  {"Nmi=", " ", "nmi", 0, 20},
339
  {"INT=", " ", "int", 0, 10},
340
  {"SW=", ">]", "sw", 0, 8},
341
  {"[<KUO=", " ", "kuo", 0, 5},
342
  {"IEO=", " ", "ieo", 0, 4},
343
  {"KUP=", " ", "kup", 0, 3},
344
  {"IEP=", " ", "iep", 0, 2},
345
  {"KUC=", " ", "kuc", 0, 1},
346
  {"IEC=", ">]", "iec", 0, 0},
347
 
348
  /* Cache register portion  */
349
  {"CR[<IalO=", " ", "ialo", 1, 13},
350
  {"DalO=", " ", "dalo", 1, 12},
351
  {"IalP=", " ", "ialp", 1, 11},
352
  {"DalP=", " ", "dalp", 1, 10},
353
  {"IalC=", " ", "ialc", 1, 9},
354
  {"DalC=", ">] ", "dalc", 1, 8},
355
 
356
  {NULL, NULL, NULL, 0, 0}        /* end of table marker */
357
};
358
#endif
359
 
360
 
361
static struct bit_field cause_fields[] =
362
{
363
  {"<BD=", " ", "bd", 1, 31},
364
  {"CE=", " ", "ce", 2, 28},
365
  {"IP=", " ", "ip", 6, 10},
366
  {"SW=", " ", "sw", 2, 8},
367
  {"EC=", ">]", "ec", 5, 2},
368
 
369
  {NULL, NULL, NULL, 0, 0}        /* end of table marker */
370
};
371
 
372
 
373
/* The monitor prints register values in the form
374
 
375
   regname = xxxx xxxx
376
 
377
   We look up the register name in a table, and remove the embedded space in
378
   the hex value before passing it to monitor_supply_register.  */
379
 
380
static void
381
r3900_supply_register (regname, regnamelen, val, vallen)
382
     char *regname;
383
     int regnamelen;
384
     char *val;
385
     int vallen;
386
{
387
  int regno = -1;
388
  int i;
389
  char valbuf[10];
390
  char *p;
391
 
392
  /* Perform some sanity checks on the register name and value.  */
393
  if (regnamelen < 2 || regnamelen > 7 || vallen != 9)
394
    return;
395
 
396
  /* Look up the register name.  */
397
  for (i = 0; reg_table[i].name != NULL; i++)
398
    {
399
      int rlen = strlen (reg_table[i].name);
400
      if (rlen == regnamelen && strncmp (regname, reg_table[i].name, rlen) == 0)
401
        {
402
          regno = reg_table[i].regno;
403
          break;
404
        }
405
    }
406
  if (regno == -1)
407
    return;
408
 
409
  /* Copy the hex value to a buffer and eliminate the embedded space. */
410
  for (i = 0, p = valbuf; i < vallen; i++)
411
    if (val[i] != ' ')
412
      *p++ = val[i];
413
  *p = '\0';
414
 
415
  monitor_supply_register (regno, valbuf);
416
}
417
 
418
 
419
/* Fetch the BadVaddr register.  Unlike the other registers, this
420
   one can't be modified, and the monitor won't even prompt to let
421
   you modify it.  */
422
 
423
static void
424
fetch_bad_vaddr ()
425
{
426
  char buf[20];
427
 
428
  monitor_printf ("xB\r");
429
  monitor_expect ("BadV=", NULL, 0);
430
  monitor_expect_prompt (buf, sizeof (buf));
431
  monitor_supply_register (BADVADDR_REGNUM, buf);
432
}
433
 
434
 
435
/* Read a series of bit fields from the monitor, and return their
436
   combined binary value.  */
437
 
438
static unsigned long
439
fetch_fields (bf)
440
     struct bit_field *bf;
441
{
442
  char buf[20];
443
  unsigned long val = 0;
444
  unsigned long bits;
445
 
446
  for (; bf->prefix != NULL; bf++)
447
    {
448
      monitor_expect (bf->prefix, NULL, 0);      /* get prefix */
449
      monitor_expect (bf->suffix, buf, sizeof (buf));   /* hex value, suffix */
450
      if (bf->length != 0)
451
        {
452
          bits = strtoul (buf, NULL, 16);       /* get field value */
453
          bits &= ((1 << bf->length) - 1);      /* mask out useless bits */
454
          val |= bits << bf->start;     /* insert into register */
455
        }
456
 
457
    }
458
 
459
  return val;
460
}
461
 
462
 
463
static void
464
fetch_bitmapped_register (regno, bf)
465
     int regno;
466
     struct bit_field *bf;
467
{
468
  unsigned long val;
469
  unsigned char regbuf[MAX_REGISTER_RAW_SIZE];
470
 
471
  monitor_printf ("x%s\r", r3900_regnames[regno]);
472
  val = fetch_fields (bf);
473
  monitor_printf (".\r");
474
  monitor_expect_prompt (NULL, 0);
475
 
476
  /* supply register stores in target byte order, so swap here */
477
 
478
  store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val);
479
  supply_register (regno, regbuf);
480
 
481
}
482
 
483
 
484
/* Fetch all registers (if regno is -1), or one register from the
485
   monitor.  For most registers, we can use the generic monitor_
486
   monitor_fetch_registers function.  But others are displayed in
487
   a very unusual fashion by the monitor, and must be handled specially.  */
488
 
489
static void
490
r3900_fetch_registers (regno)
491
     int regno;
492
{
493
  switch (regno)
494
    {
495
    case BADVADDR_REGNUM:
496
      fetch_bad_vaddr ();
497
      return;
498
    case PS_REGNUM:
499
      fetch_bitmapped_register (PS_REGNUM, status_fields);
500
      return;
501
    case CAUSE_REGNUM:
502
      fetch_bitmapped_register (CAUSE_REGNUM, cause_fields);
503
      return;
504
    default:
505
      orig_monitor_fetch_registers (regno);
506
    }
507
}
508
 
509
 
510
/* Write the new value of the bitmapped register to the monitor.  */
511
 
512
static void
513
store_bitmapped_register (regno, bf)
514
     int regno;
515
     struct bit_field *bf;
516
{
517
  unsigned long oldval, newval;
518
 
519
  /* Fetch the current value of the register.  */
520
  monitor_printf ("x%s\r", r3900_regnames[regno]);
521
  oldval = fetch_fields (bf);
522
  newval = read_register (regno);
523
 
524
  /* To save time, write just the fields that have changed.  */
525
  for (; bf->prefix != NULL; bf++)
526
    {
527
      if (bf->length != 0)
528
        {
529
          unsigned long oldbits, newbits, mask;
530
 
531
          mask = (1 << bf->length) - 1;
532
          oldbits = (oldval >> bf->start) & mask;
533
          newbits = (newval >> bf->start) & mask;
534
          if (oldbits != newbits)
535
            monitor_printf ("%s %lx ", bf->user_name, newbits);
536
        }
537
    }
538
 
539
  monitor_printf (".\r");
540
  monitor_expect_prompt (NULL, 0);
541
}
542
 
543
 
544
static void
545
r3900_store_registers (regno)
546
     int regno;
547
{
548
  switch (regno)
549
    {
550
    case PS_REGNUM:
551
      store_bitmapped_register (PS_REGNUM, status_fields);
552
      return;
553
    case CAUSE_REGNUM:
554
      store_bitmapped_register (CAUSE_REGNUM, cause_fields);
555
      return;
556
    default:
557
      orig_monitor_store_registers (regno);
558
    }
559
}
560
 
561
 
562
/* Write a 4-byte integer to the buffer in big-endian order.  */
563
 
564
static void
565
write_long (buf, n)
566
     char *buf;
567
     long n;
568
{
569
  buf[0] = (n >> 24) & 0xff;
570
  buf[1] = (n >> 16) & 0xff;
571
  buf[2] = (n >> 8) & 0xff;
572
  buf[3] = n & 0xff;
573
}
574
 
575
 
576
/* Write a 4-byte integer to the buffer in little-endian order.  */
577
 
578
static void
579
write_long_le (buf, n)
580
     char *buf;
581
     long n;
582
{
583
  buf[0] = n & 0xff;
584
  buf[1] = (n >> 8) & 0xff;
585
  buf[2] = (n >> 16) & 0xff;
586
  buf[3] = (n >> 24) & 0xff;
587
}
588
 
589
 
590
/* Read a character from the monitor.  If remote debugging is on,
591
   print the received character.  If HEX is non-zero, print the
592
   character in hexadecimal; otherwise, print it in ASCII.  */
593
 
594
static int
595
debug_readchar (hex)
596
     int hex;
597
{
598
  char buf[10];
599
  int c = monitor_readchar ();
600
 
601
  if (remote_debug > 0)
602
    {
603
      if (hex)
604
        sprintf (buf, "[%02x]", c & 0xff);
605
      else if (c == '\0')
606
        strcpy (buf, "\\0");
607
      else
608
        {
609
          buf[0] = c;
610
          buf[1] = '\0';
611
        }
612
      puts_debug ("Read -->", buf, "<--");
613
    }
614
  return c;
615
}
616
 
617
 
618
/* Send a buffer of characters to the monitor.  If remote debugging is on,
619
   print the sent buffer in hex.  */
620
 
621
static void
622
debug_write (buf, buflen)
623
     unsigned char *buf;
624
     int buflen;
625
{
626
  char s[10];
627
 
628
  monitor_write (buf, buflen);
629
 
630
  if (remote_debug > 0)
631
    {
632
      while (buflen-- > 0)
633
        {
634
          sprintf (s, "[%02x]", *buf & 0xff);
635
          puts_debug ("Sent -->", s, "<--");
636
          buf++;
637
        }
638
    }
639
}
640
 
641
 
642
/* Ignore a packet sent to us by the monitor.  It send packets
643
   when its console is in "communications interface" mode.   A packet
644
   is of this form:
645
 
646
   start of packet flag (one byte: 0xdc)
647
   packet type (one byte)
648
   length (low byte)
649
   length (high byte)
650
   data (length bytes)
651
 
652
   The last two bytes of the data field are a checksum, but we don't
653
   bother to verify it.
654
 */
655
 
656
static void
657
ignore_packet ()
658
{
659
  int c;
660
  int len;
661
 
662
  /* Ignore lots of trash (messages about section addresses, for example)
663
     until we see the start of a packet.  */
664
  for (len = 0; len < 256; len++)
665
    {
666
      c = debug_readchar (0);
667
      if (c == PESC)
668
        break;
669
    }
670
  if (len == 8)
671
    error ("Packet header byte not found; %02x seen instead.", c);
672
 
673
  /* Read the packet type and length.  */
674
  c = debug_readchar (1);       /* type */
675
 
676
  c = debug_readchar (1);       /* low byte of length */
677
  len = c & 0xff;
678
 
679
  c = debug_readchar (1);       /* high byte of length */
680
  len += (c & 0xff) << 8;
681
 
682
  /* Ignore the rest of the packet.  */
683
  while (len-- > 0)
684
    c = debug_readchar (1);
685
}
686
 
687
 
688
/* Encapsulate some data into a packet and send it to the monitor.
689
 
690
   The 'p' packet is a special case.  This is a packet we send
691
   in response to a read ('r') packet from the monitor.  This function
692
   appends a one-byte sequence number to the data field of such a packet.
693
 */
694
 
695
static void
696
send_packet (type, buf, buflen, seq)
697
     char type;
698
     unsigned char *buf;
699
     int buflen, seq;
700
{
701
  unsigned char hdr[4];
702
  int len = buflen;
703
  int sum, i;
704
 
705
  /* If this is a 'p' packet, add one byte for a sequence number.  */
706
  if (type == 'p')
707
    len++;
708
 
709
  /* If the buffer has a non-zero length, add two bytes for a checksum.  */
710
  if (len > 0)
711
    len += 2;
712
 
713
  /* Write the packet header.  */
714
  hdr[0] = PESC;
715
  hdr[1] = type;
716
  hdr[2] = len & 0xff;
717
  hdr[3] = (len >> 8) & 0xff;
718
  debug_write (hdr, sizeof (hdr));
719
 
720
  if (len)
721
    {
722
      /* Write the packet data.  */
723
      debug_write (buf, buflen);
724
 
725
      /* Write the sequence number if this is a 'p' packet.  */
726
      if (type == 'p')
727
        {
728
          hdr[0] = seq;
729
          debug_write (hdr, 1);
730
        }
731
 
732
      /* Write the checksum.  */
733
      sum = 0;
734
      for (i = 0; i < buflen; i++)
735
        {
736
          int tmp = (buf[i] & 0xff);
737
          if (i & 1)
738
            sum += tmp;
739
          else
740
            sum += tmp << 8;
741
        }
742
      if (type == 'p')
743
        {
744
          if (buflen & 1)
745
            sum += (seq & 0xff);
746
          else
747
            sum += (seq & 0xff) << 8;
748
        }
749
      sum = (sum & 0xffff) + ((sum >> 16) & 0xffff);
750
      sum += (sum >> 16) & 1;
751
      sum = ~sum;
752
 
753
      hdr[0] = (sum >> 8) & 0xff;
754
      hdr[1] = sum & 0xff;
755
      debug_write (hdr, 2);
756
    }
757
}
758
 
759
 
760
/* Respond to an expected read request from the monitor by sending
761
   data in chunks.  Handle all acknowledgements and handshaking packets.
762
 
763
   The monitor expects a response consisting of a one or more 'p' packets,
764
   each followed by a portion of the data requested.  The 'p' packet
765
   contains only a four-byte integer, the value of which is the number
766
   of bytes of data we are about to send.  Following the 'p' packet,
767
   the monitor expects the data bytes themselves in raw, unpacketized,
768
   form, without even a checksum.
769
 */
770
 
771
static void
772
process_read_request (buf, buflen)
773
     unsigned char *buf;
774
     int buflen;
775
{
776
  unsigned char len[4];
777
  int i, chunk;
778
  unsigned char seq;
779
 
780
  /* Discard the read request.  FIXME: we have to hope it's for
781
     the exact number of bytes we want to send; should check for this.  */
782
  ignore_packet ();
783
 
784
  for (i = chunk = 0, seq = 0; i < buflen; i += chunk, seq++)
785
    {
786
      /* Don't send more than MAXPSIZE bytes at a time.  */
787
      chunk = buflen - i;
788
      if (chunk > MAXPSIZE)
789
        chunk = MAXPSIZE;
790
 
791
      /* Write a packet containing the number of bytes we are sending.  */
792
      write_long_le (len, chunk);
793
      send_packet ('p', len, sizeof (len), seq);
794
 
795
      /* Write the data in raw form following the packet.  */
796
      debug_write (&buf[i], chunk);
797
 
798
      /* Discard the ACK packet.  */
799
      ignore_packet ();
800
    }
801
 
802
  /* Send an "end of data" packet.  */
803
  send_packet ('e', "", 0, 0);
804
}
805
 
806
 
807
/* Count loadable sections (helper function for r3900_load).  */
808
 
809
static void
810
count_section (abfd, s, section_count)
811
     bfd *abfd;
812
     asection *s;
813
     unsigned int *section_count;
814
{
815
  if (s->flags & SEC_LOAD && bfd_section_size (abfd, s) != 0)
816
    (*section_count)++;
817
}
818
 
819
 
820
/* Load a single BFD section (helper function for r3900_load).
821
 
822
   WARNING: this code is filled with assumptions about how
823
   the Densan monitor loads programs.  The monitor issues
824
   packets containing read requests, but rather than respond
825
   to them in an general way, we expect them to following
826
   a certain pattern.
827
 
828
   For example, we know that the monitor will start loading by
829
   issuing an 8-byte read request for the binary file header.
830
   We know this is coming and ignore the actual contents
831
   of the read request packet.
832
 */
833
 
834
static void
835
load_section (abfd, s, data_count)
836
     bfd *abfd;
837
     asection *s;
838
     unsigned int *data_count;
839
{
840
  if (s->flags & SEC_LOAD)
841
    {
842
      bfd_size_type section_size = bfd_section_size (abfd, s);
843
      bfd_vma section_base = bfd_section_lma (abfd, s);
844
      unsigned char *buffer;
845
      unsigned char header[8];
846
 
847
      /* Don't output zero-length sections.  */
848
      if (section_size == 0)
849
        return;
850
      if (data_count)
851
        *data_count += section_size;
852
 
853
      /* Print some fluff about the section being loaded.  */
854
      printf_filtered ("Loading section %s, size 0x%lx lma ",
855
                       bfd_section_name (abfd, s), (long) section_size);
856
      print_address_numeric (section_base, 1, gdb_stdout);
857
      printf_filtered ("\n");
858
      gdb_flush (gdb_stdout);
859
 
860
      /* Write the section header (location and size).  */
861
      write_long (&header[0], (long) section_base);
862
      write_long (&header[4], (long) section_size);
863
      process_read_request (header, sizeof (header));
864
 
865
      /* Read the section contents into a buffer, write it out,
866
         then free the buffer.  */
867
      buffer = (unsigned char *) xmalloc (section_size);
868
      bfd_get_section_contents (abfd, s, buffer, 0, section_size);
869
      process_read_request (buffer, section_size);
870
      free (buffer);
871
    }
872
}
873
 
874
 
875
/* When the ethernet is used as the console port on the Densan board,
876
   we can use the "Rm" command to do a fast binary load.  The format
877
   of the download data is:
878
 
879
   number of sections (4 bytes)
880
   starting address (4 bytes)
881
   repeat for each section:
882
   location address (4 bytes)
883
   section size (4 bytes)
884
   binary data
885
 
886
   The 4-byte fields are all in big-endian order.
887
 
888
   Using this command is tricky because we have to put the monitor
889
   into a special funky "communications interface" mode, in which
890
   it sends and receives packets of data along with the normal prompt.
891
 */
892
 
893
static void
894
r3900_load (filename, from_tty)
895
     char *filename;
896
     int from_tty;
897
{
898
  bfd *abfd;
899
  unsigned int data_count = 0;
900
  time_t start_time, end_time;  /* for timing of download */
901
  int section_count = 0;
902
  unsigned char buffer[8];
903
 
904
  /* If we are not using the ethernet, use the normal monitor load,
905
     which sends S-records over the serial link.  */
906
  if (!ethernet)
907
    {
908
      orig_monitor_load (filename, from_tty);
909
      return;
910
    }
911
 
912
  /* Open the file.  */
913
  if (filename == NULL || filename[0] == 0)
914
    filename = get_exec_file (1);
915
  abfd = bfd_openr (filename, 0);
916
  if (!abfd)
917
    error ("Unable to open file %s\n", filename);
918
  if (bfd_check_format (abfd, bfd_object) == 0)
919
    error ("File is not an object file\n");
920
 
921
  /* Output the "vconsi" command to get the monitor in the communication
922
     state where it will accept a load command.  This will cause
923
     the monitor to emit a packet before each prompt, so ignore the packet.  */
924
  monitor_printf ("vconsi\r");
925
  ignore_packet ();
926
  monitor_expect_prompt (NULL, 0);
927
 
928
  /* Output the "Rm" (load) command and respond to the subsequent "open"
929
     packet by sending an ACK packet.  */
930
  monitor_printf ("Rm\r");
931
  ignore_packet ();
932
  send_packet ('a', "", 0, 0);
933
 
934
  /* Output the fast load header (number of sections and starting address).  */
935
  bfd_map_over_sections ((bfd *) abfd, (section_map_func) count_section,
936
                         &section_count);
937
  write_long (&buffer[0], (long) section_count);
938
  if (exec_bfd)
939
    write_long (&buffer[4], (long) bfd_get_start_address (exec_bfd));
940
  else
941
    write_long (&buffer[4], 0);
942
  process_read_request (buffer, sizeof (buffer));
943
 
944
  /* Output the section data.  */
945
  start_time = time (NULL);
946
  bfd_map_over_sections (abfd, (section_map_func) load_section, &data_count);
947
  end_time = time (NULL);
948
 
949
  /* Acknowledge the close packet and put the monitor back into
950
     "normal" mode so it won't send packets any more.  */
951
  ignore_packet ();
952
  send_packet ('a', "", 0, 0);
953
  monitor_expect_prompt (NULL, 0);
954
  monitor_printf ("vconsx\r");
955
  monitor_expect_prompt (NULL, 0);
956
 
957
  /* Print start address and download performance information.  */
958
  printf_filtered ("Start address 0x%lx\n", (long) bfd_get_start_address (abfd));
959
  report_transfer_performance (data_count, start_time, end_time);
960
 
961
  /* Finally, make the PC point at the start address */
962
  if (exec_bfd)
963
    write_pc (bfd_get_start_address (exec_bfd));
964
 
965
  inferior_pid = 0;              /* No process now */
966
 
967
  /* This is necessary because many things were based on the PC at the
968
     time that we attached to the monitor, which is no longer valid
969
     now that we have loaded new code (and just changed the PC).
970
     Another way to do this might be to call normal_stop, except that
971
     the stack may not be valid, and things would get horribly
972
     confused... */
973
  clear_symtab_users ();
974
}
975
 
976
 
977
/* Commands to send to the monitor when first connecting:
978
   * The bare carriage return forces a prompt from the monitor
979
   (monitor doesn't prompt immediately after a reset).
980
   * The "vconsx" switches the monitor back to interactive mode
981
   in case an aborted download had left it in packet mode.
982
   * The "Xtr" command causes subsequent "t" (trace) commands to display
983
   the general registers only.
984
   * The "Xxr" command does the same thing for the "x" (examine
985
   registers) command.
986
   * The "bx" command clears all breakpoints.
987
 */
988
 
989
static char *r3900_inits[] =
990
{"\r", "vconsx\r", "Xtr\r", "Xxr\r", "bx\r", NULL};
991
static char *dummy_inits[] =
992
{NULL};
993
 
994
static struct target_ops r3900_ops;
995
static struct monitor_ops r3900_cmds;
996
 
997
static void
998
r3900_open (args, from_tty)
999
     char *args;
1000
     int from_tty;
1001
{
1002
  char buf[64];
1003
  int i;
1004
 
1005
  monitor_open (args, &r3900_cmds, from_tty);
1006
 
1007
  /* We have to handle sending the init strings ourselves, because
1008
     the first two strings we send (carriage returns) may not be echoed
1009
     by the monitor, but the rest will be.  */
1010
  monitor_printf_noecho ("\r\r");
1011
  for (i = 0; r3900_inits[i] != NULL; i++)
1012
    {
1013
      monitor_printf (r3900_inits[i]);
1014
      monitor_expect_prompt (NULL, 0);
1015
    }
1016
 
1017
  /* Attempt to determine whether the console device is ethernet or serial.
1018
     This will tell us which kind of load to use (S-records over a serial
1019
     link, or the Densan fast binary multi-section format over the net).  */
1020
 
1021
  ethernet = 0;
1022
  monitor_printf ("v\r");
1023
  if (monitor_expect ("console device :", NULL, 0) != -1)
1024
    if (monitor_expect ("\n", buf, sizeof (buf)) != -1)
1025
      if (strstr (buf, "ethernet") != NULL)
1026
        ethernet = 1;
1027
  monitor_expect_prompt (NULL, 0);
1028
}
1029
 
1030
void
1031
_initialize_r3900_rom ()
1032
{
1033
  r3900_cmds.flags = MO_NO_ECHO_ON_OPEN |
1034
    MO_ADDR_BITS_REMOVE |
1035
    MO_CLR_BREAK_USES_ADDR |
1036
    MO_GETMEM_READ_SINGLE |
1037
    MO_PRINT_PROGRAM_OUTPUT;
1038
 
1039
  r3900_cmds.init = dummy_inits;
1040
  r3900_cmds.cont = "g\r";
1041
  r3900_cmds.step = "t\r";
1042
  r3900_cmds.set_break = "b %A\r";      /* COREADDR */
1043
  r3900_cmds.clr_break = "b %A,0\r";    /* COREADDR */
1044
  r3900_cmds.fill = "fx %A s %x %x\r";  /* COREADDR, len, val */
1045
 
1046
  r3900_cmds.setmem.cmdb = "sx %A %x\r";        /* COREADDR, val */
1047
  r3900_cmds.setmem.cmdw = "sh %A %x\r";        /* COREADDR, val */
1048
  r3900_cmds.setmem.cmdl = "sw %A %x\r";        /* COREADDR, val */
1049
 
1050
  r3900_cmds.getmem.cmdb = "sx %A\r";   /* COREADDR */
1051
  r3900_cmds.getmem.cmdw = "sh %A\r";   /* COREADDR */
1052
  r3900_cmds.getmem.cmdl = "sw %A\r";   /* COREADDR */
1053
  r3900_cmds.getmem.resp_delim = " : ";
1054
  r3900_cmds.getmem.term = " ";
1055
  r3900_cmds.getmem.term_cmd = ".\r";
1056
 
1057
  r3900_cmds.setreg.cmd = "x%s %x\r";   /* regname, val */
1058
 
1059
  r3900_cmds.getreg.cmd = "x%s\r";      /* regname */
1060
  r3900_cmds.getreg.resp_delim = "=";
1061
  r3900_cmds.getreg.term = " ";
1062
  r3900_cmds.getreg.term_cmd = ".\r";
1063
 
1064
  r3900_cmds.dump_registers = "x\r";
1065
  r3900_cmds.register_pattern =
1066
    "\\([a-zA-Z0-9_]+\\) *=\\([0-9a-f]+ [0-9a-f]+\\b\\)";
1067
  r3900_cmds.supply_register = r3900_supply_register;
1068
  /* S-record download, via "keyboard port".  */
1069
  r3900_cmds.load = "r0\r";
1070
  r3900_cmds.prompt = "#";
1071
  r3900_cmds.line_term = "\r";
1072
  r3900_cmds.target = &r3900_ops;
1073
  r3900_cmds.stopbits = SERIAL_1_STOPBITS;
1074
  r3900_cmds.regnames = r3900_regnames;
1075
  r3900_cmds.magic = MONITOR_OPS_MAGIC;
1076
 
1077
  init_monitor_ops (&r3900_ops);
1078
 
1079
  r3900_ops.to_shortname = "r3900";
1080
  r3900_ops.to_longname = "R3900 monitor";
1081
  r3900_ops.to_doc = "Debug using the DVE R3900 monitor.\n\
1082
Specify the serial device it is connected to (e.g. /dev/ttya).";
1083
  r3900_ops.to_open = r3900_open;
1084
 
1085
  /* Override the functions to fetch and store registers.  But save the
1086
     addresses of the default functions, because we will use those functions
1087
     for "normal" registers.  */
1088
 
1089
  orig_monitor_fetch_registers = r3900_ops.to_fetch_registers;
1090
  orig_monitor_store_registers = r3900_ops.to_store_registers;
1091
  r3900_ops.to_fetch_registers = r3900_fetch_registers;
1092
  r3900_ops.to_store_registers = r3900_store_registers;
1093
 
1094
  /* Override the load function, but save the address of the default
1095
     function to use when loading S-records over a serial link.  */
1096
  orig_monitor_load = r3900_ops.to_load;
1097
  r3900_ops.to_load = r3900_load;
1098
 
1099
  add_target (&r3900_ops);
1100
}

powered by: WebSVN 2.1.0

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