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