1 /* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger.
\r
3 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free
\r
4 Software Foundation, Inc.
\r
6 This file is part of GDB.
\r
8 This program is free software; you can redistribute it and/or modify
\r
9 it under the terms of the GNU General Public License as published by
\r
10 the Free Software Foundation; either version 2 of the License, or
\r
11 (at your option) any later version.
\r
13 This program is distributed in the hope that it will be useful,
\r
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
16 GNU General Public License for more details.
\r
18 You should have received a copy of the GNU General Public License
\r
19 along with this program; if not, write to the Free Software
\r
20 Foundation, Inc., 59 Temple Place - Suite 330,
\r
21 Boston, MA 02111-1307, USA. */
\r
25 To get from 1.1 to 1.2, add:
\r
26 use_struct_convention
\r
28 extract_return_value
\r
29 extract_struct_value_address
\r
31 Make sure to use regcache. */
\r
35 Apparently cannot run without a stub placeholder for unwind_dummy_id.
\r
40 To get from 1.2 to 1.3, add:
\r
43 struct mn10300_unwind_cache
\r
48 frame_sniffer (struct mn10300_frame_unwind)
\r
52 #include "arch-utils.h"
\r
53 #include "dis-asm.h"
\r
54 #include "gdbtypes.h"
\r
55 #include "regcache.h"
\r
56 #include "gdb_string.h"
\r
57 #include "gdb_assert.h"
\r
58 #include "gdbcore.h" /* for write_memory_unsigned_integer */
\r
60 #include "gdbtypes.h"
\r
62 #include "frame-unwind.h"
\r
63 #include "frame-base.h"
\r
64 #include "trad-frame.h"
\r
66 #include "dwarf2-frame.h"
\r
67 #include "regcache.h"
\r
69 #include "mn10300-tdep.h"
\r
72 /* Compute the alignment required by a type. */
\r
75 mn10300_type_align (struct type *type)
\r
79 switch (TYPE_CODE (type))
\r
82 case TYPE_CODE_ENUM:
\r
84 case TYPE_CODE_RANGE:
\r
85 case TYPE_CODE_CHAR:
\r
86 case TYPE_CODE_BOOL:
\r
90 return TYPE_LENGTH (type);
\r
92 case TYPE_CODE_COMPLEX:
\r
93 return TYPE_LENGTH (type) / 2;
\r
95 case TYPE_CODE_STRUCT:
\r
96 case TYPE_CODE_UNION:
\r
97 for (i = 0; i < TYPE_NFIELDS (type); i++)
\r
99 int falign = mn10300_type_align (TYPE_FIELD_TYPE (type, i));
\r
100 while (align < falign)
\r
105 case TYPE_CODE_ARRAY:
\r
106 /* HACK! Structures containing arrays, even small ones, are not
\r
107 elligible for returning in registers. */
\r
110 case TYPE_CODE_TYPEDEF:
\r
111 return mn10300_type_align (check_typedef (type));
\r
114 internal_error (__FILE__, __LINE__, _("bad switch"));
\r
118 /* MVS note this is deprecated. */
\r
119 /* Should call_function allocate stack space for a struct return? */
\r
122 mn10300_use_struct_convention (int gcc_p, struct type *type)
\r
124 /* Structures bigger than a pair of words can't be returned in
\r
126 if (TYPE_LENGTH (type) > 8)
\r
129 switch (TYPE_CODE (type))
\r
131 case TYPE_CODE_STRUCT:
\r
132 case TYPE_CODE_UNION:
\r
133 /* Structures with a single field are handled as the field
\r
135 if (TYPE_NFIELDS (type) == 1)
\r
136 return mn10300_use_struct_convention (gcc_p,
\r
137 TYPE_FIELD_TYPE (type, 0));
\r
139 /* Structures with word or double-word size are passed in memory, as
\r
140 long as they require at least word alignment. */
\r
141 if (mn10300_type_align (type) >= 4)
\r
146 /* Arrays are addressable, so they're never returned in
\r
147 registers. This condition can only hold when the array is
\r
148 the only field of a struct or union. */
\r
149 case TYPE_CODE_ARRAY:
\r
152 case TYPE_CODE_TYPEDEF:
\r
153 return mn10300_use_struct_convention (gcc_p, check_typedef (type));
\r
160 /* MVS note this is deprecated. */
\r
162 mn10300_store_return_value (struct type *type,
\r
163 struct regcache *regcache, const void *valbuf)
\r
165 struct gdbarch *gdbarch = get_regcache_arch (regcache);
\r
166 int len = TYPE_LENGTH (type);
\r
169 if (TYPE_CODE (type) == TYPE_CODE_PTR)
\r
174 regsz = register_size (gdbarch, reg);
\r
177 regcache_raw_write_part (regcache, reg, 0, len, valbuf);
\r
178 else if (len <= 2 * regsz)
\r
180 regcache_raw_write (regcache, reg, valbuf);
\r
181 gdb_assert (regsz == register_size (gdbarch, reg + 1));
\r
182 regcache_raw_write_part (regcache, reg+1, 0,
\r
183 len - regsz, (char *) valbuf + regsz);
\r
186 internal_error (__FILE__, __LINE__,
\r
187 _("Cannot store return value %d bytes long."), len);
\r
190 /* MVS note deprecated. */
\r
192 mn10300_extract_return_value (struct type *type,
\r
193 struct regcache *regcache, void *valbuf)
\r
195 struct gdbarch *gdbarch = get_regcache_arch (regcache);
\r
196 char buf[MAX_REGISTER_SIZE];
\r
197 int len = TYPE_LENGTH (type);
\r
200 if (TYPE_CODE (type) == TYPE_CODE_PTR)
\r
205 regsz = register_size (gdbarch, reg);
\r
208 regcache_raw_read (regcache, reg, buf);
\r
209 memcpy (valbuf, buf, len);
\r
211 else if (len <= 2 * regsz)
\r
213 regcache_raw_read (regcache, reg, buf);
\r
214 memcpy (valbuf, buf, regsz);
\r
215 gdb_assert (regsz == register_size (gdbarch, reg + 1));
\r
216 regcache_raw_read (regcache, reg + 1, buf);
\r
217 memcpy ((char *) valbuf + regsz, buf, len - regsz);
\r
220 internal_error (__FILE__, __LINE__,
\r
221 _("Cannot extract return value %d bytes long."), len);
\r
225 register_name (int reg, char **regs, long sizeof_regs)
\r
227 if (reg < 0 || reg >= sizeof_regs / sizeof (regs[0]))
\r
233 static const char *
\r
234 mn10300_generic_register_name (int reg)
\r
236 static char *regs[] =
\r
237 { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
\r
238 "sp", "pc", "mdr", "psw", "lir", "lar", "", "",
\r
239 "", "", "", "", "", "", "", "",
\r
240 "", "", "", "", "", "", "", "fp"
\r
242 return register_name (reg, regs, sizeof regs);
\r
246 static const char *
\r
247 am33_register_name (int reg)
\r
249 static char *regs[] =
\r
250 { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
\r
251 "sp", "pc", "mdr", "psw", "lir", "lar", "",
\r
252 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
\r
253 "ssp", "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", ""
\r
255 return register_name (reg, regs, sizeof regs);
\r
259 static struct type *
\r
260 mn10300_register_type (struct gdbarch *gdbarch, int reg)
\r
262 return builtin_type_int;
\r
266 mn10300_read_pc (ptid_t ptid)
\r
268 return read_register_pid (E_PC_REGNUM, ptid);
\r
272 mn10300_write_pc (CORE_ADDR val, ptid_t ptid)
\r
274 return write_register_pid (E_PC_REGNUM, val, ptid);
\r
277 /* The breakpoint instruction must be the same size as the smallest
\r
278 instruction in the instruction set.
\r
280 The Matsushita mn10x00 processors have single byte instructions
\r
281 so we need a single byte breakpoint. Matsushita hasn't defined
\r
282 one, so we defined it ourselves. */
\r
284 const static unsigned char *
\r
285 mn10300_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size)
\r
287 static char breakpoint[] = {0xff};
\r
292 /* Function: skip_prologue
\r
293 Return the address of the first inst past the prologue of the function. */
\r
296 mn10300_skip_prologue (CORE_ADDR pc)
\r
298 /* FIXME: not implemented. */
\r
299 /* First approximation, try simply using skip_prologue_using_sal. */
\r
300 return skip_prologue_using_sal (pc);
\r
303 /* Simple frame_unwind_cache.
\r
304 This finds the "extra info" for the frame. */
\r
305 struct trad_frame_cache *
\r
306 mn10300_frame_unwind_cache (struct frame_info *next_frame,
\r
307 void **this_prologue_cache)
\r
309 struct trad_frame_cache *cache;
\r
312 if (*this_prologue_cache)
\r
313 return (*this_prologue_cache);
\r
315 cache = trad_frame_cache_zalloc (next_frame);
\r
316 pc = gdbarch_unwind_pc (current_gdbarch, next_frame);
\r
317 mn10300_analyze_prologue (next_frame, (void **) &cache, pc);
\r
319 trad_frame_set_id (cache,
\r
320 frame_id_build (trad_frame_get_this_base (cache), pc));
\r
322 (*this_prologue_cache) = cache;
\r
326 /* Here is a dummy implementation. */
\r
327 static struct frame_id
\r
328 mn10300_unwind_dummy_id (struct gdbarch *gdbarch,
\r
329 struct frame_info *next_frame)
\r
331 return frame_id_build (frame_sp_unwind (next_frame),
\r
332 frame_pc_unwind (next_frame));
\r
335 /* Trad frame implementation. */
\r
337 mn10300_frame_this_id (struct frame_info *next_frame,
\r
338 void **this_prologue_cache,
\r
339 struct frame_id *this_id)
\r
341 struct trad_frame_cache *cache =
\r
342 mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
\r
344 trad_frame_get_id (cache, this_id);
\r
348 mn10300_frame_prev_register (struct frame_info *next_frame,
\r
349 void **this_prologue_cache,
\r
350 int regnum, int *optimizedp,
\r
351 enum lval_type *lvalp, CORE_ADDR *addrp,
\r
352 int *realnump, void *bufferp)
\r
354 struct trad_frame_cache *cache =
\r
355 mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
\r
357 trad_frame_get_register (cache, next_frame, regnum, optimizedp,
\r
358 lvalp, addrp, realnump, bufferp);
\r
360 trad_frame_get_prev_register (next_frame, cache->prev_regs, regnum,
\r
361 optimizedp, lvalp, addrp, realnump, bufferp);
\r
365 static const struct frame_unwind mn10300_frame_unwind = {
\r
367 mn10300_frame_this_id,
\r
368 mn10300_frame_prev_register
\r
372 mn10300_frame_base_address (struct frame_info *next_frame,
\r
373 void **this_prologue_cache)
\r
375 struct trad_frame_cache *cache =
\r
376 mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
\r
378 return trad_frame_get_this_base (cache);
\r
381 static const struct frame_unwind *
\r
382 mn10300_frame_sniffer (struct frame_info *next_frame)
\r
384 return &mn10300_frame_unwind;
\r
387 static const struct frame_base mn10300_frame_base = {
\r
388 &mn10300_frame_unwind,
\r
389 mn10300_frame_base_address,
\r
390 mn10300_frame_base_address,
\r
391 mn10300_frame_base_address
\r
395 mn10300_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
\r
399 frame_unwind_unsigned_register (next_frame, E_PC_REGNUM, &pc);
\r
404 mn10300_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
\r
408 frame_unwind_unsigned_register (next_frame, E_SP_REGNUM, &sp);
\r
413 mn10300_frame_unwind_init (struct gdbarch *gdbarch)
\r
415 frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
\r
416 frame_unwind_append_sniffer (gdbarch, mn10300_frame_sniffer);
\r
417 frame_base_set_default (gdbarch, &mn10300_frame_base);
\r
418 set_gdbarch_unwind_dummy_id (gdbarch, mn10300_unwind_dummy_id);
\r
419 set_gdbarch_unwind_pc (gdbarch, mn10300_unwind_pc);
\r
420 set_gdbarch_unwind_sp (gdbarch, mn10300_unwind_sp);
\r
423 /* Function: push_dummy_call
\r
425 * Set up machine state for a target call, including
\r
426 * function arguments, stack, return address, etc.
\r
431 mn10300_push_dummy_call (struct gdbarch *gdbarch,
\r
432 struct value *target_func,
\r
433 struct regcache *regcache,
\r
434 CORE_ADDR bp_addr,
\r
435 int nargs, struct value **args,
\r
438 CORE_ADDR struct_addr)
\r
440 const int push_size = register_size (gdbarch, E_PC_REGNUM);
\r
441 int regs_used = struct_return ? 1 : 0;
\r
443 int stack_offset = 0;
\r
447 /* FIXME temp, don't handle struct args at all. */
\r
449 error ("Target doesn't handle struct return");
\r
451 /* This should be a nop, but align the stack just in case something
\r
452 went wrong. Stacks are four byte aligned on the mn10300. */
\r
455 /* Now make space on the stack for the args.
\r
457 XXX This doesn't appear to handle pass-by-invisible reference
\r
459 for (len = 0, argnum = 0; argnum < nargs; argnum++)
\r
461 arg_len = (TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3;
\r
462 if (TYPE_CODE (value_type (args[argnum])) == TYPE_CODE_STRUCT)
\r
463 error ("Target does not handle struct args");
\r
464 while (regs_used < 2 && arg_len > 0)
\r
467 arg_len -= push_size;
\r
472 /* Allocate stack space. */
\r
475 regs_used = struct_return ? 1 : 0;
\r
476 /* Push all arguments onto the stack. */
\r
477 for (argnum = 0; argnum < nargs; argnum++)
\r
479 /* FIXME what about structs? */
\r
480 arg_len = TYPE_LENGTH (value_type (*args));
\r
481 val = (char *) value_contents (*args);
\r
483 while (regs_used < 2 && arg_len > 0)
\r
485 write_register (regs_used, extract_unsigned_integer (val,
\r
488 arg_len -= push_size;
\r
492 while (arg_len > 0)
\r
494 write_memory (sp + stack_offset, val, push_size);
\r
495 arg_len -= push_size;
\r
497 stack_offset += push_size;
\r
503 /* Make space for the flushback area. */
\r
506 /* Push the return address that contains the magic breakpoint. */
\r
508 write_memory_unsigned_integer (sp, push_size, bp_addr);
\r
510 regcache_cooked_write_unsigned (regcache, E_SP_REGNUM, sp);
\r
515 static struct gdbarch *
\r
516 mn10300_gdbarch_init (struct gdbarch_info info,
\r
517 struct gdbarch_list *arches)
\r
519 struct gdbarch *gdbarch;
\r
520 struct gdbarch_tdep *tdep;
\r
522 arches = gdbarch_list_lookup_by_info (arches, &info);
\r
523 if (arches != NULL)
\r
524 return arches->gdbarch;
\r
526 tdep = xmalloc (sizeof (struct gdbarch_tdep));
\r
527 gdbarch = gdbarch_alloc (&info, tdep);
\r
529 switch (info.bfd_arch_info->mach)
\r
532 case bfd_mach_mn10300:
\r
533 set_gdbarch_register_name (gdbarch, mn10300_generic_register_name);
\r
534 tdep->am33_mode = 0;
\r
536 case bfd_mach_am33:
\r
537 set_gdbarch_register_name (gdbarch, am33_register_name);
\r
538 tdep->am33_mode = 1;
\r
541 internal_error (__FILE__, __LINE__,
\r
542 _("mn10300_gdbarch_init: Unknown mn10300 variant"));
\r
547 set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
\r
548 set_gdbarch_register_type (gdbarch, mn10300_register_type);
\r
549 set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
\r
550 set_gdbarch_read_pc (gdbarch, mn10300_read_pc);
\r
551 set_gdbarch_write_pc (gdbarch, mn10300_write_pc);
\r
552 set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
\r
553 set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
\r
555 /* Stack unwinding. */
\r
556 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
\r
558 set_gdbarch_breakpoint_from_pc (gdbarch, mn10300_breakpoint_from_pc);
\r
559 /* decr_pc_after_break? */
\r
561 set_gdbarch_print_insn (gdbarch, print_insn_mn10300);
\r
564 /* MVS Note: at least the first one is deprecated! */
\r
565 set_gdbarch_deprecated_use_struct_convention (gdbarch,
\r
566 mn10300_use_struct_convention);
\r
567 set_gdbarch_store_return_value (gdbarch, mn10300_store_return_value);
\r
568 set_gdbarch_extract_return_value (gdbarch, mn10300_extract_return_value);
\r
570 /* Stage 3 -- get target calls working. */
\r
571 set_gdbarch_push_dummy_call (gdbarch, mn10300_push_dummy_call);
\r
572 /* set_gdbarch_return_value (store, extract) */
\r
575 mn10300_frame_unwind_init (gdbarch);
\r
580 /* Dump out the mn10300 specific architecture information. */
\r
583 mn10300_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
\r
585 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
\r
586 fprintf_unfiltered (file, "mn10300_dump_tdep: am33_mode = %d\n",
\r
591 _initialize_mn10300_tdep (void)
\r
593 gdbarch_register (bfd_arch_mn10300, mn10300_gdbarch_init, mn10300_dump_tdep);
\r