*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / mn10300-tdep.c
CommitLineData
342ee437
MS
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
74static int
75mn10300_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 */
121static int
122mn10300_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. */
161static void
162mn10300_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. */
191static void
192mn10300_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
224static char *
225register_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
233static const char *
234mn10300_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
246static const char *
247am33_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
259static struct type *
260mn10300_register_type (struct gdbarch *gdbarch, int reg)
261{
262 return builtin_type_int;
263}
264
265static CORE_ADDR
266mn10300_read_pc (ptid_t ptid)
267{
268 return read_register_pid (E_PC_REGNUM, ptid);
269}
270
271static void
272mn10300_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
284const static unsigned char *
285mn10300_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
295static CORE_ADDR
296mn10300_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. */
305struct trad_frame_cache *
306mn10300_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. */
328static struct frame_id
329mn10300_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. */
337static void
338mn10300_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
348static void
349mn10300_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
366static const struct frame_unwind mn10300_frame_unwind = {
367 NORMAL_FRAME,
368 mn10300_frame_this_id,
369 mn10300_frame_prev_register
370};
371
372static CORE_ADDR
373mn10300_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
382static const struct frame_unwind *
383mn10300_frame_sniffer (struct frame_info *next_frame)
384{
385 return &mn10300_frame_unwind;
386}
387
388static 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
395static CORE_ADDR
396mn10300_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
404static CORE_ADDR
405mn10300_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
413static void
414mn10300_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
431static CORE_ADDR
432mn10300_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
516static struct gdbarch *
517mn10300_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
583static void
584mn10300_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
591void
592_initialize_mn10300_tdep (void)
593{
594 gdbarch_register (bfd_arch_mn10300, mn10300_gdbarch_init, mn10300_dump_tdep);
595}
596
This page took 0.054557 seconds and 4 git commands to generate.