Automatic date update in version.in
[binutils-gdb.git] / gdb / m32r-tdep.c
blob3ad4c8de6bf2e15284eb7b9ce496f7f8725284c8
1 /* Target-dependent code for Renesas M32R, for GDB.
3 Copyright (C) 1996-2022 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 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 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].set_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 (info->saved_regs[i].is_addr ())
636 info->saved_regs[i].set_addr (info->prev_sp
637 + info->saved_regs[i].addr ());
639 /* The call instruction moves the caller's PC in the callee's LR.
640 Since this is an unwind, do the reverse. Copy the location of LR
641 into PC (the address / regnum) so that a request for PC will be
642 converted into a request for the LR. */
643 info->saved_regs[M32R_PC_REGNUM] = info->saved_regs[LR_REGNUM];
645 /* The previous frame's SP needed to be computed. Save the computed
646 value. */
647 info->saved_regs[M32R_SP_REGNUM].set_value (prev_sp);
649 return info;
652 static CORE_ADDR
653 m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
654 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
655 struct value **args, CORE_ADDR sp,
656 function_call_return_method return_method,
657 CORE_ADDR struct_addr)
659 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
660 int stack_offset, stack_alloc;
661 int argreg = ARG1_REGNUM;
662 int argnum;
663 struct type *type;
664 enum type_code typecode;
665 CORE_ADDR regval;
666 gdb_byte *val;
667 gdb_byte valbuf[M32R_ARG_REGISTER_SIZE];
668 int len;
670 /* First force sp to a 4-byte alignment. */
671 sp = sp & ~3;
673 /* Set the return address. For the m32r, the return breakpoint is
674 always at BP_ADDR. */
675 regcache_cooked_write_unsigned (regcache, LR_REGNUM, bp_addr);
677 /* If STRUCT_RETURN is true, then the struct return address (in
678 STRUCT_ADDR) will consume the first argument-passing register.
679 Both adjust the register count and store that value. */
680 if (return_method == return_method_struct)
682 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
683 argreg++;
686 /* Now make sure there's space on the stack. */
687 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
688 stack_alloc += ((TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3);
689 sp -= stack_alloc; /* Make room on stack for args. */
691 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
693 type = value_type (args[argnum]);
694 typecode = type->code ();
695 len = TYPE_LENGTH (type);
697 memset (valbuf, 0, sizeof (valbuf));
699 /* Passes structures that do not fit in 2 registers by reference. */
700 if (len > 8
701 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
703 store_unsigned_integer (valbuf, 4, byte_order,
704 value_address (args[argnum]));
705 typecode = TYPE_CODE_PTR;
706 len = 4;
707 val = valbuf;
709 else if (len < 4)
711 /* Value gets right-justified in the register or stack word. */
712 memcpy (valbuf + (register_size (gdbarch, argreg) - len),
713 (gdb_byte *) value_contents (args[argnum]).data (), len);
714 val = valbuf;
716 else
717 val = (gdb_byte *) value_contents (args[argnum]).data ();
719 while (len > 0)
721 if (argreg > ARGN_REGNUM)
723 /* Must go on the stack. */
724 write_memory (sp + stack_offset, val, 4);
725 stack_offset += 4;
727 else if (argreg <= ARGN_REGNUM)
729 /* There's room in a register. */
730 regval =
731 extract_unsigned_integer (val,
732 register_size (gdbarch, argreg),
733 byte_order);
734 regcache_cooked_write_unsigned (regcache, argreg++, regval);
737 /* Store the value 4 bytes at a time. This means that things
738 larger than 4 bytes may go partly in registers and partly
739 on the stack. */
740 len -= register_size (gdbarch, argreg);
741 val += register_size (gdbarch, argreg);
745 /* Finally, update the SP register. */
746 regcache_cooked_write_unsigned (regcache, M32R_SP_REGNUM, sp);
748 return sp;
752 /* Given a return value in `regbuf' with a type `valtype',
753 extract and copy its value into `valbuf'. */
755 static void
756 m32r_extract_return_value (struct type *type, struct regcache *regcache,
757 gdb_byte *dst)
759 struct gdbarch *gdbarch = regcache->arch ();
760 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
761 int len = TYPE_LENGTH (type);
762 ULONGEST tmp;
764 /* By using store_unsigned_integer we avoid having to do
765 anything special for small big-endian values. */
766 regcache_cooked_read_unsigned (regcache, RET1_REGNUM, &tmp);
767 store_unsigned_integer (dst, (len > 4 ? len - 4 : len), byte_order, tmp);
769 /* Ignore return values more than 8 bytes in size because the m32r
770 returns anything more than 8 bytes in the stack. */
771 if (len > 4)
773 regcache_cooked_read_unsigned (regcache, RET1_REGNUM + 1, &tmp);
774 store_unsigned_integer (dst + len - 4, 4, byte_order, tmp);
778 static enum return_value_convention
779 m32r_return_value (struct gdbarch *gdbarch, struct value *function,
780 struct type *valtype, struct regcache *regcache,
781 gdb_byte *readbuf, const gdb_byte *writebuf)
783 if (TYPE_LENGTH (valtype) > 8)
784 return RETURN_VALUE_STRUCT_CONVENTION;
785 else
787 if (readbuf != NULL)
788 m32r_extract_return_value (valtype, regcache, readbuf);
789 if (writebuf != NULL)
790 m32r_store_return_value (valtype, regcache, writebuf);
791 return RETURN_VALUE_REGISTER_CONVENTION;
795 /* Given a GDB frame, determine the address of the calling function's
796 frame. This will be used to create a new GDB frame struct. */
798 static void
799 m32r_frame_this_id (struct frame_info *this_frame,
800 void **this_prologue_cache, struct frame_id *this_id)
802 struct m32r_unwind_cache *info
803 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
804 CORE_ADDR base;
805 CORE_ADDR func;
806 struct bound_minimal_symbol msym_stack;
807 struct frame_id id;
809 /* The FUNC is easy. */
810 func = get_frame_func (this_frame);
812 /* Check if the stack is empty. */
813 msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
814 if (msym_stack.minsym && info->base == msym_stack.value_address ())
815 return;
817 /* Hopefully the prologue analysis either correctly determined the
818 frame's base (which is the SP from the previous frame), or set
819 that base to "NULL". */
820 base = info->prev_sp;
821 if (base == 0)
822 return;
824 id = frame_id_build (base, func);
825 (*this_id) = id;
828 static struct value *
829 m32r_frame_prev_register (struct frame_info *this_frame,
830 void **this_prologue_cache, int regnum)
832 struct m32r_unwind_cache *info
833 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
834 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
837 static const struct frame_unwind m32r_frame_unwind = {
838 "m32r prologue",
839 NORMAL_FRAME,
840 default_frame_unwind_stop_reason,
841 m32r_frame_this_id,
842 m32r_frame_prev_register,
843 NULL,
844 default_frame_sniffer
847 static CORE_ADDR
848 m32r_frame_base_address (struct frame_info *this_frame, void **this_cache)
850 struct m32r_unwind_cache *info
851 = m32r_frame_unwind_cache (this_frame, this_cache);
852 return info->base;
855 static const struct frame_base m32r_frame_base = {
856 &m32r_frame_unwind,
857 m32r_frame_base_address,
858 m32r_frame_base_address,
859 m32r_frame_base_address
862 static gdbarch_init_ftype m32r_gdbarch_init;
864 static struct gdbarch *
865 m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
867 struct gdbarch *gdbarch;
869 /* If there is already a candidate, use it. */
870 arches = gdbarch_list_lookup_by_info (arches, &info);
871 if (arches != NULL)
872 return arches->gdbarch;
874 /* Allocate space for the new architecture. */
875 m32r_gdbarch_tdep *tdep = new m32r_gdbarch_tdep;
876 gdbarch = gdbarch_alloc (&info, tdep);
878 set_gdbarch_wchar_bit (gdbarch, 16);
879 set_gdbarch_wchar_signed (gdbarch, 0);
881 set_gdbarch_num_regs (gdbarch, M32R_NUM_REGS);
882 set_gdbarch_pc_regnum (gdbarch, M32R_PC_REGNUM);
883 set_gdbarch_sp_regnum (gdbarch, M32R_SP_REGNUM);
884 set_gdbarch_register_name (gdbarch, m32r_register_name);
885 set_gdbarch_register_type (gdbarch, m32r_register_type);
887 set_gdbarch_push_dummy_call (gdbarch, m32r_push_dummy_call);
888 set_gdbarch_return_value (gdbarch, m32r_return_value);
890 set_gdbarch_skip_prologue (gdbarch, m32r_skip_prologue);
891 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
892 set_gdbarch_breakpoint_kind_from_pc (gdbarch, m32r_breakpoint_kind_from_pc);
893 set_gdbarch_sw_breakpoint_from_kind (gdbarch, m32r_sw_breakpoint_from_kind);
894 set_gdbarch_memory_insert_breakpoint (gdbarch,
895 m32r_memory_insert_breakpoint);
896 set_gdbarch_memory_remove_breakpoint (gdbarch,
897 m32r_memory_remove_breakpoint);
899 set_gdbarch_frame_align (gdbarch, m32r_frame_align);
901 frame_base_set_default (gdbarch, &m32r_frame_base);
903 /* Hook in ABI-specific overrides, if they have been registered. */
904 gdbarch_init_osabi (info, gdbarch);
906 /* Hook in the default unwinders. */
907 frame_unwind_append_unwinder (gdbarch, &m32r_frame_unwind);
909 /* Support simple overlay manager. */
910 set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
912 return gdbarch;
915 void _initialize_m32r_tdep ();
916 void
917 _initialize_m32r_tdep ()
919 register_gdbarch_init (bfd_arch_m32r, m32r_gdbarch_init);