1 /* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger.
2 
3    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4    2007, 2008, 2009, 2010, 2011 Free Software 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 3 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, see <http://www.gnu.org/licenses/>.  */
20 
21 #include "defs.h"
22 #include "arch-utils.h"
23 #include "dis-asm.h"
24 #include "gdbtypes.h"
25 #include "regcache.h"
26 #include "gdb_string.h"
27 #include "gdb_assert.h"
28 #include "gdbcore.h"	/* For write_memory_unsigned_integer.  */
29 #include "value.h"
30 #include "gdbtypes.h"
31 #include "frame.h"
32 #include "frame-unwind.h"
33 #include "frame-base.h"
34 #include "symtab.h"
35 #include "dwarf2-frame.h"
36 #include "osabi.h"
37 #include "infcall.h"
38 #include "prologue-value.h"
39 #include "target.h"
40 
41 #include "mn10300-tdep.h"
42 
43 
44 /* The am33-2 has 64 registers.  */
45 #define MN10300_MAX_NUM_REGS 64
46 
47 /* This structure holds the results of a prologue analysis.  */
48 struct mn10300_prologue
49 {
50   /* The architecture for which we generated this prologue info.  */
51   struct gdbarch *gdbarch;
52 
53   /* The offset from the frame base to the stack pointer --- always
54      zero or negative.
55 
56      Calling this a "size" is a bit misleading, but given that the
57      stack grows downwards, using offsets for everything keeps one
58      from going completely sign-crazy: you never change anything's
59      sign for an ADD instruction; always change the second operand's
60      sign for a SUB instruction; and everything takes care of
61      itself.  */
62   int frame_size;
63 
64   /* Non-zero if this function has initialized the frame pointer from
65      the stack pointer, zero otherwise.  */
66   int has_frame_ptr;
67 
68   /* If has_frame_ptr is non-zero, this is the offset from the frame
69      base to where the frame pointer points.  This is always zero or
70      negative.  */
71   int frame_ptr_offset;
72 
73   /* The address of the first instruction at which the frame has been
74      set up and the arguments are where the debug info says they are
75      --- as best as we can tell.  */
76   CORE_ADDR prologue_end;
77 
78   /* reg_offset[R] is the offset from the CFA at which register R is
79      saved, or 1 if register R has not been saved.  (Real values are
80      always zero or negative.)  */
81   int reg_offset[MN10300_MAX_NUM_REGS];
82 };
83 
84 
85 /* Compute the alignment required by a type.  */
86 
87 static int
mn10300_type_align(struct type * type)88 mn10300_type_align (struct type *type)
89 {
90   int i, align = 1;
91 
92   switch (TYPE_CODE (type))
93     {
94     case TYPE_CODE_INT:
95     case TYPE_CODE_ENUM:
96     case TYPE_CODE_SET:
97     case TYPE_CODE_RANGE:
98     case TYPE_CODE_CHAR:
99     case TYPE_CODE_BOOL:
100     case TYPE_CODE_FLT:
101     case TYPE_CODE_PTR:
102     case TYPE_CODE_REF:
103       return TYPE_LENGTH (type);
104 
105     case TYPE_CODE_COMPLEX:
106       return TYPE_LENGTH (type) / 2;
107 
108     case TYPE_CODE_STRUCT:
109     case TYPE_CODE_UNION:
110       for (i = 0; i < TYPE_NFIELDS (type); i++)
111 	{
112 	  int falign = mn10300_type_align (TYPE_FIELD_TYPE (type, i));
113 	  while (align < falign)
114 	    align <<= 1;
115 	}
116       return align;
117 
118     case TYPE_CODE_ARRAY:
119       /* HACK!  Structures containing arrays, even small ones, are not
120 	 elligible for returning in registers.  */
121       return 256;
122 
123     case TYPE_CODE_TYPEDEF:
124       return mn10300_type_align (check_typedef (type));
125 
126     default:
127       internal_error (__FILE__, __LINE__, _("bad switch"));
128     }
129 }
130 
131 /* Should call_function allocate stack space for a struct return?  */
132 static int
mn10300_use_struct_convention(struct type * type)133 mn10300_use_struct_convention (struct type *type)
134 {
135   /* Structures bigger than a pair of words can't be returned in
136      registers.  */
137   if (TYPE_LENGTH (type) > 8)
138     return 1;
139 
140   switch (TYPE_CODE (type))
141     {
142     case TYPE_CODE_STRUCT:
143     case TYPE_CODE_UNION:
144       /* Structures with a single field are handled as the field
145 	 itself.  */
146       if (TYPE_NFIELDS (type) == 1)
147 	return mn10300_use_struct_convention (TYPE_FIELD_TYPE (type, 0));
148 
149       /* Structures with word or double-word size are passed in memory, as
150 	 long as they require at least word alignment.  */
151       if (mn10300_type_align (type) >= 4)
152 	return 0;
153 
154       return 1;
155 
156       /* Arrays are addressable, so they're never returned in
157 	 registers.  This condition can only hold when the array is
158 	 the only field of a struct or union.  */
159     case TYPE_CODE_ARRAY:
160       return 1;
161 
162     case TYPE_CODE_TYPEDEF:
163       return mn10300_use_struct_convention (check_typedef (type));
164 
165     default:
166       return 0;
167     }
168 }
169 
170 static void
mn10300_store_return_value(struct gdbarch * gdbarch,struct type * type,struct regcache * regcache,const void * valbuf)171 mn10300_store_return_value (struct gdbarch *gdbarch, struct type *type,
172 			    struct regcache *regcache, const void *valbuf)
173 {
174   int len = TYPE_LENGTH (type);
175   int reg, regsz;
176 
177   if (TYPE_CODE (type) == TYPE_CODE_PTR)
178     reg = 4;
179   else
180     reg = 0;
181 
182   regsz = register_size (gdbarch, reg);
183 
184   if (len <= regsz)
185     regcache_raw_write_part (regcache, reg, 0, len, valbuf);
186   else if (len <= 2 * regsz)
187     {
188       regcache_raw_write (regcache, reg, valbuf);
189       gdb_assert (regsz == register_size (gdbarch, reg + 1));
190       regcache_raw_write_part (regcache, reg+1, 0,
191 			       len - regsz, (char *) valbuf + regsz);
192     }
193   else
194     internal_error (__FILE__, __LINE__,
195 		    _("Cannot store return value %d bytes long."), len);
196 }
197 
198 static void
mn10300_extract_return_value(struct gdbarch * gdbarch,struct type * type,struct regcache * regcache,void * valbuf)199 mn10300_extract_return_value (struct gdbarch *gdbarch, struct type *type,
200 			      struct regcache *regcache, void *valbuf)
201 {
202   char buf[MAX_REGISTER_SIZE];
203   int len = TYPE_LENGTH (type);
204   int reg, regsz;
205 
206   if (TYPE_CODE (type) == TYPE_CODE_PTR)
207     reg = 4;
208   else
209     reg = 0;
210 
211   regsz = register_size (gdbarch, reg);
212   if (len <= regsz)
213     {
214       regcache_raw_read (regcache, reg, buf);
215       memcpy (valbuf, buf, len);
216     }
217   else if (len <= 2 * regsz)
218     {
219       regcache_raw_read (regcache, reg, buf);
220       memcpy (valbuf, buf, regsz);
221       gdb_assert (regsz == register_size (gdbarch, reg + 1));
222       regcache_raw_read (regcache, reg + 1, buf);
223       memcpy ((char *) valbuf + regsz, buf, len - regsz);
224     }
225   else
226     internal_error (__FILE__, __LINE__,
227 		    _("Cannot extract return value %d bytes long."), len);
228 }
229 
230 /* Determine, for architecture GDBARCH, how a return value of TYPE
231    should be returned.  If it is supposed to be returned in registers,
232    and READBUF is non-zero, read the appropriate value from REGCACHE,
233    and copy it into READBUF.  If WRITEBUF is non-zero, write the value
234    from WRITEBUF into REGCACHE.  */
235 
236 static enum return_value_convention
mn10300_return_value(struct gdbarch * gdbarch,struct type * func_type,struct type * type,struct regcache * regcache,gdb_byte * readbuf,const gdb_byte * writebuf)237 mn10300_return_value (struct gdbarch *gdbarch, struct type *func_type,
238 		      struct type *type, struct regcache *regcache,
239 		      gdb_byte *readbuf, const gdb_byte *writebuf)
240 {
241   if (mn10300_use_struct_convention (type))
242     return RETURN_VALUE_STRUCT_CONVENTION;
243 
244   if (readbuf)
245     mn10300_extract_return_value (gdbarch, type, regcache, readbuf);
246   if (writebuf)
247     mn10300_store_return_value (gdbarch, type, regcache, writebuf);
248 
249   return RETURN_VALUE_REGISTER_CONVENTION;
250 }
251 
252 static char *
register_name(int reg,char ** regs,long sizeof_regs)253 register_name (int reg, char **regs, long sizeof_regs)
254 {
255   if (reg < 0 || reg >= sizeof_regs / sizeof (regs[0]))
256     return NULL;
257   else
258     return regs[reg];
259 }
260 
261 static const char *
mn10300_generic_register_name(struct gdbarch * gdbarch,int reg)262 mn10300_generic_register_name (struct gdbarch *gdbarch, int reg)
263 {
264   static char *regs[] =
265   { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
266     "sp", "pc", "mdr", "psw", "lir", "lar", "", "",
267     "", "", "", "", "", "", "", "",
268     "", "", "", "", "", "", "", "fp"
269   };
270   return register_name (reg, regs, sizeof regs);
271 }
272 
273 
274 static const char *
am33_register_name(struct gdbarch * gdbarch,int reg)275 am33_register_name (struct gdbarch *gdbarch, int reg)
276 {
277   static char *regs[] =
278   { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
279     "sp", "pc", "mdr", "psw", "lir", "lar", "",
280     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
281     "ssp", "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", ""
282   };
283   return register_name (reg, regs, sizeof regs);
284 }
285 
286 static const char *
am33_2_register_name(struct gdbarch * gdbarch,int reg)287 am33_2_register_name (struct gdbarch *gdbarch, int reg)
288 {
289   static char *regs[] =
290   {
291     "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
292     "sp", "pc", "mdr", "psw", "lir", "lar", "mdrq", "r0",
293     "r1", "r2", "r3", "r4", "r5", "r6", "r7", "ssp",
294     "msp", "usp", "mcrh", "mcrl", "mcvf", "fpcr", "", "",
295     "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7",
296     "fs8", "fs9", "fs10", "fs11", "fs12", "fs13", "fs14", "fs15",
297     "fs16", "fs17", "fs18", "fs19", "fs20", "fs21", "fs22", "fs23",
298     "fs24", "fs25", "fs26", "fs27", "fs28", "fs29", "fs30", "fs31"
299   };
300   return register_name (reg, regs, sizeof regs);
301 }
302 
303 static struct type *
mn10300_register_type(struct gdbarch * gdbarch,int reg)304 mn10300_register_type (struct gdbarch *gdbarch, int reg)
305 {
306   return builtin_type (gdbarch)->builtin_int;
307 }
308 
309 static CORE_ADDR
mn10300_read_pc(struct regcache * regcache)310 mn10300_read_pc (struct regcache *regcache)
311 {
312   ULONGEST val;
313   regcache_cooked_read_unsigned (regcache, E_PC_REGNUM, &val);
314   return val;
315 }
316 
317 static void
mn10300_write_pc(struct regcache * regcache,CORE_ADDR val)318 mn10300_write_pc (struct regcache *regcache, CORE_ADDR val)
319 {
320   regcache_cooked_write_unsigned (regcache, E_PC_REGNUM, val);
321 }
322 
323 /* The breakpoint instruction must be the same size as the smallest
324    instruction in the instruction set.
325 
326    The Matsushita mn10x00 processors have single byte instructions
327    so we need a single byte breakpoint.  Matsushita hasn't defined
328    one, so we defined it ourselves.  */
329 
330 const static unsigned char *
mn10300_breakpoint_from_pc(struct gdbarch * gdbarch,CORE_ADDR * bp_addr,int * bp_size)331 mn10300_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
332 			    int *bp_size)
333 {
334   static char breakpoint[] = {0xff};
335   *bp_size = 1;
336   return breakpoint;
337 }
338 
339 /* Model the semantics of pushing a register onto the stack.  This
340    is a helper function for mn10300_analyze_prologue, below.  */
341 static void
push_reg(pv_t * regs,struct pv_area * stack,int regnum)342 push_reg (pv_t *regs, struct pv_area *stack, int regnum)
343 {
344   regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], -4);
345   pv_area_store (stack, regs[E_SP_REGNUM], 4, regs[regnum]);
346 }
347 
348 /* Translate an "r" register number extracted from an instruction encoding
349    into a GDB register number.  Adapted from a simulator function
350    of the same name; see am33.igen.  */
351 static int
translate_rreg(int rreg)352 translate_rreg (int rreg)
353 {
354  /* The higher register numbers actually correspond to the
355      basic machine's address and data registers.  */
356   if (rreg > 7 && rreg < 12)
357     return E_A0_REGNUM + rreg - 8;
358   else if (rreg > 11 && rreg < 16)
359     return E_D0_REGNUM + rreg - 12;
360   else
361     return E_E0_REGNUM + rreg;
362 }
363 
364 /* Find saved registers in a 'struct pv_area'; we pass this to pv_area_scan.
365 
366    If VALUE is a saved register, ADDR says it was saved at a constant
367    offset from the frame base, and SIZE indicates that the whole
368    register was saved, record its offset in RESULT_UNTYPED.  */
369 static void
check_for_saved(void * result_untyped,pv_t addr,CORE_ADDR size,pv_t value)370 check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value)
371 {
372   struct mn10300_prologue *result = (struct mn10300_prologue *) result_untyped;
373 
374   if (value.kind == pvk_register
375       && value.k == 0
376       && pv_is_register (addr, E_SP_REGNUM)
377       && size == register_size (result->gdbarch, value.reg))
378     result->reg_offset[value.reg] = addr.k;
379 }
380 
381 /* Analyze the prologue to determine where registers are saved,
382    the end of the prologue, etc.  The result of this analysis is
383    returned in RESULT.  See struct mn10300_prologue above for more
384    information.  */
385 static void
mn10300_analyze_prologue(struct gdbarch * gdbarch,CORE_ADDR start_pc,CORE_ADDR limit_pc,struct mn10300_prologue * result)386 mn10300_analyze_prologue (struct gdbarch *gdbarch,
387                           CORE_ADDR start_pc, CORE_ADDR limit_pc,
388                           struct mn10300_prologue *result)
389 {
390   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
391   CORE_ADDR pc, next_pc;
392   int rn;
393   pv_t regs[MN10300_MAX_NUM_REGS];
394   struct pv_area *stack;
395   struct cleanup *back_to;
396   CORE_ADDR after_last_frame_setup_insn = start_pc;
397   int am33_mode = AM33_MODE (gdbarch);
398 
399   memset (result, 0, sizeof (*result));
400   result->gdbarch = gdbarch;
401 
402   for (rn = 0; rn < MN10300_MAX_NUM_REGS; rn++)
403     {
404       regs[rn] = pv_register (rn, 0);
405       result->reg_offset[rn] = 1;
406     }
407   stack = make_pv_area (E_SP_REGNUM, gdbarch_addr_bit (gdbarch));
408   back_to = make_cleanup_free_pv_area (stack);
409 
410  /* The typical call instruction will have saved the return address on the
411     stack.  Space for the return address has already been preallocated in
412     the caller's frame.  It's possible, such as when using -mrelax with gcc
413     that other registers were saved as well.  If this happens, we really
414     have no chance of deciphering the frame.  DWARF info can save the day
415     when this happens.  */
416   pv_area_store (stack, regs[E_SP_REGNUM], 4, regs[E_PC_REGNUM]);
417 
418   pc = start_pc;
419   while (pc < limit_pc)
420     {
421       int status;
422       gdb_byte instr[2];
423 
424       /* Instructions can be as small as one byte; however, we usually
425          need at least two bytes to do the decoding, so fetch that many
426 	 to begin with.  */
427       status = target_read_memory (pc, instr, 2);
428       if (status != 0)
429 	break;
430 
431       /* movm [regs], sp  */
432       if (instr[0] == 0xcf)
433 	{
434 	  gdb_byte save_mask;
435 
436 	  save_mask = instr[1];
437 
438 	  if ((save_mask & movm_exreg0_bit) && am33_mode)
439 	    {
440 	      push_reg (regs, stack, E_E2_REGNUM);
441 	      push_reg (regs, stack, E_E3_REGNUM);
442 	    }
443 	  if ((save_mask & movm_exreg1_bit) && am33_mode)
444 	    {
445 	      push_reg (regs, stack, E_E4_REGNUM);
446 	      push_reg (regs, stack, E_E5_REGNUM);
447 	      push_reg (regs, stack, E_E6_REGNUM);
448 	      push_reg (regs, stack, E_E7_REGNUM);
449 	    }
450 	  if ((save_mask & movm_exother_bit) && am33_mode)
451 	    {
452 	      push_reg (regs, stack, E_E0_REGNUM);
453 	      push_reg (regs, stack, E_E1_REGNUM);
454 	      push_reg (regs, stack, E_MDRQ_REGNUM);
455 	      push_reg (regs, stack, E_MCRH_REGNUM);
456 	      push_reg (regs, stack, E_MCRL_REGNUM);
457 	      push_reg (regs, stack, E_MCVF_REGNUM);
458 	    }
459 	  if (save_mask & movm_d2_bit)
460 	    push_reg (regs, stack, E_D2_REGNUM);
461 	  if (save_mask & movm_d3_bit)
462 	    push_reg (regs, stack, E_D3_REGNUM);
463 	  if (save_mask & movm_a2_bit)
464 	    push_reg (regs, stack, E_A2_REGNUM);
465 	  if (save_mask & movm_a3_bit)
466 	    push_reg (regs, stack, E_A3_REGNUM);
467 	  if (save_mask & movm_other_bit)
468 	    {
469 	      push_reg (regs, stack, E_D0_REGNUM);
470 	      push_reg (regs, stack, E_D1_REGNUM);
471 	      push_reg (regs, stack, E_A0_REGNUM);
472 	      push_reg (regs, stack, E_A1_REGNUM);
473 	      push_reg (regs, stack, E_MDR_REGNUM);
474 	      push_reg (regs, stack, E_LIR_REGNUM);
475 	      push_reg (regs, stack, E_LAR_REGNUM);
476 	      /* The `other' bit leaves a blank area of four bytes at
477 		 the beginning of its block of saved registers, making
478 		 it 32 bytes long in total.  */
479 	      regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], -4);
480 	    }
481 
482 	  pc += 2;
483 	  after_last_frame_setup_insn = pc;
484 	}
485       /* mov sp, aN */
486       else if ((instr[0] & 0xfc) == 0x3c)
487 	{
488 	  int aN = instr[0] & 0x03;
489 
490 	  regs[E_A0_REGNUM + aN] = regs[E_SP_REGNUM];
491 
492 	  pc += 1;
493 	  if (aN == 3)
494 	    after_last_frame_setup_insn = pc;
495 	}
496       /* mov aM, aN */
497       else if ((instr[0] & 0xf0) == 0x90
498                && (instr[0] & 0x03) != ((instr[0] & 0x0c) >> 2))
499 	{
500 	  int aN = instr[0] & 0x03;
501 	  int aM = (instr[0] & 0x0c) >> 2;
502 
503 	  regs[E_A0_REGNUM + aN] = regs[E_A0_REGNUM + aM];
504 
505 	  pc += 1;
506 	}
507       /* mov dM, dN */
508       else if ((instr[0] & 0xf0) == 0x80
509                && (instr[0] & 0x03) != ((instr[0] & 0x0c) >> 2))
510 	{
511 	  int dN = instr[0] & 0x03;
512 	  int dM = (instr[0] & 0x0c) >> 2;
513 
514 	  regs[E_D0_REGNUM + dN] = regs[E_D0_REGNUM + dM];
515 
516 	  pc += 1;
517 	}
518       /* mov aM, dN */
519       else if (instr[0] == 0xf1 && (instr[1] & 0xf0) == 0xd0)
520 	{
521 	  int dN = instr[1] & 0x03;
522 	  int aM = (instr[1] & 0x0c) >> 2;
523 
524 	  regs[E_D0_REGNUM + dN] = regs[E_A0_REGNUM + aM];
525 
526 	  pc += 2;
527 	}
528       /* mov dM, aN */
529       else if (instr[0] == 0xf1 && (instr[1] & 0xf0) == 0xe0)
530 	{
531 	  int aN = instr[1] & 0x03;
532 	  int dM = (instr[1] & 0x0c) >> 2;
533 
534 	  regs[E_A0_REGNUM + aN] = regs[E_D0_REGNUM + dM];
535 
536 	  pc += 2;
537 	}
538       /* add imm8, SP */
539       else if (instr[0] == 0xf8 && instr[1] == 0xfe)
540 	{
541 	  gdb_byte buf[1];
542 	  LONGEST imm8;
543 
544 
545 	  status = target_read_memory (pc + 2, buf, 1);
546 	  if (status != 0)
547 	    break;
548 
549 	  imm8 = extract_signed_integer (buf, 1, byte_order);
550 	  regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], imm8);
551 
552 	  pc += 3;
553 	  /* Stack pointer adjustments are frame related.  */
554 	  after_last_frame_setup_insn = pc;
555 	}
556       /* add imm16, SP */
557       else if (instr[0] == 0xfa && instr[1] == 0xfe)
558 	{
559 	  gdb_byte buf[2];
560 	  LONGEST imm16;
561 
562 	  status = target_read_memory (pc + 2, buf, 2);
563 	  if (status != 0)
564 	    break;
565 
566 	  imm16 = extract_signed_integer (buf, 2, byte_order);
567 	  regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], imm16);
568 
569 	  pc += 4;
570 	  /* Stack pointer adjustments are frame related.  */
571 	  after_last_frame_setup_insn = pc;
572 	}
573       /* add imm32, SP */
574       else if (instr[0] == 0xfc && instr[1] == 0xfe)
575 	{
576 	  gdb_byte buf[4];
577 	  LONGEST imm32;
578 
579 	  status = target_read_memory (pc + 2, buf, 4);
580 	  if (status != 0)
581 	    break;
582 
583 
584 	  imm32 = extract_signed_integer (buf, 4, byte_order);
585 	  regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], imm32);
586 
587 	  pc += 6;
588 	  /* Stack pointer adjustments are frame related.  */
589 	  after_last_frame_setup_insn = pc;
590 	}
591       /* add imm8, aN  */
592       else if ((instr[0] & 0xfc) == 0x20)
593 	{
594 	  int aN;
595 	  LONGEST imm8;
596 
597 	  aN = instr[0] & 0x03;
598 	  imm8 = extract_signed_integer (&instr[1], 1, byte_order);
599 
600 	  regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN],
601 	                                            imm8);
602 
603 	  pc += 2;
604 	}
605       /* add imm16, aN  */
606       else if (instr[0] == 0xfa && (instr[1] & 0xfc) == 0xd0)
607 	{
608 	  int aN;
609 	  LONGEST imm16;
610 	  gdb_byte buf[2];
611 
612 	  aN = instr[1] & 0x03;
613 
614 	  status = target_read_memory (pc + 2, buf, 2);
615 	  if (status != 0)
616 	    break;
617 
618 
619 	  imm16 = extract_signed_integer (buf, 2, byte_order);
620 
621 	  regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN],
622 	                                            imm16);
623 
624 	  pc += 4;
625 	}
626       /* add imm32, aN  */
627       else if (instr[0] == 0xfc && (instr[1] & 0xfc) == 0xd0)
628 	{
629 	  int aN;
630 	  LONGEST imm32;
631 	  gdb_byte buf[4];
632 
633 	  aN = instr[1] & 0x03;
634 
635 	  status = target_read_memory (pc + 2, buf, 4);
636 	  if (status != 0)
637 	    break;
638 
639 	  imm32 = extract_signed_integer (buf, 2, byte_order);
640 
641 	  regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN],
642 	                                            imm32);
643 	  pc += 6;
644 	}
645       /* fmov fsM, (rN) */
646       else if (instr[0] == 0xf9 && (instr[1] & 0xfd) == 0x30)
647 	{
648 	  int fsM, sM, Y, rN;
649 	  gdb_byte buf[1];
650 
651 	  Y = (instr[1] & 0x02) >> 1;
652 
653 	  status = target_read_memory (pc + 2, buf, 1);
654 	  if (status != 0)
655 	    break;
656 
657 	  sM = (buf[0] & 0xf0) >> 4;
658 	  rN = buf[0] & 0x0f;
659 	  fsM = (Y << 4) | sM;
660 
661 	  pv_area_store (stack, regs[translate_rreg (rN)], 4,
662 	                 regs[E_FS0_REGNUM + fsM]);
663 
664 	  pc += 3;
665 	}
666       /* fmov fsM, (sp) */
667       else if (instr[0] == 0xf9 && (instr[1] & 0xfd) == 0x34)
668 	{
669 	  int fsM, sM, Y;
670 	  gdb_byte buf[1];
671 
672 	  Y = (instr[1] & 0x02) >> 1;
673 
674 	  status = target_read_memory (pc + 2, buf, 1);
675 	  if (status != 0)
676 	    break;
677 
678 	  sM = (buf[0] & 0xf0) >> 4;
679 	  fsM = (Y << 4) | sM;
680 
681 	  pv_area_store (stack, regs[E_SP_REGNUM], 4,
682 	                 regs[E_FS0_REGNUM + fsM]);
683 
684 	  pc += 3;
685 	}
686       /* fmov fsM, (rN, rI) */
687       else if (instr[0] == 0xfb && instr[1] == 0x37)
688 	{
689 	  int fsM, sM, Z, rN, rI;
690 	  gdb_byte buf[2];
691 
692 
693 	  status = target_read_memory (pc + 2, buf, 2);
694 	  if (status != 0)
695 	    break;
696 
697 	  rI = (buf[0] & 0xf0) >> 4;
698 	  rN = buf[0] & 0x0f;
699 	  sM = (buf[1] & 0xf0) >> 4;
700 	  Z = (buf[1] & 0x02) >> 1;
701 	  fsM = (Z << 4) | sM;
702 
703 	  pv_area_store (stack,
704 	                 pv_add (regs[translate_rreg (rN)],
705 			         regs[translate_rreg (rI)]),
706 			 4, regs[E_FS0_REGNUM + fsM]);
707 
708 	  pc += 4;
709 	}
710       /* fmov fsM, (d8, rN) */
711       else if (instr[0] == 0xfb && (instr[1] & 0xfd) == 0x30)
712 	{
713 	  int fsM, sM, Y, rN;
714 	  LONGEST d8;
715 	  gdb_byte buf[2];
716 
717 	  Y = (instr[1] & 0x02) >> 1;
718 
719 	  status = target_read_memory (pc + 2, buf, 2);
720 	  if (status != 0)
721 	    break;
722 
723 	  sM = (buf[0] & 0xf0) >> 4;
724 	  rN = buf[0] & 0x0f;
725 	  fsM = (Y << 4) | sM;
726 	  d8 = extract_signed_integer (&buf[1], 1, byte_order);
727 
728 	  pv_area_store (stack,
729 	                 pv_add_constant (regs[translate_rreg (rN)], d8),
730 	                 4, regs[E_FS0_REGNUM + fsM]);
731 
732 	  pc += 4;
733 	}
734       /* fmov fsM, (d24, rN) */
735       else if (instr[0] == 0xfd && (instr[1] & 0xfd) == 0x30)
736 	{
737 	  int fsM, sM, Y, rN;
738 	  LONGEST d24;
739 	  gdb_byte buf[4];
740 
741 	  Y = (instr[1] & 0x02) >> 1;
742 
743 	  status = target_read_memory (pc + 2, buf, 4);
744 	  if (status != 0)
745 	    break;
746 
747 	  sM = (buf[0] & 0xf0) >> 4;
748 	  rN = buf[0] & 0x0f;
749 	  fsM = (Y << 4) | sM;
750 	  d24 = extract_signed_integer (&buf[1], 3, byte_order);
751 
752 	  pv_area_store (stack,
753 	                 pv_add_constant (regs[translate_rreg (rN)], d24),
754 	                 4, regs[E_FS0_REGNUM + fsM]);
755 
756 	  pc += 6;
757 	}
758       /* fmov fsM, (d32, rN) */
759       else if (instr[0] == 0xfe && (instr[1] & 0xfd) == 0x30)
760 	{
761 	  int fsM, sM, Y, rN;
762 	  LONGEST d32;
763 	  gdb_byte buf[5];
764 
765 	  Y = (instr[1] & 0x02) >> 1;
766 
767 	  status = target_read_memory (pc + 2, buf, 5);
768 	  if (status != 0)
769 	    break;
770 
771 	  sM = (buf[0] & 0xf0) >> 4;
772 	  rN = buf[0] & 0x0f;
773 	  fsM = (Y << 4) | sM;
774 	  d32 = extract_signed_integer (&buf[1], 4, byte_order);
775 
776 	  pv_area_store (stack,
777 	                 pv_add_constant (regs[translate_rreg (rN)], d32),
778 	                 4, regs[E_FS0_REGNUM + fsM]);
779 
780 	  pc += 7;
781 	}
782       /* fmov fsM, (d8, SP) */
783       else if (instr[0] == 0xfb && (instr[1] & 0xfd) == 0x34)
784 	{
785 	  int fsM, sM, Y;
786 	  LONGEST d8;
787 	  gdb_byte buf[2];
788 
789 	  Y = (instr[1] & 0x02) >> 1;
790 
791 	  status = target_read_memory (pc + 2, buf, 2);
792 	  if (status != 0)
793 	    break;
794 
795 	  sM = (buf[0] & 0xf0) >> 4;
796 	  fsM = (Y << 4) | sM;
797 	  d8 = extract_signed_integer (&buf[1], 1, byte_order);
798 
799 	  pv_area_store (stack,
800 	                 pv_add_constant (regs[E_SP_REGNUM], d8),
801 	                 4, regs[E_FS0_REGNUM + fsM]);
802 
803 	  pc += 4;
804 	}
805       /* fmov fsM, (d24, SP) */
806       else if (instr[0] == 0xfd && (instr[1] & 0xfd) == 0x34)
807 	{
808 	  int fsM, sM, Y;
809 	  LONGEST d24;
810 	  gdb_byte buf[4];
811 
812 	  Y = (instr[1] & 0x02) >> 1;
813 
814 	  status = target_read_memory (pc + 2, buf, 4);
815 	  if (status != 0)
816 	    break;
817 
818 	  sM = (buf[0] & 0xf0) >> 4;
819 	  fsM = (Y << 4) | sM;
820 	  d24 = extract_signed_integer (&buf[1], 3, byte_order);
821 
822 	  pv_area_store (stack,
823 	                 pv_add_constant (regs[E_SP_REGNUM], d24),
824 	                 4, regs[E_FS0_REGNUM + fsM]);
825 
826 	  pc += 6;
827 	}
828       /* fmov fsM, (d32, SP) */
829       else if (instr[0] == 0xfe && (instr[1] & 0xfd) == 0x34)
830 	{
831 	  int fsM, sM, Y;
832 	  LONGEST d32;
833 	  gdb_byte buf[5];
834 
835 	  Y = (instr[1] & 0x02) >> 1;
836 
837 	  status = target_read_memory (pc + 2, buf, 5);
838 	  if (status != 0)
839 	    break;
840 
841 	  sM = (buf[0] & 0xf0) >> 4;
842 	  fsM = (Y << 4) | sM;
843 	  d32 = extract_signed_integer (&buf[1], 4, byte_order);
844 
845 	  pv_area_store (stack,
846 	                 pv_add_constant (regs[E_SP_REGNUM], d32),
847 	                 4, regs[E_FS0_REGNUM + fsM]);
848 
849 	  pc += 7;
850 	}
851       /* fmov fsM, (rN+) */
852       else if (instr[0] == 0xf9 && (instr[1] & 0xfd) == 0x31)
853 	{
854 	  int fsM, sM, Y, rN, rN_regnum;
855 	  gdb_byte buf[1];
856 
857 	  Y = (instr[1] & 0x02) >> 1;
858 
859 	  status = target_read_memory (pc + 2, buf, 1);
860 	  if (status != 0)
861 	    break;
862 
863 	  sM = (buf[0] & 0xf0) >> 4;
864 	  rN = buf[0] & 0x0f;
865 	  fsM = (Y << 4) | sM;
866 
867 	  rN_regnum = translate_rreg (rN);
868 
869 	  pv_area_store (stack, regs[rN_regnum], 4,
870 	                 regs[E_FS0_REGNUM + fsM]);
871 	  regs[rN_regnum] = pv_add_constant (regs[rN_regnum], 4);
872 
873 	  pc += 3;
874 	}
875       /* fmov fsM, (rN+, imm8) */
876       else if (instr[0] == 0xfb && (instr[1] & 0xfd) == 0x31)
877 	{
878 	  int fsM, sM, Y, rN, rN_regnum;
879 	  LONGEST imm8;
880 	  gdb_byte buf[2];
881 
882 	  Y = (instr[1] & 0x02) >> 1;
883 
884 	  status = target_read_memory (pc + 2, buf, 2);
885 	  if (status != 0)
886 	    break;
887 
888 	  sM = (buf[0] & 0xf0) >> 4;
889 	  rN = buf[0] & 0x0f;
890 	  fsM = (Y << 4) | sM;
891 	  imm8 = extract_signed_integer (&buf[1], 1, byte_order);
892 
893 	  rN_regnum = translate_rreg (rN);
894 
895 	  pv_area_store (stack, regs[rN_regnum], 4, regs[E_FS0_REGNUM + fsM]);
896 	  regs[rN_regnum] = pv_add_constant (regs[rN_regnum], imm8);
897 
898 	  pc += 4;
899 	}
900       /* fmov fsM, (rN+, imm24) */
901       else if (instr[0] == 0xfd && (instr[1] & 0xfd) == 0x31)
902 	{
903 	  int fsM, sM, Y, rN, rN_regnum;
904 	  LONGEST imm24;
905 	  gdb_byte buf[4];
906 
907 	  Y = (instr[1] & 0x02) >> 1;
908 
909 	  status = target_read_memory (pc + 2, buf, 4);
910 	  if (status != 0)
911 	    break;
912 
913 	  sM = (buf[0] & 0xf0) >> 4;
914 	  rN = buf[0] & 0x0f;
915 	  fsM = (Y << 4) | sM;
916 	  imm24 = extract_signed_integer (&buf[1], 3, byte_order);
917 
918 	  rN_regnum = translate_rreg (rN);
919 
920 	  pv_area_store (stack, regs[rN_regnum], 4, regs[E_FS0_REGNUM + fsM]);
921 	  regs[rN_regnum] = pv_add_constant (regs[rN_regnum], imm24);
922 
923 	  pc += 6;
924 	}
925       /* fmov fsM, (rN+, imm32) */
926       else if (instr[0] == 0xfe && (instr[1] & 0xfd) == 0x31)
927 	{
928 	  int fsM, sM, Y, rN, rN_regnum;
929 	  LONGEST imm32;
930 	  gdb_byte buf[5];
931 
932 	  Y = (instr[1] & 0x02) >> 1;
933 
934 	  status = target_read_memory (pc + 2, buf, 5);
935 	  if (status != 0)
936 	    break;
937 
938 	  sM = (buf[0] & 0xf0) >> 4;
939 	  rN = buf[0] & 0x0f;
940 	  fsM = (Y << 4) | sM;
941 	  imm32 = extract_signed_integer (&buf[1], 4, byte_order);
942 
943 	  rN_regnum = translate_rreg (rN);
944 
945 	  pv_area_store (stack, regs[rN_regnum], 4, regs[E_FS0_REGNUM + fsM]);
946 	  regs[rN_regnum] = pv_add_constant (regs[rN_regnum], imm32);
947 
948 	  pc += 7;
949 	}
950       /* mov imm8, aN */
951       else if ((instr[0] & 0xf0) == 0x90)
952         {
953 	  int aN = instr[0] & 0x03;
954 	  LONGEST imm8;
955 
956 	  imm8 = extract_signed_integer (&instr[1], 1, byte_order);
957 
958 	  regs[E_A0_REGNUM + aN] = pv_constant (imm8);
959 	  pc += 2;
960 	}
961       /* mov imm16, aN */
962       else if ((instr[0] & 0xfc) == 0x24)
963         {
964 	  int aN = instr[0] & 0x03;
965 	  gdb_byte buf[2];
966 	  LONGEST imm16;
967 
968 	  status = target_read_memory (pc + 1, buf, 2);
969 	  if (status != 0)
970 	    break;
971 
972 	  imm16 = extract_signed_integer (buf, 2, byte_order);
973 	  regs[E_A0_REGNUM + aN] = pv_constant (imm16);
974 	  pc += 3;
975 	}
976       /* mov imm32, aN */
977       else if (instr[0] == 0xfc && ((instr[1] & 0xfc) == 0xdc))
978         {
979 	  int aN = instr[1] & 0x03;
980 	  gdb_byte buf[4];
981 	  LONGEST imm32;
982 
983 	  status = target_read_memory (pc + 2, buf, 4);
984 	  if (status != 0)
985 	    break;
986 
987 	  imm32 = extract_signed_integer (buf, 4, byte_order);
988 	  regs[E_A0_REGNUM + aN] = pv_constant (imm32);
989 	  pc += 6;
990 	}
991       /* mov imm8, dN */
992       else if ((instr[0] & 0xf0) == 0x80)
993         {
994 	  int dN = instr[0] & 0x03;
995 	  LONGEST imm8;
996 
997 	  imm8 = extract_signed_integer (&instr[1], 1, byte_order);
998 
999 	  regs[E_D0_REGNUM + dN] = pv_constant (imm8);
1000 	  pc += 2;
1001 	}
1002       /* mov imm16, dN */
1003       else if ((instr[0] & 0xfc) == 0x2c)
1004         {
1005 	  int dN = instr[0] & 0x03;
1006 	  gdb_byte buf[2];
1007 	  LONGEST imm16;
1008 
1009 	  status = target_read_memory (pc + 1, buf, 2);
1010 	  if (status != 0)
1011 	    break;
1012 
1013 	  imm16 = extract_signed_integer (buf, 2, byte_order);
1014 	  regs[E_D0_REGNUM + dN] = pv_constant (imm16);
1015 	  pc += 3;
1016 	}
1017       /* mov imm32, dN */
1018       else if (instr[0] == 0xfc && ((instr[1] & 0xfc) == 0xcc))
1019         {
1020 	  int dN = instr[1] & 0x03;
1021 	  gdb_byte buf[4];
1022 	  LONGEST imm32;
1023 
1024 	  status = target_read_memory (pc + 2, buf, 4);
1025 	  if (status != 0)
1026 	    break;
1027 
1028 	  imm32 = extract_signed_integer (buf, 4, byte_order);
1029 	  regs[E_D0_REGNUM + dN] = pv_constant (imm32);
1030 	  pc += 6;
1031 	}
1032       else
1033 	{
1034 	  /* We've hit some instruction that we don't recognize.  Hopefully,
1035 	     we have enough to do prologue analysis.  */
1036 	  break;
1037 	}
1038     }
1039 
1040   /* Is the frame size (offset, really) a known constant?  */
1041   if (pv_is_register (regs[E_SP_REGNUM], E_SP_REGNUM))
1042     result->frame_size = regs[E_SP_REGNUM].k;
1043 
1044   /* Was the frame pointer initialized?  */
1045   if (pv_is_register (regs[E_A3_REGNUM], E_SP_REGNUM))
1046     {
1047       result->has_frame_ptr = 1;
1048       result->frame_ptr_offset = regs[E_A3_REGNUM].k;
1049     }
1050 
1051   /* Record where all the registers were saved.  */
1052   pv_area_scan (stack, check_for_saved, (void *) result);
1053 
1054   result->prologue_end = after_last_frame_setup_insn;
1055 
1056   do_cleanups (back_to);
1057 }
1058 
1059 /* Function: skip_prologue
1060    Return the address of the first inst past the prologue of the function.  */
1061 
1062 static CORE_ADDR
mn10300_skip_prologue(struct gdbarch * gdbarch,CORE_ADDR pc)1063 mn10300_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1064 {
1065   char *name;
1066   CORE_ADDR func_addr, func_end;
1067   struct mn10300_prologue p;
1068 
1069   /* Try to find the extent of the function that contains PC.  */
1070   if (!find_pc_partial_function (pc, &name, &func_addr, &func_end))
1071     return pc;
1072 
1073   mn10300_analyze_prologue (gdbarch, pc, func_end, &p);
1074   return p.prologue_end;
1075 }
1076 
1077 /* Wrapper for mn10300_analyze_prologue: find the function start;
1078    use the current frame PC as the limit, then
1079    invoke mn10300_analyze_prologue and return its result.  */
1080 static struct mn10300_prologue *
mn10300_analyze_frame_prologue(struct frame_info * this_frame,void ** this_prologue_cache)1081 mn10300_analyze_frame_prologue (struct frame_info *this_frame,
1082 			   void **this_prologue_cache)
1083 {
1084   if (!*this_prologue_cache)
1085     {
1086       CORE_ADDR func_start, stop_addr;
1087 
1088       *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct mn10300_prologue);
1089 
1090       func_start = get_frame_func (this_frame);
1091       stop_addr = get_frame_pc (this_frame);
1092 
1093       /* If we couldn't find any function containing the PC, then
1094          just initialize the prologue cache, but don't do anything.  */
1095       if (!func_start)
1096         stop_addr = func_start;
1097 
1098       mn10300_analyze_prologue (get_frame_arch (this_frame),
1099                                 func_start, stop_addr, *this_prologue_cache);
1100     }
1101 
1102   return *this_prologue_cache;
1103 }
1104 
1105 /* Given the next frame and a prologue cache, return this frame's
1106    base.  */
1107 static CORE_ADDR
mn10300_frame_base(struct frame_info * this_frame,void ** this_prologue_cache)1108 mn10300_frame_base (struct frame_info *this_frame, void **this_prologue_cache)
1109 {
1110   struct mn10300_prologue *p
1111     = mn10300_analyze_frame_prologue (this_frame, this_prologue_cache);
1112 
1113   /* In functions that use alloca, the distance between the stack
1114      pointer and the frame base varies dynamically, so we can't use
1115      the SP plus static information like prologue analysis to find the
1116      frame base.  However, such functions must have a frame pointer,
1117      to be able to restore the SP on exit.  So whenever we do have a
1118      frame pointer, use that to find the base.  */
1119   if (p->has_frame_ptr)
1120     {
1121       CORE_ADDR fp = get_frame_register_unsigned (this_frame, E_A3_REGNUM);
1122       return fp - p->frame_ptr_offset;
1123     }
1124   else
1125     {
1126       CORE_ADDR sp = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
1127       return sp - p->frame_size;
1128     }
1129 }
1130 
1131 /* Here is a dummy implementation.  */
1132 static struct frame_id
mn10300_dummy_id(struct gdbarch * gdbarch,struct frame_info * this_frame)1133 mn10300_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1134 {
1135   CORE_ADDR sp = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
1136   CORE_ADDR pc = get_frame_register_unsigned (this_frame, E_PC_REGNUM);
1137   return frame_id_build (sp, pc);
1138 }
1139 
1140 static void
mn10300_frame_this_id(struct frame_info * this_frame,void ** this_prologue_cache,struct frame_id * this_id)1141 mn10300_frame_this_id (struct frame_info *this_frame,
1142 		       void **this_prologue_cache,
1143 		       struct frame_id *this_id)
1144 {
1145   *this_id = frame_id_build (mn10300_frame_base (this_frame,
1146 						 this_prologue_cache),
1147 			     get_frame_func (this_frame));
1148 
1149 }
1150 
1151 static struct value *
mn10300_frame_prev_register(struct frame_info * this_frame,void ** this_prologue_cache,int regnum)1152 mn10300_frame_prev_register (struct frame_info *this_frame,
1153 		             void **this_prologue_cache, int regnum)
1154 {
1155   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
1156   struct mn10300_prologue *p
1157     = mn10300_analyze_frame_prologue (this_frame, this_prologue_cache);
1158   CORE_ADDR frame_base = mn10300_frame_base (this_frame, this_prologue_cache);
1159   int reg_size = register_size (get_frame_arch (this_frame), regnum);
1160 
1161   if (regnum == E_SP_REGNUM)
1162     return frame_unwind_got_constant (this_frame, regnum, frame_base);
1163 
1164   /* If prologue analysis says we saved this register somewhere,
1165      return a description of the stack slot holding it.  */
1166   if (p->reg_offset[regnum] != 1)
1167     return frame_unwind_got_memory (this_frame, regnum,
1168                                     frame_base + p->reg_offset[regnum]);
1169 
1170   /* Otherwise, presume we haven't changed the value of this
1171      register, and get it from the next frame.  */
1172   return frame_unwind_got_register (this_frame, regnum, regnum);
1173 }
1174 
1175 static const struct frame_unwind mn10300_frame_unwind = {
1176   NORMAL_FRAME,
1177   default_frame_unwind_stop_reason,
1178   mn10300_frame_this_id,
1179   mn10300_frame_prev_register,
1180   NULL,
1181   default_frame_sniffer
1182 };
1183 
1184 static CORE_ADDR
mn10300_unwind_pc(struct gdbarch * gdbarch,struct frame_info * this_frame)1185 mn10300_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1186 {
1187   ULONGEST pc;
1188 
1189   pc = frame_unwind_register_unsigned (this_frame, E_PC_REGNUM);
1190   return pc;
1191 }
1192 
1193 static CORE_ADDR
mn10300_unwind_sp(struct gdbarch * gdbarch,struct frame_info * this_frame)1194 mn10300_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
1195 {
1196   ULONGEST sp;
1197 
1198   sp = frame_unwind_register_unsigned (this_frame, E_SP_REGNUM);
1199   return sp;
1200 }
1201 
1202 static void
mn10300_frame_unwind_init(struct gdbarch * gdbarch)1203 mn10300_frame_unwind_init (struct gdbarch *gdbarch)
1204 {
1205   dwarf2_append_unwinders (gdbarch);
1206   frame_unwind_append_unwinder (gdbarch, &mn10300_frame_unwind);
1207   set_gdbarch_dummy_id (gdbarch, mn10300_dummy_id);
1208   set_gdbarch_unwind_pc (gdbarch, mn10300_unwind_pc);
1209   set_gdbarch_unwind_sp (gdbarch, mn10300_unwind_sp);
1210 }
1211 
1212 /* Function: push_dummy_call
1213  *
1214  * Set up machine state for a target call, including
1215  * function arguments, stack, return address, etc.
1216  *
1217  */
1218 
1219 static CORE_ADDR
mn10300_push_dummy_call(struct gdbarch * gdbarch,struct value * target_func,struct regcache * regcache,CORE_ADDR bp_addr,int nargs,struct value ** args,CORE_ADDR sp,int struct_return,CORE_ADDR struct_addr)1220 mn10300_push_dummy_call (struct gdbarch *gdbarch,
1221 			 struct value *target_func,
1222 			 struct regcache *regcache,
1223 			 CORE_ADDR bp_addr,
1224 			 int nargs, struct value **args,
1225 			 CORE_ADDR sp,
1226 			 int struct_return,
1227 			 CORE_ADDR struct_addr)
1228 {
1229   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1230   const int push_size = register_size (gdbarch, E_PC_REGNUM);
1231   int regs_used;
1232   int len, arg_len;
1233   int stack_offset = 0;
1234   int argnum;
1235   char *val, valbuf[MAX_REGISTER_SIZE];
1236 
1237   /* This should be a nop, but align the stack just in case something
1238      went wrong.  Stacks are four byte aligned on the mn10300.  */
1239   sp &= ~3;
1240 
1241   /* Now make space on the stack for the args.
1242 
1243      XXX This doesn't appear to handle pass-by-invisible reference
1244      arguments.  */
1245   regs_used = struct_return ? 1 : 0;
1246   for (len = 0, argnum = 0; argnum < nargs; argnum++)
1247     {
1248       arg_len = (TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3;
1249       while (regs_used < 2 && arg_len > 0)
1250 	{
1251 	  regs_used++;
1252 	  arg_len -= push_size;
1253 	}
1254       len += arg_len;
1255     }
1256 
1257   /* Allocate stack space.  */
1258   sp -= len;
1259 
1260   if (struct_return)
1261     {
1262       regs_used = 1;
1263       regcache_cooked_write_unsigned (regcache, E_D0_REGNUM, struct_addr);
1264     }
1265   else
1266     regs_used = 0;
1267 
1268   /* Push all arguments onto the stack.  */
1269   for (argnum = 0; argnum < nargs; argnum++)
1270     {
1271       /* FIXME what about structs?  Unions?  */
1272       if (TYPE_CODE (value_type (*args)) == TYPE_CODE_STRUCT
1273 	  && TYPE_LENGTH (value_type (*args)) > 8)
1274 	{
1275 	  /* Change to pointer-to-type.  */
1276 	  arg_len = push_size;
1277 	  store_unsigned_integer (valbuf, push_size, byte_order,
1278 				  value_address (*args));
1279 	  val = &valbuf[0];
1280 	}
1281       else
1282 	{
1283 	  arg_len = TYPE_LENGTH (value_type (*args));
1284 	  val = (char *) value_contents (*args);
1285 	}
1286 
1287       while (regs_used < 2 && arg_len > 0)
1288 	{
1289 	  regcache_cooked_write_unsigned (regcache, regs_used,
1290 		  extract_unsigned_integer (val, push_size, byte_order));
1291 	  val += push_size;
1292 	  arg_len -= push_size;
1293 	  regs_used++;
1294 	}
1295 
1296       while (arg_len > 0)
1297 	{
1298 	  write_memory (sp + stack_offset, val, push_size);
1299 	  arg_len -= push_size;
1300 	  val += push_size;
1301 	  stack_offset += push_size;
1302 	}
1303 
1304       args++;
1305     }
1306 
1307   /* Make space for the flushback area.  */
1308   sp -= 8;
1309 
1310   /* Push the return address that contains the magic breakpoint.  */
1311   sp -= 4;
1312   write_memory_unsigned_integer (sp, push_size, byte_order, bp_addr);
1313 
1314   /* The CPU also writes the return address always into the
1315      MDR register on "call".  */
1316   regcache_cooked_write_unsigned (regcache, E_MDR_REGNUM, bp_addr);
1317 
1318   /* Update $sp.  */
1319   regcache_cooked_write_unsigned (regcache, E_SP_REGNUM, sp);
1320 
1321   /* On the mn10300, it's possible to move some of the stack adjustment
1322      and saving of the caller-save registers out of the prologue and
1323      into the call sites.  (When using gcc, this optimization can
1324      occur when using the -mrelax switch.) If this occurs, the dwarf2
1325      info will reflect this fact.  We can test to see if this is the
1326      case by creating a new frame using the current stack pointer and
1327      the address of the function that we're about to call.  We then
1328      unwind SP and see if it's different than the SP of our newly
1329      created frame.  If the SP values are the same, the caller is not
1330      expected to allocate any additional stack.  On the other hand, if
1331      the SP values are different, the difference determines the
1332      additional stack that must be allocated.
1333 
1334      Note that we don't update the return value though because that's
1335      the value of the stack just after pushing the arguments, but prior
1336      to performing the call.  This value is needed in order to
1337      construct the frame ID of the dummy call.  */
1338   {
1339     CORE_ADDR func_addr = find_function_addr (target_func, NULL);
1340     CORE_ADDR unwound_sp
1341       = mn10300_unwind_sp (gdbarch, create_new_frame (sp, func_addr));
1342     if (sp != unwound_sp)
1343       regcache_cooked_write_unsigned (regcache, E_SP_REGNUM,
1344                                       sp - (unwound_sp - sp));
1345   }
1346 
1347   return sp;
1348 }
1349 
1350 /* If DWARF2 is a register number appearing in Dwarf2 debug info, then
1351    mn10300_dwarf2_reg_to_regnum (DWARF2) is the corresponding GDB
1352    register number.  Why don't Dwarf2 and GDB use the same numbering?
1353    Who knows?  But since people have object files lying around with
1354    the existing Dwarf2 numbering, and other people have written stubs
1355    to work with the existing GDB, neither of them can change.  So we
1356    just have to cope.  */
1357 static int
mn10300_dwarf2_reg_to_regnum(struct gdbarch * gdbarch,int dwarf2)1358 mn10300_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2)
1359 {
1360   /* This table is supposed to be shaped like the gdbarch_register_name
1361      initializer in gcc/config/mn10300/mn10300.h.  Registers which
1362      appear in GCC's numbering, but have no counterpart in GDB's
1363      world, are marked with a -1.  */
1364   static int dwarf2_to_gdb[] = {
1365     0,  1,  2,  3,  4,  5,  6,  7, -1, 8,
1366     15, 16, 17, 18, 19, 20, 21, 22,
1367     32, 33, 34, 35, 36, 37, 38, 39,
1368     40, 41, 42, 43, 44, 45, 46, 47,
1369     48, 49, 50, 51, 52, 53, 54, 55,
1370     56, 57, 58, 59, 60, 61, 62, 63,
1371     9, 11
1372   };
1373 
1374   if (dwarf2 < 0
1375       || dwarf2 >= ARRAY_SIZE (dwarf2_to_gdb))
1376     {
1377       warning (_("Bogus register number in debug info: %d"), dwarf2);
1378       return -1;
1379     }
1380 
1381   return dwarf2_to_gdb[dwarf2];
1382 }
1383 
1384 static struct gdbarch *
mn10300_gdbarch_init(struct gdbarch_info info,struct gdbarch_list * arches)1385 mn10300_gdbarch_init (struct gdbarch_info info,
1386 		      struct gdbarch_list *arches)
1387 {
1388   struct gdbarch *gdbarch;
1389   struct gdbarch_tdep *tdep;
1390   int num_regs;
1391 
1392   arches = gdbarch_list_lookup_by_info (arches, &info);
1393   if (arches != NULL)
1394     return arches->gdbarch;
1395 
1396   tdep = xmalloc (sizeof (struct gdbarch_tdep));
1397   gdbarch = gdbarch_alloc (&info, tdep);
1398 
1399   switch (info.bfd_arch_info->mach)
1400     {
1401     case 0:
1402     case bfd_mach_mn10300:
1403       set_gdbarch_register_name (gdbarch, mn10300_generic_register_name);
1404       tdep->am33_mode = 0;
1405       num_regs = 32;
1406       break;
1407     case bfd_mach_am33:
1408       set_gdbarch_register_name (gdbarch, am33_register_name);
1409       tdep->am33_mode = 1;
1410       num_regs = 32;
1411       break;
1412     case bfd_mach_am33_2:
1413       set_gdbarch_register_name (gdbarch, am33_2_register_name);
1414       tdep->am33_mode = 2;
1415       num_regs = 64;
1416       set_gdbarch_fp0_regnum (gdbarch, 32);
1417       break;
1418     default:
1419       internal_error (__FILE__, __LINE__,
1420 		      _("mn10300_gdbarch_init: Unknown mn10300 variant"));
1421       break;
1422     }
1423 
1424   /* By default, chars are unsigned.  */
1425   set_gdbarch_char_signed (gdbarch, 0);
1426 
1427   /* Registers.  */
1428   set_gdbarch_num_regs (gdbarch, num_regs);
1429   set_gdbarch_register_type (gdbarch, mn10300_register_type);
1430   set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
1431   set_gdbarch_read_pc (gdbarch, mn10300_read_pc);
1432   set_gdbarch_write_pc (gdbarch, mn10300_write_pc);
1433   set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
1434   set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
1435   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, mn10300_dwarf2_reg_to_regnum);
1436 
1437   /* Stack unwinding.  */
1438   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1439   /* Breakpoints.  */
1440   set_gdbarch_breakpoint_from_pc (gdbarch, mn10300_breakpoint_from_pc);
1441   /* decr_pc_after_break?  */
1442   /* Disassembly.  */
1443   set_gdbarch_print_insn (gdbarch, print_insn_mn10300);
1444 
1445   /* Stage 2 */
1446   set_gdbarch_return_value (gdbarch, mn10300_return_value);
1447 
1448   /* Stage 3 -- get target calls working.  */
1449   set_gdbarch_push_dummy_call (gdbarch, mn10300_push_dummy_call);
1450   /* set_gdbarch_return_value (store, extract) */
1451 
1452 
1453   mn10300_frame_unwind_init (gdbarch);
1454 
1455   /* Hook in ABI-specific overrides, if they have been registered.  */
1456   gdbarch_init_osabi (info, gdbarch);
1457 
1458   return gdbarch;
1459 }
1460 
1461 /* Dump out the mn10300 specific architecture information.  */
1462 
1463 static void
mn10300_dump_tdep(struct gdbarch * gdbarch,struct ui_file * file)1464 mn10300_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
1465 {
1466   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1467   fprintf_unfiltered (file, "mn10300_dump_tdep: am33_mode = %d\n",
1468 		      tdep->am33_mode);
1469 }
1470 
1471 /* Provide a prototype to silence -Wmissing-prototypes.  */
1472 extern initialize_file_ftype _initialize_mn10300_tdep;
1473 
1474 void
_initialize_mn10300_tdep(void)1475 _initialize_mn10300_tdep (void)
1476 {
1477   gdbarch_register (bfd_arch_mn10300, mn10300_gdbarch_init, mn10300_dump_tdep);
1478 }
1479 
1480