1 /* Target-dependent code for Renesas D10V, for GDB.
3 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
6 This file is part of GDB.
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.
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.
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. */
23 /* Contributed by Martin Hunt, hunt@cygnus.com */
27 #include "frame-unwind.h"
28 #include "frame-base.h"
33 #include "gdb_string.h"
40 #include "arch-utils.h"
43 #include "floatformat.h"
44 #include "gdb/sim-d10v.h"
45 #include "sim-regno.h"
47 #include "trad-frame.h"
49 #include "gdb_assert.h"
55 unsigned long (*dmap_register
) (void *regcache
, int nr
);
56 unsigned long (*imap_register
) (void *regcache
, int nr
);
59 /* These are the addresses the D10V-EVA board maps data and
60 instruction memory to. */
63 DMEM_START
= 0x2000000,
64 IMEM_START
= 0x1000000,
65 STACK_START
= 0x200bffe
68 /* d10v register names. */
83 /* d10v calling convention. */
84 ARG1_REGNUM
= R0_REGNUM
,
85 ARGN_REGNUM
= R3_REGNUM
89 nr_dmap_regs (struct gdbarch
*gdbarch
)
91 return gdbarch_tdep (gdbarch
)->nr_dmap_regs
;
95 a0_regnum (struct gdbarch
*gdbarch
)
97 return gdbarch_tdep (gdbarch
)->a0_regnum
;
100 /* Local functions */
102 extern void _initialize_d10v_tdep (void);
104 static void d10v_eva_prepare_to_trace (void);
106 static void d10v_eva_get_trace_data (void);
109 d10v_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR sp
)
111 /* Align to the size of an instruction (so that they can safely be
112 pushed onto the stack. */
116 static const unsigned char *
117 d10v_breakpoint_from_pc (CORE_ADDR
*pcptr
, int *lenptr
)
119 static unsigned char breakpoint
[] =
120 {0x2f, 0x90, 0x5e, 0x00};
121 *lenptr
= sizeof (breakpoint
);
125 /* Map the REG_NR onto an ascii name. Return NULL or an empty string
126 when the reg_nr isn't valid. */
130 TS2_IMAP0_REGNUM
= 32,
131 TS2_DMAP_REGNUM
= 34,
132 TS2_NR_DMAP_REGS
= 1,
137 d10v_ts2_register_name (int reg_nr
)
139 static char *register_names
[] =
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"
149 if (reg_nr
>= (sizeof (register_names
) / sizeof (*register_names
)))
151 return register_names
[reg_nr
];
156 TS3_IMAP0_REGNUM
= 36,
157 TS3_DMAP0_REGNUM
= 38,
158 TS3_NR_DMAP_REGS
= 4,
163 d10v_ts3_register_name (int reg_nr
)
165 static char *register_names
[] =
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",
174 "dmap0", "dmap1", "dmap2", "dmap3"
178 if (reg_nr
>= (sizeof (register_names
) / sizeof (*register_names
)))
180 return register_names
[reg_nr
];
183 /* Access the DMAP/IMAP registers in a target independent way.
185 Divide the D10V's 64k data space into four 16k segments:
186 0x0000 -- 0x3fff, 0x4000 -- 0x7fff, 0x8000 -- 0xbfff, and
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.
195 On the TS3, there are four DMAP registers, each of which controls
196 one of the segments. */
199 d10v_ts2_dmap_register (void *regcache
, int reg_nr
)
209 regcache_cooked_read_unsigned (regcache
, TS2_DMAP_REGNUM
, ®
);
218 d10v_ts3_dmap_register (void *regcache
, int reg_nr
)
221 regcache_cooked_read_unsigned (regcache
, TS3_DMAP0_REGNUM
+ reg_nr
, ®
);
226 d10v_ts2_imap_register (void *regcache
, int reg_nr
)
229 regcache_cooked_read_unsigned (regcache
, TS2_IMAP0_REGNUM
+ reg_nr
, ®
);
234 d10v_ts3_imap_register (void *regcache
, int reg_nr
)
237 regcache_cooked_read_unsigned (regcache
, TS3_IMAP0_REGNUM
+ reg_nr
, ®
);
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. */
246 d10v_ts2_register_sim_regno (int nr
)
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
;
262 d10v_ts3_register_sim_regno (int nr
)
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
;
278 /* Return the GDB type object for the "standard" data type
279 of data in register N. */
282 d10v_register_type (struct gdbarch
*gdbarch
, int reg_nr
)
284 if (reg_nr
== D10V_PC_REGNUM
)
285 return builtin_type_void_func_ptr
;
286 if (reg_nr
== D10V_SP_REGNUM
|| reg_nr
== D10V_FP_REGNUM
)
287 return builtin_type_void_data_ptr
;
288 else if (reg_nr
>= a0_regnum (gdbarch
)
289 && reg_nr
< (a0_regnum (gdbarch
) + NR_A_REGS
))
290 return builtin_type_int64
;
292 return builtin_type_int16
;
296 d10v_iaddr_p (CORE_ADDR x
)
298 return (((x
) & 0x3000000) == IMEM_START
);
302 d10v_make_daddr (CORE_ADDR x
)
304 return ((x
) | DMEM_START
);
308 d10v_make_iaddr (CORE_ADDR x
)
310 if (d10v_iaddr_p (x
))
311 return x
; /* Idempotency -- x is already in the IMEM space. */
313 return (((x
) << 2) | IMEM_START
);
317 d10v_convert_iaddr_to_raw (CORE_ADDR x
)
319 return (((x
) >> 2) & 0xffff);
323 d10v_convert_daddr_to_raw (CORE_ADDR x
)
325 return ((x
) & 0xffff);
329 d10v_address_to_pointer (struct type
*type
, void *buf
, CORE_ADDR addr
)
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
)
335 store_unsigned_integer (buf
, TYPE_LENGTH (type
),
336 d10v_convert_iaddr_to_raw (addr
));
340 /* Strip off any upper segment bits. */
341 store_unsigned_integer (buf
, TYPE_LENGTH (type
),
342 d10v_convert_daddr_to_raw (addr
));
347 d10v_pointer_to_address (struct type
*type
, const void *buf
)
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
);
356 return d10v_make_daddr (addr
);
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. */
364 d10v_integer_to_address (struct type
*type
, void *buf
)
367 val
= unpack_long (type
, buf
);
371 /* Handle the d10v's return_value convention. */
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
)
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
386 return RETURN_VALUE_STRUCT_CONVENTION
;
387 if (TYPE_LENGTH (valtype
) == 1)
389 /* All single byte values go in a register stored right-aligned.
390 Note: 2 byte integer values are handled further down. */
393 /* Since TYPE is smaller than the register, there isn't a
394 sign extension problem. Let the extraction truncate the
397 regcache_cooked_read_unsigned (regcache
, R0_REGNUM
,
399 store_unsigned_integer (readbuf
, TYPE_LENGTH (valtype
), 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
409 regval
= unpack_long (valtype
, writebuf
);
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
);
416 return RETURN_VALUE_REGISTER_CONVENTION
;
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
)
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
++)
435 regcache_cooked_read (regcache
, R0_REGNUM
+ reg
,
436 (bfd_byte
*) readbuf
+ reg
* 2);
438 regcache_cooked_write (regcache
, R0_REGNUM
+ reg
,
439 (bfd_byte
*) writebuf
+ reg
* 2);
441 /* Any trailing byte ends up _left_ aligned. */
442 if ((reg
* 2) < TYPE_LENGTH (valtype
))
445 regcache_cooked_read_part (regcache
, R0_REGNUM
+ reg
,
446 0, 1, (bfd_byte
*) readbuf
+ reg
* 2);
448 regcache_cooked_write_part (regcache
, R0_REGNUM
+ reg
,
449 0, 1, (bfd_byte
*) writebuf
+ reg
* 2);
452 return RETURN_VALUE_REGISTER_CONVENTION
;
456 check_prologue (unsigned short op
)
459 if ((op
& 0x7E1F) == 0x6C1F)
463 if ((op
& 0x7E3F) == 0x6E1F)
467 if ((op
& 0x7FE1) == 0x01E1)
479 if ((op
& 0x7E1F) == 0x681E)
483 if ((op
& 0x7E3F) == 0x3A1E)
490 d10v_skip_prologue (CORE_ADDR pc
)
493 unsigned short op1
, op2
;
494 CORE_ADDR func_addr
, func_end
;
495 struct symtab_and_line sal
;
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
))
501 sal
= find_pc_line (func_addr
, 0);
502 if (sal
.end
&& sal
.end
< func_end
)
506 if (target_read_memory (pc
, (char *) &op
, 4))
507 return pc
; /* Can't access it -- assume no prologue. */
511 op
= (unsigned long) read_memory_integer (pc
, 4);
512 if ((op
& 0xC0000000) == 0xC0000000)
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) */
522 /* short instructions */
523 if ((op
& 0xC0000000) == 0x80000000)
525 op2
= (op
& 0x3FFF8000) >> 15;
530 op1
= (op
& 0x3FFF8000) >> 15;
533 if (check_prologue (op1
))
535 if (!check_prologue (op2
))
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. */
553 struct d10v_unwind_cache
555 /* The previous frame's inner most stack address. Used as this
556 frame ID's stack_addr. */
558 /* The frame's base, optionally used by the high-level debug info. */
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
567 /* Table indicating the location of each and every register. */
568 struct trad_frame_saved_reg
*saved_regs
;
572 prologue_find_regs (struct d10v_unwind_cache
*info
, unsigned short op
,
578 if ((op
& 0x7E1F) == 0x6C1F)
580 n
= (op
& 0x1E0) >> 5;
581 info
->sp_offset
-= 2;
582 info
->saved_regs
[n
].addr
= info
->sp_offset
;
587 else if ((op
& 0x7E3F) == 0x6E1F)
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;
597 if ((op
& 0x7FE1) == 0x01E1)
599 n
= (op
& 0x1E) >> 1;
602 info
->sp_offset
-= n
;
609 info
->uses_frame
= 1;
610 info
->r11_offset
= info
->sp_offset
;
615 if ((op
& 0x7E1F) == 0x6816)
617 n
= (op
& 0x1E0) >> 5;
618 info
->saved_regs
[n
].addr
= info
->r11_offset
;
627 if ((op
& 0x7E1F) == 0x681E)
629 n
= (op
& 0x1E0) >> 5;
630 info
->saved_regs
[n
].addr
= info
->sp_offset
;
635 if ((op
& 0x7E3F) == 0x3A1E)
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;
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. */
652 static struct d10v_unwind_cache
*
653 d10v_frame_unwind_cache (struct frame_info
*next_frame
,
654 void **this_prologue_cache
)
656 struct gdbarch
*gdbarch
= get_frame_arch (next_frame
);
661 unsigned short op1
, op2
;
663 struct d10v_unwind_cache
*info
;
665 if ((*this_prologue_cache
))
666 return (*this_prologue_cache
);
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
);
675 info
->uses_frame
= 0;
676 for (pc
= frame_func_unwind (next_frame
);
677 pc
> 0 && pc
< frame_pc_unwind (next_frame
);
680 op
= get_frame_memory_unsigned (next_frame
, pc
, 4);
681 if ((op
& 0xC0000000) == 0xC0000000)
683 /* long instruction */
684 if ((op
& 0x3FFF0000) == 0x01FF0000)
687 short n
= op
& 0xFFFF;
688 info
->sp_offset
+= n
;
690 else if ((op
& 0x3F0F0000) == 0x340F0000)
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
;
697 else if ((op
& 0x3F1F0000) == 0x350F0000)
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;
710 /* short instructions */
711 if ((op
& 0xC0000000) == 0x80000000)
713 op2
= (op
& 0x3FFF8000) >> 15;
718 op1
= (op
& 0x3FFF8000) >> 15;
721 if (!prologue_find_regs (info
, op1
, pc
)
722 || !prologue_find_regs (info
, op2
, pc
))
727 info
->size
= -info
->sp_offset
;
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
)
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
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
;
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
;
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
);
753 /* Adjust all the saved registers so that they contain addresses and
755 for (i
= 0; i
< NUM_REGS
- 1; i
++)
756 if (trad_frame_addr_p (info
->saved_regs
, i
))
758 info
->saved_regs
[i
].addr
= (info
->prev_sp
+ info
->saved_regs
[i
].addr
);
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
];
767 /* The previous frame's SP needed to be computed. Save the computed
769 trad_frame_set_value (info
->saved_regs
, D10V_SP_REGNUM
,
770 d10v_make_daddr (prev_sp
));
776 d10v_print_registers_info (struct gdbarch
*gdbarch
, struct ui_file
*file
,
777 struct frame_info
*frame
, int regnum
, int all
)
779 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
782 default_print_registers_info (gdbarch
, file
, frame
, regnum
, all
);
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
);
800 for (group
= 0; group
< 16; group
+= 8)
803 fprintf_filtered (file
, "R%d-R%-2d", group
, group
+ 7);
804 for (r
= group
; r
< group
+ 8; r
++)
807 tmp
= get_frame_register_unsigned (frame
, r
);
808 fprintf_filtered (file
, " %04lx", (long) tmp
);
810 fprintf_filtered (file
, "\n");
814 /* Note: The IMAP/DMAP registers don't participate in function
815 calls. Don't bother trying to unwind them. */
819 for (a
= 0; a
< NR_IMAP_REGS
; a
++)
822 fprintf_filtered (file
, " ");
823 fprintf_filtered (file
, "IMAP%d %04lx", a
,
824 tdep
->imap_register (current_regcache
, a
));
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));
832 for (a
= 0; a
< nr_dmap_regs (gdbarch
); a
++)
834 fprintf_filtered (file
, " DMAP%d %04lx", a
,
835 tdep
->dmap_register (current_regcache
, a
));
837 fprintf_filtered (file
, "\n");
842 char num
[MAX_REGISTER_SIZE
];
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
++)
848 fprintf_filtered (file
, " ");
849 get_frame_register (frame
, a
, num
);
850 for (i
= 0; i
< register_size (gdbarch
, a
); i
++)
852 fprintf_filtered (file
, "%02x", (num
[i
] & 0xff));
856 fprintf_filtered (file
, "\n");
860 show_regs (char *args
, int from_tty
)
862 d10v_print_registers_info (current_gdbarch
, gdb_stdout
,
863 get_current_frame (), -1, 1);
867 d10v_read_pc (ptid_t ptid
)
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
);
882 d10v_write_pc (CORE_ADDR val
, ptid_t ptid
)
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
;
893 d10v_unwind_sp (struct gdbarch
*gdbarch
, struct frame_info
*next_frame
)
896 frame_unwind_unsigned_register (next_frame
, D10V_SP_REGNUM
, &sp
);
897 return d10v_make_daddr (sp
);
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. */
906 struct stack_item
*prev
;
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
)
915 struct stack_item
*si
;
916 si
= xmalloc (sizeof (struct stack_item
));
917 si
->data
= xmalloc (len
);
920 memcpy (si
->data
, contents
, len
);
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
)
928 struct stack_item
*dead
= si
;
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
)
943 /* Allocate space sufficient for a breakpoint. */
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
;
956 d10v_push_dummy_call (struct gdbarch
*gdbarch
, CORE_ADDR func_addr
,
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
)
962 int regnum
= ARG1_REGNUM
;
963 struct stack_item
*si
= NULL
;
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
));
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. */
976 regcache_cooked_write_unsigned (regcache
, regnum
, struct_addr
);
980 /* Fill in registers and arg lists */
981 for (i
= 0; i
< nargs
; i
++)
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;
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 */
993 val
= extract_unsigned_integer (contents
, len
);
994 regcache_cooked_write_unsigned (regcache
, regnum
++, val
);
996 else if (len
<= (ARGN_REGNUM
- aligned_regnum
+ 1) * 2)
997 /* value fits in remaining registers, store keeping left
1001 regnum
= aligned_regnum
;
1002 for (b
= 0; b
< (len
& ~1); b
+= 2)
1004 val
= extract_unsigned_integer (&contents
[b
], 2);
1005 regcache_cooked_write_unsigned (regcache
, regnum
++, val
);
1009 val
= extract_unsigned_integer (&contents
[b
], 1);
1010 regcache_cooked_write_unsigned (regcache
, regnum
++, (val
<< 8));
1015 /* arg will go onto stack */
1016 regnum
= ARGN_REGNUM
+ 1;
1017 si
= push_stack_item (si
, contents
, len
);
1023 sp
= (sp
- si
->len
) & ~1;
1024 write_memory (sp
, si
->data
, si
->len
);
1025 si
= pop_stack_item (si
);
1028 /* Finally, update the SP register. */
1029 regcache_cooked_write_unsigned (regcache
, D10V_SP_REGNUM
,
1030 d10v_convert_daddr_to_raw (sp
));
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. */
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
)
1047 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
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
;
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.
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.) */
1075 /* The address of the last word recorded in the trace buffer. */
1077 #define DBBC_ADDR (0xd80000)
1079 /* The base of the trace buffer, at least for the "Board_0". */
1081 #define TRACE_BUFFER_BASE (0xf40000)
1083 static void trace_command (char *, int);
1085 static void untrace_command (char *, int);
1087 static void trace_info (char *, int);
1089 static void tdisassemble_command (char *, int);
1091 static void display_trace (int, int);
1093 /* True when instruction traces are being collected. */
1097 /* Remembered PC. */
1099 static CORE_ADDR last_pc
;
1101 /* True when trace output should be displayed whenever program stops. */
1103 static int trace_display
;
1105 /* True when trace listing should include source lines. */
1107 static int default_trace_show_source
= 1;
1118 trace_command (char *args
, int from_tty
)
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
);
1129 printf_filtered ("Tracing is now on.\n");
1133 untrace_command (char *args
, int from_tty
)
1137 printf_filtered ("Tracing is now off.\n");
1141 trace_info (char *args
, int from_tty
)
1145 if (trace_data
.size
)
1147 printf_filtered ("%d entries in trace buffer:\n", trace_data
.size
);
1149 for (i
= 0; i
< trace_data
.size
; ++i
)
1151 printf_filtered ("%d: %d instruction%s at 0x%s\n",
1153 trace_data
.counts
[i
],
1154 (trace_data
.counts
[i
] == 1 ? "" : "s"),
1155 paddr_nz (trace_data
.addrs
[i
]));
1159 printf_filtered ("No entries in trace buffer.\n");
1161 printf_filtered ("Tracing is currently %s.\n", (tracing
? "on" : "off"));
1165 d10v_eva_prepare_to_trace (void)
1170 last_pc
= read_register (D10V_PC_REGNUM
);
1173 /* Collect trace data from the target board and format it into a form
1174 more useful for display. */
1177 d10v_eva_get_trace_data (void)
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
;
1187 tmpspace
= xmalloc (65536 * sizeof (unsigned int));
1189 last_trace
= read_memory_unsigned_integer (DBBC_ADDR
, 2) << 2;
1191 /* Collect buffer contents from the target, stopping when we reach
1192 the word recorded when execution resumed. */
1195 while (last_trace
> 0)
1199 read_memory_unsigned_integer (TRACE_BUFFER_BASE
+ last_trace
, 4);
1200 trace_addr
= trace_word
& 0xffff;
1202 /* Ignore an apparently nonsensical entry. */
1203 if (trace_addr
== 0xffd5)
1205 tmpspace
[count
++] = trace_word
;
1206 if (trace_addr
== last_pc
)
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. */
1216 for (i
= 0; i
< count
; ++i
)
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;
1227 oldsize
= trace_data
.size
;
1228 trace_data
.size
+= count
;
1233 display_trace (oldsize
, trace_data
.size
);
1237 tdisassemble_command (char *arg
, int from_tty
)
1240 CORE_ADDR low
, high
;
1245 high
= trace_data
.size
;
1249 char *space_index
= strchr (arg
, ' ');
1250 if (space_index
== NULL
)
1252 low
= parse_and_eval_address (arg
);
1257 /* Two arguments. */
1258 *space_index
= '\0';
1259 low
= parse_and_eval_address (arg
);
1260 high
= parse_and_eval_address (space_index
+ 1);
1266 printf_filtered ("Dump of trace from %s to %s:\n",
1267 paddr_u (low
), paddr_u (high
));
1269 display_trace (low
, high
);
1271 printf_filtered ("End of trace dump.\n");
1272 gdb_flush (gdb_stdout
);
1276 display_trace (int low
, int high
)
1278 int i
, count
, trace_show_source
, first
, suppress
;
1279 CORE_ADDR next_address
;
1281 trace_show_source
= default_trace_show_source
;
1282 if (!have_full_symbols () && !have_partial_symbols ())
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");
1291 for (i
= low
; i
< high
; ++i
)
1293 next_address
= trace_data
.addrs
[i
];
1294 count
= trace_data
.counts
[i
];
1298 if (trace_show_source
)
1300 struct symtab_and_line sal
, sal_prev
;
1302 sal_prev
= find_pc_line (next_address
- 4, 0);
1303 sal
= find_pc_line (next_address
, 0);
1307 if (first
|| sal
.line
!= sal_prev
.line
)
1308 print_source_lines (sal
.symtab
, sal
.line
, sal
.line
+ 1, 0);
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
));
1321 print_address (next_address
, gdb_stdout
);
1322 printf_filtered (":");
1323 printf_filtered ("\t");
1325 next_address
+= gdb_print_insn (next_address
, gdb_stdout
);
1326 printf_filtered ("\n");
1327 gdb_flush (gdb_stdout
);
1333 d10v_unwind_pc (struct gdbarch
*gdbarch
, struct frame_info
*next_frame
)
1336 frame_unwind_unsigned_register (next_frame
, D10V_PC_REGNUM
, &pc
);
1337 return d10v_make_iaddr (pc
);
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. */
1344 d10v_frame_this_id (struct frame_info
*next_frame
,
1345 void **this_prologue_cache
,
1346 struct frame_id
*this_id
)
1348 struct d10v_unwind_cache
*info
1349 = d10v_frame_unwind_cache (next_frame
, this_prologue_cache
);
1354 /* The FUNC is easy. */
1355 func
= frame_func_unwind (next_frame
);
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)
1364 id
= frame_id_build (base
, func
);
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
)
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
);
1382 static const struct frame_unwind d10v_frame_unwind
= {
1385 d10v_frame_prev_register
1388 static const struct frame_unwind
*
1389 d10v_frame_sniffer (struct frame_info
*next_frame
)
1391 return &d10v_frame_unwind
;
1395 d10v_frame_base_address (struct frame_info
*next_frame
, void **this_cache
)
1397 struct d10v_unwind_cache
*info
1398 = d10v_frame_unwind_cache (next_frame
, this_cache
);
1402 static const struct frame_base d10v_frame_base
= {
1404 d10v_frame_base_address
,
1405 d10v_frame_base_address
,
1406 d10v_frame_base_address
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
1414 static struct frame_id
1415 d10v_unwind_dummy_id (struct gdbarch
*gdbarch
, struct frame_info
*next_frame
)
1417 return frame_id_build (d10v_unwind_sp (gdbarch
, next_frame
),
1418 frame_pc_unwind (next_frame
));
1421 static gdbarch_init_ftype d10v_gdbarch_init
;
1423 static struct gdbarch
*
1424 d10v_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
1426 struct gdbarch
*gdbarch
;
1428 struct gdbarch_tdep
*tdep
;
1429 gdbarch_register_name_ftype
*d10v_register_name
;
1430 gdbarch_register_sim_regno_ftype
*d10v_register_sim_regno
;
1432 /* Find a candidate among the list of pre-declared architectures. */
1433 arches
= gdbarch_list_lookup_by_info (arches
, &info
);
1435 return arches
->gdbarch
;
1437 /* None found, create a new architecture from the information
1439 tdep
= XMALLOC (struct gdbarch_tdep
);
1440 gdbarch
= gdbarch_alloc (&info
, tdep
);
1442 switch (info
.bfd_arch_info
->mach
)
1444 case bfd_mach_d10v_ts2
:
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
;
1454 case bfd_mach_d10v_ts3
:
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
;
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
);
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
);
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
)
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
);
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
);
1502 internal_error (__FILE__
, __LINE__
,
1503 "d10v_gdbarch_init: bad byte order for float format");
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
);
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
);
1515 set_gdbarch_remote_translate_xfer_address (gdbarch
,
1516 remote_d10v_translate_xfer_address
);
1518 set_gdbarch_frame_align (gdbarch
, d10v_frame_align
);
1520 set_gdbarch_register_sim_regno (gdbarch
, d10v_register_sim_regno
);
1522 set_gdbarch_print_registers_info (gdbarch
, d10v_print_registers_info
);
1524 frame_unwind_append_sniffer (gdbarch
, d10v_frame_sniffer
);
1525 frame_base_set_default (gdbarch
, &d10v_frame_base
);
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
);
1532 /* Return the unwound PC value. */
1533 set_gdbarch_unwind_pc (gdbarch
, d10v_unwind_pc
);
1535 set_gdbarch_print_insn (gdbarch
, print_insn_d10v
);
1541 _initialize_d10v_tdep (void)
1543 register_gdbarch_init (bfd_arch_d10v
, d10v_gdbarch_init
);
1545 target_resume_hook
= d10v_eva_prepare_to_trace
;
1546 target_wait_loop_hook
= d10v_eva_get_trace_data
;
1548 deprecate_cmd (add_com ("regs", class_vars
, show_regs
,
1549 "Print all registers"),
1552 add_com ("itrace", class_support
, trace_command
,
1553 "Enable tracing of instruction execution.");
1555 add_com ("iuntrace", class_support
, untrace_command
,
1556 "Disable tracing of instruction execution.");
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!).");
1563 add_info ("itrace", trace_info
,
1564 "Display info about the trace data buffer.");
1566 add_setshow_boolean_cmd ("itracedisplay", no_class
, &trace_display
,
1567 "Set automatic display of trace.\n",
1568 "Show automatic display of trace.\n",
1569 NULL
, NULL
, &setlist
, &showlist
);
1570 add_setshow_boolean_cmd ("itracesource", no_class
,
1571 &default_trace_show_source
,
1572 "Set display of source code with trace.\n",
1573 "Show display of source code with trace.\n",
1574 NULL
, NULL
, &setlist
, &showlist
);