1 /* Target-dependent code for Mitsubishi D10V, for GDB.
2 Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
30 #include "gdb_string.h"
37 #include "arch-utils.h"
39 #include "floatformat.h"
43 #define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
45 struct frame_extra_info
56 unsigned long (*dmap_register) (int nr);
57 unsigned long (*imap_register) (int nr);
58 int (*register_sim_regno) (int nr);
61 /* These are the addresses the D10V-EVA board maps data and
62 instruction memory to. */
64 #define DMEM_START 0x2000000
65 #define IMEM_START 0x1000000
66 #define STACK_START 0x0007ffe
68 /* d10v register names. */
78 #define NR_DMAP_REGS (gdbarch_tdep (current_gdbarch)->nr_dmap_regs)
79 #define A0_REGNUM (gdbarch_tdep (current_gdbarch)->a0_regnum)
81 /* d10v calling convention. */
83 #define ARG1_REGNUM R0_REGNUM
85 #define RET1_REGNUM R0_REGNUM
89 extern void _initialize_d10v_tdep (void);
91 static void d10v_eva_prepare_to_trace (void);
93 static void d10v_eva_get_trace_data (void);
95 static int prologue_find_regs (unsigned short op, struct frame_info *fi,
98 extern void d10v_frame_init_saved_regs (struct frame_info *);
100 static void do_d10v_pop_frame (struct frame_info *fi);
103 d10v_frame_chain_valid (chain, frame)
105 struct frame_info *frame; /* not used here */
107 return ((chain) != 0 && (frame) != 0 && (frame)->pc > IMEM_START);
111 d10v_stack_align (CORE_ADDR len)
113 return (len + 1) & ~1;
116 /* Should we use EXTRACT_STRUCT_VALUE_ADDRESS instead of
117 EXTRACT_RETURN_VALUE? GCC_P is true if compiled with gcc
118 and TYPE is the type (which is known to be struct, union or array).
120 The d10v returns anything less than 8 bytes in size in
124 d10v_use_struct_convention (gcc_p, type)
128 return (TYPE_LENGTH (type) > 8);
133 d10v_breakpoint_from_pc (pcptr, lenptr)
137 static unsigned char breakpoint[] =
138 {0x2f, 0x90, 0x5e, 0x00};
139 *lenptr = sizeof (breakpoint);
143 /* Map the REG_NR onto an ascii name. Return NULL or an empty string
144 when the reg_nr isn't valid. */
148 TS2_IMAP0_REGNUM = 32,
149 TS2_DMAP_REGNUM = 34,
150 TS2_NR_DMAP_REGS = 1,
155 d10v_ts2_register_name (int reg_nr)
157 static char *register_names[] =
159 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
160 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
161 "psw", "bpsw", "pc", "bpc", "cr4", "cr5", "cr6", "rpt_c",
162 "rpt_s", "rpt_e", "mod_s", "mod_e", "cr12", "cr13", "iba", "cr15",
163 "imap0", "imap1", "dmap", "a0", "a1"
167 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
169 return register_names[reg_nr];
174 TS3_IMAP0_REGNUM = 36,
175 TS3_DMAP0_REGNUM = 38,
176 TS3_NR_DMAP_REGS = 4,
181 d10v_ts3_register_name (int reg_nr)
183 static char *register_names[] =
185 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
186 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
187 "psw", "bpsw", "pc", "bpc", "cr4", "cr5", "cr6", "rpt_c",
188 "rpt_s", "rpt_e", "mod_s", "mod_e", "cr12", "cr13", "iba", "cr15",
192 "dmap0", "dmap1", "dmap2", "dmap3"
196 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
198 return register_names[reg_nr];
201 /* Access the DMAP/IMAP registers in a target independant way. */
204 d10v_ts2_dmap_register (int reg_nr)
212 return read_register (TS2_DMAP_REGNUM);
219 d10v_ts3_dmap_register (int reg_nr)
221 return read_register (TS3_DMAP0_REGNUM + reg_nr);
225 d10v_dmap_register (int reg_nr)
227 return gdbarch_tdep (current_gdbarch)->dmap_register (reg_nr);
231 d10v_ts2_imap_register (int reg_nr)
233 return read_register (TS2_IMAP0_REGNUM + reg_nr);
237 d10v_ts3_imap_register (int reg_nr)
239 return read_register (TS3_IMAP0_REGNUM + reg_nr);
243 d10v_imap_register (int reg_nr)
245 return gdbarch_tdep (current_gdbarch)->imap_register (reg_nr);
248 /* MAP GDB's internal register numbering (determined by the layout fo
249 the REGISTER_BYTE array) onto the simulator's register
253 d10v_ts2_register_sim_regno (int nr)
255 if (nr >= TS2_IMAP0_REGNUM
256 && nr < TS2_IMAP0_REGNUM + NR_IMAP_REGS)
257 return nr - TS2_IMAP0_REGNUM + SIM_D10V_IMAP0_REGNUM;
258 if (nr == TS2_DMAP_REGNUM)
259 return nr - TS2_DMAP_REGNUM + SIM_D10V_TS2_DMAP_REGNUM;
260 if (nr >= TS2_A0_REGNUM
261 && nr < TS2_A0_REGNUM + NR_A_REGS)
262 return nr - TS2_A0_REGNUM + SIM_D10V_A0_REGNUM;
267 d10v_ts3_register_sim_regno (int nr)
269 if (nr >= TS3_IMAP0_REGNUM
270 && nr < TS3_IMAP0_REGNUM + NR_IMAP_REGS)
271 return nr - TS3_IMAP0_REGNUM + SIM_D10V_IMAP0_REGNUM;
272 if (nr >= TS3_DMAP0_REGNUM
273 && nr < TS3_DMAP0_REGNUM + TS3_NR_DMAP_REGS)
274 return nr - TS3_DMAP0_REGNUM + SIM_D10V_DMAP0_REGNUM;
275 if (nr >= TS3_A0_REGNUM
276 && nr < TS3_A0_REGNUM + NR_A_REGS)
277 return nr - TS3_A0_REGNUM + SIM_D10V_A0_REGNUM;
282 d10v_register_sim_regno (int nr)
284 return gdbarch_tdep (current_gdbarch)->register_sim_regno (nr);
287 /* Index within `registers' of the first byte of the space for
291 d10v_register_byte (reg_nr)
294 if (reg_nr < A0_REGNUM)
296 else if (reg_nr < (A0_REGNUM + NR_A_REGS))
297 return (A0_REGNUM * 2
298 + (reg_nr - A0_REGNUM) * 8);
300 return (A0_REGNUM * 2
302 + (reg_nr - A0_REGNUM - NR_A_REGS) * 2);
305 /* Number of bytes of storage in the actual machine representation for
309 d10v_register_raw_size (reg_nr)
312 if (reg_nr < A0_REGNUM)
314 else if (reg_nr < (A0_REGNUM + NR_A_REGS))
320 /* Number of bytes of storage in the program's representation
324 d10v_register_virtual_size (reg_nr)
327 return TYPE_LENGTH (REGISTER_VIRTUAL_TYPE (reg_nr));
330 /* Return the GDB type object for the "standard" data type
331 of data in register N. */
334 d10v_register_virtual_type (reg_nr)
337 if (reg_nr >= A0_REGNUM
338 && reg_nr < (A0_REGNUM + NR_A_REGS))
339 return builtin_type_int64;
340 else if (reg_nr == PC_REGNUM
341 || reg_nr == SP_REGNUM)
342 return builtin_type_int32;
344 return builtin_type_int16;
347 /* convert $pc and $sp to/from virtual addresses */
349 d10v_register_convertible (nr)
352 return ((nr) == PC_REGNUM || (nr) == SP_REGNUM);
356 d10v_register_convert_to_virtual (regnum, type, from, to)
362 ULONGEST x = extract_unsigned_integer (from, REGISTER_RAW_SIZE (regnum));
363 if (regnum == PC_REGNUM)
364 x = (x << 2) | IMEM_START;
367 store_unsigned_integer (to, TYPE_LENGTH (type), x);
371 d10v_register_convert_to_raw (type, regnum, from, to)
377 ULONGEST x = extract_unsigned_integer (from, TYPE_LENGTH (type));
379 if (regnum == PC_REGNUM)
381 store_unsigned_integer (to, 2, x);
389 return ((x) | DMEM_START);
396 return (((x) << 2) | IMEM_START);
403 return (((x) & 0x3000000) == DMEM_START);
410 return (((x) & 0x3000000) == IMEM_START);
415 d10v_convert_iaddr_to_raw (x)
418 return (((x) >> 2) & 0xffff);
422 d10v_convert_daddr_to_raw (x)
425 return ((x) & 0xffff);
428 /* Store the address of the place in which to copy the structure the
429 subroutine will return. This is called from call_function.
431 We store structs through a pointer passed in the first Argument
435 d10v_store_struct_return (addr, sp)
439 write_register (ARG1_REGNUM, (addr));
442 /* Write into appropriate registers a function return value
443 of type TYPE, given in virtual format.
445 Things always get returned in RET1_REGNUM, RET2_REGNUM, ... */
448 d10v_store_return_value (type, valbuf)
452 write_register_bytes (REGISTER_BYTE (RET1_REGNUM),
457 /* Extract from an array REGBUF containing the (raw) register state
458 the address in which a function should return its structure value,
459 as a CORE_ADDR (or an expression that can be used as one). */
462 d10v_extract_struct_value_address (regbuf)
465 return (extract_address ((regbuf) + REGISTER_BYTE (ARG1_REGNUM),
466 REGISTER_RAW_SIZE (ARG1_REGNUM))
471 d10v_frame_saved_pc (frame)
472 struct frame_info *frame;
474 return ((frame)->extra_info->return_pc);
478 d10v_frame_args_address (fi)
479 struct frame_info *fi;
485 d10v_frame_locals_address (fi)
486 struct frame_info *fi;
491 /* Immediately after a function call, return the saved pc. We can't
492 use frame->return_pc beause that is determined by reading R13 off
493 the stack and that may not be written yet. */
496 d10v_saved_pc_after_call (frame)
497 struct frame_info *frame;
499 return ((read_register (LR_REGNUM) << 2)
503 /* Discard from the stack the innermost frame, restoring all saved
509 generic_pop_current_frame (do_d10v_pop_frame);
513 do_d10v_pop_frame (fi)
514 struct frame_info *fi;
521 /* fill out fsr with the address of where each */
522 /* register was stored in the frame */
523 d10v_frame_init_saved_regs (fi);
525 /* now update the current registers with the old values */
526 for (regnum = A0_REGNUM; regnum < A0_REGNUM + NR_A_REGS; regnum++)
528 if (fi->saved_regs[regnum])
530 read_memory (fi->saved_regs[regnum], raw_buffer, REGISTER_RAW_SIZE (regnum));
531 write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, REGISTER_RAW_SIZE (regnum));
534 for (regnum = 0; regnum < SP_REGNUM; regnum++)
536 if (fi->saved_regs[regnum])
538 write_register (regnum, read_memory_unsigned_integer (fi->saved_regs[regnum], REGISTER_RAW_SIZE (regnum)));
541 if (fi->saved_regs[PSW_REGNUM])
543 write_register (PSW_REGNUM, read_memory_unsigned_integer (fi->saved_regs[PSW_REGNUM], REGISTER_RAW_SIZE (PSW_REGNUM)));
546 write_register (PC_REGNUM, read_register (LR_REGNUM));
547 write_register (SP_REGNUM, fp + fi->extra_info->size);
548 target_store_registers (-1);
549 flush_cached_frames ();
557 if ((op & 0x7E1F) == 0x6C1F)
561 if ((op & 0x7E3F) == 0x6E1F)
565 if ((op & 0x7FE1) == 0x01E1)
577 if ((op & 0x7E1F) == 0x681E)
581 if ((op & 0x7E3F) == 0x3A1E)
588 d10v_skip_prologue (pc)
592 unsigned short op1, op2;
593 CORE_ADDR func_addr, func_end;
594 struct symtab_and_line sal;
596 /* If we have line debugging information, then the end of the */
597 /* prologue should the first assembly instruction of the first source line */
598 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
600 sal = find_pc_line (func_addr, 0);
601 if (sal.end && sal.end < func_end)
605 if (target_read_memory (pc, (char *) &op, 4))
606 return pc; /* Can't access it -- assume no prologue. */
610 op = (unsigned long) read_memory_integer (pc, 4);
611 if ((op & 0xC0000000) == 0xC0000000)
613 /* long instruction */
614 if (((op & 0x3FFF0000) != 0x01FF0000) && /* add3 sp,sp,n */
615 ((op & 0x3F0F0000) != 0x340F0000) && /* st rn, @(offset,sp) */
616 ((op & 0x3F1F0000) != 0x350F0000)) /* st2w rn, @(offset,sp) */
621 /* short instructions */
622 if ((op & 0xC0000000) == 0x80000000)
624 op2 = (op & 0x3FFF8000) >> 15;
629 op1 = (op & 0x3FFF8000) >> 15;
632 if (check_prologue (op1))
634 if (!check_prologue (op2))
636 /* if the previous opcode was really part of the prologue */
637 /* and not just a NOP, then we want to break after both instructions */
651 /* Given a GDB frame, determine the address of the calling function's frame.
652 This will be used to create a new GDB frame struct, and then
653 INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
657 d10v_frame_chain (fi)
658 struct frame_info *fi;
660 d10v_frame_init_saved_regs (fi);
662 if (fi->extra_info->return_pc == IMEM_START
663 || inside_entry_file (fi->extra_info->return_pc))
664 return (CORE_ADDR) 0;
666 if (!fi->saved_regs[FP_REGNUM])
668 if (!fi->saved_regs[SP_REGNUM]
669 || fi->saved_regs[SP_REGNUM] == STACK_START)
670 return (CORE_ADDR) 0;
672 return fi->saved_regs[SP_REGNUM];
675 if (!read_memory_unsigned_integer (fi->saved_regs[FP_REGNUM],
676 REGISTER_RAW_SIZE (FP_REGNUM)))
677 return (CORE_ADDR) 0;
679 return D10V_MAKE_DADDR (read_memory_unsigned_integer (fi->saved_regs[FP_REGNUM],
680 REGISTER_RAW_SIZE (FP_REGNUM)));
683 static int next_addr, uses_frame;
686 prologue_find_regs (op, fi, addr)
688 struct frame_info *fi;
694 if ((op & 0x7E1F) == 0x6C1F)
696 n = (op & 0x1E0) >> 5;
698 fi->saved_regs[n] = next_addr;
703 else if ((op & 0x7E3F) == 0x6E1F)
705 n = (op & 0x1E0) >> 5;
707 fi->saved_regs[n] = next_addr;
708 fi->saved_regs[n + 1] = next_addr + 2;
713 if ((op & 0x7FE1) == 0x01E1)
715 n = (op & 0x1E) >> 1;
734 if ((op & 0x7E1F) == 0x681E)
736 n = (op & 0x1E0) >> 5;
737 fi->saved_regs[n] = next_addr;
742 if ((op & 0x7E3F) == 0x3A1E)
744 n = (op & 0x1E0) >> 5;
745 fi->saved_regs[n] = next_addr;
746 fi->saved_regs[n + 1] = next_addr + 2;
753 /* Put here the code to store, into fi->saved_regs, the addresses of
754 the saved registers of frame described by FRAME_INFO. This
755 includes special registers such as pc and fp saved in special ways
756 in the stack frame. sp is even more special: the address we return
757 for it IS the sp for the next frame. */
760 d10v_frame_init_saved_regs (fi)
761 struct frame_info *fi;
765 unsigned short op1, op2;
769 memset (fi->saved_regs, 0, SIZEOF_FRAME_SAVED_REGS);
772 pc = get_pc_function_start (fi->pc);
777 op = (unsigned long) read_memory_integer (pc, 4);
778 if ((op & 0xC0000000) == 0xC0000000)
780 /* long instruction */
781 if ((op & 0x3FFF0000) == 0x01FF0000)
784 short n = op & 0xFFFF;
787 else if ((op & 0x3F0F0000) == 0x340F0000)
789 /* st rn, @(offset,sp) */
790 short offset = op & 0xFFFF;
791 short n = (op >> 20) & 0xF;
792 fi->saved_regs[n] = next_addr + offset;
794 else if ((op & 0x3F1F0000) == 0x350F0000)
796 /* st2w rn, @(offset,sp) */
797 short offset = op & 0xFFFF;
798 short n = (op >> 20) & 0xF;
799 fi->saved_regs[n] = next_addr + offset;
800 fi->saved_regs[n + 1] = next_addr + offset + 2;
807 /* short instructions */
808 if ((op & 0xC0000000) == 0x80000000)
810 op2 = (op & 0x3FFF8000) >> 15;
815 op1 = (op & 0x3FFF8000) >> 15;
818 if (!prologue_find_regs (op1, fi, pc) || !prologue_find_regs (op2, fi, pc))
824 fi->extra_info->size = -next_addr;
827 fp = D10V_MAKE_DADDR (read_register (SP_REGNUM));
829 for (i = 0; i < NUM_REGS - 1; i++)
830 if (fi->saved_regs[i])
832 fi->saved_regs[i] = fp - (next_addr - fi->saved_regs[i]);
835 if (fi->saved_regs[LR_REGNUM])
837 CORE_ADDR return_pc = read_memory_unsigned_integer (fi->saved_regs[LR_REGNUM], REGISTER_RAW_SIZE (LR_REGNUM));
838 fi->extra_info->return_pc = D10V_MAKE_IADDR (return_pc);
842 fi->extra_info->return_pc = D10V_MAKE_IADDR (read_register (LR_REGNUM));
845 /* th SP is not normally (ever?) saved, but check anyway */
846 if (!fi->saved_regs[SP_REGNUM])
848 /* if the FP was saved, that means the current FP is valid, */
849 /* otherwise, it isn't being used, so we use the SP instead */
851 fi->saved_regs[SP_REGNUM] = read_register (FP_REGNUM) + fi->extra_info->size;
854 fi->saved_regs[SP_REGNUM] = fp + fi->extra_info->size;
855 fi->extra_info->frameless = 1;
856 fi->saved_regs[FP_REGNUM] = 0;
862 d10v_init_extra_frame_info (fromleaf, fi)
864 struct frame_info *fi;
866 fi->extra_info = (struct frame_extra_info *)
867 frame_obstack_alloc (sizeof (struct frame_extra_info));
868 frame_saved_regs_zalloc (fi);
870 fi->extra_info->frameless = 0;
871 fi->extra_info->size = 0;
872 fi->extra_info->return_pc = 0;
874 /* The call dummy doesn't save any registers on the stack, so we can
876 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
882 d10v_frame_init_saved_regs (fi);
887 show_regs (args, from_tty)
892 printf_filtered ("PC=%04lx (0x%lx) PSW=%04lx RPT_S=%04lx RPT_E=%04lx RPT_C=%04lx\n",
893 (long) read_register (PC_REGNUM),
894 (long) D10V_MAKE_IADDR (read_register (PC_REGNUM)),
895 (long) read_register (PSW_REGNUM),
896 (long) read_register (24),
897 (long) read_register (25),
898 (long) read_register (23));
899 printf_filtered ("R0-R7 %04lx %04lx %04lx %04lx %04lx %04lx %04lx %04lx\n",
900 (long) read_register (0),
901 (long) read_register (1),
902 (long) read_register (2),
903 (long) read_register (3),
904 (long) read_register (4),
905 (long) read_register (5),
906 (long) read_register (6),
907 (long) read_register (7));
908 printf_filtered ("R8-R15 %04lx %04lx %04lx %04lx %04lx %04lx %04lx %04lx\n",
909 (long) read_register (8),
910 (long) read_register (9),
911 (long) read_register (10),
912 (long) read_register (11),
913 (long) read_register (12),
914 (long) read_register (13),
915 (long) read_register (14),
916 (long) read_register (15));
917 for (a = 0; a < NR_IMAP_REGS; a++)
920 printf_filtered (" ");
921 printf_filtered ("IMAP%d %04lx", a, d10v_imap_register (a));
923 if (NR_DMAP_REGS == 1)
924 printf_filtered (" DMAP %04lx\n", d10v_dmap_register (2));
927 for (a = 0; a < NR_DMAP_REGS; a++)
929 printf_filtered (" DMAP%d %04lx", a, d10v_dmap_register (a));
931 printf_filtered ("\n");
933 printf_filtered ("A0-A%d", NR_A_REGS - 1);
934 for (a = A0_REGNUM; a < A0_REGNUM + NR_A_REGS; a++)
936 char num[MAX_REGISTER_RAW_SIZE];
938 printf_filtered (" ");
939 read_register_gen (a, (char *) &num);
940 for (i = 0; i < MAX_REGISTER_RAW_SIZE; i++)
942 printf_filtered ("%02x", (num[i] & 0xff));
945 printf_filtered ("\n");
956 save_pid = inferior_pid;
958 pc = (int) read_register (PC_REGNUM);
959 inferior_pid = save_pid;
960 retval = D10V_MAKE_IADDR (pc);
965 d10v_write_pc (val, pid)
971 save_pid = inferior_pid;
973 write_register (PC_REGNUM, D10V_CONVERT_IADDR_TO_RAW (val));
974 inferior_pid = save_pid;
980 return (D10V_MAKE_DADDR (read_register (SP_REGNUM)));
987 write_register (SP_REGNUM, D10V_CONVERT_DADDR_TO_RAW (val));
994 write_register (FP_REGNUM, D10V_CONVERT_DADDR_TO_RAW (val));
1000 return (D10V_MAKE_DADDR (read_register (FP_REGNUM)));
1003 /* Function: push_return_address (pc)
1004 Set up the return address for the inferior function call.
1005 Needed for targets where we don't actually execute a JSR/BSR instruction */
1008 d10v_push_return_address (pc, sp)
1012 write_register (LR_REGNUM, D10V_CONVERT_IADDR_TO_RAW (CALL_DUMMY_ADDRESS ()));
1017 /* When arguments must be pushed onto the stack, they go on in reverse
1018 order. The below implements a FILO (stack) to do this. */
1023 struct stack_item *prev;
1027 static struct stack_item *push_stack_item (struct stack_item *prev,
1028 void *contents, int len);
1029 static struct stack_item *
1030 push_stack_item (prev, contents, len)
1031 struct stack_item *prev;
1035 struct stack_item *si;
1036 si = xmalloc (sizeof (struct stack_item));
1037 si->data = xmalloc (len);
1040 memcpy (si->data, contents, len);
1044 static struct stack_item *pop_stack_item (struct stack_item *si);
1045 static struct stack_item *
1047 struct stack_item *si;
1049 struct stack_item *dead = si;
1058 d10v_push_arguments (nargs, args, sp, struct_return, struct_addr)
1063 CORE_ADDR struct_addr;
1066 int regnum = ARG1_REGNUM;
1067 struct stack_item *si = NULL;
1069 /* Fill in registers and arg lists */
1070 for (i = 0; i < nargs; i++)
1072 value_ptr arg = args[i];
1073 struct type *type = check_typedef (VALUE_TYPE (arg));
1074 char *contents = VALUE_CONTENTS (arg);
1075 int len = TYPE_LENGTH (type);
1076 /* printf ("push: type=%d len=%d\n", type->code, len); */
1077 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1079 /* pointers require special handling - first convert and
1081 long val = extract_signed_integer (contents, len);
1083 if (TYPE_TARGET_TYPE (type)
1084 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC))
1086 /* function pointer */
1087 val = D10V_CONVERT_IADDR_TO_RAW (val);
1089 else if (D10V_IADDR_P (val))
1091 /* also function pointer! */
1092 val = D10V_CONVERT_DADDR_TO_RAW (val);
1099 if (regnum <= ARGN_REGNUM)
1100 write_register (regnum++, val & 0xffff);
1104 /* arg will go onto stack */
1105 store_address (ptr, 2, val & 0xffff);
1106 si = push_stack_item (si, ptr, 2);
1111 int aligned_regnum = (regnum + 1) & ~1;
1112 if (len <= 2 && regnum <= ARGN_REGNUM)
1113 /* fits in a single register, do not align */
1115 long val = extract_unsigned_integer (contents, len);
1116 write_register (regnum++, val);
1118 else if (len <= (ARGN_REGNUM - aligned_regnum + 1) * 2)
1119 /* value fits in remaining registers, store keeping left
1123 regnum = aligned_regnum;
1124 for (b = 0; b < (len & ~1); b += 2)
1126 long val = extract_unsigned_integer (&contents[b], 2);
1127 write_register (regnum++, val);
1131 long val = extract_unsigned_integer (&contents[b], 1);
1132 write_register (regnum++, (val << 8));
1137 /* arg will go onto stack */
1138 regnum = ARGN_REGNUM + 1;
1139 si = push_stack_item (si, contents, len);
1146 sp = (sp - si->len) & ~1;
1147 write_memory (sp, si->data, si->len);
1148 si = pop_stack_item (si);
1155 /* Given a return value in `regbuf' with a type `valtype',
1156 extract and copy its value into `valbuf'. */
1159 d10v_extract_return_value (type, regbuf, valbuf)
1161 char regbuf[REGISTER_BYTES];
1165 /* printf("RET: TYPE=%d len=%d r%d=0x%x\n",type->code, TYPE_LENGTH (type), RET1_REGNUM - R0_REGNUM, (int) extract_unsigned_integer (regbuf + REGISTER_BYTE(RET1_REGNUM), REGISTER_RAW_SIZE (RET1_REGNUM))); */
1166 if (TYPE_CODE (type) == TYPE_CODE_PTR
1167 && TYPE_TARGET_TYPE (type)
1168 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC))
1170 /* pointer to function */
1173 snum = extract_address (regbuf + REGISTER_BYTE (RET1_REGNUM), REGISTER_RAW_SIZE (RET1_REGNUM));
1174 store_address (valbuf, 4, D10V_MAKE_IADDR (snum));
1176 else if (TYPE_CODE (type) == TYPE_CODE_PTR)
1178 /* pointer to data */
1181 snum = extract_address (regbuf + REGISTER_BYTE (RET1_REGNUM), REGISTER_RAW_SIZE (RET1_REGNUM));
1182 store_address (valbuf, 4, D10V_MAKE_DADDR (snum));
1186 len = TYPE_LENGTH (type);
1189 unsigned short c = extract_unsigned_integer (regbuf + REGISTER_BYTE (RET1_REGNUM), REGISTER_RAW_SIZE (RET1_REGNUM));
1190 store_unsigned_integer (valbuf, 1, c);
1192 else if ((len & 1) == 0)
1193 memcpy (valbuf, regbuf + REGISTER_BYTE (RET1_REGNUM), len);
1196 /* For return values of odd size, the first byte is in the
1197 least significant part of the first register. The
1198 remaining bytes in remaining registers. Interestingly,
1199 when such values are passed in, the last byte is in the
1200 most significant byte of that same register - wierd. */
1201 memcpy (valbuf, regbuf + REGISTER_BYTE (RET1_REGNUM) + 1, len);
1206 /* Translate a GDB virtual ADDR/LEN into a format the remote target
1207 understands. Returns number of bytes that can be transfered
1208 starting at TARG_ADDR. Return ZERO if no bytes can be transfered
1209 (segmentation fault). Since the simulator knows all about how the
1210 VM system works, we just call that to do the translation. */
1213 remote_d10v_translate_xfer_address (CORE_ADDR memaddr, int nr_bytes,
1214 CORE_ADDR *targ_addr, int *targ_len)
1218 out_len = sim_d10v_translate_addr (memaddr, nr_bytes,
1221 d10v_imap_register);
1222 *targ_addr = out_addr;
1223 *targ_len = out_len;
1227 /* The following code implements access to, and display of, the D10V's
1228 instruction trace buffer. The buffer consists of 64K or more
1229 4-byte words of data, of which each words includes an 8-bit count,
1230 an 8-bit segment number, and a 16-bit instruction address.
1232 In theory, the trace buffer is continuously capturing instruction
1233 data that the CPU presents on its "debug bus", but in practice, the
1234 ROMified GDB stub only enables tracing when it continues or steps
1235 the program, and stops tracing when the program stops; so it
1236 actually works for GDB to read the buffer counter out of memory and
1237 then read each trace word. The counter records where the tracing
1238 stops, but there is no record of where it started, so we remember
1239 the PC when we resumed and then search backwards in the trace
1240 buffer for a word that includes that address. This is not perfect,
1241 because you will miss trace data if the resumption PC is the target
1242 of a branch. (The value of the buffer counter is semi-random, any
1243 trace data from a previous program stop is gone.) */
1245 /* The address of the last word recorded in the trace buffer. */
1247 #define DBBC_ADDR (0xd80000)
1249 /* The base of the trace buffer, at least for the "Board_0". */
1251 #define TRACE_BUFFER_BASE (0xf40000)
1253 static void trace_command (char *, int);
1255 static void untrace_command (char *, int);
1257 static void trace_info (char *, int);
1259 static void tdisassemble_command (char *, int);
1261 static void display_trace (int, int);
1263 /* True when instruction traces are being collected. */
1267 /* Remembered PC. */
1269 static CORE_ADDR last_pc;
1271 /* True when trace output should be displayed whenever program stops. */
1273 static int trace_display;
1275 /* True when trace listing should include source lines. */
1277 static int default_trace_show_source = 1;
1288 trace_command (args, from_tty)
1292 /* Clear the host-side trace buffer, allocating space if needed. */
1293 trace_data.size = 0;
1294 if (trace_data.counts == NULL)
1295 trace_data.counts = (short *) xmalloc (65536 * sizeof (short));
1296 if (trace_data.addrs == NULL)
1297 trace_data.addrs = (CORE_ADDR *) xmalloc (65536 * sizeof (CORE_ADDR));
1301 printf_filtered ("Tracing is now on.\n");
1305 untrace_command (args, from_tty)
1311 printf_filtered ("Tracing is now off.\n");
1315 trace_info (args, from_tty)
1321 if (trace_data.size)
1323 printf_filtered ("%d entries in trace buffer:\n", trace_data.size);
1325 for (i = 0; i < trace_data.size; ++i)
1327 printf_filtered ("%d: %d instruction%s at 0x%s\n",
1329 trace_data.counts[i],
1330 (trace_data.counts[i] == 1 ? "" : "s"),
1331 paddr_nz (trace_data.addrs[i]));
1335 printf_filtered ("No entries in trace buffer.\n");
1337 printf_filtered ("Tracing is currently %s.\n", (tracing ? "on" : "off"));
1340 /* Print the instruction at address MEMADDR in debugged memory,
1341 on STREAM. Returns length of the instruction, in bytes. */
1344 print_insn (memaddr, stream)
1346 struct ui_file *stream;
1348 /* If there's no disassembler, something is very wrong. */
1349 if (tm_print_insn == NULL)
1350 internal_error ("print_insn: no disassembler");
1352 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1353 tm_print_insn_info.endian = BFD_ENDIAN_BIG;
1355 tm_print_insn_info.endian = BFD_ENDIAN_LITTLE;
1356 return (*tm_print_insn) (memaddr, &tm_print_insn_info);
1360 d10v_eva_prepare_to_trace ()
1365 last_pc = read_register (PC_REGNUM);
1368 /* Collect trace data from the target board and format it into a form
1369 more useful for display. */
1372 d10v_eva_get_trace_data ()
1374 int count, i, j, oldsize;
1375 int trace_addr, trace_seg, trace_cnt, next_cnt;
1376 unsigned int last_trace, trace_word, next_word;
1377 unsigned int *tmpspace;
1382 tmpspace = xmalloc (65536 * sizeof (unsigned int));
1384 last_trace = read_memory_unsigned_integer (DBBC_ADDR, 2) << 2;
1386 /* Collect buffer contents from the target, stopping when we reach
1387 the word recorded when execution resumed. */
1390 while (last_trace > 0)
1394 read_memory_unsigned_integer (TRACE_BUFFER_BASE + last_trace, 4);
1395 trace_addr = trace_word & 0xffff;
1397 /* Ignore an apparently nonsensical entry. */
1398 if (trace_addr == 0xffd5)
1400 tmpspace[count++] = trace_word;
1401 if (trace_addr == last_pc)
1407 /* Move the data to the host-side trace buffer, adjusting counts to
1408 include the last instruction executed and transforming the address
1409 into something that GDB likes. */
1411 for (i = 0; i < count; ++i)
1413 trace_word = tmpspace[i];
1414 next_word = ((i == 0) ? 0 : tmpspace[i - 1]);
1415 trace_addr = trace_word & 0xffff;
1416 next_cnt = (next_word >> 24) & 0xff;
1417 j = trace_data.size + count - i - 1;
1418 trace_data.addrs[j] = (trace_addr << 2) + 0x1000000;
1419 trace_data.counts[j] = next_cnt + 1;
1422 oldsize = trace_data.size;
1423 trace_data.size += count;
1428 display_trace (oldsize, trace_data.size);
1432 tdisassemble_command (arg, from_tty)
1437 CORE_ADDR low, high;
1443 high = trace_data.size;
1445 else if (!(space_index = (char *) strchr (arg, ' ')))
1447 low = parse_and_eval_address (arg);
1452 /* Two arguments. */
1453 *space_index = '\0';
1454 low = parse_and_eval_address (arg);
1455 high = parse_and_eval_address (space_index + 1);
1460 printf_filtered ("Dump of trace from %s to %s:\n", paddr_u (low), paddr_u (high));
1462 display_trace (low, high);
1464 printf_filtered ("End of trace dump.\n");
1465 gdb_flush (gdb_stdout);
1469 display_trace (low, high)
1472 int i, count, trace_show_source, first, suppress;
1473 CORE_ADDR next_address;
1475 trace_show_source = default_trace_show_source;
1476 if (!have_full_symbols () && !have_partial_symbols ())
1478 trace_show_source = 0;
1479 printf_filtered ("No symbol table is loaded. Use the \"file\" command.\n");
1480 printf_filtered ("Trace will not display any source.\n");
1485 for (i = low; i < high; ++i)
1487 next_address = trace_data.addrs[i];
1488 count = trace_data.counts[i];
1492 if (trace_show_source)
1494 struct symtab_and_line sal, sal_prev;
1496 sal_prev = find_pc_line (next_address - 4, 0);
1497 sal = find_pc_line (next_address, 0);
1501 if (first || sal.line != sal_prev.line)
1502 print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
1508 /* FIXME-32x64--assumes sal.pc fits in long. */
1509 printf_filtered ("No source file for address %s.\n",
1510 local_hex_string ((unsigned long) sal.pc));
1515 print_address (next_address, gdb_stdout);
1516 printf_filtered (":");
1517 printf_filtered ("\t");
1519 next_address = next_address + print_insn (next_address, gdb_stdout);
1520 printf_filtered ("\n");
1521 gdb_flush (gdb_stdout);
1527 static gdbarch_init_ftype d10v_gdbarch_init;
1529 static struct gdbarch *
1530 d10v_gdbarch_init (info, arches)
1531 struct gdbarch_info info;
1532 struct gdbarch_list *arches;
1534 static LONGEST d10v_call_dummy_words[] =
1536 struct gdbarch *gdbarch;
1538 struct gdbarch_tdep *tdep;
1539 gdbarch_register_name_ftype *d10v_register_name;
1541 /* Find a candidate among the list of pre-declared architectures. */
1542 arches = gdbarch_list_lookup_by_info (arches, &info);
1544 return arches->gdbarch;
1546 /* None found, create a new architecture from the information
1548 tdep = XMALLOC (struct gdbarch_tdep);
1549 gdbarch = gdbarch_alloc (&info, tdep);
1551 switch (info.bfd_arch_info->mach)
1553 case bfd_mach_d10v_ts2:
1555 d10v_register_name = d10v_ts2_register_name;
1556 tdep->a0_regnum = TS2_A0_REGNUM;
1557 tdep->nr_dmap_regs = TS2_NR_DMAP_REGS;
1558 tdep->register_sim_regno = d10v_ts2_register_sim_regno;
1559 tdep->dmap_register = d10v_ts2_dmap_register;
1560 tdep->imap_register = d10v_ts2_imap_register;
1563 case bfd_mach_d10v_ts3:
1565 d10v_register_name = d10v_ts3_register_name;
1566 tdep->a0_regnum = TS3_A0_REGNUM;
1567 tdep->nr_dmap_regs = TS3_NR_DMAP_REGS;
1568 tdep->register_sim_regno = d10v_ts3_register_sim_regno;
1569 tdep->dmap_register = d10v_ts3_dmap_register;
1570 tdep->imap_register = d10v_ts3_imap_register;
1574 set_gdbarch_read_pc (gdbarch, d10v_read_pc);
1575 set_gdbarch_write_pc (gdbarch, d10v_write_pc);
1576 set_gdbarch_read_fp (gdbarch, d10v_read_fp);
1577 set_gdbarch_write_fp (gdbarch, d10v_write_fp);
1578 set_gdbarch_read_sp (gdbarch, d10v_read_sp);
1579 set_gdbarch_write_sp (gdbarch, d10v_write_sp);
1581 set_gdbarch_num_regs (gdbarch, d10v_num_regs);
1582 set_gdbarch_sp_regnum (gdbarch, 15);
1583 set_gdbarch_fp_regnum (gdbarch, 11);
1584 set_gdbarch_pc_regnum (gdbarch, 18);
1585 set_gdbarch_register_name (gdbarch, d10v_register_name);
1586 set_gdbarch_register_size (gdbarch, 2);
1587 set_gdbarch_register_bytes (gdbarch, (d10v_num_regs - 2) * 2 + 16);
1588 set_gdbarch_register_byte (gdbarch, d10v_register_byte);
1589 set_gdbarch_register_raw_size (gdbarch, d10v_register_raw_size);
1590 set_gdbarch_max_register_raw_size (gdbarch, 8);
1591 set_gdbarch_register_virtual_size (gdbarch, d10v_register_virtual_size);
1592 set_gdbarch_max_register_virtual_size (gdbarch, 8);
1593 set_gdbarch_register_virtual_type (gdbarch, d10v_register_virtual_type);
1595 set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1596 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1597 set_gdbarch_int_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1598 set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1599 set_gdbarch_long_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1600 /* NOTE: The d10v as a 32 bit ``float'' and ``double''. ``long
1601 double'' is 64 bits. */
1602 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1603 set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1604 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1605 switch (info.byte_order)
1608 set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_big);
1609 set_gdbarch_double_format (gdbarch, &floatformat_ieee_single_big);
1610 set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big);
1613 set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_little);
1614 set_gdbarch_double_format (gdbarch, &floatformat_ieee_single_little);
1615 set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_little);
1618 internal_error ("d10v_gdbarch_init: bad byte order for float format");
1621 set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
1622 set_gdbarch_call_dummy_length (gdbarch, 0);
1623 set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
1624 set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
1625 set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
1626 set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
1627 set_gdbarch_call_dummy_start_offset (gdbarch, 0);
1628 set_gdbarch_pc_in_call_dummy (gdbarch, generic_pc_in_call_dummy);
1629 set_gdbarch_call_dummy_words (gdbarch, d10v_call_dummy_words);
1630 set_gdbarch_sizeof_call_dummy_words (gdbarch, sizeof (d10v_call_dummy_words));
1631 set_gdbarch_call_dummy_p (gdbarch, 1);
1632 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
1633 set_gdbarch_get_saved_register (gdbarch, generic_get_saved_register);
1634 set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
1636 set_gdbarch_register_convertible (gdbarch, d10v_register_convertible);
1637 set_gdbarch_register_convert_to_virtual (gdbarch, d10v_register_convert_to_virtual);
1638 set_gdbarch_register_convert_to_raw (gdbarch, d10v_register_convert_to_raw);
1640 set_gdbarch_extract_return_value (gdbarch, d10v_extract_return_value);
1641 set_gdbarch_push_arguments (gdbarch, d10v_push_arguments);
1642 set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
1643 set_gdbarch_push_return_address (gdbarch, d10v_push_return_address);
1645 set_gdbarch_d10v_make_daddr (gdbarch, d10v_make_daddr);
1646 set_gdbarch_d10v_make_iaddr (gdbarch, d10v_make_iaddr);
1647 set_gdbarch_d10v_daddr_p (gdbarch, d10v_daddr_p);
1648 set_gdbarch_d10v_iaddr_p (gdbarch, d10v_iaddr_p);
1649 set_gdbarch_d10v_convert_daddr_to_raw (gdbarch, d10v_convert_daddr_to_raw);
1650 set_gdbarch_d10v_convert_iaddr_to_raw (gdbarch, d10v_convert_iaddr_to_raw);
1652 set_gdbarch_store_struct_return (gdbarch, d10v_store_struct_return);
1653 set_gdbarch_store_return_value (gdbarch, d10v_store_return_value);
1654 set_gdbarch_extract_struct_value_address (gdbarch, d10v_extract_struct_value_address);
1655 set_gdbarch_use_struct_convention (gdbarch, d10v_use_struct_convention);
1657 set_gdbarch_frame_init_saved_regs (gdbarch, d10v_frame_init_saved_regs);
1658 set_gdbarch_init_extra_frame_info (gdbarch, d10v_init_extra_frame_info);
1660 set_gdbarch_pop_frame (gdbarch, d10v_pop_frame);
1662 set_gdbarch_skip_prologue (gdbarch, d10v_skip_prologue);
1663 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1664 set_gdbarch_decr_pc_after_break (gdbarch, 4);
1665 set_gdbarch_function_start_offset (gdbarch, 0);
1666 set_gdbarch_breakpoint_from_pc (gdbarch, d10v_breakpoint_from_pc);
1668 set_gdbarch_remote_translate_xfer_address (gdbarch, remote_d10v_translate_xfer_address);
1670 set_gdbarch_frame_args_skip (gdbarch, 0);
1671 set_gdbarch_frameless_function_invocation (gdbarch, frameless_look_for_prologue);
1672 set_gdbarch_frame_chain (gdbarch, d10v_frame_chain);
1673 set_gdbarch_frame_chain_valid (gdbarch, d10v_frame_chain_valid);
1674 set_gdbarch_frame_saved_pc (gdbarch, d10v_frame_saved_pc);
1675 set_gdbarch_frame_args_address (gdbarch, d10v_frame_args_address);
1676 set_gdbarch_frame_locals_address (gdbarch, d10v_frame_locals_address);
1677 set_gdbarch_saved_pc_after_call (gdbarch, d10v_saved_pc_after_call);
1678 set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
1679 set_gdbarch_stack_align (gdbarch, d10v_stack_align);
1685 extern void (*target_resume_hook) PARAMS ((void));
1686 extern void (*target_wait_loop_hook) PARAMS ((void));
1689 _initialize_d10v_tdep ()
1691 register_gdbarch_init (bfd_arch_d10v, d10v_gdbarch_init);
1693 tm_print_insn = print_insn_d10v;
1695 target_resume_hook = d10v_eva_prepare_to_trace;
1696 target_wait_loop_hook = d10v_eva_get_trace_data;
1698 add_com ("regs", class_vars, show_regs, "Print all registers");
1700 add_com ("itrace", class_support, trace_command,
1701 "Enable tracing of instruction execution.");
1703 add_com ("iuntrace", class_support, untrace_command,
1704 "Disable tracing of instruction execution.");
1706 add_com ("itdisassemble", class_vars, tdisassemble_command,
1707 "Disassemble the trace buffer.\n\
1708 Two optional arguments specify a range of trace buffer entries\n\
1709 as reported by info trace (NOT addresses!).");
1711 add_info ("itrace", trace_info,
1712 "Display info about the trace data buffer.");
1714 add_show_from_set (add_set_cmd ("itracedisplay", no_class,
1715 var_integer, (char *) &trace_display,
1716 "Set automatic display of trace.\n", &setlist),
1718 add_show_from_set (add_set_cmd ("itracesource", no_class,
1719 var_integer, (char *) &default_trace_show_source,
1720 "Set display of source code with trace.\n", &setlist),