2005-03-21 Michael Snyder <msnyder@redhat.com>
[external/binutils.git] / gdb / mn10300-tdep.c
1 /* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger.
2
3    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free
4    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 2 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22
23 /* MVS Notes:
24
25    To get from 1.1 to 1.2, add:
26    use_struct_convention
27    store_return_value
28    extract_return_value
29    extract_struct_value_address
30    
31    Make sure to use regcache.  */
32
33 /* MVS Notes:
34
35    Apparently cannot run without a stub placeholder for unwind_dummy_id.  
36 */
37
38 /* MVS Notes:
39
40    To get from 1.2 to 1.3, add:
41    read_pc, write_pc
42    frame_unwind_init
43    struct mn10300_unwind_cache
44    unwind_pc
45    unwind_dummy_id
46    frame_this_id
47    frame_prev_register
48    frame_sniffer (struct mn10300_frame_unwind)
49 */
50
51 #include "defs.h"
52 #include "arch-utils.h"
53 #include "dis-asm.h"
54 #include "gdbtypes.h"
55 #include "regcache.h"
56 #include "gdb_string.h"
57 #include "gdb_assert.h"
58 #include "gdbcore.h"    /* for write_memory_unsigned_integer */
59 #include "value.h"
60 #include "gdbtypes.h"
61 #include "frame.h"
62 #include "frame-unwind.h"
63 #include "frame-base.h"
64 #include "trad-frame.h"
65 #include "symtab.h"
66 #include "dwarf2-frame.h"
67 #include "regcache.h"
68
69 #include "mn10300-tdep.h"
70
71
72 /* Compute the alignment required by a type.  */
73
74 static int
75 mn10300_type_align (struct type *type)
76 {
77   int i, align = 1;
78
79   switch (TYPE_CODE (type))
80     {
81     case TYPE_CODE_INT:
82     case TYPE_CODE_ENUM:
83     case TYPE_CODE_SET:
84     case TYPE_CODE_RANGE:
85     case TYPE_CODE_CHAR:
86     case TYPE_CODE_BOOL:
87     case TYPE_CODE_FLT:
88     case TYPE_CODE_PTR:
89     case TYPE_CODE_REF:
90       return TYPE_LENGTH (type);
91
92     case TYPE_CODE_COMPLEX:
93       return TYPE_LENGTH (type) / 2;
94
95     case TYPE_CODE_STRUCT:
96     case TYPE_CODE_UNION:
97       for (i = 0; i < TYPE_NFIELDS (type); i++)
98         {
99           int falign = mn10300_type_align (TYPE_FIELD_TYPE (type, i));
100           while (align < falign)
101             align <<= 1;
102         }
103       return align;
104
105     case TYPE_CODE_ARRAY:
106       /* HACK!  Structures containing arrays, even small ones, are not
107          elligible for returning in registers.  */
108       return 256;
109
110     case TYPE_CODE_TYPEDEF:
111       return mn10300_type_align (check_typedef (type));
112
113     default:
114       internal_error (__FILE__, __LINE__, _("bad switch"));
115     }
116 }
117
118 /* MVS note this is deprecated.  */
119 /* Should call_function allocate stack space for a struct return?  */
120 /* gcc_p unused */
121 static int
122 mn10300_use_struct_convention (int gcc_p, struct type *type)
123 {
124   /* Structures bigger than a pair of words can't be returned in
125      registers.  */
126   if (TYPE_LENGTH (type) > 8)
127     return 1;
128
129   switch (TYPE_CODE (type))
130     {
131     case TYPE_CODE_STRUCT:
132     case TYPE_CODE_UNION:
133       /* Structures with a single field are handled as the field
134          itself.  */
135       if (TYPE_NFIELDS (type) == 1)
136         return mn10300_use_struct_convention (gcc_p, 
137                                               TYPE_FIELD_TYPE (type, 0));
138
139       /* Structures with word or double-word size are passed in memory, as
140          long as they require at least word alignment.  */
141       if (mn10300_type_align (type) >= 4)
142         return 0;
143
144       return 1;
145
146       /* Arrays are addressable, so they're never returned in
147          registers.  This condition can only hold when the array is
148          the only field of a struct or union.  */
149     case TYPE_CODE_ARRAY:
150       return 1;
151
152     case TYPE_CODE_TYPEDEF:
153       return mn10300_use_struct_convention (gcc_p, check_typedef (type));
154
155     default:
156       return 0;
157     }
158 }
159
160 /* MVS note this is deprecated.  */
161 static void
162 mn10300_store_return_value (struct type *type,
163                             struct regcache *regcache, const void *valbuf)
164 {
165   struct gdbarch *gdbarch = get_regcache_arch (regcache);
166   int len = TYPE_LENGTH (type);
167   int reg, regsz;
168   
169   if (TYPE_CODE (type) == TYPE_CODE_PTR)
170     reg = 4;
171   else
172     reg = 0;
173
174   regsz = register_size (gdbarch, reg);
175
176   if (len <= regsz)
177     regcache_raw_write_part (regcache, reg, 0, len, valbuf);
178   else if (len <= 2 * regsz)
179     {
180       regcache_raw_write (regcache, reg, valbuf);
181       gdb_assert (regsz == register_size (gdbarch, reg + 1));
182       regcache_raw_write_part (regcache, reg+1, 0,
183                                len - regsz, (char *) valbuf + regsz);
184     }
185   else
186     internal_error (__FILE__, __LINE__,
187                     _("Cannot store return value %d bytes long."), len);
188 }
189
190 /* MVS note deprecated.  */
191 static void
192 mn10300_extract_return_value (struct type *type,
193                               struct regcache *regcache, void *valbuf)
194 {
195   struct gdbarch *gdbarch = get_regcache_arch (regcache);
196   char buf[MAX_REGISTER_SIZE];
197   int len = TYPE_LENGTH (type);
198   int reg, regsz;
199
200   if (TYPE_CODE (type) == TYPE_CODE_PTR)
201     reg = 4;
202   else
203     reg = 0;
204
205   regsz = register_size (gdbarch, reg);
206   if (len <= regsz)
207     {
208       regcache_raw_read (regcache, reg, buf);
209       memcpy (valbuf, buf, len);
210     }
211   else if (len <= 2 * regsz)
212     {
213       regcache_raw_read (regcache, reg, buf);
214       memcpy (valbuf, buf, regsz);
215       gdb_assert (regsz == register_size (gdbarch, reg + 1));
216       regcache_raw_read (regcache, reg + 1, buf);
217       memcpy ((char *) valbuf + regsz, buf, len - regsz);
218     }
219   else
220     internal_error (__FILE__, __LINE__,
221                     _("Cannot extract return value %d bytes long."), len);
222 }
223
224 static char *
225 register_name (int reg, char **regs, long sizeof_regs)
226 {
227   if (reg < 0 || reg >= sizeof_regs / sizeof (regs[0]))
228     return NULL;
229   else
230     return regs[reg];
231 }
232
233 static const char *
234 mn10300_generic_register_name (int reg)
235 {
236   static char *regs[] =
237   { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
238     "sp", "pc", "mdr", "psw", "lir", "lar", "", "",
239     "", "", "", "", "", "", "", "",
240     "", "", "", "", "", "", "", "fp"
241   };
242   return register_name (reg, regs, sizeof regs);
243 }
244
245
246 static const char *
247 am33_register_name (int reg)
248 {
249   static char *regs[] =
250   { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
251     "sp", "pc", "mdr", "psw", "lir", "lar", "",
252     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
253     "ssp", "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", ""
254   };
255   return register_name (reg, regs, sizeof regs);
256 }
257
258
259 static struct type *
260 mn10300_register_type (struct gdbarch *gdbarch, int reg)
261 {
262   return builtin_type_int;
263 }
264
265 static CORE_ADDR
266 mn10300_read_pc (ptid_t ptid)
267 {
268   return read_register_pid (E_PC_REGNUM, ptid);
269 }
270
271 static void
272 mn10300_write_pc (CORE_ADDR val, ptid_t ptid)
273 {
274   return write_register_pid (E_PC_REGNUM, val, ptid);
275 }
276
277 /* The breakpoint instruction must be the same size as the smallest
278    instruction in the instruction set.
279
280    The Matsushita mn10x00 processors have single byte instructions
281    so we need a single byte breakpoint.  Matsushita hasn't defined
282    one, so we defined it ourselves.  */
283
284 const static unsigned char *
285 mn10300_breakpoint_from_pc (CORE_ADDR *bp_addr, int *bp_size)
286 {
287   static char breakpoint[] = {0xff};
288   *bp_size = 1;
289   return breakpoint;
290 }
291
292 /* Function: skip_prologue
293    Return the address of the first inst past the prologue of the function.  */
294
295 static CORE_ADDR
296 mn10300_skip_prologue (CORE_ADDR pc)
297 {
298   /* FIXME: not implemented.  */
299   /* First approximation, try simply using skip_prologue_using_sal.  */
300   return skip_prologue_using_sal (pc);
301 }
302
303 /* Simple frame_unwind_cache.  
304    This finds the "extra info" for the frame.  */
305 struct trad_frame_cache *
306 mn10300_frame_unwind_cache (struct frame_info *next_frame,
307                             void **this_prologue_cache)
308 {
309   struct trad_frame_cache *cache;
310   CORE_ADDR pc;
311
312   if (*this_prologue_cache)
313     return (*this_prologue_cache);
314
315   cache = trad_frame_cache_zalloc (next_frame);
316   pc = gdbarch_unwind_pc (current_gdbarch, next_frame);
317   mn10300_analyze_prologue (next_frame, (void **) &cache, pc);
318
319   trad_frame_set_id (cache, 
320                      frame_id_build (trad_frame_get_this_base (cache), 
321                                      frame_func_unwind (next_frame)));
322
323   (*this_prologue_cache) = cache;
324   return cache;
325 }
326
327 /* Here is a dummy implementation.  */
328 static struct frame_id
329 mn10300_unwind_dummy_id (struct gdbarch *gdbarch,
330                          struct frame_info *next_frame)
331 {
332   return frame_id_build (frame_sp_unwind (next_frame), 
333                          frame_pc_unwind (next_frame));
334 }
335
336 /* Trad frame implementation.  */
337 static void
338 mn10300_frame_this_id (struct frame_info *next_frame,
339                        void **this_prologue_cache,
340                        struct frame_id *this_id)
341 {
342   struct trad_frame_cache *cache = 
343     mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
344
345   trad_frame_get_id (cache, this_id);
346 }
347
348 static void
349 mn10300_frame_prev_register (struct frame_info *next_frame,
350                              void **this_prologue_cache,
351                              int regnum, int *optimizedp,
352                              enum lval_type *lvalp, CORE_ADDR *addrp,
353                              int *realnump, void *bufferp)
354 {
355   struct trad_frame_cache *cache =
356     mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
357
358   trad_frame_get_register (cache, next_frame, regnum, optimizedp, 
359                            lvalp, addrp, realnump, bufferp);
360   /* Or...
361   trad_frame_get_prev_register (next_frame, cache->prev_regs, regnum, 
362                            optimizedp, lvalp, addrp, realnump, bufferp);
363   */
364 }
365
366 static const struct frame_unwind mn10300_frame_unwind = {
367   NORMAL_FRAME,
368   mn10300_frame_this_id, 
369   mn10300_frame_prev_register
370 };
371
372 static CORE_ADDR
373 mn10300_frame_base_address (struct frame_info *next_frame,
374                             void **this_prologue_cache)
375 {
376   struct trad_frame_cache *cache = 
377     mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
378
379   return trad_frame_get_this_base (cache);
380 }
381
382 static const struct frame_unwind *
383 mn10300_frame_sniffer (struct frame_info *next_frame)
384 {
385   return &mn10300_frame_unwind;
386 }
387
388 static const struct frame_base mn10300_frame_base = {
389   &mn10300_frame_unwind, 
390   mn10300_frame_base_address, 
391   mn10300_frame_base_address,
392   mn10300_frame_base_address
393 };
394
395 static CORE_ADDR
396 mn10300_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
397 {
398   ULONGEST pc;
399
400   frame_unwind_unsigned_register (next_frame, E_PC_REGNUM, &pc);
401   return pc;
402 }
403
404 static CORE_ADDR
405 mn10300_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
406 {
407   ULONGEST sp;
408
409   frame_unwind_unsigned_register (next_frame, E_SP_REGNUM, &sp);
410   return sp;
411 }
412
413 static void
414 mn10300_frame_unwind_init (struct gdbarch *gdbarch)
415 {
416   frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
417   frame_unwind_append_sniffer (gdbarch, mn10300_frame_sniffer);
418   frame_base_set_default (gdbarch, &mn10300_frame_base);
419   set_gdbarch_unwind_dummy_id (gdbarch, mn10300_unwind_dummy_id);
420   set_gdbarch_unwind_pc (gdbarch, mn10300_unwind_pc);
421   set_gdbarch_unwind_sp (gdbarch, mn10300_unwind_sp);
422 }
423
424 /* Function: push_dummy_call
425  *
426  * Set up machine state for a target call, including
427  * function arguments, stack, return address, etc.
428  *
429  */
430
431 static CORE_ADDR
432 mn10300_push_dummy_call (struct gdbarch *gdbarch, 
433                          struct value *target_func,
434                          struct regcache *regcache,
435                          CORE_ADDR bp_addr, 
436                          int nargs, struct value **args,
437                          CORE_ADDR sp, 
438                          int struct_return,
439                          CORE_ADDR struct_addr)
440 {
441   const int push_size = register_size (gdbarch, E_PC_REGNUM);
442   int regs_used = struct_return ? 1 : 0;
443   int len, arg_len; 
444   int stack_offset = 0;
445   int argnum;
446   char *val;
447
448   /* FIXME temp, don't handle struct args at all.  */
449   if (struct_return)
450     error ("Target doesn't handle struct return");
451
452   /* This should be a nop, but align the stack just in case something
453      went wrong.  Stacks are four byte aligned on the mn10300.  */
454   sp &= ~3;
455
456   /* Now make space on the stack for the args.
457
458      XXX This doesn't appear to handle pass-by-invisible reference
459      arguments.  */
460   for (len = 0, argnum = 0; argnum < nargs; argnum++)
461     {
462       arg_len = (TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3;
463       if (TYPE_CODE (value_type (args[argnum])) == TYPE_CODE_STRUCT)
464         error ("Target does not handle struct args");
465       while (regs_used < 2 && arg_len > 0)
466         {
467           regs_used++;
468           arg_len -= push_size;
469         }
470       len += arg_len;
471     }
472
473   /* Allocate stack space.  */
474   sp -= len;
475
476   regs_used = struct_return ? 1 : 0;
477   /* Push all arguments onto the stack. */
478   for (argnum = 0; argnum < nargs; argnum++)
479     {
480       /* FIXME what about structs?  */
481       arg_len = TYPE_LENGTH (value_type (*args));
482       val = (char *) value_contents (*args);
483
484       while (regs_used < 2 && arg_len > 0)
485         {
486           write_register (regs_used, extract_unsigned_integer (val, 
487                                                                push_size));
488           val += push_size;
489           arg_len -= push_size;
490           regs_used++;
491         }
492
493       while (arg_len > 0)
494         {
495           write_memory (sp + stack_offset, val, push_size);
496           arg_len -= push_size;
497           val += push_size;
498           stack_offset += push_size;
499         }
500
501       args++;
502     }
503
504   /* Make space for the flushback area.  */
505   sp -= 8;
506
507   /* Push the return address that contains the magic breakpoint.  */
508   sp -= 4;
509   write_memory_unsigned_integer (sp, push_size, bp_addr);
510   /* Update $sp.  */
511   regcache_cooked_write_unsigned (regcache, E_SP_REGNUM, sp);
512   return sp;
513 }
514
515
516 static struct gdbarch *
517 mn10300_gdbarch_init (struct gdbarch_info info,
518                       struct gdbarch_list *arches)
519 {
520   struct gdbarch *gdbarch;
521   struct gdbarch_tdep *tdep;
522
523   arches = gdbarch_list_lookup_by_info (arches, &info);
524   if (arches != NULL)
525     return arches->gdbarch;
526
527   tdep = xmalloc (sizeof (struct gdbarch_tdep));
528   gdbarch = gdbarch_alloc (&info, tdep);
529
530   switch (info.bfd_arch_info->mach)
531     {
532     case 0:
533     case bfd_mach_mn10300:
534       set_gdbarch_register_name (gdbarch, mn10300_generic_register_name);
535       tdep->am33_mode = 0;
536       break;
537     case bfd_mach_am33:
538       set_gdbarch_register_name (gdbarch, am33_register_name);
539       tdep->am33_mode = 1;
540       break;
541     default:
542       internal_error (__FILE__, __LINE__,
543                       _("mn10300_gdbarch_init: Unknown mn10300 variant"));
544       break;
545     }
546
547   /* Registers.  */
548   set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
549   set_gdbarch_register_type (gdbarch, mn10300_register_type);
550   set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
551   set_gdbarch_read_pc (gdbarch, mn10300_read_pc);
552   set_gdbarch_write_pc (gdbarch, mn10300_write_pc);
553   set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
554   set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
555
556   /* Stack unwinding.  */
557   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
558   /* Breakpoints.  */
559   set_gdbarch_breakpoint_from_pc (gdbarch, mn10300_breakpoint_from_pc);
560   /* decr_pc_after_break? */
561   /* Disassembly.  */
562   set_gdbarch_print_insn (gdbarch, print_insn_mn10300);
563
564   /* Stage 2 */
565   /* MVS Note: at least the first one is deprecated!  */
566   set_gdbarch_deprecated_use_struct_convention (gdbarch, 
567                                                 mn10300_use_struct_convention);
568   set_gdbarch_store_return_value (gdbarch, mn10300_store_return_value);
569   set_gdbarch_extract_return_value (gdbarch, mn10300_extract_return_value);
570   
571   /* Stage 3 -- get target calls working.  */
572   set_gdbarch_push_dummy_call (gdbarch, mn10300_push_dummy_call);
573   /* set_gdbarch_return_value (store, extract) */
574
575
576   mn10300_frame_unwind_init (gdbarch);
577
578   return gdbarch;
579 }
580  
581 /* Dump out the mn10300 specific architecture information. */
582
583 static void
584 mn10300_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
585 {
586   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
587   fprintf_unfiltered (file, "mn10300_dump_tdep: am33_mode = %d\n",
588                       tdep->am33_mode);
589 }
590
591 void
592 _initialize_mn10300_tdep (void)
593 {
594   gdbarch_register (bfd_arch_mn10300, mn10300_gdbarch_init, mn10300_dump_tdep);
595 }
596