1 /* Target-dependent code for Mitsubishi D10V, for GDB.
2 Copyright (C) 1996, 1997 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, Boston, MA 02111-1307, USA. */
29 #include "gdb_string.h"
36 void d10v_frame_find_saved_regs PARAMS ((struct frame_info *fi,
37 struct frame_saved_regs *fsr));
40 d10v_frame_chain_valid (chain, frame)
42 struct frame_info *frame; /* not used here */
44 return ((chain) != 0 && (frame) != 0 && (frame)->pc > IMEM_START);
48 /* Should we use EXTRACT_STRUCT_VALUE_ADDRESS instead of
49 EXTRACT_RETURN_VALUE? GCC_P is true if compiled with gcc
50 and TYPE is the type (which is known to be struct, union or array).
52 The d10v returns anything less than 8 bytes in size in
56 d10v_use_struct_convention (gcc_p, type)
60 return (TYPE_LENGTH (type) > 8);
64 /* Discard from the stack the innermost frame, restoring all saved
68 d10v_pop_frame (frame)
69 struct frame_info *frame;
73 struct frame_saved_regs fsr;
76 fp = FRAME_FP (frame);
77 /* fill out fsr with the address of where each */
78 /* register was stored in the frame */
79 get_frame_saved_regs (frame, &fsr);
81 /* now update the current registers with the old values */
82 for (regnum = A0_REGNUM; regnum < A0_REGNUM+2 ; regnum++)
86 read_memory (fsr.regs[regnum], raw_buffer, REGISTER_RAW_SIZE(regnum));
87 write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, REGISTER_RAW_SIZE(regnum));
90 for (regnum = 0; regnum < SP_REGNUM; regnum++)
94 write_register (regnum, read_memory_unsigned_integer (fsr.regs[regnum], REGISTER_RAW_SIZE(regnum)));
97 if (fsr.regs[PSW_REGNUM])
99 write_register (PSW_REGNUM, read_memory_unsigned_integer (fsr.regs[PSW_REGNUM], REGISTER_RAW_SIZE(PSW_REGNUM)));
102 write_register (PC_REGNUM, read_register (LR_REGNUM));
103 write_register (SP_REGNUM, fp + frame->size);
104 target_store_registers (-1);
105 flush_cached_frames ();
113 if ((op & 0x7E1F) == 0x6C1F)
117 if ((op & 0x7E3F) == 0x6E1F)
121 if ((op & 0x7FE1) == 0x01E1)
133 if ((op & 0x7E1F) == 0x681E)
137 if ((op & 0x7E3F) == 0x3A1E)
144 d10v_skip_prologue (pc)
148 unsigned short op1, op2;
149 CORE_ADDR func_addr, func_end;
150 struct symtab_and_line sal;
152 /* If we have line debugging information, then the end of the */
153 /* prologue should the first assembly instruction of the first source line */
154 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
156 sal = find_pc_line (func_addr, 0);
157 if ( sal.end && sal.end < func_end)
161 if (target_read_memory (pc, (char *)&op, 4))
162 return pc; /* Can't access it -- assume no prologue. */
166 op = (unsigned long)read_memory_integer (pc, 4);
167 if ((op & 0xC0000000) == 0xC0000000)
169 /* long instruction */
170 if ( ((op & 0x3FFF0000) != 0x01FF0000) && /* add3 sp,sp,n */
171 ((op & 0x3F0F0000) != 0x340F0000) && /* st rn, @(offset,sp) */
172 ((op & 0x3F1F0000) != 0x350F0000)) /* st2w rn, @(offset,sp) */
177 /* short instructions */
178 if ((op & 0xC0000000) == 0x80000000)
180 op2 = (op & 0x3FFF8000) >> 15;
185 op1 = (op & 0x3FFF8000) >> 15;
188 if (check_prologue(op1))
190 if (!check_prologue(op2))
192 /* if the previous opcode was really part of the prologue */
193 /* and not just a NOP, then we want to break after both instructions */
207 /* Given a GDB frame, determine the address of the calling function's frame.
208 This will be used to create a new GDB frame struct, and then
209 INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
213 d10v_frame_chain (frame)
214 struct frame_info *frame;
216 struct frame_saved_regs fsr;
218 d10v_frame_find_saved_regs (frame, &fsr);
220 if (frame->return_pc == IMEM_START || inside_entry_file(frame->return_pc))
223 if (!fsr.regs[FP_REGNUM])
225 if (!fsr.regs[SP_REGNUM] || fsr.regs[SP_REGNUM] == STACK_START)
228 return fsr.regs[SP_REGNUM];
231 if (!read_memory_unsigned_integer(fsr.regs[FP_REGNUM], REGISTER_RAW_SIZE(FP_REGNUM)))
234 return D10V_MAKE_DADDR (read_memory_unsigned_integer (fsr.regs[FP_REGNUM], REGISTER_RAW_SIZE (FP_REGNUM)));
237 static int next_addr, uses_frame;
240 prologue_find_regs (op, fsr, addr)
242 struct frame_saved_regs *fsr;
248 if ((op & 0x7E1F) == 0x6C1F)
250 n = (op & 0x1E0) >> 5;
252 fsr->regs[n] = next_addr;
257 else if ((op & 0x7E3F) == 0x6E1F)
259 n = (op & 0x1E0) >> 5;
261 fsr->regs[n] = next_addr;
262 fsr->regs[n+1] = next_addr+2;
267 if ((op & 0x7FE1) == 0x01E1)
269 n = (op & 0x1E) >> 1;
288 if ((op & 0x7E1F) == 0x681E)
290 n = (op & 0x1E0) >> 5;
291 fsr->regs[n] = next_addr;
296 if ((op & 0x7E3F) == 0x3A1E)
298 n = (op & 0x1E0) >> 5;
299 fsr->regs[n] = next_addr;
300 fsr->regs[n+1] = next_addr+2;
307 /* Put here the code to store, into a struct frame_saved_regs, the
308 addresses of the saved registers of frame described by FRAME_INFO.
309 This includes special registers such as pc and fp saved in special
310 ways in the stack frame. sp is even more special: the address we
311 return for it IS the sp for the next frame. */
313 d10v_frame_find_saved_regs (fi, fsr)
314 struct frame_info *fi;
315 struct frame_saved_regs *fsr;
319 unsigned short op1, op2;
323 memset (fsr, 0, sizeof (*fsr));
326 pc = get_pc_function_start (fi->pc);
331 op = (unsigned long)read_memory_integer (pc, 4);
332 if ((op & 0xC0000000) == 0xC0000000)
334 /* long instruction */
335 if ((op & 0x3FFF0000) == 0x01FF0000)
338 short n = op & 0xFFFF;
341 else if ((op & 0x3F0F0000) == 0x340F0000)
343 /* st rn, @(offset,sp) */
344 short offset = op & 0xFFFF;
345 short n = (op >> 20) & 0xF;
346 fsr->regs[n] = next_addr + offset;
348 else if ((op & 0x3F1F0000) == 0x350F0000)
350 /* st2w rn, @(offset,sp) */
351 short offset = op & 0xFFFF;
352 short n = (op >> 20) & 0xF;
353 fsr->regs[n] = next_addr + offset;
354 fsr->regs[n+1] = next_addr + offset + 2;
361 /* short instructions */
362 if ((op & 0xC0000000) == 0x80000000)
364 op2 = (op & 0x3FFF8000) >> 15;
369 op1 = (op & 0x3FFF8000) >> 15;
372 if (!prologue_find_regs(op1,fsr,pc) || !prologue_find_regs(op2,fsr,pc))
378 fi->size = -next_addr;
381 fp = D10V_MAKE_DADDR (read_register(SP_REGNUM));
383 for (i=0; i<NUM_REGS-1; i++)
386 fsr->regs[i] = fp - (next_addr - fsr->regs[i]);
389 if (fsr->regs[LR_REGNUM])
391 CORE_ADDR return_pc = read_memory_unsigned_integer (fsr->regs[LR_REGNUM], REGISTER_RAW_SIZE (LR_REGNUM));
392 fi->return_pc = D10V_MAKE_IADDR (return_pc);
396 fi->return_pc = D10V_MAKE_IADDR (read_register(LR_REGNUM));
399 /* th SP is not normally (ever?) saved, but check anyway */
400 if (!fsr->regs[SP_REGNUM])
402 /* if the FP was saved, that means the current FP is valid, */
403 /* otherwise, it isn't being used, so we use the SP instead */
405 fsr->regs[SP_REGNUM] = read_register(FP_REGNUM) + fi->size;
408 fsr->regs[SP_REGNUM] = fp + fi->size;
410 fsr->regs[FP_REGNUM] = 0;
416 d10v_init_extra_frame_info (fromleaf, fi)
418 struct frame_info *fi;
424 /* The call dummy doesn't save any registers on the stack, so we can
426 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
432 struct frame_saved_regs dummy;
433 d10v_frame_find_saved_regs (fi, &dummy);
438 show_regs (args, from_tty)
443 printf_filtered ("PC=%04x (0x%x) PSW=%04x RPT_S=%04x RPT_E=%04x RPT_C=%04x\n",
444 read_register (PC_REGNUM), D10V_MAKE_IADDR (read_register (PC_REGNUM)),
445 read_register (PSW_REGNUM),
449 printf_filtered ("R0-R7 %04x %04x %04x %04x %04x %04x %04x %04x\n",
458 printf_filtered ("R8-R15 %04x %04x %04x %04x %04x %04x %04x %04x\n",
467 printf_filtered ("IMAP0 %04x IMAP1 %04x DMAP %04x\n",
468 read_register (IMAP0_REGNUM),
469 read_register (IMAP1_REGNUM),
470 read_register (DMAP_REGNUM));
471 printf_filtered ("A0-A1");
472 for (a = A0_REGNUM; a <= A0_REGNUM + 1; a++)
474 char num[MAX_REGISTER_RAW_SIZE];
476 printf_filtered (" ");
477 read_register_gen (a, (char *)&num);
478 for (i = 0; i < MAX_REGISTER_RAW_SIZE; i++)
480 printf_filtered ("%02x", (num[i] & 0xff));
483 printf_filtered ("\n");
494 save_pid = inferior_pid;
496 pc = (int) read_register (PC_REGNUM);
497 inferior_pid = save_pid;
498 retval = D10V_MAKE_IADDR (pc);
503 d10v_write_pc (val, pid)
509 save_pid = inferior_pid;
511 write_register (PC_REGNUM, D10V_CONVERT_IADDR_TO_RAW (val));
512 inferior_pid = save_pid;
518 return (D10V_MAKE_DADDR (read_register (SP_REGNUM)));
525 write_register (SP_REGNUM, D10V_CONVERT_DADDR_TO_RAW (val));
532 write_register (FP_REGNUM, D10V_CONVERT_DADDR_TO_RAW (val));
538 return (D10V_MAKE_DADDR (read_register(FP_REGNUM)));
541 /* Function: push_return_address (pc)
542 Set up the return address for the inferior function call.
543 Needed for targets where we don't actually execute a JSR/BSR instruction */
546 d10v_push_return_address (pc, sp)
550 write_register (LR_REGNUM, D10V_CONVERT_IADDR_TO_RAW (CALL_DUMMY_ADDRESS ()));
556 d10v_push_arguments (nargs, args, sp, struct_return, struct_addr)
561 CORE_ADDR struct_addr;
564 int regnum = ARG1_REGNUM;
566 /* Fill in registers and arg lists */
567 for (i = 0; i < nargs; i++)
569 value_ptr arg = args[i];
570 struct type *type = check_typedef (VALUE_TYPE (arg));
571 char *contents = VALUE_CONTENTS (arg);
572 int len = TYPE_LENGTH (type);
573 /* printf ("push: type=%d len=%d\n", type->code, len); */
574 if (TYPE_CODE (type) == TYPE_CODE_PTR)
576 /* pointers require special handling - first convert and
578 long val = extract_signed_integer (contents, len);
580 if (TYPE_TARGET_TYPE (type)
581 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC))
583 /* function pointer */
584 val = D10V_CONVERT_IADDR_TO_RAW (val);
586 else if (D10V_IADDR_P (val))
588 /* also function pointer! */
589 val = D10V_CONVERT_DADDR_TO_RAW (val);
596 if (regnum <= ARGN_REGNUM)
597 write_register (regnum++, val & 0xffff);
602 store_address (ptr, val & 0xffff, 2);
603 write_memory (sp, ptr, 2);
608 int aligned_regnum = (regnum + 1) & ~1;
609 if (len <= 2 && regnum <= ARGN_REGNUM)
610 /* fits in a single register, do not align */
612 long val = extract_unsigned_integer (contents, len);
613 write_register (regnum++, val);
615 else if (len <= (ARGN_REGNUM - aligned_regnum + 1) * 2)
616 /* value fits in remaining registers, store keeping left
620 regnum = aligned_regnum;
621 for (b = 0; b < (len & ~1); b += 2)
623 long val = extract_unsigned_integer (&contents[b], 2);
624 write_register (regnum++, val);
628 long val = extract_unsigned_integer (&contents[b], 1);
629 write_register (regnum++, (val << 8));
634 /* arg goes straight on stack */
635 regnum = ARGN_REGNUM + 1;
636 sp = (sp - len) & ~1;
637 write_memory (sp, contents, len);
645 /* Given a return value in `regbuf' with a type `valtype',
646 extract and copy its value into `valbuf'. */
649 d10v_extract_return_value (type, regbuf, valbuf)
651 char regbuf[REGISTER_BYTES];
655 /* 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))); */
656 if (TYPE_CODE (type) == TYPE_CODE_PTR
657 && TYPE_TARGET_TYPE (type)
658 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC))
660 /* pointer to function */
663 snum = extract_address (regbuf + REGISTER_BYTE (RET1_REGNUM), REGISTER_RAW_SIZE (RET1_REGNUM));
664 store_address ( valbuf, 4, D10V_MAKE_IADDR(snum));
666 else if (TYPE_CODE(type) == TYPE_CODE_PTR)
668 /* pointer to data */
671 snum = extract_address (regbuf + REGISTER_BYTE (RET1_REGNUM), REGISTER_RAW_SIZE (RET1_REGNUM));
672 store_address ( valbuf, 4, D10V_MAKE_DADDR(snum));
676 len = TYPE_LENGTH (type);
679 unsigned short c = extract_unsigned_integer (regbuf + REGISTER_BYTE (RET1_REGNUM), REGISTER_RAW_SIZE (RET1_REGNUM));
680 store_unsigned_integer (valbuf, 1, c);
682 else if ((len & 1) == 0)
683 memcpy (valbuf, regbuf + REGISTER_BYTE (RET1_REGNUM), len);
686 /* For return values of odd size, the first byte is in the
687 least significant part of the first register. The
688 remaining bytes in remaining registers. Interestingly,
689 when such values are passed in, the last byte is in the
690 most significant byte of that same register - wierd. */
691 memcpy (valbuf, regbuf + REGISTER_BYTE (RET1_REGNUM) + 1, len);
696 /* The following code implements access to, and display of, the D10V's
697 instruction trace buffer. The buffer consists of 64K or more
698 4-byte words of data, of which each words includes an 8-bit count,
699 an 8-bit segment number, and a 16-bit instruction address.
701 In theory, the trace buffer is continuously capturing instruction
702 data that the CPU presents on its "debug bus", but in practice, the
703 ROMified GDB stub only enables tracing when it continues or steps
704 the program, and stops tracing when the program stops; so it
705 actually works for GDB to read the buffer counter out of memory and
706 then read each trace word. The counter records where the tracing
707 stops, but there is no record of where it started, so we remember
708 the PC when we resumed and then search backwards in the trace
709 buffer for a word that includes that address. This is not perfect,
710 because you will miss trace data if the resumption PC is the target
711 of a branch. (The value of the buffer counter is semi-random, any
712 trace data from a previous program stop is gone.) */
714 /* The address of the last word recorded in the trace buffer. */
716 #define DBBC_ADDR (0xd80000)
718 /* The base of the trace buffer, at least for the "Board_0". */
720 #define TRACE_BUFFER_BASE (0xf40000)
722 static void trace_command PARAMS ((char *, int));
724 static void untrace_command PARAMS ((char *, int));
726 static void trace_info PARAMS ((char *, int));
728 static void tdisassemble_command PARAMS ((char *, int));
730 static void display_trace PARAMS ((int, int));
732 /* True when instruction traces are being collected. */
738 static CORE_ADDR last_pc;
740 /* True when trace output should be displayed whenever program stops. */
742 static int trace_display;
744 /* True when trace listing should include source lines. */
746 static int default_trace_show_source = 1;
748 struct trace_buffer {
755 trace_command (args, from_tty)
759 /* Clear the host-side trace buffer, allocating space if needed. */
761 if (trace_data.counts == NULL)
762 trace_data.counts = (short *) xmalloc (65536 * sizeof(short));
763 if (trace_data.addrs == NULL)
764 trace_data.addrs = (CORE_ADDR *) xmalloc (65536 * sizeof(CORE_ADDR));
768 printf_filtered ("Tracing is now on.\n");
772 untrace_command (args, from_tty)
778 printf_filtered ("Tracing is now off.\n");
782 trace_info (args, from_tty)
790 printf_filtered ("%d entries in trace buffer:\n", trace_data.size);
792 for (i = 0; i < trace_data.size; ++i)
794 printf_filtered ("%d: %d instruction%s at 0x%x\n",
795 i, trace_data.counts[i],
796 (trace_data.counts[i] == 1 ? "" : "s"),
797 trace_data.addrs[i]);
801 printf_filtered ("No entries in trace buffer.\n");
803 printf_filtered ("Tracing is currently %s.\n", (tracing ? "on" : "off"));
806 /* Print the instruction at address MEMADDR in debugged memory,
807 on STREAM. Returns length of the instruction, in bytes. */
810 print_insn (memaddr, stream)
814 /* If there's no disassembler, something is very wrong. */
815 if (tm_print_insn == NULL)
818 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
819 tm_print_insn_info.endian = BFD_ENDIAN_BIG;
821 tm_print_insn_info.endian = BFD_ENDIAN_LITTLE;
822 return (*tm_print_insn) (memaddr, &tm_print_insn_info);
826 d10v_eva_prepare_to_trace ()
831 last_pc = read_register (PC_REGNUM);
834 /* Collect trace data from the target board and format it into a form
835 more useful for display. */
838 d10v_eva_get_trace_data ()
840 int count, i, j, oldsize;
841 int trace_addr, trace_seg, trace_cnt, next_cnt;
842 unsigned int last_trace, trace_word, next_word;
843 unsigned int *tmpspace;
848 tmpspace = xmalloc (65536 * sizeof(unsigned int));
850 last_trace = read_memory_unsigned_integer (DBBC_ADDR, 2) << 2;
852 /* Collect buffer contents from the target, stopping when we reach
853 the word recorded when execution resumed. */
856 while (last_trace > 0)
860 read_memory_unsigned_integer (TRACE_BUFFER_BASE + last_trace, 4);
861 trace_addr = trace_word & 0xffff;
863 /* Ignore an apparently nonsensical entry. */
864 if (trace_addr == 0xffd5)
866 tmpspace[count++] = trace_word;
867 if (trace_addr == last_pc)
873 /* Move the data to the host-side trace buffer, adjusting counts to
874 include the last instruction executed and transforming the address
875 into something that GDB likes. */
877 for (i = 0; i < count; ++i)
879 trace_word = tmpspace[i];
880 next_word = ((i == 0) ? 0 : tmpspace[i - 1]);
881 trace_addr = trace_word & 0xffff;
882 next_cnt = (next_word >> 24) & 0xff;
883 j = trace_data.size + count - i - 1;
884 trace_data.addrs[j] = (trace_addr << 2) + 0x1000000;
885 trace_data.counts[j] = next_cnt + 1;
888 oldsize = trace_data.size;
889 trace_data.size += count;
894 display_trace (oldsize, trace_data.size);
898 tdisassemble_command (arg, from_tty)
909 high = trace_data.size;
911 else if (!(space_index = (char *) strchr (arg, ' ')))
913 low = parse_and_eval_address (arg);
920 low = parse_and_eval_address (arg);
921 high = parse_and_eval_address (space_index + 1);
926 printf_filtered ("Dump of trace from %d to %d:\n", low, high);
928 display_trace (low, high);
930 printf_filtered ("End of trace dump.\n");
931 gdb_flush (gdb_stdout);
935 display_trace (low, high)
938 int i, count, trace_show_source, first, suppress;
939 CORE_ADDR next_address;
941 trace_show_source = default_trace_show_source;
942 if (!have_full_symbols () && !have_partial_symbols())
944 trace_show_source = 0;
945 printf_filtered ("No symbol table is loaded. Use the \"file\" command.\n");
946 printf_filtered ("Trace will not display any source.\n");
951 for (i = low; i < high; ++i)
953 next_address = trace_data.addrs[i];
954 count = trace_data.counts[i];
958 if (trace_show_source)
960 struct symtab_and_line sal, sal_prev;
962 sal_prev = find_pc_line (next_address - 4, 0);
963 sal = find_pc_line (next_address, 0);
967 if (first || sal.line != sal_prev.line)
968 print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
974 /* FIXME-32x64--assumes sal.pc fits in long. */
975 printf_filtered ("No source file for address %s.\n",
976 local_hex_string((unsigned long) sal.pc));
981 print_address (next_address, gdb_stdout);
982 printf_filtered (":");
983 printf_filtered ("\t");
985 next_address = next_address + print_insn (next_address, gdb_stdout);
986 printf_filtered ("\n");
987 gdb_flush (gdb_stdout);
992 extern void (*target_resume_hook) PARAMS ((void));
993 extern void (*target_wait_loop_hook) PARAMS ((void));
996 _initialize_d10v_tdep ()
998 tm_print_insn = print_insn_d10v;
1000 target_resume_hook = d10v_eva_prepare_to_trace;
1001 target_wait_loop_hook = d10v_eva_get_trace_data;
1003 add_com ("regs", class_vars, show_regs, "Print all registers");
1005 add_com ("trace", class_support, trace_command,
1006 "Enable tracing of instruction execution.");
1008 add_com ("untrace", class_support, untrace_command,
1009 "Disable tracing of instruction execution.");
1011 add_com ("tdisassemble", class_vars, tdisassemble_command,
1012 "Disassemble the trace buffer.\n\
1013 Two optional arguments specify a range of trace buffer entries\n\
1014 as reported by info trace (NOT addresses!).");
1016 add_info ("trace", trace_info,
1017 "Display info about the trace data buffer.");
1019 add_show_from_set (add_set_cmd ("tracedisplay", no_class,
1020 var_integer, (char *)&trace_display,
1021 "Set automatic display of trace.\n", &setlist),
1023 add_show_from_set (add_set_cmd ("tracesource", no_class,
1024 var_integer, (char *)&default_trace_show_source,
1025 "Set display of source code with trace.\n", &setlist),