Fix dw2-ifort-parameter.exp on PPC64
[binutils-gdb.git] / gdb / m32r-tdep.c
blob838d3d9c9c2a175a5133c83c4dee2e784b4cdda2
1 /* Target-dependent code for Renesas M32R, for GDB.
3 Copyright (C) 1996-2014 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 <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"
39 #include "objfiles.h"
41 #include "gdb_assert.h"
43 #include "m32r-tdep.h"
45 /* Local functions */
47 extern void _initialize_m32r_tdep (void);
49 static CORE_ADDR
50 m32r_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
52 /* Align to the size of an instruction (so that they can safely be
53 pushed onto the stack. */
54 return sp & ~3;
58 /* Breakpoints
60 The little endian mode of M32R is unique. In most of architectures,
61 two 16-bit instructions, A and B, are placed as the following:
63 Big endian:
64 A0 A1 B0 B1
66 Little endian:
67 A1 A0 B1 B0
69 In M32R, they are placed like this:
71 Big endian:
72 A0 A1 B0 B1
74 Little endian:
75 B1 B0 A1 A0
77 This is because M32R always fetches instructions in 32-bit.
79 The following functions take care of this behavior. */
81 static int
82 m32r_memory_insert_breakpoint (struct gdbarch *gdbarch,
83 struct bp_target_info *bp_tgt)
85 CORE_ADDR addr = bp_tgt->placed_address;
86 int val;
87 gdb_byte buf[4];
88 gdb_byte contents_cache[4];
89 gdb_byte bp_entry[] = { 0x10, 0xf1 }; /* dpt */
91 /* Save the memory contents. */
92 val = target_read_memory (addr & 0xfffffffc, contents_cache, 4);
93 if (val != 0)
94 return val; /* return error */
96 memcpy (bp_tgt->shadow_contents, contents_cache, 4);
97 bp_tgt->placed_size = bp_tgt->shadow_len = 4;
99 /* Determine appropriate breakpoint contents and size for this address. */
100 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
102 if ((addr & 3) == 0)
104 buf[0] = bp_entry[0];
105 buf[1] = bp_entry[1];
106 buf[2] = contents_cache[2] & 0x7f;
107 buf[3] = contents_cache[3];
109 else
111 buf[0] = contents_cache[0];
112 buf[1] = contents_cache[1];
113 buf[2] = bp_entry[0];
114 buf[3] = bp_entry[1];
117 else /* little-endian */
119 if ((addr & 3) == 0)
121 buf[0] = contents_cache[0];
122 buf[1] = contents_cache[1] & 0x7f;
123 buf[2] = bp_entry[1];
124 buf[3] = bp_entry[0];
126 else
128 buf[0] = bp_entry[1];
129 buf[1] = bp_entry[0];
130 buf[2] = contents_cache[2];
131 buf[3] = contents_cache[3];
135 /* Write the breakpoint. */
136 val = target_write_memory (addr & 0xfffffffc, buf, 4);
137 return val;
140 static int
141 m32r_memory_remove_breakpoint (struct gdbarch *gdbarch,
142 struct bp_target_info *bp_tgt)
144 CORE_ADDR addr = bp_tgt->placed_address;
145 int val;
146 gdb_byte buf[4];
147 gdb_byte *contents_cache = bp_tgt->shadow_contents;
149 buf[0] = contents_cache[0];
150 buf[1] = contents_cache[1];
151 buf[2] = contents_cache[2];
152 buf[3] = contents_cache[3];
154 /* Remove parallel bit. */
155 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
157 if ((buf[0] & 0x80) == 0 && (buf[2] & 0x80) != 0)
158 buf[2] &= 0x7f;
160 else /* little-endian */
162 if ((buf[3] & 0x80) == 0 && (buf[1] & 0x80) != 0)
163 buf[1] &= 0x7f;
166 /* Write contents. */
167 val = target_write_raw_memory (addr & 0xfffffffc, buf, 4);
168 return val;
171 static const gdb_byte *
172 m32r_breakpoint_from_pc (struct gdbarch *gdbarch,
173 CORE_ADDR *pcptr, int *lenptr)
175 static gdb_byte be_bp_entry[] = {
176 0x10, 0xf1, 0x70, 0x00
177 }; /* dpt -> nop */
178 static gdb_byte le_bp_entry[] = {
179 0x00, 0x70, 0xf1, 0x10
180 }; /* dpt -> nop */
181 gdb_byte *bp;
183 /* Determine appropriate breakpoint. */
184 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
186 if ((*pcptr & 3) == 0)
188 bp = be_bp_entry;
189 *lenptr = 4;
191 else
193 bp = be_bp_entry;
194 *lenptr = 2;
197 else
199 if ((*pcptr & 3) == 0)
201 bp = le_bp_entry;
202 *lenptr = 4;
204 else
206 bp = le_bp_entry + 2;
207 *lenptr = 2;
211 return bp;
215 char *m32r_register_names[] = {
216 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
217 "r8", "r9", "r10", "r11", "r12", "fp", "lr", "sp",
218 "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch",
219 "evb"
222 static const char *
223 m32r_register_name (struct gdbarch *gdbarch, int reg_nr)
225 if (reg_nr < 0)
226 return NULL;
227 if (reg_nr >= M32R_NUM_REGS)
228 return NULL;
229 return m32r_register_names[reg_nr];
233 /* Return the GDB type object for the "standard" data type
234 of data in register N. */
236 static struct type *
237 m32r_register_type (struct gdbarch *gdbarch, int reg_nr)
239 if (reg_nr == M32R_PC_REGNUM)
240 return builtin_type (gdbarch)->builtin_func_ptr;
241 else if (reg_nr == M32R_SP_REGNUM || reg_nr == M32R_FP_REGNUM)
242 return builtin_type (gdbarch)->builtin_data_ptr;
243 else
244 return builtin_type (gdbarch)->builtin_int32;
248 /* Write into appropriate registers a function return value
249 of type TYPE, given in virtual format.
251 Things always get returned in RET1_REGNUM, RET2_REGNUM. */
253 static void
254 m32r_store_return_value (struct type *type, struct regcache *regcache,
255 const void *valbuf)
257 struct gdbarch *gdbarch = get_regcache_arch (regcache);
258 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
259 CORE_ADDR regval;
260 int len = TYPE_LENGTH (type);
262 regval = extract_unsigned_integer (valbuf, len > 4 ? 4 : len, byte_order);
263 regcache_cooked_write_unsigned (regcache, RET1_REGNUM, regval);
265 if (len > 4)
267 regval = extract_unsigned_integer ((gdb_byte *) valbuf + 4,
268 len - 4, byte_order);
269 regcache_cooked_write_unsigned (regcache, RET1_REGNUM + 1, regval);
273 /* This is required by skip_prologue. The results of decoding a prologue
274 should be cached because this thrashing is getting nuts. */
276 static int
277 decode_prologue (struct gdbarch *gdbarch,
278 CORE_ADDR start_pc, CORE_ADDR scan_limit,
279 CORE_ADDR *pl_endptr, unsigned long *framelength)
281 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
282 unsigned long framesize;
283 int insn;
284 int op1;
285 CORE_ADDR after_prologue = 0;
286 CORE_ADDR after_push = 0;
287 CORE_ADDR after_stack_adjust = 0;
288 CORE_ADDR current_pc;
289 LONGEST return_value;
291 framesize = 0;
292 after_prologue = 0;
294 for (current_pc = start_pc; current_pc < scan_limit; current_pc += 2)
296 /* Check if current pc's location is readable. */
297 if (!safe_read_memory_integer (current_pc, 2, byte_order, &return_value))
298 return -1;
300 insn = read_memory_unsigned_integer (current_pc, 2, byte_order);
302 if (insn == 0x0000)
303 break;
305 /* If this is a 32 bit instruction, we dont want to examine its
306 immediate data as though it were an instruction. */
307 if (current_pc & 0x02)
309 /* Decode this instruction further. */
310 insn &= 0x7fff;
312 else
314 if (insn & 0x8000)
316 if (current_pc == scan_limit)
317 scan_limit += 2; /* extend the search */
319 current_pc += 2; /* skip the immediate data */
321 /* Check if current pc's location is readable. */
322 if (!safe_read_memory_integer (current_pc, 2, byte_order,
323 &return_value))
324 return -1;
326 if (insn == 0x8faf) /* add3 sp, sp, xxxx */
327 /* add 16 bit sign-extended offset */
329 framesize +=
330 -((short) read_memory_unsigned_integer (current_pc,
331 2, byte_order));
333 else
335 if (((insn >> 8) == 0xe4) /* ld24 r4, xxxxxx; sub sp, r4 */
336 && safe_read_memory_integer (current_pc + 2,
337 2, byte_order,
338 &return_value)
339 && read_memory_unsigned_integer (current_pc + 2,
340 2, byte_order)
341 == 0x0f24)
343 /* Subtract 24 bit sign-extended negative-offset. */
344 insn = read_memory_unsigned_integer (current_pc - 2,
345 4, byte_order);
346 if (insn & 0x00800000) /* sign extend */
347 insn |= 0xff000000; /* negative */
348 else
349 insn &= 0x00ffffff; /* positive */
350 framesize += insn;
353 after_push = current_pc + 2;
354 continue;
357 op1 = insn & 0xf000; /* Isolate just the first nibble. */
359 if ((insn & 0xf0ff) == 0x207f)
360 { /* st reg, @-sp */
361 int regno;
362 framesize += 4;
363 regno = ((insn >> 8) & 0xf);
364 after_prologue = 0;
365 continue;
367 if ((insn >> 8) == 0x4f) /* addi sp, xx */
368 /* Add 8 bit sign-extended offset. */
370 int stack_adjust = (signed char) (insn & 0xff);
372 /* there are probably two of these stack adjustments:
373 1) A negative one in the prologue, and
374 2) A positive one in the epilogue.
375 We are only interested in the first one. */
377 if (stack_adjust < 0)
379 framesize -= stack_adjust;
380 after_prologue = 0;
381 /* A frameless function may have no "mv fp, sp".
382 In that case, this is the end of the prologue. */
383 after_stack_adjust = current_pc + 2;
385 continue;
387 if (insn == 0x1d8f)
388 { /* mv fp, sp */
389 after_prologue = current_pc + 2;
390 break; /* end of stack adjustments */
393 /* Nop looks like a branch, continue explicitly. */
394 if (insn == 0x7000)
396 after_prologue = current_pc + 2;
397 continue; /* nop occurs between pushes. */
399 /* End of prolog if any of these are trap instructions. */
400 if ((insn & 0xfff0) == 0x10f0)
402 after_prologue = current_pc;
403 break;
405 /* End of prolog if any of these are branch instructions. */
406 if ((op1 == 0x7000) || (op1 == 0xb000) || (op1 == 0xf000))
408 after_prologue = current_pc;
409 continue;
411 /* Some of the branch instructions are mixed with other types. */
412 if (op1 == 0x1000)
414 int subop = insn & 0x0ff0;
415 if ((subop == 0x0ec0) || (subop == 0x0fc0))
417 after_prologue = current_pc;
418 continue; /* jmp , jl */
423 if (framelength)
424 *framelength = framesize;
426 if (current_pc >= scan_limit)
428 if (pl_endptr)
430 if (after_stack_adjust != 0)
431 /* We did not find a "mv fp,sp", but we DID find
432 a stack_adjust. Is it safe to use that as the
433 end of the prologue? I just don't know. */
435 *pl_endptr = after_stack_adjust;
437 else if (after_push != 0)
438 /* We did not find a "mv fp,sp", but we DID find
439 a push. Is it safe to use that as the
440 end of the prologue? I just don't know. */
442 *pl_endptr = after_push;
444 else
445 /* We reached the end of the loop without finding the end
446 of the prologue. No way to win -- we should report
447 failure. The way we do that is to return the original
448 start_pc. GDB will set a breakpoint at the start of
449 the function (etc.) */
450 *pl_endptr = start_pc;
452 return 0;
455 if (after_prologue == 0)
456 after_prologue = current_pc;
458 if (pl_endptr)
459 *pl_endptr = after_prologue;
461 return 0;
462 } /* decode_prologue */
464 /* Function: skip_prologue
465 Find end of function prologue. */
467 #define DEFAULT_SEARCH_LIMIT 128
469 static CORE_ADDR
470 m32r_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
472 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
473 CORE_ADDR func_addr, func_end;
474 struct symtab_and_line sal;
475 LONGEST return_value;
477 /* See what the symbol table says. */
479 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
481 sal = find_pc_line (func_addr, 0);
483 if (sal.line != 0 && sal.end <= func_end)
485 func_end = sal.end;
487 else
488 /* Either there's no line info, or the line after the prologue is after
489 the end of the function. In this case, there probably isn't a
490 prologue. */
492 func_end = min (func_end, func_addr + DEFAULT_SEARCH_LIMIT);
495 else
496 func_end = pc + DEFAULT_SEARCH_LIMIT;
498 /* If pc's location is not readable, just quit. */
499 if (!safe_read_memory_integer (pc, 4, byte_order, &return_value))
500 return pc;
502 /* Find the end of prologue. */
503 if (decode_prologue (gdbarch, pc, func_end, &sal.end, NULL) < 0)
504 return pc;
506 return sal.end;
509 struct m32r_unwind_cache
511 /* The previous frame's inner most stack address. Used as this
512 frame ID's stack_addr. */
513 CORE_ADDR prev_sp;
514 /* The frame's base, optionally used by the high-level debug info. */
515 CORE_ADDR base;
516 int size;
517 /* How far the SP and r13 (FP) have been offset from the start of
518 the stack frame (as defined by the previous frame's stack
519 pointer). */
520 LONGEST sp_offset;
521 LONGEST r13_offset;
522 int uses_frame;
523 /* Table indicating the location of each and every register. */
524 struct trad_frame_saved_reg *saved_regs;
527 /* Put here the code to store, into fi->saved_regs, the addresses of
528 the saved registers of frame described by FRAME_INFO. This
529 includes special registers such as pc and fp saved in special ways
530 in the stack frame. sp is even more special: the address we return
531 for it IS the sp for the next frame. */
533 static struct m32r_unwind_cache *
534 m32r_frame_unwind_cache (struct frame_info *this_frame,
535 void **this_prologue_cache)
537 CORE_ADDR pc, scan_limit;
538 ULONGEST prev_sp;
539 ULONGEST this_base;
540 unsigned long op;
541 int i;
542 struct m32r_unwind_cache *info;
545 if ((*this_prologue_cache))
546 return (*this_prologue_cache);
548 info = FRAME_OBSTACK_ZALLOC (struct m32r_unwind_cache);
549 (*this_prologue_cache) = info;
550 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
552 info->size = 0;
553 info->sp_offset = 0;
554 info->uses_frame = 0;
556 scan_limit = get_frame_pc (this_frame);
557 for (pc = get_frame_func (this_frame);
558 pc > 0 && pc < scan_limit; pc += 2)
560 if ((pc & 2) == 0)
562 op = get_frame_memory_unsigned (this_frame, pc, 4);
563 if ((op & 0x80000000) == 0x80000000)
565 /* 32-bit instruction */
566 if ((op & 0xffff0000) == 0x8faf0000)
568 /* add3 sp,sp,xxxx */
569 short n = op & 0xffff;
570 info->sp_offset += n;
572 else if (((op >> 8) == 0xe4)
573 && get_frame_memory_unsigned (this_frame, pc + 2,
574 2) == 0x0f24)
576 /* ld24 r4, xxxxxx; sub sp, r4 */
577 unsigned long n = op & 0xffffff;
578 info->sp_offset += n;
579 pc += 2; /* skip sub instruction */
582 if (pc == scan_limit)
583 scan_limit += 2; /* extend the search */
584 pc += 2; /* skip the immediate data */
585 continue;
589 /* 16-bit instructions */
590 op = get_frame_memory_unsigned (this_frame, pc, 2) & 0x7fff;
591 if ((op & 0xf0ff) == 0x207f)
593 /* st rn, @-sp */
594 int regno = ((op >> 8) & 0xf);
595 info->sp_offset -= 4;
596 info->saved_regs[regno].addr = info->sp_offset;
598 else if ((op & 0xff00) == 0x4f00)
600 /* addi sp, xx */
601 int n = (signed char) (op & 0xff);
602 info->sp_offset += n;
604 else if (op == 0x1d8f)
606 /* mv fp, sp */
607 info->uses_frame = 1;
608 info->r13_offset = info->sp_offset;
609 break; /* end of stack adjustments */
611 else if ((op & 0xfff0) == 0x10f0)
613 /* End of prologue if this is a trap instruction. */
614 break; /* End of stack adjustments. */
618 info->size = -info->sp_offset;
620 /* Compute the previous frame's stack pointer (which is also the
621 frame's ID's stack address), and this frame's base pointer. */
622 if (info->uses_frame)
624 /* The SP was moved to the FP. This indicates that a new frame
625 was created. Get THIS frame's FP value by unwinding it from
626 the next frame. */
627 this_base = get_frame_register_unsigned (this_frame, M32R_FP_REGNUM);
628 /* The FP points at the last saved register. Adjust the FP back
629 to before the first saved register giving the SP. */
630 prev_sp = this_base + info->size;
632 else
634 /* Assume that the FP is this frame's SP but with that pushed
635 stack space added back. */
636 this_base = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
637 prev_sp = this_base + info->size;
640 /* Convert that SP/BASE into real addresses. */
641 info->prev_sp = prev_sp;
642 info->base = this_base;
644 /* Adjust all the saved registers so that they contain addresses and
645 not offsets. */
646 for (i = 0; i < gdbarch_num_regs (get_frame_arch (this_frame)) - 1; i++)
647 if (trad_frame_addr_p (info->saved_regs, i))
648 info->saved_regs[i].addr = (info->prev_sp + info->saved_regs[i].addr);
650 /* The call instruction moves the caller's PC in the callee's LR.
651 Since this is an unwind, do the reverse. Copy the location of LR
652 into PC (the address / regnum) so that a request for PC will be
653 converted into a request for the LR. */
654 info->saved_regs[M32R_PC_REGNUM] = info->saved_regs[LR_REGNUM];
656 /* The previous frame's SP needed to be computed. Save the computed
657 value. */
658 trad_frame_set_value (info->saved_regs, M32R_SP_REGNUM, prev_sp);
660 return info;
663 static CORE_ADDR
664 m32r_read_pc (struct regcache *regcache)
666 ULONGEST pc;
667 regcache_cooked_read_unsigned (regcache, M32R_PC_REGNUM, &pc);
668 return pc;
671 static CORE_ADDR
672 m32r_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
674 return frame_unwind_register_unsigned (next_frame, M32R_SP_REGNUM);
678 static CORE_ADDR
679 m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
680 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
681 struct value **args, CORE_ADDR sp, int struct_return,
682 CORE_ADDR struct_addr)
684 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
685 int stack_offset, stack_alloc;
686 int argreg = ARG1_REGNUM;
687 int argnum;
688 struct type *type;
689 enum type_code typecode;
690 CORE_ADDR regval;
691 gdb_byte *val;
692 gdb_byte valbuf[MAX_REGISTER_SIZE];
693 int len;
695 /* First force sp to a 4-byte alignment. */
696 sp = sp & ~3;
698 /* Set the return address. For the m32r, the return breakpoint is
699 always at BP_ADDR. */
700 regcache_cooked_write_unsigned (regcache, LR_REGNUM, bp_addr);
702 /* If STRUCT_RETURN is true, then the struct return address (in
703 STRUCT_ADDR) will consume the first argument-passing register.
704 Both adjust the register count and store that value. */
705 if (struct_return)
707 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
708 argreg++;
711 /* Now make sure there's space on the stack. */
712 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
713 stack_alloc += ((TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3);
714 sp -= stack_alloc; /* Make room on stack for args. */
716 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
718 type = value_type (args[argnum]);
719 typecode = TYPE_CODE (type);
720 len = TYPE_LENGTH (type);
722 memset (valbuf, 0, sizeof (valbuf));
724 /* Passes structures that do not fit in 2 registers by reference. */
725 if (len > 8
726 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
728 store_unsigned_integer (valbuf, 4, byte_order,
729 value_address (args[argnum]));
730 typecode = TYPE_CODE_PTR;
731 len = 4;
732 val = valbuf;
734 else if (len < 4)
736 /* Value gets right-justified in the register or stack word. */
737 memcpy (valbuf + (register_size (gdbarch, argreg) - len),
738 (gdb_byte *) value_contents (args[argnum]), len);
739 val = valbuf;
741 else
742 val = (gdb_byte *) value_contents (args[argnum]);
744 while (len > 0)
746 if (argreg > ARGN_REGNUM)
748 /* Must go on the stack. */
749 write_memory (sp + stack_offset, val, 4);
750 stack_offset += 4;
752 else if (argreg <= ARGN_REGNUM)
754 /* There's room in a register. */
755 regval =
756 extract_unsigned_integer (val,
757 register_size (gdbarch, argreg),
758 byte_order);
759 regcache_cooked_write_unsigned (regcache, argreg++, regval);
762 /* Store the value 4 bytes at a time. This means that things
763 larger than 4 bytes may go partly in registers and partly
764 on the stack. */
765 len -= register_size (gdbarch, argreg);
766 val += register_size (gdbarch, argreg);
770 /* Finally, update the SP register. */
771 regcache_cooked_write_unsigned (regcache, M32R_SP_REGNUM, sp);
773 return sp;
777 /* Given a return value in `regbuf' with a type `valtype',
778 extract and copy its value into `valbuf'. */
780 static void
781 m32r_extract_return_value (struct type *type, struct regcache *regcache,
782 void *dst)
784 struct gdbarch *gdbarch = get_regcache_arch (regcache);
785 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
786 bfd_byte *valbuf = dst;
787 int len = TYPE_LENGTH (type);
788 ULONGEST tmp;
790 /* By using store_unsigned_integer we avoid having to do
791 anything special for small big-endian values. */
792 regcache_cooked_read_unsigned (regcache, RET1_REGNUM, &tmp);
793 store_unsigned_integer (valbuf, (len > 4 ? len - 4 : len), byte_order, tmp);
795 /* Ignore return values more than 8 bytes in size because the m32r
796 returns anything more than 8 bytes in the stack. */
797 if (len > 4)
799 regcache_cooked_read_unsigned (regcache, RET1_REGNUM + 1, &tmp);
800 store_unsigned_integer (valbuf + len - 4, 4, byte_order, tmp);
804 static enum return_value_convention
805 m32r_return_value (struct gdbarch *gdbarch, struct value *function,
806 struct type *valtype, struct regcache *regcache,
807 gdb_byte *readbuf, const gdb_byte *writebuf)
809 if (TYPE_LENGTH (valtype) > 8)
810 return RETURN_VALUE_STRUCT_CONVENTION;
811 else
813 if (readbuf != NULL)
814 m32r_extract_return_value (valtype, regcache, readbuf);
815 if (writebuf != NULL)
816 m32r_store_return_value (valtype, regcache, writebuf);
817 return RETURN_VALUE_REGISTER_CONVENTION;
823 static CORE_ADDR
824 m32r_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
826 return frame_unwind_register_unsigned (next_frame, M32R_PC_REGNUM);
829 /* Given a GDB frame, determine the address of the calling function's
830 frame. This will be used to create a new GDB frame struct. */
832 static void
833 m32r_frame_this_id (struct frame_info *this_frame,
834 void **this_prologue_cache, struct frame_id *this_id)
836 struct m32r_unwind_cache *info
837 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
838 CORE_ADDR base;
839 CORE_ADDR func;
840 struct bound_minimal_symbol msym_stack;
841 struct frame_id id;
843 /* The FUNC is easy. */
844 func = get_frame_func (this_frame);
846 /* Check if the stack is empty. */
847 msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
848 if (msym_stack.minsym && info->base == BMSYMBOL_VALUE_ADDRESS (msym_stack))
849 return;
851 /* Hopefully the prologue analysis either correctly determined the
852 frame's base (which is the SP from the previous frame), or set
853 that base to "NULL". */
854 base = info->prev_sp;
855 if (base == 0)
856 return;
858 id = frame_id_build (base, func);
859 (*this_id) = id;
862 static struct value *
863 m32r_frame_prev_register (struct frame_info *this_frame,
864 void **this_prologue_cache, int regnum)
866 struct m32r_unwind_cache *info
867 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
868 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
871 static const struct frame_unwind m32r_frame_unwind = {
872 NORMAL_FRAME,
873 default_frame_unwind_stop_reason,
874 m32r_frame_this_id,
875 m32r_frame_prev_register,
876 NULL,
877 default_frame_sniffer
880 static CORE_ADDR
881 m32r_frame_base_address (struct frame_info *this_frame, void **this_cache)
883 struct m32r_unwind_cache *info
884 = m32r_frame_unwind_cache (this_frame, this_cache);
885 return info->base;
888 static const struct frame_base m32r_frame_base = {
889 &m32r_frame_unwind,
890 m32r_frame_base_address,
891 m32r_frame_base_address,
892 m32r_frame_base_address
895 /* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
896 frame. The frame ID's base needs to match the TOS value saved by
897 save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint. */
899 static struct frame_id
900 m32r_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
902 CORE_ADDR sp = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
903 return frame_id_build (sp, get_frame_pc (this_frame));
907 static gdbarch_init_ftype m32r_gdbarch_init;
909 static struct gdbarch *
910 m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
912 struct gdbarch *gdbarch;
913 struct gdbarch_tdep *tdep;
915 /* If there is already a candidate, use it. */
916 arches = gdbarch_list_lookup_by_info (arches, &info);
917 if (arches != NULL)
918 return arches->gdbarch;
920 /* Allocate space for the new architecture. */
921 tdep = XNEW (struct gdbarch_tdep);
922 gdbarch = gdbarch_alloc (&info, tdep);
924 set_gdbarch_read_pc (gdbarch, m32r_read_pc);
925 set_gdbarch_unwind_sp (gdbarch, m32r_unwind_sp);
927 set_gdbarch_num_regs (gdbarch, M32R_NUM_REGS);
928 set_gdbarch_pc_regnum (gdbarch, M32R_PC_REGNUM);
929 set_gdbarch_sp_regnum (gdbarch, M32R_SP_REGNUM);
930 set_gdbarch_register_name (gdbarch, m32r_register_name);
931 set_gdbarch_register_type (gdbarch, m32r_register_type);
933 set_gdbarch_push_dummy_call (gdbarch, m32r_push_dummy_call);
934 set_gdbarch_return_value (gdbarch, m32r_return_value);
936 set_gdbarch_skip_prologue (gdbarch, m32r_skip_prologue);
937 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
938 set_gdbarch_breakpoint_from_pc (gdbarch, m32r_breakpoint_from_pc);
939 set_gdbarch_memory_insert_breakpoint (gdbarch,
940 m32r_memory_insert_breakpoint);
941 set_gdbarch_memory_remove_breakpoint (gdbarch,
942 m32r_memory_remove_breakpoint);
944 set_gdbarch_frame_align (gdbarch, m32r_frame_align);
946 frame_base_set_default (gdbarch, &m32r_frame_base);
948 /* Methods for saving / extracting a dummy frame's ID. The ID's
949 stack address must match the SP value returned by
950 PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
951 set_gdbarch_dummy_id (gdbarch, m32r_dummy_id);
953 /* Return the unwound PC value. */
954 set_gdbarch_unwind_pc (gdbarch, m32r_unwind_pc);
956 set_gdbarch_print_insn (gdbarch, print_insn_m32r);
958 /* Hook in ABI-specific overrides, if they have been registered. */
959 gdbarch_init_osabi (info, gdbarch);
961 /* Hook in the default unwinders. */
962 frame_unwind_append_unwinder (gdbarch, &m32r_frame_unwind);
964 /* Support simple overlay manager. */
965 set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
967 return gdbarch;
970 void
971 _initialize_m32r_tdep (void)
973 register_gdbarch_init (bfd_arch_m32r, m32r_gdbarch_init);