Automatic date update in version.in
[binutils-gdb.git] / gdb / m32r-tdep.c
blob0bd6b499e6f08183e9a9b668454e9ed6b4e01057
1 /* Target-dependent code for Renesas M32R, for GDB.
3 Copyright (C) 1996-2024 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 "value.h"
29 #include "inferior.h"
30 #include "symfile.h"
31 #include "objfiles.h"
32 #include "osabi.h"
33 #include "language.h"
34 #include "arch-utils.h"
35 #include "regcache.h"
36 #include "trad-frame.h"
37 #include "dis-asm.h"
38 #include "m32r-tdep.h"
39 #include <algorithm>
41 /* The size of the argument registers (r0 - r3) in bytes. */
42 #define M32R_ARG_REGISTER_SIZE 4
44 /* Local functions */
46 static CORE_ADDR
47 m32r_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
49 /* Align to the size of an instruction (so that they can safely be
50 pushed onto the stack. */
51 return sp & ~3;
55 /* Breakpoints
57 The little endian mode of M32R is unique. In most of architectures,
58 two 16-bit instructions, A and B, are placed as the following:
60 Big endian:
61 A0 A1 B0 B1
63 Little endian:
64 A1 A0 B1 B0
66 In M32R, they are placed like this:
68 Big endian:
69 A0 A1 B0 B1
71 Little endian:
72 B1 B0 A1 A0
74 This is because M32R always fetches instructions in 32-bit.
76 The following functions take care of this behavior. */
78 static int
79 m32r_memory_insert_breakpoint (struct gdbarch *gdbarch,
80 struct bp_target_info *bp_tgt)
82 CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
83 int val;
84 gdb_byte buf[4];
85 gdb_byte contents_cache[4];
86 gdb_byte bp_entry[] = { 0x10, 0xf1 }; /* dpt */
88 /* Save the memory contents. */
89 val = target_read_memory (addr & 0xfffffffc, contents_cache, 4);
90 if (val != 0)
91 return val; /* return error */
93 memcpy (bp_tgt->shadow_contents, contents_cache, 4);
94 bp_tgt->shadow_len = 4;
96 /* Determine appropriate breakpoint contents and size for this address. */
97 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
99 if ((addr & 3) == 0)
101 buf[0] = bp_entry[0];
102 buf[1] = bp_entry[1];
103 buf[2] = contents_cache[2] & 0x7f;
104 buf[3] = contents_cache[3];
106 else
108 buf[0] = contents_cache[0];
109 buf[1] = contents_cache[1];
110 buf[2] = bp_entry[0];
111 buf[3] = bp_entry[1];
114 else /* little-endian */
116 if ((addr & 3) == 0)
118 buf[0] = contents_cache[0];
119 buf[1] = contents_cache[1] & 0x7f;
120 buf[2] = bp_entry[1];
121 buf[3] = bp_entry[0];
123 else
125 buf[0] = bp_entry[1];
126 buf[1] = bp_entry[0];
127 buf[2] = contents_cache[2];
128 buf[3] = contents_cache[3];
132 /* Write the breakpoint. */
133 val = target_write_memory (addr & 0xfffffffc, buf, 4);
134 return val;
137 static int
138 m32r_memory_remove_breakpoint (struct gdbarch *gdbarch,
139 struct bp_target_info *bp_tgt)
141 CORE_ADDR addr = bp_tgt->placed_address;
142 int val;
143 gdb_byte buf[4];
144 gdb_byte *contents_cache = bp_tgt->shadow_contents;
146 buf[0] = contents_cache[0];
147 buf[1] = contents_cache[1];
148 buf[2] = contents_cache[2];
149 buf[3] = contents_cache[3];
151 /* Remove parallel bit. */
152 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
154 if ((buf[0] & 0x80) == 0 && (buf[2] & 0x80) != 0)
155 buf[2] &= 0x7f;
157 else /* little-endian */
159 if ((buf[3] & 0x80) == 0 && (buf[1] & 0x80) != 0)
160 buf[1] &= 0x7f;
163 /* Write contents. */
164 val = target_write_raw_memory (addr & 0xfffffffc, buf, 4);
165 return val;
168 /* Implement the breakpoint_kind_from_pc gdbarch method. */
170 static int
171 m32r_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
173 if ((*pcptr & 3) == 0)
174 return 4;
175 else
176 return 2;
179 /* Implement the sw_breakpoint_from_kind gdbarch method. */
181 static const gdb_byte *
182 m32r_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
184 static gdb_byte be_bp_entry[] = {
185 0x10, 0xf1, 0x70, 0x00
186 }; /* dpt -> nop */
187 static gdb_byte le_bp_entry[] = {
188 0x00, 0x70, 0xf1, 0x10
189 }; /* dpt -> nop */
191 *size = kind;
193 /* Determine appropriate breakpoint. */
194 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
195 return be_bp_entry;
196 else
198 if (kind == 4)
199 return le_bp_entry;
200 else
201 return le_bp_entry + 2;
205 static const char * const m32r_register_names[] = {
206 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
207 "r8", "r9", "r10", "r11", "r12", "fp", "lr", "sp",
208 "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch",
209 "evb"
212 static const char *
213 m32r_register_name (struct gdbarch *gdbarch, int reg_nr)
215 static_assert (ARRAY_SIZE (m32r_register_names) == M32R_NUM_REGS);
216 return m32r_register_names[reg_nr];
220 /* Return the GDB type object for the "standard" data type
221 of data in register N. */
223 static struct type *
224 m32r_register_type (struct gdbarch *gdbarch, int reg_nr)
226 if (reg_nr == M32R_PC_REGNUM)
227 return builtin_type (gdbarch)->builtin_func_ptr;
228 else if (reg_nr == M32R_SP_REGNUM || reg_nr == M32R_FP_REGNUM)
229 return builtin_type (gdbarch)->builtin_data_ptr;
230 else
231 return builtin_type (gdbarch)->builtin_int32;
235 /* Write into appropriate registers a function return value
236 of type TYPE, given in virtual format.
238 Things always get returned in RET1_REGNUM, RET2_REGNUM. */
240 static void
241 m32r_store_return_value (struct type *type, struct regcache *regcache,
242 const gdb_byte *valbuf)
244 struct gdbarch *gdbarch = regcache->arch ();
245 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
246 CORE_ADDR regval;
247 int len = type->length ();
249 regval = extract_unsigned_integer (valbuf, len > 4 ? 4 : len, byte_order);
250 regcache_cooked_write_unsigned (regcache, RET1_REGNUM, regval);
252 if (len > 4)
254 regval = extract_unsigned_integer (valbuf + 4,
255 len - 4, byte_order);
256 regcache_cooked_write_unsigned (regcache, RET1_REGNUM + 1, regval);
260 /* This is required by skip_prologue. The results of decoding a prologue
261 should be cached because this thrashing is getting nuts. */
263 static int
264 decode_prologue (struct gdbarch *gdbarch,
265 CORE_ADDR start_pc, CORE_ADDR scan_limit,
266 CORE_ADDR *pl_endptr, unsigned long *framelength)
268 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
269 unsigned long framesize;
270 int insn;
271 int op1;
272 CORE_ADDR after_prologue = 0;
273 CORE_ADDR after_push = 0;
274 CORE_ADDR after_stack_adjust = 0;
275 CORE_ADDR current_pc;
276 LONGEST return_value;
278 framesize = 0;
279 after_prologue = 0;
281 for (current_pc = start_pc; current_pc < scan_limit; current_pc += 2)
283 /* Check if current pc's location is readable. */
284 if (!safe_read_memory_integer (current_pc, 2, byte_order, &return_value))
285 return -1;
287 insn = read_memory_unsigned_integer (current_pc, 2, byte_order);
289 if (insn == 0x0000)
290 break;
292 /* If this is a 32 bit instruction, we dont want to examine its
293 immediate data as though it were an instruction. */
294 if (current_pc & 0x02)
296 /* Decode this instruction further. */
297 insn &= 0x7fff;
299 else
301 if (insn & 0x8000)
303 if (current_pc == scan_limit)
304 scan_limit += 2; /* extend the search */
306 current_pc += 2; /* skip the immediate data */
308 /* Check if current pc's location is readable. */
309 if (!safe_read_memory_integer (current_pc, 2, byte_order,
310 &return_value))
311 return -1;
313 if (insn == 0x8faf) /* add3 sp, sp, xxxx */
314 /* add 16 bit sign-extended offset */
316 framesize +=
317 -((short) read_memory_unsigned_integer (current_pc,
318 2, byte_order));
320 else
322 if (((insn >> 8) == 0xe4) /* ld24 r4, xxxxxx; sub sp, r4 */
323 && safe_read_memory_integer (current_pc + 2,
324 2, byte_order,
325 &return_value)
326 && read_memory_unsigned_integer (current_pc + 2,
327 2, byte_order)
328 == 0x0f24)
330 /* Subtract 24 bit sign-extended negative-offset. */
331 insn = read_memory_unsigned_integer (current_pc - 2,
332 4, byte_order);
333 if (insn & 0x00800000) /* sign extend */
334 insn |= 0xff000000; /* negative */
335 else
336 insn &= 0x00ffffff; /* positive */
337 framesize += insn;
340 after_push = current_pc + 2;
341 continue;
344 op1 = insn & 0xf000; /* Isolate just the first nibble. */
346 if ((insn & 0xf0ff) == 0x207f)
347 { /* st reg, @-sp */
348 framesize += 4;
349 after_prologue = 0;
350 continue;
352 if ((insn >> 8) == 0x4f) /* addi sp, xx */
353 /* Add 8 bit sign-extended offset. */
355 int stack_adjust = (signed char) (insn & 0xff);
357 /* there are probably two of these stack adjustments:
358 1) A negative one in the prologue, and
359 2) A positive one in the epilogue.
360 We are only interested in the first one. */
362 if (stack_adjust < 0)
364 framesize -= stack_adjust;
365 after_prologue = 0;
366 /* A frameless function may have no "mv fp, sp".
367 In that case, this is the end of the prologue. */
368 after_stack_adjust = current_pc + 2;
370 continue;
372 if (insn == 0x1d8f)
373 { /* mv fp, sp */
374 after_prologue = current_pc + 2;
375 break; /* end of stack adjustments */
378 /* Nop looks like a branch, continue explicitly. */
379 if (insn == 0x7000)
381 after_prologue = current_pc + 2;
382 continue; /* nop occurs between pushes. */
384 /* End of prolog if any of these are trap instructions. */
385 if ((insn & 0xfff0) == 0x10f0)
387 after_prologue = current_pc;
388 break;
390 /* End of prolog if any of these are branch instructions. */
391 if ((op1 == 0x7000) || (op1 == 0xb000) || (op1 == 0xf000))
393 after_prologue = current_pc;
394 continue;
396 /* Some of the branch instructions are mixed with other types. */
397 if (op1 == 0x1000)
399 int subop = insn & 0x0ff0;
400 if ((subop == 0x0ec0) || (subop == 0x0fc0))
402 after_prologue = current_pc;
403 continue; /* jmp , jl */
408 if (framelength)
409 *framelength = framesize;
411 if (current_pc >= scan_limit)
413 if (pl_endptr)
415 if (after_stack_adjust != 0)
416 /* We did not find a "mv fp,sp", but we DID find
417 a stack_adjust. Is it safe to use that as the
418 end of the prologue? I just don't know. */
420 *pl_endptr = after_stack_adjust;
422 else if (after_push != 0)
423 /* We did not find a "mv fp,sp", but we DID find
424 a push. Is it safe to use that as the
425 end of the prologue? I just don't know. */
427 *pl_endptr = after_push;
429 else
430 /* We reached the end of the loop without finding the end
431 of the prologue. No way to win -- we should report
432 failure. The way we do that is to return the original
433 start_pc. GDB will set a breakpoint at the start of
434 the function (etc.) */
435 *pl_endptr = start_pc;
437 return 0;
440 if (after_prologue == 0)
441 after_prologue = current_pc;
443 if (pl_endptr)
444 *pl_endptr = after_prologue;
446 return 0;
447 } /* decode_prologue */
449 /* Function: skip_prologue
450 Find end of function prologue. */
452 #define DEFAULT_SEARCH_LIMIT 128
454 static CORE_ADDR
455 m32r_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
457 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
458 CORE_ADDR func_addr, func_end;
459 struct symtab_and_line sal;
460 LONGEST return_value;
462 /* See what the symbol table says. */
464 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
466 sal = find_pc_line (func_addr, 0);
468 if (sal.line != 0 && sal.end <= func_end)
470 func_end = sal.end;
472 else
473 /* Either there's no line info, or the line after the prologue is after
474 the end of the function. In this case, there probably isn't a
475 prologue. */
477 func_end = std::min (func_end, func_addr + DEFAULT_SEARCH_LIMIT);
480 else
481 func_end = pc + DEFAULT_SEARCH_LIMIT;
483 /* If pc's location is not readable, just quit. */
484 if (!safe_read_memory_integer (pc, 4, byte_order, &return_value))
485 return pc;
487 /* Find the end of prologue. */
488 if (decode_prologue (gdbarch, pc, func_end, &sal.end, NULL) < 0)
489 return pc;
491 return sal.end;
494 struct m32r_unwind_cache
496 /* The previous frame's inner most stack address. Used as this
497 frame ID's stack_addr. */
498 CORE_ADDR prev_sp;
499 /* The frame's base, optionally used by the high-level debug info. */
500 CORE_ADDR base;
501 int size;
502 /* How far the SP and r13 (FP) have been offset from the start of
503 the stack frame (as defined by the previous frame's stack
504 pointer). */
505 LONGEST sp_offset;
506 LONGEST r13_offset;
507 int uses_frame;
508 /* Table indicating the location of each and every register. */
509 trad_frame_saved_reg *saved_regs;
512 /* Put here the code to store, into fi->saved_regs, the addresses of
513 the saved registers of frame described by FRAME_INFO. This
514 includes special registers such as pc and fp saved in special ways
515 in the stack frame. sp is even more special: the address we return
516 for it IS the sp for the next frame. */
518 static struct m32r_unwind_cache *
519 m32r_frame_unwind_cache (const frame_info_ptr &this_frame,
520 void **this_prologue_cache)
522 CORE_ADDR pc, scan_limit;
523 ULONGEST prev_sp;
524 ULONGEST this_base;
525 unsigned long op;
526 int i;
527 struct m32r_unwind_cache *info;
530 if ((*this_prologue_cache))
531 return (struct m32r_unwind_cache *) (*this_prologue_cache);
533 info = FRAME_OBSTACK_ZALLOC (struct m32r_unwind_cache);
534 (*this_prologue_cache) = info;
535 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
537 info->size = 0;
538 info->sp_offset = 0;
539 info->uses_frame = 0;
541 scan_limit = get_frame_pc (this_frame);
542 for (pc = get_frame_func (this_frame);
543 pc > 0 && pc < scan_limit; pc += 2)
545 if ((pc & 2) == 0)
547 op = get_frame_memory_unsigned (this_frame, pc, 4);
548 if ((op & 0x80000000) == 0x80000000)
550 /* 32-bit instruction */
551 if ((op & 0xffff0000) == 0x8faf0000)
553 /* add3 sp,sp,xxxx */
554 short n = op & 0xffff;
555 info->sp_offset += n;
557 else if (((op >> 8) == 0xe4)
558 && get_frame_memory_unsigned (this_frame, pc + 2,
559 2) == 0x0f24)
561 /* ld24 r4, xxxxxx; sub sp, r4 */
562 unsigned long n = op & 0xffffff;
563 info->sp_offset += n;
564 pc += 2; /* skip sub instruction */
567 if (pc == scan_limit)
568 scan_limit += 2; /* extend the search */
569 pc += 2; /* skip the immediate data */
570 continue;
574 /* 16-bit instructions */
575 op = get_frame_memory_unsigned (this_frame, pc, 2) & 0x7fff;
576 if ((op & 0xf0ff) == 0x207f)
578 /* st rn, @-sp */
579 int regno = ((op >> 8) & 0xf);
580 info->sp_offset -= 4;
581 info->saved_regs[regno].set_addr (info->sp_offset);
583 else if ((op & 0xff00) == 0x4f00)
585 /* addi sp, xx */
586 int n = (signed char) (op & 0xff);
587 info->sp_offset += n;
589 else if (op == 0x1d8f)
591 /* mv fp, sp */
592 info->uses_frame = 1;
593 info->r13_offset = info->sp_offset;
594 break; /* end of stack adjustments */
596 else if ((op & 0xfff0) == 0x10f0)
598 /* End of prologue if this is a trap instruction. */
599 break; /* End of stack adjustments. */
603 info->size = -info->sp_offset;
605 /* Compute the previous frame's stack pointer (which is also the
606 frame's ID's stack address), and this frame's base pointer. */
607 if (info->uses_frame)
609 /* The SP was moved to the FP. This indicates that a new frame
610 was created. Get THIS frame's FP value by unwinding it from
611 the next frame. */
612 this_base = get_frame_register_unsigned (this_frame, M32R_FP_REGNUM);
613 /* The FP points at the last saved register. Adjust the FP back
614 to before the first saved register giving the SP. */
615 prev_sp = this_base + info->size;
617 else
619 /* Assume that the FP is this frame's SP but with that pushed
620 stack space added back. */
621 this_base = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
622 prev_sp = this_base + info->size;
625 /* Convert that SP/BASE into real addresses. */
626 info->prev_sp = prev_sp;
627 info->base = this_base;
629 /* Adjust all the saved registers so that they contain addresses and
630 not offsets. */
631 for (i = 0; i < gdbarch_num_regs (get_frame_arch (this_frame)) - 1; i++)
632 if (info->saved_regs[i].is_addr ())
633 info->saved_regs[i].set_addr (info->prev_sp
634 + info->saved_regs[i].addr ());
636 /* The call instruction moves the caller's PC in the callee's LR.
637 Since this is an unwind, do the reverse. Copy the location of LR
638 into PC (the address / regnum) so that a request for PC will be
639 converted into a request for the LR. */
640 info->saved_regs[M32R_PC_REGNUM] = info->saved_regs[LR_REGNUM];
642 /* The previous frame's SP needed to be computed. Save the computed
643 value. */
644 info->saved_regs[M32R_SP_REGNUM].set_value (prev_sp);
646 return info;
649 static CORE_ADDR
650 m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
651 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
652 struct value **args, CORE_ADDR sp,
653 function_call_return_method return_method,
654 CORE_ADDR struct_addr)
656 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
657 int stack_offset, stack_alloc;
658 int argreg = ARG1_REGNUM;
659 int argnum;
660 struct type *type;
661 enum type_code typecode;
662 CORE_ADDR regval;
663 gdb_byte *val;
664 gdb_byte valbuf[M32R_ARG_REGISTER_SIZE];
665 int len;
667 /* First force sp to a 4-byte alignment. */
668 sp = sp & ~3;
670 /* Set the return address. For the m32r, the return breakpoint is
671 always at BP_ADDR. */
672 regcache_cooked_write_unsigned (regcache, LR_REGNUM, bp_addr);
674 /* If STRUCT_RETURN is true, then the struct return address (in
675 STRUCT_ADDR) will consume the first argument-passing register.
676 Both adjust the register count and store that value. */
677 if (return_method == return_method_struct)
679 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
680 argreg++;
683 /* Now make sure there's space on the stack. */
684 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
685 stack_alloc += ((args[argnum]->type ()->length () + 3) & ~3);
686 sp -= stack_alloc; /* Make room on stack for args. */
688 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
690 type = args[argnum]->type ();
691 typecode = type->code ();
692 len = type->length ();
694 memset (valbuf, 0, sizeof (valbuf));
696 /* Passes structures that do not fit in 2 registers by reference. */
697 if (len > 8
698 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
700 store_unsigned_integer (valbuf, 4, byte_order,
701 args[argnum]->address ());
702 typecode = TYPE_CODE_PTR;
703 len = 4;
704 val = valbuf;
706 else if (len < 4)
708 /* Value gets right-justified in the register or stack word. */
709 memcpy (valbuf + (register_size (gdbarch, argreg) - len),
710 (gdb_byte *) args[argnum]->contents ().data (), len);
711 val = valbuf;
713 else
714 val = (gdb_byte *) args[argnum]->contents ().data ();
716 while (len > 0)
718 if (argreg > ARGN_REGNUM)
720 /* Must go on the stack. */
721 write_memory (sp + stack_offset, val, 4);
722 stack_offset += 4;
724 else if (argreg <= ARGN_REGNUM)
726 /* There's room in a register. */
727 regval =
728 extract_unsigned_integer (val,
729 register_size (gdbarch, argreg),
730 byte_order);
731 regcache_cooked_write_unsigned (regcache, argreg++, regval);
734 /* Store the value 4 bytes at a time. This means that things
735 larger than 4 bytes may go partly in registers and partly
736 on the stack. */
737 len -= register_size (gdbarch, argreg);
738 val += register_size (gdbarch, argreg);
742 /* Finally, update the SP register. */
743 regcache_cooked_write_unsigned (regcache, M32R_SP_REGNUM, sp);
745 return sp;
749 /* Given a return value in `regbuf' with a type `valtype',
750 extract and copy its value into `valbuf'. */
752 static void
753 m32r_extract_return_value (struct type *type, struct regcache *regcache,
754 gdb_byte *dst)
756 struct gdbarch *gdbarch = regcache->arch ();
757 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
758 int len = type->length ();
759 ULONGEST tmp;
761 /* By using store_unsigned_integer we avoid having to do
762 anything special for small big-endian values. */
763 regcache_cooked_read_unsigned (regcache, RET1_REGNUM, &tmp);
764 store_unsigned_integer (dst, (len > 4 ? len - 4 : len), byte_order, tmp);
766 /* Ignore return values more than 8 bytes in size because the m32r
767 returns anything more than 8 bytes in the stack. */
768 if (len > 4)
770 regcache_cooked_read_unsigned (regcache, RET1_REGNUM + 1, &tmp);
771 store_unsigned_integer (dst + len - 4, 4, byte_order, tmp);
775 static enum return_value_convention
776 m32r_return_value (struct gdbarch *gdbarch, struct value *function,
777 struct type *valtype, struct regcache *regcache,
778 gdb_byte *readbuf, const gdb_byte *writebuf)
780 if (valtype->length () > 8)
781 return RETURN_VALUE_STRUCT_CONVENTION;
782 else
784 if (readbuf != NULL)
785 m32r_extract_return_value (valtype, regcache, readbuf);
786 if (writebuf != NULL)
787 m32r_store_return_value (valtype, regcache, writebuf);
788 return RETURN_VALUE_REGISTER_CONVENTION;
792 /* Given a GDB frame, determine the address of the calling function's
793 frame. This will be used to create a new GDB frame struct. */
795 static void
796 m32r_frame_this_id (const frame_info_ptr &this_frame,
797 void **this_prologue_cache, struct frame_id *this_id)
799 struct m32r_unwind_cache *info
800 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
801 CORE_ADDR base;
802 CORE_ADDR func;
803 struct bound_minimal_symbol msym_stack;
804 struct frame_id id;
806 /* The FUNC is easy. */
807 func = get_frame_func (this_frame);
809 /* Check if the stack is empty. */
810 msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
811 if (msym_stack.minsym && info->base == msym_stack.value_address ())
812 return;
814 /* Hopefully the prologue analysis either correctly determined the
815 frame's base (which is the SP from the previous frame), or set
816 that base to "NULL". */
817 base = info->prev_sp;
818 if (base == 0)
819 return;
821 id = frame_id_build (base, func);
822 (*this_id) = id;
825 static struct value *
826 m32r_frame_prev_register (const frame_info_ptr &this_frame,
827 void **this_prologue_cache, int regnum)
829 struct m32r_unwind_cache *info
830 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
831 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
834 static const struct frame_unwind m32r_frame_unwind = {
835 "m32r prologue",
836 NORMAL_FRAME,
837 default_frame_unwind_stop_reason,
838 m32r_frame_this_id,
839 m32r_frame_prev_register,
840 NULL,
841 default_frame_sniffer
844 static CORE_ADDR
845 m32r_frame_base_address (const frame_info_ptr &this_frame, void **this_cache)
847 struct m32r_unwind_cache *info
848 = m32r_frame_unwind_cache (this_frame, this_cache);
849 return info->base;
852 static const struct frame_base m32r_frame_base = {
853 &m32r_frame_unwind,
854 m32r_frame_base_address,
855 m32r_frame_base_address,
856 m32r_frame_base_address
859 static gdbarch_init_ftype m32r_gdbarch_init;
861 static struct gdbarch *
862 m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
864 /* If there is already a candidate, use it. */
865 arches = gdbarch_list_lookup_by_info (arches, &info);
866 if (arches != NULL)
867 return arches->gdbarch;
869 /* Allocate space for the new architecture. */
870 gdbarch *gdbarch
871 = gdbarch_alloc (&info, gdbarch_tdep_up (new m32r_gdbarch_tdep));
873 set_gdbarch_wchar_bit (gdbarch, 16);
874 set_gdbarch_wchar_signed (gdbarch, 0);
876 set_gdbarch_num_regs (gdbarch, M32R_NUM_REGS);
877 set_gdbarch_pc_regnum (gdbarch, M32R_PC_REGNUM);
878 set_gdbarch_sp_regnum (gdbarch, M32R_SP_REGNUM);
879 set_gdbarch_register_name (gdbarch, m32r_register_name);
880 set_gdbarch_register_type (gdbarch, m32r_register_type);
882 set_gdbarch_push_dummy_call (gdbarch, m32r_push_dummy_call);
883 set_gdbarch_return_value (gdbarch, m32r_return_value);
885 set_gdbarch_skip_prologue (gdbarch, m32r_skip_prologue);
886 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
887 set_gdbarch_breakpoint_kind_from_pc (gdbarch, m32r_breakpoint_kind_from_pc);
888 set_gdbarch_sw_breakpoint_from_kind (gdbarch, m32r_sw_breakpoint_from_kind);
889 set_gdbarch_memory_insert_breakpoint (gdbarch,
890 m32r_memory_insert_breakpoint);
891 set_gdbarch_memory_remove_breakpoint (gdbarch,
892 m32r_memory_remove_breakpoint);
894 set_gdbarch_frame_align (gdbarch, m32r_frame_align);
896 frame_base_set_default (gdbarch, &m32r_frame_base);
898 /* Hook in ABI-specific overrides, if they have been registered. */
899 gdbarch_init_osabi (info, gdbarch);
901 /* Hook in the default unwinders. */
902 frame_unwind_append_unwinder (gdbarch, &m32r_frame_unwind);
904 /* Support simple overlay manager. */
905 set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
907 return gdbarch;
910 void _initialize_m32r_tdep ();
911 void
912 _initialize_m32r_tdep ()
914 gdbarch_register (bfd_arch_m32r, m32r_gdbarch_init);