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