2004-07-28 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / d10v-tdep.c
1 /* Target-dependent code for Renesas D10V, for GDB.
2
3 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
4 Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23 /* Contributed by Martin Hunt, hunt@cygnus.com */
24
25 #include "defs.h"
26 #include "frame.h"
27 #include "frame-unwind.h"
28 #include "frame-base.h"
29 #include "symtab.h"
30 #include "gdbtypes.h"
31 #include "gdbcmd.h"
32 #include "gdbcore.h"
33 #include "gdb_string.h"
34 #include "value.h"
35 #include "inferior.h"
36 #include "dis-asm.h"
37 #include "symfile.h"
38 #include "objfiles.h"
39 #include "language.h"
40 #include "arch-utils.h"
41 #include "regcache.h"
42 #include "remote.h"
43 #include "floatformat.h"
44 #include "gdb/sim-d10v.h"
45 #include "sim-regno.h"
46 #include "disasm.h"
47 #include "trad-frame.h"
48
49 #include "gdb_assert.h"
50
51 struct gdbarch_tdep
52 {
53 int a0_regnum;
54 int nr_dmap_regs;
55 unsigned long (*dmap_register) (void *regcache, int nr);
56 unsigned long (*imap_register) (void *regcache, int nr);
57 };
58
59 /* These are the addresses the D10V-EVA board maps data and
60 instruction memory to. */
61
62 enum memspace {
63 DMEM_START = 0x2000000,
64 IMEM_START = 0x1000000,
65 STACK_START = 0x200bffe
66 };
67
68 /* d10v register names. */
69
70 enum
71 {
72 R0_REGNUM = 0,
73 R3_REGNUM = 3,
74 D10V_FP_REGNUM = 11,
75 LR_REGNUM = 13,
76 D10V_SP_REGNUM = 15,
77 PSW_REGNUM = 16,
78 D10V_PC_REGNUM = 18,
79 NR_IMAP_REGS = 2,
80 NR_A_REGS = 2,
81 TS2_NUM_REGS = 37,
82 TS3_NUM_REGS = 42,
83 /* d10v calling convention. */
84 ARG1_REGNUM = R0_REGNUM,
85 ARGN_REGNUM = R3_REGNUM
86 };
87
88 static int
89 nr_dmap_regs (struct gdbarch *gdbarch)
90 {
91 return gdbarch_tdep (gdbarch)->nr_dmap_regs;
92 }
93
94 static int
95 a0_regnum (struct gdbarch *gdbarch)
96 {
97 return gdbarch_tdep (gdbarch)->a0_regnum;
98 }
99
100 /* Local functions */
101
102 extern void _initialize_d10v_tdep (void);
103
104 static void d10v_eva_prepare_to_trace (void);
105
106 static void d10v_eva_get_trace_data (void);
107
108 static CORE_ADDR
109 d10v_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
110 {
111 /* Align to the size of an instruction (so that they can safely be
112 pushed onto the stack. */
113 return sp & ~3;
114 }
115
116 static const unsigned char *
117 d10v_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
118 {
119 static unsigned char breakpoint[] =
120 {0x2f, 0x90, 0x5e, 0x00};
121 *lenptr = sizeof (breakpoint);
122 return breakpoint;
123 }
124
125 /* Map the REG_NR onto an ascii name. Return NULL or an empty string
126 when the reg_nr isn't valid. */
127
128 enum ts2_regnums
129 {
130 TS2_IMAP0_REGNUM = 32,
131 TS2_DMAP_REGNUM = 34,
132 TS2_NR_DMAP_REGS = 1,
133 TS2_A0_REGNUM = 35
134 };
135
136 static const char *
137 d10v_ts2_register_name (int reg_nr)
138 {
139 static char *register_names[] =
140 {
141 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
142 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
143 "psw", "bpsw", "pc", "bpc", "cr4", "cr5", "cr6", "rpt_c",
144 "rpt_s", "rpt_e", "mod_s", "mod_e", "cr12", "cr13", "iba", "cr15",
145 "imap0", "imap1", "dmap", "a0", "a1"
146 };
147 if (reg_nr < 0)
148 return NULL;
149 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
150 return NULL;
151 return register_names[reg_nr];
152 }
153
154 enum ts3_regnums
155 {
156 TS3_IMAP0_REGNUM = 36,
157 TS3_DMAP0_REGNUM = 38,
158 TS3_NR_DMAP_REGS = 4,
159 TS3_A0_REGNUM = 32
160 };
161
162 static const char *
163 d10v_ts3_register_name (int reg_nr)
164 {
165 static char *register_names[] =
166 {
167 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
168 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
169 "psw", "bpsw", "pc", "bpc", "cr4", "cr5", "cr6", "rpt_c",
170 "rpt_s", "rpt_e", "mod_s", "mod_e", "cr12", "cr13", "iba", "cr15",
171 "a0", "a1",
172 "spi", "spu",
173 "imap0", "imap1",
174 "dmap0", "dmap1", "dmap2", "dmap3"
175 };
176 if (reg_nr < 0)
177 return NULL;
178 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
179 return NULL;
180 return register_names[reg_nr];
181 }
182
183 /* Access the DMAP/IMAP registers in a target independent way.
184
185 Divide the D10V's 64k data space into four 16k segments:
186 0x0000 -- 0x3fff, 0x4000 -- 0x7fff, 0x8000 -- 0xbfff, and
187 0xc000 -- 0xffff.
188
189 On the TS2, the first two segments (0x0000 -- 0x3fff, 0x4000 --
190 0x7fff) always map to the on-chip data RAM, and the fourth always
191 maps to I/O space. The third (0x8000 - 0xbfff) can be mapped into
192 unified memory or instruction memory, under the control of the
193 single DMAP register.
194
195 On the TS3, there are four DMAP registers, each of which controls
196 one of the segments. */
197
198 static unsigned long
199 d10v_ts2_dmap_register (void *regcache, int reg_nr)
200 {
201 switch (reg_nr)
202 {
203 case 0:
204 case 1:
205 return 0x2000;
206 case 2:
207 {
208 ULONGEST reg;
209 regcache_cooked_read_unsigned (regcache, TS2_DMAP_REGNUM, &reg);
210 return reg;
211 }
212 default:
213 return 0;
214 }
215 }
216
217 static unsigned long
218 d10v_ts3_dmap_register (void *regcache, int reg_nr)
219 {
220 ULONGEST reg;
221 regcache_cooked_read_unsigned (regcache, TS3_DMAP0_REGNUM + reg_nr, &reg);
222 return reg;
223 }
224
225 static unsigned long
226 d10v_ts2_imap_register (void *regcache, int reg_nr)
227 {
228 ULONGEST reg;
229 regcache_cooked_read_unsigned (regcache, TS2_IMAP0_REGNUM + reg_nr, &reg);
230 return reg;
231 }
232
233 static unsigned long
234 d10v_ts3_imap_register (void *regcache, int reg_nr)
235 {
236 ULONGEST reg;
237 regcache_cooked_read_unsigned (regcache, TS3_IMAP0_REGNUM + reg_nr, &reg);
238 return reg;
239 }
240
241 /* MAP GDB's internal register numbering (determined by the layout
242 from the DEPRECATED_REGISTER_BYTE array) onto the simulator's
243 register numbering. */
244
245 static int
246 d10v_ts2_register_sim_regno (int nr)
247 {
248 /* Only makes sense to supply raw registers. */
249 gdb_assert (nr >= 0 && nr < NUM_REGS);
250 if (nr >= TS2_IMAP0_REGNUM
251 && nr < TS2_IMAP0_REGNUM + NR_IMAP_REGS)
252 return nr - TS2_IMAP0_REGNUM + SIM_D10V_IMAP0_REGNUM;
253 if (nr == TS2_DMAP_REGNUM)
254 return nr - TS2_DMAP_REGNUM + SIM_D10V_TS2_DMAP_REGNUM;
255 if (nr >= TS2_A0_REGNUM
256 && nr < TS2_A0_REGNUM + NR_A_REGS)
257 return nr - TS2_A0_REGNUM + SIM_D10V_A0_REGNUM;
258 return nr;
259 }
260
261 static int
262 d10v_ts3_register_sim_regno (int nr)
263 {
264 /* Only makes sense to supply raw registers. */
265 gdb_assert (nr >= 0 && nr < NUM_REGS);
266 if (nr >= TS3_IMAP0_REGNUM
267 && nr < TS3_IMAP0_REGNUM + NR_IMAP_REGS)
268 return nr - TS3_IMAP0_REGNUM + SIM_D10V_IMAP0_REGNUM;
269 if (nr >= TS3_DMAP0_REGNUM
270 && nr < TS3_DMAP0_REGNUM + TS3_NR_DMAP_REGS)
271 return nr - TS3_DMAP0_REGNUM + SIM_D10V_DMAP0_REGNUM;
272 if (nr >= TS3_A0_REGNUM
273 && nr < TS3_A0_REGNUM + NR_A_REGS)
274 return nr - TS3_A0_REGNUM + SIM_D10V_A0_REGNUM;
275 return nr;
276 }
277
278 /* Return the GDB type object for the "standard" data type
279 of data in register N. */
280
281 static struct type *
282 d10v_register_type (struct gdbarch *gdbarch, int reg_nr)
283 {
284 if (reg_nr == D10V_PC_REGNUM)
285 return builtin_type (gdbarch)->builtin_func_ptr;
286 if (reg_nr == D10V_SP_REGNUM || reg_nr == D10V_FP_REGNUM)
287 return builtin_type (gdbarch)->builtin_data_ptr;
288 else if (reg_nr >= a0_regnum (gdbarch)
289 && reg_nr < (a0_regnum (gdbarch) + NR_A_REGS))
290 return builtin_type (gdbarch)->builtin_int64;
291 else
292 return builtin_type (gdbarch)->builtin_int16;
293 }
294
295 static int
296 d10v_iaddr_p (CORE_ADDR x)
297 {
298 return (((x) & 0x3000000) == IMEM_START);
299 }
300
301 static CORE_ADDR
302 d10v_make_daddr (CORE_ADDR x)
303 {
304 return ((x) | DMEM_START);
305 }
306
307 static CORE_ADDR
308 d10v_make_iaddr (CORE_ADDR x)
309 {
310 if (d10v_iaddr_p (x))
311 return x; /* Idempotency -- x is already in the IMEM space. */
312 else
313 return (((x) << 2) | IMEM_START);
314 }
315
316 static CORE_ADDR
317 d10v_convert_iaddr_to_raw (CORE_ADDR x)
318 {
319 return (((x) >> 2) & 0xffff);
320 }
321
322 static CORE_ADDR
323 d10v_convert_daddr_to_raw (CORE_ADDR x)
324 {
325 return ((x) & 0xffff);
326 }
327
328 static void
329 d10v_address_to_pointer (struct type *type, void *buf, CORE_ADDR addr)
330 {
331 /* Is it a code address? */
332 if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
333 || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD)
334 {
335 store_unsigned_integer (buf, TYPE_LENGTH (type),
336 d10v_convert_iaddr_to_raw (addr));
337 }
338 else
339 {
340 /* Strip off any upper segment bits. */
341 store_unsigned_integer (buf, TYPE_LENGTH (type),
342 d10v_convert_daddr_to_raw (addr));
343 }
344 }
345
346 static CORE_ADDR
347 d10v_pointer_to_address (struct type *type, const void *buf)
348 {
349 CORE_ADDR addr = extract_unsigned_integer (buf, TYPE_LENGTH (type));
350 /* Is it a code address? */
351 if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
352 || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD
353 || TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type)))
354 return d10v_make_iaddr (addr);
355 else
356 return d10v_make_daddr (addr);
357 }
358
359 /* Don't do anything if we have an integer, this way users can type 'x
360 <addr>' w/o having gdb outsmart them. The internal gdb conversions
361 to the correct space are taken care of in the pointer_to_address
362 function. If we don't do this, 'x $fp' wouldn't work. */
363 static CORE_ADDR
364 d10v_integer_to_address (struct type *type, void *buf)
365 {
366 LONGEST val;
367 val = unpack_long (type, buf);
368 return val;
369 }
370
371 /* Handle the d10v's return_value convention. */
372
373 static enum return_value_convention
374 d10v_return_value (struct gdbarch *gdbarch, struct type *valtype,
375 struct regcache *regcache, void *readbuf,
376 const void *writebuf)
377 {
378 if (TYPE_LENGTH (valtype) > 8)
379 /* Anything larger than 8 bytes (4 registers) goes on the stack. */
380 return RETURN_VALUE_STRUCT_CONVENTION;
381 if (TYPE_LENGTH (valtype) == 5
382 || TYPE_LENGTH (valtype) == 6)
383 /* Anything 5 or 6 bytes in size goes in memory. Contents don't
384 appear to matter. Note that 7 and 8 byte objects do end up in
385 registers! */
386 return RETURN_VALUE_STRUCT_CONVENTION;
387 if (TYPE_LENGTH (valtype) == 1)
388 {
389 /* All single byte values go in a register stored right-aligned.
390 Note: 2 byte integer values are handled further down. */
391 if (readbuf)
392 {
393 /* Since TYPE is smaller than the register, there isn't a
394 sign extension problem. Let the extraction truncate the
395 register value. */
396 ULONGEST regval;
397 regcache_cooked_read_unsigned (regcache, R0_REGNUM,
398 &regval);
399 store_unsigned_integer (readbuf, TYPE_LENGTH (valtype), regval);
400
401 }
402 if (writebuf)
403 {
404 ULONGEST regval;
405 if (TYPE_CODE (valtype) == TYPE_CODE_INT)
406 /* Some sort of integer value stored in R0. Use
407 unpack_long since that should handle any required sign
408 extension. */
409 regval = unpack_long (valtype, writebuf);
410 else
411 /* Some other type. Don't sign-extend the value when
412 storing it in the register. */
413 regval = extract_unsigned_integer (writebuf, 1);
414 regcache_cooked_write_unsigned (regcache, R0_REGNUM, regval);
415 }
416 return RETURN_VALUE_REGISTER_CONVENTION;
417 }
418 if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
419 || TYPE_CODE (valtype) == TYPE_CODE_UNION)
420 && TYPE_NFIELDS (valtype) > 1
421 && TYPE_FIELD_BITPOS (valtype, 1) == 8)
422 /* If a composite is 8 bit aligned (determined by looking at the
423 start address of the second field), put it in memory. */
424 return RETURN_VALUE_STRUCT_CONVENTION;
425 /* Assume it is in registers. */
426 if (writebuf || readbuf)
427 {
428 int reg;
429 /* Per above, the value is never more than 8 bytes long. */
430 gdb_assert (TYPE_LENGTH (valtype) <= 8);
431 /* Xfer 2 bytes at a time. */
432 for (reg = 0; (reg * 2) + 1 < TYPE_LENGTH (valtype); reg++)
433 {
434 if (readbuf)
435 regcache_cooked_read (regcache, R0_REGNUM + reg,
436 (bfd_byte *) readbuf + reg * 2);
437 if (writebuf)
438 regcache_cooked_write (regcache, R0_REGNUM + reg,
439 (bfd_byte *) writebuf + reg * 2);
440 }
441 /* Any trailing byte ends up _left_ aligned. */
442 if ((reg * 2) < TYPE_LENGTH (valtype))
443 {
444 if (readbuf)
445 regcache_cooked_read_part (regcache, R0_REGNUM + reg,
446 0, 1, (bfd_byte *) readbuf + reg * 2);
447 if (writebuf)
448 regcache_cooked_write_part (regcache, R0_REGNUM + reg,
449 0, 1, (bfd_byte *) writebuf + reg * 2);
450 }
451 }
452 return RETURN_VALUE_REGISTER_CONVENTION;
453 }
454
455 static int
456 check_prologue (unsigned short op)
457 {
458 /* st rn, @-sp */
459 if ((op & 0x7E1F) == 0x6C1F)
460 return 1;
461
462 /* st2w rn, @-sp */
463 if ((op & 0x7E3F) == 0x6E1F)
464 return 1;
465
466 /* subi sp, n */
467 if ((op & 0x7FE1) == 0x01E1)
468 return 1;
469
470 /* mv r11, sp */
471 if (op == 0x417E)
472 return 1;
473
474 /* nop */
475 if (op == 0x5E00)
476 return 1;
477
478 /* st rn, @sp */
479 if ((op & 0x7E1F) == 0x681E)
480 return 1;
481
482 /* st2w rn, @sp */
483 if ((op & 0x7E3F) == 0x3A1E)
484 return 1;
485
486 return 0;
487 }
488
489 static CORE_ADDR
490 d10v_skip_prologue (CORE_ADDR pc)
491 {
492 unsigned long op;
493 unsigned short op1, op2;
494 CORE_ADDR func_addr, func_end;
495 struct symtab_and_line sal;
496
497 /* If we have line debugging information, then the end of the prologue
498 should be the first assembly instruction of the first source line. */
499 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
500 {
501 sal = find_pc_line (func_addr, 0);
502 if (sal.end && sal.end < func_end)
503 return sal.end;
504 }
505
506 if (target_read_memory (pc, (char *) &op, 4))
507 return pc; /* Can't access it -- assume no prologue. */
508
509 while (1)
510 {
511 op = (unsigned long) read_memory_integer (pc, 4);
512 if ((op & 0xC0000000) == 0xC0000000)
513 {
514 /* long instruction */
515 if (((op & 0x3FFF0000) != 0x01FF0000) && /* add3 sp,sp,n */
516 ((op & 0x3F0F0000) != 0x340F0000) && /* st rn, @(offset,sp) */
517 ((op & 0x3F1F0000) != 0x350F0000)) /* st2w rn, @(offset,sp) */
518 break;
519 }
520 else
521 {
522 /* short instructions */
523 if ((op & 0xC0000000) == 0x80000000)
524 {
525 op2 = (op & 0x3FFF8000) >> 15;
526 op1 = op & 0x7FFF;
527 }
528 else
529 {
530 op1 = (op & 0x3FFF8000) >> 15;
531 op2 = op & 0x7FFF;
532 }
533 if (check_prologue (op1))
534 {
535 if (!check_prologue (op2))
536 {
537 /* If the previous opcode was really part of the
538 prologue and not just a NOP, then we want to
539 break after both instructions. */
540 if (op1 != 0x5E00)
541 pc += 4;
542 break;
543 }
544 }
545 else
546 break;
547 }
548 pc += 4;
549 }
550 return pc;
551 }
552
553 struct d10v_unwind_cache
554 {
555 /* The previous frame's inner most stack address. Used as this
556 frame ID's stack_addr. */
557 CORE_ADDR prev_sp;
558 /* The frame's base, optionally used by the high-level debug info. */
559 CORE_ADDR base;
560 int size;
561 /* How far the SP and r11 (FP) have been offset from the start of
562 the stack frame (as defined by the previous frame's stack
563 pointer). */
564 LONGEST sp_offset;
565 LONGEST r11_offset;
566 int uses_frame;
567 /* Table indicating the location of each and every register. */
568 struct trad_frame_saved_reg *saved_regs;
569 };
570
571 static int
572 prologue_find_regs (struct d10v_unwind_cache *info, unsigned short op,
573 CORE_ADDR addr)
574 {
575 int n;
576
577 /* st rn, @-sp */
578 if ((op & 0x7E1F) == 0x6C1F)
579 {
580 n = (op & 0x1E0) >> 5;
581 info->sp_offset -= 2;
582 info->saved_regs[n].addr = info->sp_offset;
583 return 1;
584 }
585
586 /* st2w rn, @-sp */
587 else if ((op & 0x7E3F) == 0x6E1F)
588 {
589 n = (op & 0x1E0) >> 5;
590 info->sp_offset -= 4;
591 info->saved_regs[n + 0].addr = info->sp_offset + 0;
592 info->saved_regs[n + 1].addr = info->sp_offset + 2;
593 return 1;
594 }
595
596 /* subi sp, n */
597 if ((op & 0x7FE1) == 0x01E1)
598 {
599 n = (op & 0x1E) >> 1;
600 if (n == 0)
601 n = 16;
602 info->sp_offset -= n;
603 return 1;
604 }
605
606 /* mv r11, sp */
607 if (op == 0x417E)
608 {
609 info->uses_frame = 1;
610 info->r11_offset = info->sp_offset;
611 return 1;
612 }
613
614 /* st rn, @r11 */
615 if ((op & 0x7E1F) == 0x6816)
616 {
617 n = (op & 0x1E0) >> 5;
618 info->saved_regs[n].addr = info->r11_offset;
619 return 1;
620 }
621
622 /* nop */
623 if (op == 0x5E00)
624 return 1;
625
626 /* st rn, @sp */
627 if ((op & 0x7E1F) == 0x681E)
628 {
629 n = (op & 0x1E0) >> 5;
630 info->saved_regs[n].addr = info->sp_offset;
631 return 1;
632 }
633
634 /* st2w rn, @sp */
635 if ((op & 0x7E3F) == 0x3A1E)
636 {
637 n = (op & 0x1E0) >> 5;
638 info->saved_regs[n + 0].addr = info->sp_offset + 0;
639 info->saved_regs[n + 1].addr = info->sp_offset + 2;
640 return 1;
641 }
642
643 return 0;
644 }
645
646 /* Put here the code to store, into fi->saved_regs, the addresses of
647 the saved registers of frame described by FRAME_INFO. This
648 includes special registers such as pc and fp saved in special ways
649 in the stack frame. sp is even more special: the address we return
650 for it IS the sp for the next frame. */
651
652 static struct d10v_unwind_cache *
653 d10v_frame_unwind_cache (struct frame_info *next_frame,
654 void **this_prologue_cache)
655 {
656 struct gdbarch *gdbarch = get_frame_arch (next_frame);
657 CORE_ADDR pc;
658 ULONGEST prev_sp;
659 ULONGEST this_base;
660 unsigned long op;
661 unsigned short op1, op2;
662 int i;
663 struct d10v_unwind_cache *info;
664
665 if ((*this_prologue_cache))
666 return (*this_prologue_cache);
667
668 info = FRAME_OBSTACK_ZALLOC (struct d10v_unwind_cache);
669 (*this_prologue_cache) = info;
670 info->saved_regs = trad_frame_alloc_saved_regs (next_frame);
671
672 info->size = 0;
673 info->sp_offset = 0;
674
675 info->uses_frame = 0;
676 for (pc = frame_func_unwind (next_frame);
677 pc > 0 && pc < frame_pc_unwind (next_frame);
678 pc += 4)
679 {
680 op = get_frame_memory_unsigned (next_frame, pc, 4);
681 if ((op & 0xC0000000) == 0xC0000000)
682 {
683 /* long instruction */
684 if ((op & 0x3FFF0000) == 0x01FF0000)
685 {
686 /* add3 sp,sp,n */
687 short n = op & 0xFFFF;
688 info->sp_offset += n;
689 }
690 else if ((op & 0x3F0F0000) == 0x340F0000)
691 {
692 /* st rn, @(offset,sp) */
693 short offset = op & 0xFFFF;
694 short n = (op >> 20) & 0xF;
695 info->saved_regs[n].addr = info->sp_offset + offset;
696 }
697 else if ((op & 0x3F1F0000) == 0x350F0000)
698 {
699 /* st2w rn, @(offset,sp) */
700 short offset = op & 0xFFFF;
701 short n = (op >> 20) & 0xF;
702 info->saved_regs[n + 0].addr = info->sp_offset + offset + 0;
703 info->saved_regs[n + 1].addr = info->sp_offset + offset + 2;
704 }
705 else
706 break;
707 }
708 else
709 {
710 /* short instructions */
711 if ((op & 0xC0000000) == 0x80000000)
712 {
713 op2 = (op & 0x3FFF8000) >> 15;
714 op1 = op & 0x7FFF;
715 }
716 else
717 {
718 op1 = (op & 0x3FFF8000) >> 15;
719 op2 = op & 0x7FFF;
720 }
721 if (!prologue_find_regs (info, op1, pc)
722 || !prologue_find_regs (info, op2, pc))
723 break;
724 }
725 }
726
727 info->size = -info->sp_offset;
728
729 /* Compute the previous frame's stack pointer (which is also the
730 frame's ID's stack address), and this frame's base pointer. */
731 if (info->uses_frame)
732 {
733 /* The SP was moved to the FP. This indicates that a new frame
734 was created. Get THIS frame's FP value by unwinding it from
735 the next frame. */
736 frame_unwind_unsigned_register (next_frame, D10V_FP_REGNUM, &this_base);
737 /* The FP points at the last saved register. Adjust the FP back
738 to before the first saved register giving the SP. */
739 prev_sp = this_base + info->size;
740 }
741 else
742 {
743 /* Assume that the FP is this frame's SP but with that pushed
744 stack space added back. */
745 frame_unwind_unsigned_register (next_frame, D10V_SP_REGNUM, &this_base);
746 prev_sp = this_base + info->size;
747 }
748
749 /* Convert that SP/BASE into real addresses. */
750 info->prev_sp = d10v_make_daddr (prev_sp);
751 info->base = d10v_make_daddr (this_base);
752
753 /* Adjust all the saved registers so that they contain addresses and
754 not offsets. */
755 for (i = 0; i < NUM_REGS - 1; i++)
756 if (trad_frame_addr_p (info->saved_regs, i))
757 {
758 info->saved_regs[i].addr = (info->prev_sp + info->saved_regs[i].addr);
759 }
760
761 /* The call instruction moves the caller's PC in the callee's LR.
762 Since this is an unwind, do the reverse. Copy the location of LR
763 into PC (the address / regnum) so that a request for PC will be
764 converted into a request for the LR. */
765 info->saved_regs[D10V_PC_REGNUM] = info->saved_regs[LR_REGNUM];
766
767 /* The previous frame's SP needed to be computed. Save the computed
768 value. */
769 trad_frame_set_value (info->saved_regs, D10V_SP_REGNUM,
770 d10v_make_daddr (prev_sp));
771
772 return info;
773 }
774
775 static void
776 d10v_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
777 struct frame_info *frame, int regnum, int all)
778 {
779 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
780 if (regnum >= 0)
781 {
782 default_print_registers_info (gdbarch, file, frame, regnum, all);
783 return;
784 }
785
786 {
787 ULONGEST pc, psw, rpt_s, rpt_e, rpt_c;
788 pc = get_frame_register_unsigned (frame, D10V_PC_REGNUM);
789 psw = get_frame_register_unsigned (frame, PSW_REGNUM);
790 rpt_s = get_frame_register_unsigned (frame, frame_map_name_to_regnum (frame, "rpt_s", -1));
791 rpt_e = get_frame_register_unsigned (frame, frame_map_name_to_regnum (frame, "rpt_e", -1));
792 rpt_c = get_frame_register_unsigned (frame, frame_map_name_to_regnum (frame, "rpt_c", -1));
793 fprintf_filtered (file, "PC=%04lx (0x%lx) PSW=%04lx RPT_S=%04lx RPT_E=%04lx RPT_C=%04lx\n",
794 (long) pc, (long) d10v_make_iaddr (pc), (long) psw,
795 (long) rpt_s, (long) rpt_e, (long) rpt_c);
796 }
797
798 {
799 int group;
800 for (group = 0; group < 16; group += 8)
801 {
802 int r;
803 fprintf_filtered (file, "R%d-R%-2d", group, group + 7);
804 for (r = group; r < group + 8; r++)
805 {
806 ULONGEST tmp;
807 tmp = get_frame_register_unsigned (frame, r);
808 fprintf_filtered (file, " %04lx", (long) tmp);
809 }
810 fprintf_filtered (file, "\n");
811 }
812 }
813
814 /* Note: The IMAP/DMAP registers don't participate in function
815 calls. Don't bother trying to unwind them. */
816
817 {
818 int a;
819 for (a = 0; a < NR_IMAP_REGS; a++)
820 {
821 if (a > 0)
822 fprintf_filtered (file, " ");
823 fprintf_filtered (file, "IMAP%d %04lx", a,
824 tdep->imap_register (current_regcache, a));
825 }
826 if (nr_dmap_regs (gdbarch) == 1)
827 /* Registers DMAP0 and DMAP1 are constant. Just return dmap2. */
828 fprintf_filtered (file, " DMAP %04lx\n",
829 tdep->dmap_register (current_regcache, 2));
830 else
831 {
832 for (a = 0; a < nr_dmap_regs (gdbarch); a++)
833 {
834 fprintf_filtered (file, " DMAP%d %04lx", a,
835 tdep->dmap_register (current_regcache, a));
836 }
837 fprintf_filtered (file, "\n");
838 }
839 }
840
841 {
842 char num[MAX_REGISTER_SIZE];
843 int a;
844 fprintf_filtered (file, "A0-A%d", NR_A_REGS - 1);
845 for (a = a0_regnum (gdbarch); a < a0_regnum (gdbarch) + NR_A_REGS; a++)
846 {
847 int i;
848 fprintf_filtered (file, " ");
849 get_frame_register (frame, a, num);
850 for (i = 0; i < register_size (gdbarch, a); i++)
851 {
852 fprintf_filtered (file, "%02x", (num[i] & 0xff));
853 }
854 }
855 }
856 fprintf_filtered (file, "\n");
857 }
858
859 static void
860 show_regs (char *args, int from_tty)
861 {
862 d10v_print_registers_info (current_gdbarch, gdb_stdout,
863 get_current_frame (), -1, 1);
864 }
865
866 static CORE_ADDR
867 d10v_read_pc (ptid_t ptid)
868 {
869 ptid_t save_ptid;
870 CORE_ADDR pc;
871 CORE_ADDR retval;
872
873 save_ptid = inferior_ptid;
874 inferior_ptid = ptid;
875 pc = (int) read_register (D10V_PC_REGNUM);
876 inferior_ptid = save_ptid;
877 retval = d10v_make_iaddr (pc);
878 return retval;
879 }
880
881 static void
882 d10v_write_pc (CORE_ADDR val, ptid_t ptid)
883 {
884 ptid_t save_ptid;
885
886 save_ptid = inferior_ptid;
887 inferior_ptid = ptid;
888 write_register (D10V_PC_REGNUM, d10v_convert_iaddr_to_raw (val));
889 inferior_ptid = save_ptid;
890 }
891
892 static CORE_ADDR
893 d10v_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
894 {
895 ULONGEST sp;
896 frame_unwind_unsigned_register (next_frame, D10V_SP_REGNUM, &sp);
897 return d10v_make_daddr (sp);
898 }
899
900 /* When arguments must be pushed onto the stack, they go on in reverse
901 order. The below implements a FILO (stack) to do this. */
902
903 struct stack_item
904 {
905 int len;
906 struct stack_item *prev;
907 void *data;
908 };
909
910 static struct stack_item *push_stack_item (struct stack_item *prev,
911 void *contents, int len);
912 static struct stack_item *
913 push_stack_item (struct stack_item *prev, void *contents, int len)
914 {
915 struct stack_item *si;
916 si = xmalloc (sizeof (struct stack_item));
917 si->data = xmalloc (len);
918 si->len = len;
919 si->prev = prev;
920 memcpy (si->data, contents, len);
921 return si;
922 }
923
924 static struct stack_item *pop_stack_item (struct stack_item *si);
925 static struct stack_item *
926 pop_stack_item (struct stack_item *si)
927 {
928 struct stack_item *dead = si;
929 si = si->prev;
930 xfree (dead->data);
931 xfree (dead);
932 return si;
933 }
934
935
936 static CORE_ADDR
937 d10v_push_dummy_code (struct gdbarch *gdbarch,
938 CORE_ADDR sp, CORE_ADDR funaddr, int using_gcc,
939 struct value **args, int nargs,
940 struct type *value_type,
941 CORE_ADDR *real_pc, CORE_ADDR *bp_addr)
942 {
943 /* Allocate space sufficient for a breakpoint. */
944 sp = (sp - 4) & ~3;
945 /* Store the address of that breakpoint taking care to first convert
946 it into a code (IADDR) address from a stack (DADDR) address.
947 This of course assumes that the two virtual addresses map onto
948 the same real address. */
949 (*bp_addr) = d10v_make_iaddr (d10v_convert_iaddr_to_raw (sp));
950 /* d10v always starts the call at the callee's entry point. */
951 (*real_pc) = funaddr;
952 return sp;
953 }
954
955 static CORE_ADDR
956 d10v_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
957 struct regcache *regcache, CORE_ADDR bp_addr,
958 int nargs, struct value **args, CORE_ADDR sp,
959 int struct_return, CORE_ADDR struct_addr)
960 {
961 int i;
962 int regnum = ARG1_REGNUM;
963 struct stack_item *si = NULL;
964 long val;
965
966 /* Set the return address. For the d10v, the return breakpoint is
967 always at BP_ADDR. */
968 regcache_cooked_write_unsigned (regcache, LR_REGNUM,
969 d10v_convert_iaddr_to_raw (bp_addr));
970
971 /* If STRUCT_RETURN is true, then the struct return address (in
972 STRUCT_ADDR) will consume the first argument-passing register.
973 Both adjust the register count and store that value. */
974 if (struct_return)
975 {
976 regcache_cooked_write_unsigned (regcache, regnum, struct_addr);
977 regnum++;
978 }
979
980 /* Fill in registers and arg lists */
981 for (i = 0; i < nargs; i++)
982 {
983 struct value *arg = args[i];
984 struct type *type = check_typedef (VALUE_TYPE (arg));
985 char *contents = VALUE_CONTENTS (arg);
986 int len = TYPE_LENGTH (type);
987 int aligned_regnum = (regnum + 1) & ~1;
988
989 /* printf ("push: type=%d len=%d\n", TYPE_CODE (type), len); */
990 if (len <= 2 && regnum <= ARGN_REGNUM)
991 /* fits in a single register, do not align */
992 {
993 val = extract_unsigned_integer (contents, len);
994 regcache_cooked_write_unsigned (regcache, regnum++, val);
995 }
996 else if (len <= (ARGN_REGNUM - aligned_regnum + 1) * 2)
997 /* value fits in remaining registers, store keeping left
998 aligned */
999 {
1000 int b;
1001 regnum = aligned_regnum;
1002 for (b = 0; b < (len & ~1); b += 2)
1003 {
1004 val = extract_unsigned_integer (&contents[b], 2);
1005 regcache_cooked_write_unsigned (regcache, regnum++, val);
1006 }
1007 if (b < len)
1008 {
1009 val = extract_unsigned_integer (&contents[b], 1);
1010 regcache_cooked_write_unsigned (regcache, regnum++, (val << 8));
1011 }
1012 }
1013 else
1014 {
1015 /* arg will go onto stack */
1016 regnum = ARGN_REGNUM + 1;
1017 si = push_stack_item (si, contents, len);
1018 }
1019 }
1020
1021 while (si)
1022 {
1023 sp = (sp - si->len) & ~1;
1024 write_memory (sp, si->data, si->len);
1025 si = pop_stack_item (si);
1026 }
1027
1028 /* Finally, update the SP register. */
1029 regcache_cooked_write_unsigned (regcache, D10V_SP_REGNUM,
1030 d10v_convert_daddr_to_raw (sp));
1031
1032 return sp;
1033 }
1034
1035 /* Translate a GDB virtual ADDR/LEN into a format the remote target
1036 understands. Returns number of bytes that can be transfered
1037 starting at TARG_ADDR. Return ZERO if no bytes can be transfered
1038 (segmentation fault). Since the simulator knows all about how the
1039 VM system works, we just call that to do the translation. */
1040
1041 static void
1042 remote_d10v_translate_xfer_address (struct gdbarch *gdbarch,
1043 struct regcache *regcache,
1044 CORE_ADDR memaddr, int nr_bytes,
1045 CORE_ADDR *targ_addr, int *targ_len)
1046 {
1047 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1048 long out_addr;
1049 long out_len;
1050 out_len = sim_d10v_translate_addr (memaddr, nr_bytes, &out_addr, regcache,
1051 tdep->dmap_register, tdep->imap_register);
1052 *targ_addr = out_addr;
1053 *targ_len = out_len;
1054 }
1055
1056
1057 /* The following code implements access to, and display of, the D10V's
1058 instruction trace buffer. The buffer consists of 64K or more
1059 4-byte words of data, of which each words includes an 8-bit count,
1060 an 8-bit segment number, and a 16-bit instruction address.
1061
1062 In theory, the trace buffer is continuously capturing instruction
1063 data that the CPU presents on its "debug bus", but in practice, the
1064 ROMified GDB stub only enables tracing when it continues or steps
1065 the program, and stops tracing when the program stops; so it
1066 actually works for GDB to read the buffer counter out of memory and
1067 then read each trace word. The counter records where the tracing
1068 stops, but there is no record of where it started, so we remember
1069 the PC when we resumed and then search backwards in the trace
1070 buffer for a word that includes that address. This is not perfect,
1071 because you will miss trace data if the resumption PC is the target
1072 of a branch. (The value of the buffer counter is semi-random, any
1073 trace data from a previous program stop is gone.) */
1074
1075 /* The address of the last word recorded in the trace buffer. */
1076
1077 #define DBBC_ADDR (0xd80000)
1078
1079 /* The base of the trace buffer, at least for the "Board_0". */
1080
1081 #define TRACE_BUFFER_BASE (0xf40000)
1082
1083 static void trace_command (char *, int);
1084
1085 static void untrace_command (char *, int);
1086
1087 static void trace_info (char *, int);
1088
1089 static void tdisassemble_command (char *, int);
1090
1091 static void display_trace (int, int);
1092
1093 /* True when instruction traces are being collected. */
1094
1095 static int tracing;
1096
1097 /* Remembered PC. */
1098
1099 static CORE_ADDR last_pc;
1100
1101 /* True when trace output should be displayed whenever program stops. */
1102
1103 static int trace_display;
1104
1105 /* True when trace listing should include source lines. */
1106
1107 static int default_trace_show_source = 1;
1108
1109 struct trace_buffer
1110 {
1111 int size;
1112 short *counts;
1113 CORE_ADDR *addrs;
1114 }
1115 trace_data;
1116
1117 static void
1118 trace_command (char *args, int from_tty)
1119 {
1120 /* Clear the host-side trace buffer, allocating space if needed. */
1121 trace_data.size = 0;
1122 if (trace_data.counts == NULL)
1123 trace_data.counts = XCALLOC (65536, short);
1124 if (trace_data.addrs == NULL)
1125 trace_data.addrs = XCALLOC (65536, CORE_ADDR);
1126
1127 tracing = 1;
1128
1129 printf_filtered ("Tracing is now on.\n");
1130 }
1131
1132 static void
1133 untrace_command (char *args, int from_tty)
1134 {
1135 tracing = 0;
1136
1137 printf_filtered ("Tracing is now off.\n");
1138 }
1139
1140 static void
1141 trace_info (char *args, int from_tty)
1142 {
1143 int i;
1144
1145 if (trace_data.size)
1146 {
1147 printf_filtered ("%d entries in trace buffer:\n", trace_data.size);
1148
1149 for (i = 0; i < trace_data.size; ++i)
1150 {
1151 printf_filtered ("%d: %d instruction%s at 0x%s\n",
1152 i,
1153 trace_data.counts[i],
1154 (trace_data.counts[i] == 1 ? "" : "s"),
1155 paddr_nz (trace_data.addrs[i]));
1156 }
1157 }
1158 else
1159 printf_filtered ("No entries in trace buffer.\n");
1160
1161 printf_filtered ("Tracing is currently %s.\n", (tracing ? "on" : "off"));
1162 }
1163
1164 static void
1165 d10v_eva_prepare_to_trace (void)
1166 {
1167 if (!tracing)
1168 return;
1169
1170 last_pc = read_register (D10V_PC_REGNUM);
1171 }
1172
1173 /* Collect trace data from the target board and format it into a form
1174 more useful for display. */
1175
1176 static void
1177 d10v_eva_get_trace_data (void)
1178 {
1179 int count, i, j, oldsize;
1180 int trace_addr, trace_seg, trace_cnt, next_cnt;
1181 unsigned int last_trace, trace_word, next_word;
1182 unsigned int *tmpspace;
1183
1184 if (!tracing)
1185 return;
1186
1187 tmpspace = xmalloc (65536 * sizeof (unsigned int));
1188
1189 last_trace = read_memory_unsigned_integer (DBBC_ADDR, 2) << 2;
1190
1191 /* Collect buffer contents from the target, stopping when we reach
1192 the word recorded when execution resumed. */
1193
1194 count = 0;
1195 while (last_trace > 0)
1196 {
1197 QUIT;
1198 trace_word =
1199 read_memory_unsigned_integer (TRACE_BUFFER_BASE + last_trace, 4);
1200 trace_addr = trace_word & 0xffff;
1201 last_trace -= 4;
1202 /* Ignore an apparently nonsensical entry. */
1203 if (trace_addr == 0xffd5)
1204 continue;
1205 tmpspace[count++] = trace_word;
1206 if (trace_addr == last_pc)
1207 break;
1208 if (count > 65535)
1209 break;
1210 }
1211
1212 /* Move the data to the host-side trace buffer, adjusting counts to
1213 include the last instruction executed and transforming the address
1214 into something that GDB likes. */
1215
1216 for (i = 0; i < count; ++i)
1217 {
1218 trace_word = tmpspace[i];
1219 next_word = ((i == 0) ? 0 : tmpspace[i - 1]);
1220 trace_addr = trace_word & 0xffff;
1221 next_cnt = (next_word >> 24) & 0xff;
1222 j = trace_data.size + count - i - 1;
1223 trace_data.addrs[j] = (trace_addr << 2) + 0x1000000;
1224 trace_data.counts[j] = next_cnt + 1;
1225 }
1226
1227 oldsize = trace_data.size;
1228 trace_data.size += count;
1229
1230 xfree (tmpspace);
1231
1232 if (trace_display)
1233 display_trace (oldsize, trace_data.size);
1234 }
1235
1236 static void
1237 tdisassemble_command (char *arg, int from_tty)
1238 {
1239 int i, count;
1240 CORE_ADDR low, high;
1241
1242 if (!arg)
1243 {
1244 low = 0;
1245 high = trace_data.size;
1246 }
1247 else
1248 {
1249 char *space_index = strchr (arg, ' ');
1250 if (space_index == NULL)
1251 {
1252 low = parse_and_eval_address (arg);
1253 high = low + 5;
1254 }
1255 else
1256 {
1257 /* Two arguments. */
1258 *space_index = '\0';
1259 low = parse_and_eval_address (arg);
1260 high = parse_and_eval_address (space_index + 1);
1261 if (high < low)
1262 high = low;
1263 }
1264 }
1265
1266 printf_filtered ("Dump of trace from %s to %s:\n",
1267 paddr_u (low), paddr_u (high));
1268
1269 display_trace (low, high);
1270
1271 printf_filtered ("End of trace dump.\n");
1272 gdb_flush (gdb_stdout);
1273 }
1274
1275 static void
1276 display_trace (int low, int high)
1277 {
1278 int i, count, trace_show_source, first, suppress;
1279 CORE_ADDR next_address;
1280
1281 trace_show_source = default_trace_show_source;
1282 if (!have_full_symbols () && !have_partial_symbols ())
1283 {
1284 trace_show_source = 0;
1285 printf_filtered ("No symbol table is loaded. Use the \"file\" command.\n");
1286 printf_filtered ("Trace will not display any source.\n");
1287 }
1288
1289 first = 1;
1290 suppress = 0;
1291 for (i = low; i < high; ++i)
1292 {
1293 next_address = trace_data.addrs[i];
1294 count = trace_data.counts[i];
1295 while (count-- > 0)
1296 {
1297 QUIT;
1298 if (trace_show_source)
1299 {
1300 struct symtab_and_line sal, sal_prev;
1301
1302 sal_prev = find_pc_line (next_address - 4, 0);
1303 sal = find_pc_line (next_address, 0);
1304
1305 if (sal.symtab)
1306 {
1307 if (first || sal.line != sal_prev.line)
1308 print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
1309 suppress = 0;
1310 }
1311 else
1312 {
1313 if (!suppress)
1314 /* FIXME-32x64--assumes sal.pc fits in long. */
1315 printf_filtered ("No source file for address %s.\n",
1316 local_hex_string ((unsigned long) sal.pc));
1317 suppress = 1;
1318 }
1319 }
1320 first = 0;
1321 print_address (next_address, gdb_stdout);
1322 printf_filtered (":");
1323 printf_filtered ("\t");
1324 wrap_here (" ");
1325 next_address += gdb_print_insn (next_address, gdb_stdout);
1326 printf_filtered ("\n");
1327 gdb_flush (gdb_stdout);
1328 }
1329 }
1330 }
1331
1332 static CORE_ADDR
1333 d10v_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1334 {
1335 ULONGEST pc;
1336 frame_unwind_unsigned_register (next_frame, D10V_PC_REGNUM, &pc);
1337 return d10v_make_iaddr (pc);
1338 }
1339
1340 /* Given a GDB frame, determine the address of the calling function's
1341 frame. This will be used to create a new GDB frame struct. */
1342
1343 static void
1344 d10v_frame_this_id (struct frame_info *next_frame,
1345 void **this_prologue_cache,
1346 struct frame_id *this_id)
1347 {
1348 struct d10v_unwind_cache *info
1349 = d10v_frame_unwind_cache (next_frame, this_prologue_cache);
1350 CORE_ADDR base;
1351 CORE_ADDR func;
1352 struct frame_id id;
1353
1354 /* The FUNC is easy. */
1355 func = frame_func_unwind (next_frame);
1356
1357 /* Hopefully the prologue analysis either correctly determined the
1358 frame's base (which is the SP from the previous frame), or set
1359 that base to "NULL". */
1360 base = info->prev_sp;
1361 if (base == STACK_START || base == 0)
1362 return;
1363
1364 id = frame_id_build (base, func);
1365
1366 (*this_id) = id;
1367 }
1368
1369 static void
1370 d10v_frame_prev_register (struct frame_info *next_frame,
1371 void **this_prologue_cache,
1372 int regnum, int *optimizedp,
1373 enum lval_type *lvalp, CORE_ADDR *addrp,
1374 int *realnump, void *bufferp)
1375 {
1376 struct d10v_unwind_cache *info
1377 = d10v_frame_unwind_cache (next_frame, this_prologue_cache);
1378 trad_frame_prev_register (next_frame, info->saved_regs, regnum,
1379 optimizedp, lvalp, addrp, realnump, bufferp);
1380 }
1381
1382 static const struct frame_unwind d10v_frame_unwind = {
1383 NORMAL_FRAME,
1384 d10v_frame_this_id,
1385 d10v_frame_prev_register
1386 };
1387
1388 static const struct frame_unwind *
1389 d10v_frame_sniffer (struct frame_info *next_frame)
1390 {
1391 return &d10v_frame_unwind;
1392 }
1393
1394 static CORE_ADDR
1395 d10v_frame_base_address (struct frame_info *next_frame, void **this_cache)
1396 {
1397 struct d10v_unwind_cache *info
1398 = d10v_frame_unwind_cache (next_frame, this_cache);
1399 return info->base;
1400 }
1401
1402 static const struct frame_base d10v_frame_base = {
1403 &d10v_frame_unwind,
1404 d10v_frame_base_address,
1405 d10v_frame_base_address,
1406 d10v_frame_base_address
1407 };
1408
1409 /* Assuming NEXT_FRAME->prev is a dummy, return the frame ID of that
1410 dummy frame. The frame ID's base needs to match the TOS value
1411 saved by save_dummy_frame_tos(), and the PC match the dummy frame's
1412 breakpoint. */
1413
1414 static struct frame_id
1415 d10v_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
1416 {
1417 return frame_id_build (d10v_unwind_sp (gdbarch, next_frame),
1418 frame_pc_unwind (next_frame));
1419 }
1420
1421 static gdbarch_init_ftype d10v_gdbarch_init;
1422
1423 static struct gdbarch *
1424 d10v_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1425 {
1426 struct gdbarch *gdbarch;
1427 int d10v_num_regs;
1428 struct gdbarch_tdep *tdep;
1429 gdbarch_register_name_ftype *d10v_register_name;
1430 gdbarch_register_sim_regno_ftype *d10v_register_sim_regno;
1431
1432 /* Find a candidate among the list of pre-declared architectures. */
1433 arches = gdbarch_list_lookup_by_info (arches, &info);
1434 if (arches != NULL)
1435 return arches->gdbarch;
1436
1437 /* None found, create a new architecture from the information
1438 provided. */
1439 tdep = XMALLOC (struct gdbarch_tdep);
1440 gdbarch = gdbarch_alloc (&info, tdep);
1441
1442 switch (info.bfd_arch_info->mach)
1443 {
1444 case bfd_mach_d10v_ts2:
1445 d10v_num_regs = 37;
1446 d10v_register_name = d10v_ts2_register_name;
1447 d10v_register_sim_regno = d10v_ts2_register_sim_regno;
1448 tdep->a0_regnum = TS2_A0_REGNUM;
1449 tdep->nr_dmap_regs = TS2_NR_DMAP_REGS;
1450 tdep->dmap_register = d10v_ts2_dmap_register;
1451 tdep->imap_register = d10v_ts2_imap_register;
1452 break;
1453 default:
1454 case bfd_mach_d10v_ts3:
1455 d10v_num_regs = 42;
1456 d10v_register_name = d10v_ts3_register_name;
1457 d10v_register_sim_regno = d10v_ts3_register_sim_regno;
1458 tdep->a0_regnum = TS3_A0_REGNUM;
1459 tdep->nr_dmap_regs = TS3_NR_DMAP_REGS;
1460 tdep->dmap_register = d10v_ts3_dmap_register;
1461 tdep->imap_register = d10v_ts3_imap_register;
1462 break;
1463 }
1464
1465 set_gdbarch_read_pc (gdbarch, d10v_read_pc);
1466 set_gdbarch_write_pc (gdbarch, d10v_write_pc);
1467 set_gdbarch_unwind_sp (gdbarch, d10v_unwind_sp);
1468
1469 set_gdbarch_num_regs (gdbarch, d10v_num_regs);
1470 set_gdbarch_sp_regnum (gdbarch, D10V_SP_REGNUM);
1471 set_gdbarch_register_name (gdbarch, d10v_register_name);
1472 set_gdbarch_register_type (gdbarch, d10v_register_type);
1473
1474 set_gdbarch_ptr_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1475 set_gdbarch_addr_bit (gdbarch, 32);
1476 set_gdbarch_address_to_pointer (gdbarch, d10v_address_to_pointer);
1477 set_gdbarch_pointer_to_address (gdbarch, d10v_pointer_to_address);
1478 set_gdbarch_integer_to_address (gdbarch, d10v_integer_to_address);
1479 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1480 set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1481 set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1482 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1483 /* NOTE: The d10v as a 32 bit ``float'' and ``double''. ``long
1484 double'' is 64 bits. */
1485 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1486 set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1487 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1488 switch (info.byte_order)
1489 {
1490 case BFD_ENDIAN_BIG:
1491 set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_big);
1492 set_gdbarch_double_format (gdbarch, &floatformat_ieee_single_big);
1493 set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big);
1494 break;
1495 case BFD_ENDIAN_LITTLE:
1496 set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_little);
1497 set_gdbarch_double_format (gdbarch, &floatformat_ieee_single_little);
1498 set_gdbarch_long_double_format (gdbarch,
1499 &floatformat_ieee_double_little);
1500 break;
1501 default:
1502 internal_error (__FILE__, __LINE__,
1503 "d10v_gdbarch_init: bad byte order for float format");
1504 }
1505
1506 set_gdbarch_return_value (gdbarch, d10v_return_value);
1507 set_gdbarch_push_dummy_code (gdbarch, d10v_push_dummy_code);
1508 set_gdbarch_push_dummy_call (gdbarch, d10v_push_dummy_call);
1509
1510 set_gdbarch_skip_prologue (gdbarch, d10v_skip_prologue);
1511 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1512 set_gdbarch_decr_pc_after_break (gdbarch, 4);
1513 set_gdbarch_breakpoint_from_pc (gdbarch, d10v_breakpoint_from_pc);
1514
1515 set_gdbarch_remote_translate_xfer_address (gdbarch,
1516 remote_d10v_translate_xfer_address);
1517
1518 set_gdbarch_frame_align (gdbarch, d10v_frame_align);
1519
1520 set_gdbarch_register_sim_regno (gdbarch, d10v_register_sim_regno);
1521
1522 set_gdbarch_print_registers_info (gdbarch, d10v_print_registers_info);
1523
1524 frame_unwind_append_sniffer (gdbarch, d10v_frame_sniffer);
1525 frame_base_set_default (gdbarch, &d10v_frame_base);
1526
1527 /* Methods for saving / extracting a dummy frame's ID. The ID's
1528 stack address must match the SP value returned by
1529 PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
1530 set_gdbarch_unwind_dummy_id (gdbarch, d10v_unwind_dummy_id);
1531
1532 /* Return the unwound PC value. */
1533 set_gdbarch_unwind_pc (gdbarch, d10v_unwind_pc);
1534
1535 set_gdbarch_print_insn (gdbarch, print_insn_d10v);
1536
1537 return gdbarch;
1538 }
1539
1540 void
1541 _initialize_d10v_tdep (void)
1542 {
1543 register_gdbarch_init (bfd_arch_d10v, d10v_gdbarch_init);
1544
1545 deprecated_target_resume_hook = d10v_eva_prepare_to_trace;
1546 deprecated_target_wait_loop_hook = d10v_eva_get_trace_data;
1547
1548 deprecate_cmd (add_com ("regs", class_vars, show_regs,
1549 "Print all registers"),
1550 "info registers");
1551
1552 add_com ("itrace", class_support, trace_command,
1553 "Enable tracing of instruction execution.");
1554
1555 add_com ("iuntrace", class_support, untrace_command,
1556 "Disable tracing of instruction execution.");
1557
1558 add_com ("itdisassemble", class_vars, tdisassemble_command,
1559 "Disassemble the trace buffer.\n\
1560 Two optional arguments specify a range of trace buffer entries\n\
1561 as reported by info trace (NOT addresses!).");
1562
1563 add_info ("itrace", trace_info,
1564 "Display info about the trace data buffer.");
1565
1566 add_setshow_boolean_cmd ("itracedisplay", no_class, &trace_display, "\
1567 Set automatic display of trace.", "\
1568 Show automatic display of trace.", "\
1569 Controls the display of d10v specific instruction trace information.", "\
1570 Automatic display of trace is %s.",
1571 NULL, NULL, &setlist, &showlist);
1572 add_setshow_boolean_cmd ("itracesource", no_class,
1573 &default_trace_show_source, "\
1574 Set display of source code with trace.", "\
1575 Show display of source code with trace.", "\
1576 When on source code is included in the d10v instruction trace display.", "\
1577 Display of source code with trace is %s.",
1578 NULL, NULL, &setlist, &showlist);
1579 }
This page took 0.067661 seconds and 4 git commands to generate.