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