2013-03-12 Sebastian Huber <sebastian.huber@embedded-brains.de>
[binutils-gdb.git] / gdb / m32r-tdep.c
blobad752ce5749c8cd89dc47e5ea6ca7f078fd2f1c0
1 /* Target-dependent code for Renesas M32R, for GDB.
3 Copyright (C) 1996-2013 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
20 #include "defs.h"
21 #include "frame.h"
22 #include "frame-unwind.h"
23 #include "frame-base.h"
24 #include "symtab.h"
25 #include "gdbtypes.h"
26 #include "gdbcmd.h"
27 #include "gdbcore.h"
28 #include "gdb_string.h"
29 #include "value.h"
30 #include "inferior.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "osabi.h"
34 #include "language.h"
35 #include "arch-utils.h"
36 #include "regcache.h"
37 #include "trad-frame.h"
38 #include "dis-asm.h"
40 #include "gdb_assert.h"
42 #include "m32r-tdep.h"
44 /* Local functions */
46 extern void _initialize_m32r_tdep (void);
48 static CORE_ADDR
49 m32r_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
51 /* Align to the size of an instruction (so that they can safely be
52 pushed onto the stack. */
53 return sp & ~3;
57 /* Breakpoints
59 The little endian mode of M32R is unique. In most of architectures,
60 two 16-bit instructions, A and B, are placed as the following:
62 Big endian:
63 A0 A1 B0 B1
65 Little endian:
66 A1 A0 B1 B0
68 In M32R, they are placed like this:
70 Big endian:
71 A0 A1 B0 B1
73 Little endian:
74 B1 B0 A1 A0
76 This is because M32R always fetches instructions in 32-bit.
78 The following functions take care of this behavior. */
80 static int
81 m32r_memory_insert_breakpoint (struct gdbarch *gdbarch,
82 struct bp_target_info *bp_tgt)
84 CORE_ADDR addr = bp_tgt->placed_address;
85 int val;
86 gdb_byte buf[4];
87 gdb_byte contents_cache[4];
88 gdb_byte bp_entry[] = { 0x10, 0xf1 }; /* dpt */
90 /* Save the memory contents. */
91 val = target_read_memory (addr & 0xfffffffc, contents_cache, 4);
92 if (val != 0)
93 return val; /* return error */
95 memcpy (bp_tgt->shadow_contents, contents_cache, 4);
96 bp_tgt->placed_size = bp_tgt->shadow_len = 4;
98 /* Determine appropriate breakpoint contents and size for this address. */
99 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
101 if ((addr & 3) == 0)
103 buf[0] = bp_entry[0];
104 buf[1] = bp_entry[1];
105 buf[2] = contents_cache[2] & 0x7f;
106 buf[3] = contents_cache[3];
108 else
110 buf[0] = contents_cache[0];
111 buf[1] = contents_cache[1];
112 buf[2] = bp_entry[0];
113 buf[3] = bp_entry[1];
116 else /* little-endian */
118 if ((addr & 3) == 0)
120 buf[0] = contents_cache[0];
121 buf[1] = contents_cache[1] & 0x7f;
122 buf[2] = bp_entry[1];
123 buf[3] = bp_entry[0];
125 else
127 buf[0] = bp_entry[1];
128 buf[1] = bp_entry[0];
129 buf[2] = contents_cache[2];
130 buf[3] = contents_cache[3];
134 /* Write the breakpoint. */
135 val = target_write_memory (addr & 0xfffffffc, buf, 4);
136 return val;
139 static int
140 m32r_memory_remove_breakpoint (struct gdbarch *gdbarch,
141 struct bp_target_info *bp_tgt)
143 CORE_ADDR addr = bp_tgt->placed_address;
144 int val;
145 gdb_byte buf[4];
146 gdb_byte *contents_cache = bp_tgt->shadow_contents;
148 buf[0] = contents_cache[0];
149 buf[1] = contents_cache[1];
150 buf[2] = contents_cache[2];
151 buf[3] = contents_cache[3];
153 /* Remove parallel bit. */
154 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
156 if ((buf[0] & 0x80) == 0 && (buf[2] & 0x80) != 0)
157 buf[2] &= 0x7f;
159 else /* little-endian */
161 if ((buf[3] & 0x80) == 0 && (buf[1] & 0x80) != 0)
162 buf[1] &= 0x7f;
165 /* Write contents. */
166 val = target_write_raw_memory (addr & 0xfffffffc, buf, 4);
167 return val;
170 static const gdb_byte *
171 m32r_breakpoint_from_pc (struct gdbarch *gdbarch,
172 CORE_ADDR *pcptr, int *lenptr)
174 static gdb_byte be_bp_entry[] = {
175 0x10, 0xf1, 0x70, 0x00
176 }; /* dpt -> nop */
177 static gdb_byte le_bp_entry[] = {
178 0x00, 0x70, 0xf1, 0x10
179 }; /* dpt -> nop */
180 gdb_byte *bp;
182 /* Determine appropriate breakpoint. */
183 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
185 if ((*pcptr & 3) == 0)
187 bp = be_bp_entry;
188 *lenptr = 4;
190 else
192 bp = be_bp_entry;
193 *lenptr = 2;
196 else
198 if ((*pcptr & 3) == 0)
200 bp = le_bp_entry;
201 *lenptr = 4;
203 else
205 bp = le_bp_entry + 2;
206 *lenptr = 2;
210 return bp;
214 char *m32r_register_names[] = {
215 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
216 "r8", "r9", "r10", "r11", "r12", "fp", "lr", "sp",
217 "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch",
218 "evb"
221 static const char *
222 m32r_register_name (struct gdbarch *gdbarch, int reg_nr)
224 if (reg_nr < 0)
225 return NULL;
226 if (reg_nr >= M32R_NUM_REGS)
227 return NULL;
228 return m32r_register_names[reg_nr];
232 /* Return the GDB type object for the "standard" data type
233 of data in register N. */
235 static struct type *
236 m32r_register_type (struct gdbarch *gdbarch, int reg_nr)
238 if (reg_nr == M32R_PC_REGNUM)
239 return builtin_type (gdbarch)->builtin_func_ptr;
240 else if (reg_nr == M32R_SP_REGNUM || reg_nr == M32R_FP_REGNUM)
241 return builtin_type (gdbarch)->builtin_data_ptr;
242 else
243 return builtin_type (gdbarch)->builtin_int32;
247 /* Write into appropriate registers a function return value
248 of type TYPE, given in virtual format.
250 Things always get returned in RET1_REGNUM, RET2_REGNUM. */
252 static void
253 m32r_store_return_value (struct type *type, struct regcache *regcache,
254 const void *valbuf)
256 struct gdbarch *gdbarch = get_regcache_arch (regcache);
257 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
258 CORE_ADDR regval;
259 int len = TYPE_LENGTH (type);
261 regval = extract_unsigned_integer (valbuf, len > 4 ? 4 : len, byte_order);
262 regcache_cooked_write_unsigned (regcache, RET1_REGNUM, regval);
264 if (len > 4)
266 regval = extract_unsigned_integer ((gdb_byte *) valbuf + 4,
267 len - 4, byte_order);
268 regcache_cooked_write_unsigned (regcache, RET1_REGNUM + 1, regval);
272 /* This is required by skip_prologue. The results of decoding a prologue
273 should be cached because this thrashing is getting nuts. */
275 static int
276 decode_prologue (struct gdbarch *gdbarch,
277 CORE_ADDR start_pc, CORE_ADDR scan_limit,
278 CORE_ADDR *pl_endptr, unsigned long *framelength)
280 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
281 unsigned long framesize;
282 int insn;
283 int op1;
284 CORE_ADDR after_prologue = 0;
285 CORE_ADDR after_push = 0;
286 CORE_ADDR after_stack_adjust = 0;
287 CORE_ADDR current_pc;
288 LONGEST return_value;
290 framesize = 0;
291 after_prologue = 0;
293 for (current_pc = start_pc; current_pc < scan_limit; current_pc += 2)
295 /* Check if current pc's location is readable. */
296 if (!safe_read_memory_integer (current_pc, 2, byte_order, &return_value))
297 return -1;
299 insn = read_memory_unsigned_integer (current_pc, 2, byte_order);
301 if (insn == 0x0000)
302 break;
304 /* If this is a 32 bit instruction, we dont want to examine its
305 immediate data as though it were an instruction. */
306 if (current_pc & 0x02)
308 /* Decode this instruction further. */
309 insn &= 0x7fff;
311 else
313 if (insn & 0x8000)
315 if (current_pc == scan_limit)
316 scan_limit += 2; /* extend the search */
318 current_pc += 2; /* skip the immediate data */
320 /* Check if current pc's location is readable. */
321 if (!safe_read_memory_integer (current_pc, 2, byte_order,
322 &return_value))
323 return -1;
325 if (insn == 0x8faf) /* add3 sp, sp, xxxx */
326 /* add 16 bit sign-extended offset */
328 framesize +=
329 -((short) read_memory_unsigned_integer (current_pc,
330 2, byte_order));
332 else
334 if (((insn >> 8) == 0xe4) /* ld24 r4, xxxxxx; sub sp, r4 */
335 && safe_read_memory_integer (current_pc + 2,
336 2, byte_order,
337 &return_value)
338 && read_memory_unsigned_integer (current_pc + 2,
339 2, byte_order)
340 == 0x0f24)
342 /* Subtract 24 bit sign-extended negative-offset. */
343 insn = read_memory_unsigned_integer (current_pc - 2,
344 4, byte_order);
345 if (insn & 0x00800000) /* sign extend */
346 insn |= 0xff000000; /* negative */
347 else
348 insn &= 0x00ffffff; /* positive */
349 framesize += insn;
352 after_push = current_pc + 2;
353 continue;
356 op1 = insn & 0xf000; /* Isolate just the first nibble. */
358 if ((insn & 0xf0ff) == 0x207f)
359 { /* st reg, @-sp */
360 int regno;
361 framesize += 4;
362 regno = ((insn >> 8) & 0xf);
363 after_prologue = 0;
364 continue;
366 if ((insn >> 8) == 0x4f) /* addi sp, xx */
367 /* Add 8 bit sign-extended offset. */
369 int stack_adjust = (signed char) (insn & 0xff);
371 /* there are probably two of these stack adjustments:
372 1) A negative one in the prologue, and
373 2) A positive one in the epilogue.
374 We are only interested in the first one. */
376 if (stack_adjust < 0)
378 framesize -= stack_adjust;
379 after_prologue = 0;
380 /* A frameless function may have no "mv fp, sp".
381 In that case, this is the end of the prologue. */
382 after_stack_adjust = current_pc + 2;
384 continue;
386 if (insn == 0x1d8f)
387 { /* mv fp, sp */
388 after_prologue = current_pc + 2;
389 break; /* end of stack adjustments */
392 /* Nop looks like a branch, continue explicitly. */
393 if (insn == 0x7000)
395 after_prologue = current_pc + 2;
396 continue; /* nop occurs between pushes. */
398 /* End of prolog if any of these are trap instructions. */
399 if ((insn & 0xfff0) == 0x10f0)
401 after_prologue = current_pc;
402 break;
404 /* End of prolog if any of these are branch instructions. */
405 if ((op1 == 0x7000) || (op1 == 0xb000) || (op1 == 0xf000))
407 after_prologue = current_pc;
408 continue;
410 /* Some of the branch instructions are mixed with other types. */
411 if (op1 == 0x1000)
413 int subop = insn & 0x0ff0;
414 if ((subop == 0x0ec0) || (subop == 0x0fc0))
416 after_prologue = current_pc;
417 continue; /* jmp , jl */
422 if (framelength)
423 *framelength = framesize;
425 if (current_pc >= scan_limit)
427 if (pl_endptr)
429 if (after_stack_adjust != 0)
430 /* We did not find a "mv fp,sp", but we DID find
431 a stack_adjust. Is it safe to use that as the
432 end of the prologue? I just don't know. */
434 *pl_endptr = after_stack_adjust;
436 else if (after_push != 0)
437 /* We did not find a "mv fp,sp", but we DID find
438 a push. Is it safe to use that as the
439 end of the prologue? I just don't know. */
441 *pl_endptr = after_push;
443 else
444 /* We reached the end of the loop without finding the end
445 of the prologue. No way to win -- we should report
446 failure. The way we do that is to return the original
447 start_pc. GDB will set a breakpoint at the start of
448 the function (etc.) */
449 *pl_endptr = start_pc;
451 return 0;
454 if (after_prologue == 0)
455 after_prologue = current_pc;
457 if (pl_endptr)
458 *pl_endptr = after_prologue;
460 return 0;
461 } /* decode_prologue */
463 /* Function: skip_prologue
464 Find end of function prologue. */
466 #define DEFAULT_SEARCH_LIMIT 128
468 static CORE_ADDR
469 m32r_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
471 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
472 CORE_ADDR func_addr, func_end;
473 struct symtab_and_line sal;
474 LONGEST return_value;
476 /* See what the symbol table says. */
478 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
480 sal = find_pc_line (func_addr, 0);
482 if (sal.line != 0 && sal.end <= func_end)
484 func_end = sal.end;
486 else
487 /* Either there's no line info, or the line after the prologue is after
488 the end of the function. In this case, there probably isn't a
489 prologue. */
491 func_end = min (func_end, func_addr + DEFAULT_SEARCH_LIMIT);
494 else
495 func_end = pc + DEFAULT_SEARCH_LIMIT;
497 /* If pc's location is not readable, just quit. */
498 if (!safe_read_memory_integer (pc, 4, byte_order, &return_value))
499 return pc;
501 /* Find the end of prologue. */
502 if (decode_prologue (gdbarch, pc, func_end, &sal.end, NULL) < 0)
503 return pc;
505 return sal.end;
508 struct m32r_unwind_cache
510 /* The previous frame's inner most stack address. Used as this
511 frame ID's stack_addr. */
512 CORE_ADDR prev_sp;
513 /* The frame's base, optionally used by the high-level debug info. */
514 CORE_ADDR base;
515 int size;
516 /* How far the SP and r13 (FP) have been offset from the start of
517 the stack frame (as defined by the previous frame's stack
518 pointer). */
519 LONGEST sp_offset;
520 LONGEST r13_offset;
521 int uses_frame;
522 /* Table indicating the location of each and every register. */
523 struct trad_frame_saved_reg *saved_regs;
526 /* Put here the code to store, into fi->saved_regs, the addresses of
527 the saved registers of frame described by FRAME_INFO. This
528 includes special registers such as pc and fp saved in special ways
529 in the stack frame. sp is even more special: the address we return
530 for it IS the sp for the next frame. */
532 static struct m32r_unwind_cache *
533 m32r_frame_unwind_cache (struct frame_info *this_frame,
534 void **this_prologue_cache)
536 CORE_ADDR pc, scan_limit;
537 ULONGEST prev_sp;
538 ULONGEST this_base;
539 unsigned long op;
540 int i;
541 struct m32r_unwind_cache *info;
544 if ((*this_prologue_cache))
545 return (*this_prologue_cache);
547 info = FRAME_OBSTACK_ZALLOC (struct m32r_unwind_cache);
548 (*this_prologue_cache) = info;
549 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
551 info->size = 0;
552 info->sp_offset = 0;
553 info->uses_frame = 0;
555 scan_limit = get_frame_pc (this_frame);
556 for (pc = get_frame_func (this_frame);
557 pc > 0 && pc < scan_limit; pc += 2)
559 if ((pc & 2) == 0)
561 op = get_frame_memory_unsigned (this_frame, pc, 4);
562 if ((op & 0x80000000) == 0x80000000)
564 /* 32-bit instruction */
565 if ((op & 0xffff0000) == 0x8faf0000)
567 /* add3 sp,sp,xxxx */
568 short n = op & 0xffff;
569 info->sp_offset += n;
571 else if (((op >> 8) == 0xe4)
572 && get_frame_memory_unsigned (this_frame, pc + 2,
573 2) == 0x0f24)
575 /* ld24 r4, xxxxxx; sub sp, r4 */
576 unsigned long n = op & 0xffffff;
577 info->sp_offset += n;
578 pc += 2; /* skip sub instruction */
581 if (pc == scan_limit)
582 scan_limit += 2; /* extend the search */
583 pc += 2; /* skip the immediate data */
584 continue;
588 /* 16-bit instructions */
589 op = get_frame_memory_unsigned (this_frame, pc, 2) & 0x7fff;
590 if ((op & 0xf0ff) == 0x207f)
592 /* st rn, @-sp */
593 int regno = ((op >> 8) & 0xf);
594 info->sp_offset -= 4;
595 info->saved_regs[regno].addr = info->sp_offset;
597 else if ((op & 0xff00) == 0x4f00)
599 /* addi sp, xx */
600 int n = (signed char) (op & 0xff);
601 info->sp_offset += n;
603 else if (op == 0x1d8f)
605 /* mv fp, sp */
606 info->uses_frame = 1;
607 info->r13_offset = info->sp_offset;
608 break; /* end of stack adjustments */
610 else if ((op & 0xfff0) == 0x10f0)
612 /* End of prologue if this is a trap instruction. */
613 break; /* End of stack adjustments. */
617 info->size = -info->sp_offset;
619 /* Compute the previous frame's stack pointer (which is also the
620 frame's ID's stack address), and this frame's base pointer. */
621 if (info->uses_frame)
623 /* The SP was moved to the FP. This indicates that a new frame
624 was created. Get THIS frame's FP value by unwinding it from
625 the next frame. */
626 this_base = get_frame_register_unsigned (this_frame, M32R_FP_REGNUM);
627 /* The FP points at the last saved register. Adjust the FP back
628 to before the first saved register giving the SP. */
629 prev_sp = this_base + info->size;
631 else
633 /* Assume that the FP is this frame's SP but with that pushed
634 stack space added back. */
635 this_base = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
636 prev_sp = this_base + info->size;
639 /* Convert that SP/BASE into real addresses. */
640 info->prev_sp = prev_sp;
641 info->base = this_base;
643 /* Adjust all the saved registers so that they contain addresses and
644 not offsets. */
645 for (i = 0; i < gdbarch_num_regs (get_frame_arch (this_frame)) - 1; i++)
646 if (trad_frame_addr_p (info->saved_regs, i))
647 info->saved_regs[i].addr = (info->prev_sp + info->saved_regs[i].addr);
649 /* The call instruction moves the caller's PC in the callee's LR.
650 Since this is an unwind, do the reverse. Copy the location of LR
651 into PC (the address / regnum) so that a request for PC will be
652 converted into a request for the LR. */
653 info->saved_regs[M32R_PC_REGNUM] = info->saved_regs[LR_REGNUM];
655 /* The previous frame's SP needed to be computed. Save the computed
656 value. */
657 trad_frame_set_value (info->saved_regs, M32R_SP_REGNUM, prev_sp);
659 return info;
662 static CORE_ADDR
663 m32r_read_pc (struct regcache *regcache)
665 ULONGEST pc;
666 regcache_cooked_read_unsigned (regcache, M32R_PC_REGNUM, &pc);
667 return pc;
670 static void
671 m32r_write_pc (struct regcache *regcache, CORE_ADDR val)
673 regcache_cooked_write_unsigned (regcache, M32R_PC_REGNUM, val);
676 static CORE_ADDR
677 m32r_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
679 return frame_unwind_register_unsigned (next_frame, M32R_SP_REGNUM);
683 static CORE_ADDR
684 m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
685 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
686 struct value **args, CORE_ADDR sp, int struct_return,
687 CORE_ADDR struct_addr)
689 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
690 int stack_offset, stack_alloc;
691 int argreg = ARG1_REGNUM;
692 int argnum;
693 struct type *type;
694 enum type_code typecode;
695 CORE_ADDR regval;
696 gdb_byte *val;
697 gdb_byte valbuf[MAX_REGISTER_SIZE];
698 int len;
700 /* First force sp to a 4-byte alignment. */
701 sp = sp & ~3;
703 /* Set the return address. For the m32r, the return breakpoint is
704 always at BP_ADDR. */
705 regcache_cooked_write_unsigned (regcache, LR_REGNUM, bp_addr);
707 /* If STRUCT_RETURN is true, then the struct return address (in
708 STRUCT_ADDR) will consume the first argument-passing register.
709 Both adjust the register count and store that value. */
710 if (struct_return)
712 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
713 argreg++;
716 /* Now make sure there's space on the stack. */
717 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
718 stack_alloc += ((TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3);
719 sp -= stack_alloc; /* Make room on stack for args. */
721 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
723 type = value_type (args[argnum]);
724 typecode = TYPE_CODE (type);
725 len = TYPE_LENGTH (type);
727 memset (valbuf, 0, sizeof (valbuf));
729 /* Passes structures that do not fit in 2 registers by reference. */
730 if (len > 8
731 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
733 store_unsigned_integer (valbuf, 4, byte_order,
734 value_address (args[argnum]));
735 typecode = TYPE_CODE_PTR;
736 len = 4;
737 val = valbuf;
739 else if (len < 4)
741 /* Value gets right-justified in the register or stack word. */
742 memcpy (valbuf + (register_size (gdbarch, argreg) - len),
743 (gdb_byte *) value_contents (args[argnum]), len);
744 val = valbuf;
746 else
747 val = (gdb_byte *) value_contents (args[argnum]);
749 while (len > 0)
751 if (argreg > ARGN_REGNUM)
753 /* Must go on the stack. */
754 write_memory (sp + stack_offset, val, 4);
755 stack_offset += 4;
757 else if (argreg <= ARGN_REGNUM)
759 /* There's room in a register. */
760 regval =
761 extract_unsigned_integer (val,
762 register_size (gdbarch, argreg),
763 byte_order);
764 regcache_cooked_write_unsigned (regcache, argreg++, regval);
767 /* Store the value 4 bytes at a time. This means that things
768 larger than 4 bytes may go partly in registers and partly
769 on the stack. */
770 len -= register_size (gdbarch, argreg);
771 val += register_size (gdbarch, argreg);
775 /* Finally, update the SP register. */
776 regcache_cooked_write_unsigned (regcache, M32R_SP_REGNUM, sp);
778 return sp;
782 /* Given a return value in `regbuf' with a type `valtype',
783 extract and copy its value into `valbuf'. */
785 static void
786 m32r_extract_return_value (struct type *type, struct regcache *regcache,
787 void *dst)
789 struct gdbarch *gdbarch = get_regcache_arch (regcache);
790 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
791 bfd_byte *valbuf = dst;
792 int len = TYPE_LENGTH (type);
793 ULONGEST tmp;
795 /* By using store_unsigned_integer we avoid having to do
796 anything special for small big-endian values. */
797 regcache_cooked_read_unsigned (regcache, RET1_REGNUM, &tmp);
798 store_unsigned_integer (valbuf, (len > 4 ? len - 4 : len), byte_order, tmp);
800 /* Ignore return values more than 8 bytes in size because the m32r
801 returns anything more than 8 bytes in the stack. */
802 if (len > 4)
804 regcache_cooked_read_unsigned (regcache, RET1_REGNUM + 1, &tmp);
805 store_unsigned_integer (valbuf + len - 4, 4, byte_order, tmp);
809 static enum return_value_convention
810 m32r_return_value (struct gdbarch *gdbarch, struct value *function,
811 struct type *valtype, struct regcache *regcache,
812 gdb_byte *readbuf, const gdb_byte *writebuf)
814 if (TYPE_LENGTH (valtype) > 8)
815 return RETURN_VALUE_STRUCT_CONVENTION;
816 else
818 if (readbuf != NULL)
819 m32r_extract_return_value (valtype, regcache, readbuf);
820 if (writebuf != NULL)
821 m32r_store_return_value (valtype, regcache, writebuf);
822 return RETURN_VALUE_REGISTER_CONVENTION;
828 static CORE_ADDR
829 m32r_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
831 return frame_unwind_register_unsigned (next_frame, M32R_PC_REGNUM);
834 /* Given a GDB frame, determine the address of the calling function's
835 frame. This will be used to create a new GDB frame struct. */
837 static void
838 m32r_frame_this_id (struct frame_info *this_frame,
839 void **this_prologue_cache, struct frame_id *this_id)
841 struct m32r_unwind_cache *info
842 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
843 CORE_ADDR base;
844 CORE_ADDR func;
845 struct minimal_symbol *msym_stack;
846 struct frame_id id;
848 /* The FUNC is easy. */
849 func = get_frame_func (this_frame);
851 /* Check if the stack is empty. */
852 msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
853 if (msym_stack && info->base == SYMBOL_VALUE_ADDRESS (msym_stack))
854 return;
856 /* Hopefully the prologue analysis either correctly determined the
857 frame's base (which is the SP from the previous frame), or set
858 that base to "NULL". */
859 base = info->prev_sp;
860 if (base == 0)
861 return;
863 id = frame_id_build (base, func);
864 (*this_id) = id;
867 static struct value *
868 m32r_frame_prev_register (struct frame_info *this_frame,
869 void **this_prologue_cache, int regnum)
871 struct m32r_unwind_cache *info
872 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
873 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
876 static const struct frame_unwind m32r_frame_unwind = {
877 NORMAL_FRAME,
878 default_frame_unwind_stop_reason,
879 m32r_frame_this_id,
880 m32r_frame_prev_register,
881 NULL,
882 default_frame_sniffer
885 static CORE_ADDR
886 m32r_frame_base_address (struct frame_info *this_frame, void **this_cache)
888 struct m32r_unwind_cache *info
889 = m32r_frame_unwind_cache (this_frame, this_cache);
890 return info->base;
893 static const struct frame_base m32r_frame_base = {
894 &m32r_frame_unwind,
895 m32r_frame_base_address,
896 m32r_frame_base_address,
897 m32r_frame_base_address
900 /* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
901 frame. The frame ID's base needs to match the TOS value saved by
902 save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint. */
904 static struct frame_id
905 m32r_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
907 CORE_ADDR sp = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
908 return frame_id_build (sp, get_frame_pc (this_frame));
912 static gdbarch_init_ftype m32r_gdbarch_init;
914 static struct gdbarch *
915 m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
917 struct gdbarch *gdbarch;
918 struct gdbarch_tdep *tdep;
920 /* If there is already a candidate, use it. */
921 arches = gdbarch_list_lookup_by_info (arches, &info);
922 if (arches != NULL)
923 return arches->gdbarch;
925 /* Allocate space for the new architecture. */
926 tdep = XMALLOC (struct gdbarch_tdep);
927 gdbarch = gdbarch_alloc (&info, tdep);
929 set_gdbarch_read_pc (gdbarch, m32r_read_pc);
930 set_gdbarch_write_pc (gdbarch, m32r_write_pc);
931 set_gdbarch_unwind_sp (gdbarch, m32r_unwind_sp);
933 set_gdbarch_num_regs (gdbarch, M32R_NUM_REGS);
934 set_gdbarch_sp_regnum (gdbarch, M32R_SP_REGNUM);
935 set_gdbarch_register_name (gdbarch, m32r_register_name);
936 set_gdbarch_register_type (gdbarch, m32r_register_type);
938 set_gdbarch_push_dummy_call (gdbarch, m32r_push_dummy_call);
939 set_gdbarch_return_value (gdbarch, m32r_return_value);
941 set_gdbarch_skip_prologue (gdbarch, m32r_skip_prologue);
942 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
943 set_gdbarch_breakpoint_from_pc (gdbarch, m32r_breakpoint_from_pc);
944 set_gdbarch_memory_insert_breakpoint (gdbarch,
945 m32r_memory_insert_breakpoint);
946 set_gdbarch_memory_remove_breakpoint (gdbarch,
947 m32r_memory_remove_breakpoint);
949 set_gdbarch_frame_align (gdbarch, m32r_frame_align);
951 frame_base_set_default (gdbarch, &m32r_frame_base);
953 /* Methods for saving / extracting a dummy frame's ID. The ID's
954 stack address must match the SP value returned by
955 PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
956 set_gdbarch_dummy_id (gdbarch, m32r_dummy_id);
958 /* Return the unwound PC value. */
959 set_gdbarch_unwind_pc (gdbarch, m32r_unwind_pc);
961 set_gdbarch_print_insn (gdbarch, print_insn_m32r);
963 /* Hook in ABI-specific overrides, if they have been registered. */
964 gdbarch_init_osabi (info, gdbarch);
966 /* Hook in the default unwinders. */
967 frame_unwind_append_unwinder (gdbarch, &m32r_frame_unwind);
969 /* Support simple overlay manager. */
970 set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
972 return gdbarch;
975 void
976 _initialize_m32r_tdep (void)
978 register_gdbarch_init (bfd_arch_m32r, m32r_gdbarch_init);