Update copyright year in gdbarch.sh doc/gdb.texinfo and doc/refcard.tex
[binutils-gdb.git] / gdb / m32r-tdep.c
blob59f9bb59be9470f318c3541892f7be0a84228e70
1 /* Target-dependent code for Renesas M32R, for GDB.
3 Copyright (C) 1996-2020 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 *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 if (reg_nr < 0)
216 return NULL;
217 if (reg_nr >= M32R_NUM_REGS)
218 return NULL;
219 return m32r_register_names[reg_nr];
223 /* Return the GDB type object for the "standard" data type
224 of data in register N. */
226 static struct type *
227 m32r_register_type (struct gdbarch *gdbarch, int reg_nr)
229 if (reg_nr == M32R_PC_REGNUM)
230 return builtin_type (gdbarch)->builtin_func_ptr;
231 else if (reg_nr == M32R_SP_REGNUM || reg_nr == M32R_FP_REGNUM)
232 return builtin_type (gdbarch)->builtin_data_ptr;
233 else
234 return builtin_type (gdbarch)->builtin_int32;
238 /* Write into appropriate registers a function return value
239 of type TYPE, given in virtual format.
241 Things always get returned in RET1_REGNUM, RET2_REGNUM. */
243 static void
244 m32r_store_return_value (struct type *type, struct regcache *regcache,
245 const gdb_byte *valbuf)
247 struct gdbarch *gdbarch = regcache->arch ();
248 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
249 CORE_ADDR regval;
250 int len = TYPE_LENGTH (type);
252 regval = extract_unsigned_integer (valbuf, len > 4 ? 4 : len, byte_order);
253 regcache_cooked_write_unsigned (regcache, RET1_REGNUM, regval);
255 if (len > 4)
257 regval = extract_unsigned_integer (valbuf + 4,
258 len - 4, byte_order);
259 regcache_cooked_write_unsigned (regcache, RET1_REGNUM + 1, regval);
263 /* This is required by skip_prologue. The results of decoding a prologue
264 should be cached because this thrashing is getting nuts. */
266 static int
267 decode_prologue (struct gdbarch *gdbarch,
268 CORE_ADDR start_pc, CORE_ADDR scan_limit,
269 CORE_ADDR *pl_endptr, unsigned long *framelength)
271 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
272 unsigned long framesize;
273 int insn;
274 int op1;
275 CORE_ADDR after_prologue = 0;
276 CORE_ADDR after_push = 0;
277 CORE_ADDR after_stack_adjust = 0;
278 CORE_ADDR current_pc;
279 LONGEST return_value;
281 framesize = 0;
282 after_prologue = 0;
284 for (current_pc = start_pc; current_pc < scan_limit; current_pc += 2)
286 /* Check if current pc's location is readable. */
287 if (!safe_read_memory_integer (current_pc, 2, byte_order, &return_value))
288 return -1;
290 insn = read_memory_unsigned_integer (current_pc, 2, byte_order);
292 if (insn == 0x0000)
293 break;
295 /* If this is a 32 bit instruction, we dont want to examine its
296 immediate data as though it were an instruction. */
297 if (current_pc & 0x02)
299 /* Decode this instruction further. */
300 insn &= 0x7fff;
302 else
304 if (insn & 0x8000)
306 if (current_pc == scan_limit)
307 scan_limit += 2; /* extend the search */
309 current_pc += 2; /* skip the immediate data */
311 /* Check if current pc's location is readable. */
312 if (!safe_read_memory_integer (current_pc, 2, byte_order,
313 &return_value))
314 return -1;
316 if (insn == 0x8faf) /* add3 sp, sp, xxxx */
317 /* add 16 bit sign-extended offset */
319 framesize +=
320 -((short) read_memory_unsigned_integer (current_pc,
321 2, byte_order));
323 else
325 if (((insn >> 8) == 0xe4) /* ld24 r4, xxxxxx; sub sp, r4 */
326 && safe_read_memory_integer (current_pc + 2,
327 2, byte_order,
328 &return_value)
329 && read_memory_unsigned_integer (current_pc + 2,
330 2, byte_order)
331 == 0x0f24)
333 /* Subtract 24 bit sign-extended negative-offset. */
334 insn = read_memory_unsigned_integer (current_pc - 2,
335 4, byte_order);
336 if (insn & 0x00800000) /* sign extend */
337 insn |= 0xff000000; /* negative */
338 else
339 insn &= 0x00ffffff; /* positive */
340 framesize += insn;
343 after_push = current_pc + 2;
344 continue;
347 op1 = insn & 0xf000; /* Isolate just the first nibble. */
349 if ((insn & 0xf0ff) == 0x207f)
350 { /* st reg, @-sp */
351 framesize += 4;
352 after_prologue = 0;
353 continue;
355 if ((insn >> 8) == 0x4f) /* addi sp, xx */
356 /* Add 8 bit sign-extended offset. */
358 int stack_adjust = (signed char) (insn & 0xff);
360 /* there are probably two of these stack adjustments:
361 1) A negative one in the prologue, and
362 2) A positive one in the epilogue.
363 We are only interested in the first one. */
365 if (stack_adjust < 0)
367 framesize -= stack_adjust;
368 after_prologue = 0;
369 /* A frameless function may have no "mv fp, sp".
370 In that case, this is the end of the prologue. */
371 after_stack_adjust = current_pc + 2;
373 continue;
375 if (insn == 0x1d8f)
376 { /* mv fp, sp */
377 after_prologue = current_pc + 2;
378 break; /* end of stack adjustments */
381 /* Nop looks like a branch, continue explicitly. */
382 if (insn == 0x7000)
384 after_prologue = current_pc + 2;
385 continue; /* nop occurs between pushes. */
387 /* End of prolog if any of these are trap instructions. */
388 if ((insn & 0xfff0) == 0x10f0)
390 after_prologue = current_pc;
391 break;
393 /* End of prolog if any of these are branch instructions. */
394 if ((op1 == 0x7000) || (op1 == 0xb000) || (op1 == 0xf000))
396 after_prologue = current_pc;
397 continue;
399 /* Some of the branch instructions are mixed with other types. */
400 if (op1 == 0x1000)
402 int subop = insn & 0x0ff0;
403 if ((subop == 0x0ec0) || (subop == 0x0fc0))
405 after_prologue = current_pc;
406 continue; /* jmp , jl */
411 if (framelength)
412 *framelength = framesize;
414 if (current_pc >= scan_limit)
416 if (pl_endptr)
418 if (after_stack_adjust != 0)
419 /* We did not find a "mv fp,sp", but we DID find
420 a stack_adjust. Is it safe to use that as the
421 end of the prologue? I just don't know. */
423 *pl_endptr = after_stack_adjust;
425 else if (after_push != 0)
426 /* We did not find a "mv fp,sp", but we DID find
427 a push. Is it safe to use that as the
428 end of the prologue? I just don't know. */
430 *pl_endptr = after_push;
432 else
433 /* We reached the end of the loop without finding the end
434 of the prologue. No way to win -- we should report
435 failure. The way we do that is to return the original
436 start_pc. GDB will set a breakpoint at the start of
437 the function (etc.) */
438 *pl_endptr = start_pc;
440 return 0;
443 if (after_prologue == 0)
444 after_prologue = current_pc;
446 if (pl_endptr)
447 *pl_endptr = after_prologue;
449 return 0;
450 } /* decode_prologue */
452 /* Function: skip_prologue
453 Find end of function prologue. */
455 #define DEFAULT_SEARCH_LIMIT 128
457 static CORE_ADDR
458 m32r_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
460 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
461 CORE_ADDR func_addr, func_end;
462 struct symtab_and_line sal;
463 LONGEST return_value;
465 /* See what the symbol table says. */
467 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
469 sal = find_pc_line (func_addr, 0);
471 if (sal.line != 0 && sal.end <= func_end)
473 func_end = sal.end;
475 else
476 /* Either there's no line info, or the line after the prologue is after
477 the end of the function. In this case, there probably isn't a
478 prologue. */
480 func_end = std::min (func_end, func_addr + DEFAULT_SEARCH_LIMIT);
483 else
484 func_end = pc + DEFAULT_SEARCH_LIMIT;
486 /* If pc's location is not readable, just quit. */
487 if (!safe_read_memory_integer (pc, 4, byte_order, &return_value))
488 return pc;
490 /* Find the end of prologue. */
491 if (decode_prologue (gdbarch, pc, func_end, &sal.end, NULL) < 0)
492 return pc;
494 return sal.end;
497 struct m32r_unwind_cache
499 /* The previous frame's inner most stack address. Used as this
500 frame ID's stack_addr. */
501 CORE_ADDR prev_sp;
502 /* The frame's base, optionally used by the high-level debug info. */
503 CORE_ADDR base;
504 int size;
505 /* How far the SP and r13 (FP) have been offset from the start of
506 the stack frame (as defined by the previous frame's stack
507 pointer). */
508 LONGEST sp_offset;
509 LONGEST r13_offset;
510 int uses_frame;
511 /* Table indicating the location of each and every register. */
512 struct trad_frame_saved_reg *saved_regs;
515 /* Put here the code to store, into fi->saved_regs, the addresses of
516 the saved registers of frame described by FRAME_INFO. This
517 includes special registers such as pc and fp saved in special ways
518 in the stack frame. sp is even more special: the address we return
519 for it IS the sp for the next frame. */
521 static struct m32r_unwind_cache *
522 m32r_frame_unwind_cache (struct frame_info *this_frame,
523 void **this_prologue_cache)
525 CORE_ADDR pc, scan_limit;
526 ULONGEST prev_sp;
527 ULONGEST this_base;
528 unsigned long op;
529 int i;
530 struct m32r_unwind_cache *info;
533 if ((*this_prologue_cache))
534 return (struct m32r_unwind_cache *) (*this_prologue_cache);
536 info = FRAME_OBSTACK_ZALLOC (struct m32r_unwind_cache);
537 (*this_prologue_cache) = info;
538 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
540 info->size = 0;
541 info->sp_offset = 0;
542 info->uses_frame = 0;
544 scan_limit = get_frame_pc (this_frame);
545 for (pc = get_frame_func (this_frame);
546 pc > 0 && pc < scan_limit; pc += 2)
548 if ((pc & 2) == 0)
550 op = get_frame_memory_unsigned (this_frame, pc, 4);
551 if ((op & 0x80000000) == 0x80000000)
553 /* 32-bit instruction */
554 if ((op & 0xffff0000) == 0x8faf0000)
556 /* add3 sp,sp,xxxx */
557 short n = op & 0xffff;
558 info->sp_offset += n;
560 else if (((op >> 8) == 0xe4)
561 && get_frame_memory_unsigned (this_frame, pc + 2,
562 2) == 0x0f24)
564 /* ld24 r4, xxxxxx; sub sp, r4 */
565 unsigned long n = op & 0xffffff;
566 info->sp_offset += n;
567 pc += 2; /* skip sub instruction */
570 if (pc == scan_limit)
571 scan_limit += 2; /* extend the search */
572 pc += 2; /* skip the immediate data */
573 continue;
577 /* 16-bit instructions */
578 op = get_frame_memory_unsigned (this_frame, pc, 2) & 0x7fff;
579 if ((op & 0xf0ff) == 0x207f)
581 /* st rn, @-sp */
582 int regno = ((op >> 8) & 0xf);
583 info->sp_offset -= 4;
584 info->saved_regs[regno].addr = info->sp_offset;
586 else if ((op & 0xff00) == 0x4f00)
588 /* addi sp, xx */
589 int n = (signed char) (op & 0xff);
590 info->sp_offset += n;
592 else if (op == 0x1d8f)
594 /* mv fp, sp */
595 info->uses_frame = 1;
596 info->r13_offset = info->sp_offset;
597 break; /* end of stack adjustments */
599 else if ((op & 0xfff0) == 0x10f0)
601 /* End of prologue if this is a trap instruction. */
602 break; /* End of stack adjustments. */
606 info->size = -info->sp_offset;
608 /* Compute the previous frame's stack pointer (which is also the
609 frame's ID's stack address), and this frame's base pointer. */
610 if (info->uses_frame)
612 /* The SP was moved to the FP. This indicates that a new frame
613 was created. Get THIS frame's FP value by unwinding it from
614 the next frame. */
615 this_base = get_frame_register_unsigned (this_frame, M32R_FP_REGNUM);
616 /* The FP points at the last saved register. Adjust the FP back
617 to before the first saved register giving the SP. */
618 prev_sp = this_base + info->size;
620 else
622 /* Assume that the FP is this frame's SP but with that pushed
623 stack space added back. */
624 this_base = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
625 prev_sp = this_base + info->size;
628 /* Convert that SP/BASE into real addresses. */
629 info->prev_sp = prev_sp;
630 info->base = this_base;
632 /* Adjust all the saved registers so that they contain addresses and
633 not offsets. */
634 for (i = 0; i < gdbarch_num_regs (get_frame_arch (this_frame)) - 1; i++)
635 if (trad_frame_addr_p (info->saved_regs, i))
636 info->saved_regs[i].addr = (info->prev_sp + info->saved_regs[i].addr);
638 /* The call instruction moves the caller's PC in the callee's LR.
639 Since this is an unwind, do the reverse. Copy the location of LR
640 into PC (the address / regnum) so that a request for PC will be
641 converted into a request for the LR. */
642 info->saved_regs[M32R_PC_REGNUM] = info->saved_regs[LR_REGNUM];
644 /* The previous frame's SP needed to be computed. Save the computed
645 value. */
646 trad_frame_set_value (info->saved_regs, M32R_SP_REGNUM, prev_sp);
648 return info;
651 static CORE_ADDR
652 m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
653 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
654 struct value **args, CORE_ADDR sp,
655 function_call_return_method return_method,
656 CORE_ADDR struct_addr)
658 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
659 int stack_offset, stack_alloc;
660 int argreg = ARG1_REGNUM;
661 int argnum;
662 struct type *type;
663 enum type_code typecode;
664 CORE_ADDR regval;
665 gdb_byte *val;
666 gdb_byte valbuf[M32R_ARG_REGISTER_SIZE];
667 int len;
669 /* First force sp to a 4-byte alignment. */
670 sp = sp & ~3;
672 /* Set the return address. For the m32r, the return breakpoint is
673 always at BP_ADDR. */
674 regcache_cooked_write_unsigned (regcache, LR_REGNUM, bp_addr);
676 /* If STRUCT_RETURN is true, then the struct return address (in
677 STRUCT_ADDR) will consume the first argument-passing register.
678 Both adjust the register count and store that value. */
679 if (return_method == return_method_struct)
681 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
682 argreg++;
685 /* Now make sure there's space on the stack. */
686 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
687 stack_alloc += ((TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3);
688 sp -= stack_alloc; /* Make room on stack for args. */
690 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
692 type = value_type (args[argnum]);
693 typecode = TYPE_CODE (type);
694 len = TYPE_LENGTH (type);
696 memset (valbuf, 0, sizeof (valbuf));
698 /* Passes structures that do not fit in 2 registers by reference. */
699 if (len > 8
700 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
702 store_unsigned_integer (valbuf, 4, byte_order,
703 value_address (args[argnum]));
704 typecode = TYPE_CODE_PTR;
705 len = 4;
706 val = valbuf;
708 else if (len < 4)
710 /* Value gets right-justified in the register or stack word. */
711 memcpy (valbuf + (register_size (gdbarch, argreg) - len),
712 (gdb_byte *) value_contents (args[argnum]), len);
713 val = valbuf;
715 else
716 val = (gdb_byte *) value_contents (args[argnum]);
718 while (len > 0)
720 if (argreg > ARGN_REGNUM)
722 /* Must go on the stack. */
723 write_memory (sp + stack_offset, val, 4);
724 stack_offset += 4;
726 else if (argreg <= ARGN_REGNUM)
728 /* There's room in a register. */
729 regval =
730 extract_unsigned_integer (val,
731 register_size (gdbarch, argreg),
732 byte_order);
733 regcache_cooked_write_unsigned (regcache, argreg++, regval);
736 /* Store the value 4 bytes at a time. This means that things
737 larger than 4 bytes may go partly in registers and partly
738 on the stack. */
739 len -= register_size (gdbarch, argreg);
740 val += register_size (gdbarch, argreg);
744 /* Finally, update the SP register. */
745 regcache_cooked_write_unsigned (regcache, M32R_SP_REGNUM, sp);
747 return sp;
751 /* Given a return value in `regbuf' with a type `valtype',
752 extract and copy its value into `valbuf'. */
754 static void
755 m32r_extract_return_value (struct type *type, struct regcache *regcache,
756 gdb_byte *dst)
758 struct gdbarch *gdbarch = regcache->arch ();
759 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
760 int len = TYPE_LENGTH (type);
761 ULONGEST tmp;
763 /* By using store_unsigned_integer we avoid having to do
764 anything special for small big-endian values. */
765 regcache_cooked_read_unsigned (regcache, RET1_REGNUM, &tmp);
766 store_unsigned_integer (dst, (len > 4 ? len - 4 : len), byte_order, tmp);
768 /* Ignore return values more than 8 bytes in size because the m32r
769 returns anything more than 8 bytes in the stack. */
770 if (len > 4)
772 regcache_cooked_read_unsigned (regcache, RET1_REGNUM + 1, &tmp);
773 store_unsigned_integer (dst + len - 4, 4, byte_order, tmp);
777 static enum return_value_convention
778 m32r_return_value (struct gdbarch *gdbarch, struct value *function,
779 struct type *valtype, struct regcache *regcache,
780 gdb_byte *readbuf, const gdb_byte *writebuf)
782 if (TYPE_LENGTH (valtype) > 8)
783 return RETURN_VALUE_STRUCT_CONVENTION;
784 else
786 if (readbuf != NULL)
787 m32r_extract_return_value (valtype, regcache, readbuf);
788 if (writebuf != NULL)
789 m32r_store_return_value (valtype, regcache, writebuf);
790 return RETURN_VALUE_REGISTER_CONVENTION;
794 /* Given a GDB frame, determine the address of the calling function's
795 frame. This will be used to create a new GDB frame struct. */
797 static void
798 m32r_frame_this_id (struct frame_info *this_frame,
799 void **this_prologue_cache, struct frame_id *this_id)
801 struct m32r_unwind_cache *info
802 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
803 CORE_ADDR base;
804 CORE_ADDR func;
805 struct bound_minimal_symbol msym_stack;
806 struct frame_id id;
808 /* The FUNC is easy. */
809 func = get_frame_func (this_frame);
811 /* Check if the stack is empty. */
812 msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
813 if (msym_stack.minsym && info->base == BMSYMBOL_VALUE_ADDRESS (msym_stack))
814 return;
816 /* Hopefully the prologue analysis either correctly determined the
817 frame's base (which is the SP from the previous frame), or set
818 that base to "NULL". */
819 base = info->prev_sp;
820 if (base == 0)
821 return;
823 id = frame_id_build (base, func);
824 (*this_id) = id;
827 static struct value *
828 m32r_frame_prev_register (struct frame_info *this_frame,
829 void **this_prologue_cache, int regnum)
831 struct m32r_unwind_cache *info
832 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
833 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
836 static const struct frame_unwind m32r_frame_unwind = {
837 NORMAL_FRAME,
838 default_frame_unwind_stop_reason,
839 m32r_frame_this_id,
840 m32r_frame_prev_register,
841 NULL,
842 default_frame_sniffer
845 static CORE_ADDR
846 m32r_frame_base_address (struct frame_info *this_frame, void **this_cache)
848 struct m32r_unwind_cache *info
849 = m32r_frame_unwind_cache (this_frame, this_cache);
850 return info->base;
853 static const struct frame_base m32r_frame_base = {
854 &m32r_frame_unwind,
855 m32r_frame_base_address,
856 m32r_frame_base_address,
857 m32r_frame_base_address
860 static gdbarch_init_ftype m32r_gdbarch_init;
862 static struct gdbarch *
863 m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
865 struct gdbarch *gdbarch;
866 struct gdbarch_tdep *tdep;
868 /* If there is already a candidate, use it. */
869 arches = gdbarch_list_lookup_by_info (arches, &info);
870 if (arches != NULL)
871 return arches->gdbarch;
873 /* Allocate space for the new architecture. */
874 tdep = XCNEW (struct gdbarch_tdep);
875 gdbarch = gdbarch_alloc (&info, tdep);
877 set_gdbarch_wchar_bit (gdbarch, 16);
878 set_gdbarch_wchar_signed (gdbarch, 0);
880 set_gdbarch_num_regs (gdbarch, M32R_NUM_REGS);
881 set_gdbarch_pc_regnum (gdbarch, M32R_PC_REGNUM);
882 set_gdbarch_sp_regnum (gdbarch, M32R_SP_REGNUM);
883 set_gdbarch_register_name (gdbarch, m32r_register_name);
884 set_gdbarch_register_type (gdbarch, m32r_register_type);
886 set_gdbarch_push_dummy_call (gdbarch, m32r_push_dummy_call);
887 set_gdbarch_return_value (gdbarch, m32r_return_value);
889 set_gdbarch_skip_prologue (gdbarch, m32r_skip_prologue);
890 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
891 set_gdbarch_breakpoint_kind_from_pc (gdbarch, m32r_breakpoint_kind_from_pc);
892 set_gdbarch_sw_breakpoint_from_kind (gdbarch, m32r_sw_breakpoint_from_kind);
893 set_gdbarch_memory_insert_breakpoint (gdbarch,
894 m32r_memory_insert_breakpoint);
895 set_gdbarch_memory_remove_breakpoint (gdbarch,
896 m32r_memory_remove_breakpoint);
898 set_gdbarch_frame_align (gdbarch, m32r_frame_align);
900 frame_base_set_default (gdbarch, &m32r_frame_base);
902 /* Hook in ABI-specific overrides, if they have been registered. */
903 gdbarch_init_osabi (info, gdbarch);
905 /* Hook in the default unwinders. */
906 frame_unwind_append_unwinder (gdbarch, &m32r_frame_unwind);
908 /* Support simple overlay manager. */
909 set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
911 return gdbarch;
914 void
915 _initialize_m32r_tdep (void)
917 register_gdbarch_init (bfd_arch_m32r, m32r_gdbarch_init);