Use forward_scope_exit for scoped_finish_thread_state
[deliverable/binutils-gdb.git] / gdb / m32r-tdep.c
CommitLineData
d95a8903
AC
1/* Target-dependent code for Renesas M32R, for GDB.
2
42a4f53d 3 Copyright (C) 1996-2019 Free Software Foundation, Inc.
d95a8903
AC
4
5 This file is part of GDB.
6
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
d95a8903
AC
10 (at your option) any later version.
11
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.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
d95a8903
AC
19
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"
d95a8903
AC
28#include "value.h"
29#include "inferior.h"
30#include "symfile.h"
31#include "objfiles.h"
c46b0409 32#include "osabi.h"
d95a8903
AC
33#include "language.h"
34#include "arch-utils.h"
35#include "regcache.h"
36#include "trad-frame.h"
73e8eb51 37#include "dis-asm.h"
9b32d526 38#include "m32r-tdep.h"
325fac50 39#include <algorithm>
d95a8903 40
ab0538b8
AH
41/* The size of the argument registers (r0 - r3) in bytes. */
42#define M32R_ARG_REGISTER_SIZE 4
43
d95a8903
AC
44/* Local functions */
45
d95a8903
AC
46static CORE_ADDR
47m32r_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
48{
49 /* Align to the size of an instruction (so that they can safely be
50 pushed onto the stack. */
51 return sp & ~3;
52}
53
d95a8903 54
9f0b0322
KI
55/* Breakpoints
56
025bb325 57 The little endian mode of M32R is unique. In most of architectures,
9f0b0322
KI
58 two 16-bit instructions, A and B, are placed as the following:
59
60 Big endian:
61 A0 A1 B0 B1
62
63 Little endian:
64 A1 A0 B1 B0
65
66 In M32R, they are placed like this:
67
68 Big endian:
69 A0 A1 B0 B1
70
71 Little endian:
72 B1 B0 A1 A0
73
74 This is because M32R always fetches instructions in 32-bit.
75
025bb325 76 The following functions take care of this behavior. */
d95a8903
AC
77
78static int
ae4b2284
MD
79m32r_memory_insert_breakpoint (struct gdbarch *gdbarch,
80 struct bp_target_info *bp_tgt)
d95a8903 81{
0d5ed153 82 CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
d95a8903 83 int val;
16ac4ab5 84 gdb_byte buf[4];
35c63cd8 85 gdb_byte contents_cache[4];
16ac4ab5 86 gdb_byte bp_entry[] = { 0x10, 0xf1 }; /* dpt */
d95a8903
AC
87
88 /* Save the memory contents. */
9f0b0322 89 val = target_read_memory (addr & 0xfffffffc, contents_cache, 4);
d95a8903
AC
90 if (val != 0)
91 return val; /* return error */
92
35c63cd8 93 memcpy (bp_tgt->shadow_contents, contents_cache, 4);
cd6c3b4f 94 bp_tgt->shadow_len = 4;
8181d85f 95
d95a8903 96 /* Determine appropriate breakpoint contents and size for this address. */
ae4b2284 97 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
d95a8903 98 {
9f0b0322 99 if ((addr & 3) == 0)
d95a8903 100 {
9f0b0322
KI
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];
d95a8903
AC
105 }
106 else
107 {
9f0b0322
KI
108 buf[0] = contents_cache[0];
109 buf[1] = contents_cache[1];
110 buf[2] = bp_entry[0];
111 buf[3] = bp_entry[1];
d95a8903
AC
112 }
113 }
9f0b0322
KI
114 else /* little-endian */
115 {
116 if ((addr & 3) == 0)
d95a8903 117 {
9f0b0322
KI
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];
d95a8903
AC
122 }
123 else
124 {
9f0b0322
KI
125 buf[0] = bp_entry[1];
126 buf[1] = bp_entry[0];
127 buf[2] = contents_cache[2];
128 buf[3] = contents_cache[3];
d95a8903
AC
129 }
130 }
131
132 /* Write the breakpoint. */
9f0b0322 133 val = target_write_memory (addr & 0xfffffffc, buf, 4);
d95a8903
AC
134 return val;
135}
136
137static int
ae4b2284
MD
138m32r_memory_remove_breakpoint (struct gdbarch *gdbarch,
139 struct bp_target_info *bp_tgt)
d95a8903 140{
8181d85f 141 CORE_ADDR addr = bp_tgt->placed_address;
d95a8903 142 int val;
16ac4ab5 143 gdb_byte buf[4];
8181d85f 144 gdb_byte *contents_cache = bp_tgt->shadow_contents;
d95a8903 145
9f0b0322
KI
146 buf[0] = contents_cache[0];
147 buf[1] = contents_cache[1];
148 buf[2] = contents_cache[2];
149 buf[3] = contents_cache[3];
150
151 /* Remove parallel bit. */
ae4b2284 152 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
d95a8903 153 {
9f0b0322
KI
154 if ((buf[0] & 0x80) == 0 && (buf[2] & 0x80) != 0)
155 buf[2] &= 0x7f;
d95a8903 156 }
9f0b0322 157 else /* little-endian */
d95a8903 158 {
9f0b0322
KI
159 if ((buf[3] & 0x80) == 0 && (buf[1] & 0x80) != 0)
160 buf[1] &= 0x7f;
d95a8903
AC
161 }
162
163 /* Write contents. */
dd110abf 164 val = target_write_raw_memory (addr & 0xfffffffc, buf, 4);
d95a8903
AC
165 return val;
166}
167
cd6c3b4f
YQ
168/* Implement the breakpoint_kind_from_pc gdbarch method. */
169
d19280ad
YQ
170static int
171m32r_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
172{
173 if ((*pcptr & 3) == 0)
174 return 4;
175 else
176 return 2;
177}
178
cd6c3b4f
YQ
179/* Implement the sw_breakpoint_from_kind gdbarch method. */
180
16ac4ab5 181static const gdb_byte *
d19280ad 182m32r_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
d95a8903 183{
025bb325
MS
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 */
d19280ad
YQ
190
191 *size = kind;
d95a8903
AC
192
193 /* Determine appropriate breakpoint. */
67d57894 194 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
d19280ad 195 return be_bp_entry;
d95a8903
AC
196 else
197 {
d19280ad
YQ
198 if (kind == 4)
199 return le_bp_entry;
d95a8903 200 else
d19280ad 201 return le_bp_entry + 2;
d95a8903 202 }
d95a8903
AC
203}
204
a121b7c1 205static const char *m32r_register_names[] = {
d95a8903
AC
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"
210};
211
d95a8903 212static const char *
d93859e2 213m32r_register_name (struct gdbarch *gdbarch, int reg_nr)
d95a8903
AC
214{
215 if (reg_nr < 0)
216 return NULL;
9b32d526 217 if (reg_nr >= M32R_NUM_REGS)
d95a8903
AC
218 return NULL;
219 return m32r_register_names[reg_nr];
220}
221
222
223/* Return the GDB type object for the "standard" data type
224 of data in register N. */
225
226static struct type *
227m32r_register_type (struct gdbarch *gdbarch, int reg_nr)
228{
229 if (reg_nr == M32R_PC_REGNUM)
0dfff4cb 230 return builtin_type (gdbarch)->builtin_func_ptr;
d95a8903 231 else if (reg_nr == M32R_SP_REGNUM || reg_nr == M32R_FP_REGNUM)
0dfff4cb 232 return builtin_type (gdbarch)->builtin_data_ptr;
d95a8903 233 else
df4df182 234 return builtin_type (gdbarch)->builtin_int32;
d95a8903
AC
235}
236
237
238/* Write into appropriate registers a function return value
025bb325 239 of type TYPE, given in virtual format.
d95a8903 240
025bb325 241 Things always get returned in RET1_REGNUM, RET2_REGNUM. */
d95a8903
AC
242
243static void
244m32r_store_return_value (struct type *type, struct regcache *regcache,
7c543f7b 245 const gdb_byte *valbuf)
d95a8903 246{
ac7936df 247 struct gdbarch *gdbarch = regcache->arch ();
e17a4113 248 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
249 CORE_ADDR regval;
250 int len = TYPE_LENGTH (type);
251
e17a4113 252 regval = extract_unsigned_integer (valbuf, len > 4 ? 4 : len, byte_order);
d95a8903
AC
253 regcache_cooked_write_unsigned (regcache, RET1_REGNUM, regval);
254
255 if (len > 4)
256 {
7c543f7b 257 regval = extract_unsigned_integer (valbuf + 4,
e17a4113 258 len - 4, byte_order);
d95a8903
AC
259 regcache_cooked_write_unsigned (regcache, RET1_REGNUM + 1, regval);
260 }
261}
262
025bb325 263/* This is required by skip_prologue. The results of decoding a prologue
d95a8903
AC
264 should be cached because this thrashing is getting nuts. */
265
cea15572 266static int
e17a4113
UW
267decode_prologue (struct gdbarch *gdbarch,
268 CORE_ADDR start_pc, CORE_ADDR scan_limit,
cea15572 269 CORE_ADDR *pl_endptr, unsigned long *framelength)
d95a8903 270{
e17a4113 271 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
272 unsigned long framesize;
273 int insn;
274 int op1;
d95a8903 275 CORE_ADDR after_prologue = 0;
cea15572 276 CORE_ADDR after_push = 0;
d95a8903
AC
277 CORE_ADDR after_stack_adjust = 0;
278 CORE_ADDR current_pc;
cea15572 279 LONGEST return_value;
d95a8903
AC
280
281 framesize = 0;
282 after_prologue = 0;
283
284 for (current_pc = start_pc; current_pc < scan_limit; current_pc += 2)
285 {
025bb325 286 /* Check if current pc's location is readable. */
e17a4113 287 if (!safe_read_memory_integer (current_pc, 2, byte_order, &return_value))
cea15572
KI
288 return -1;
289
e17a4113 290 insn = read_memory_unsigned_integer (current_pc, 2, byte_order);
d95a8903 291
cea15572
KI
292 if (insn == 0x0000)
293 break;
294
d95a8903 295 /* If this is a 32 bit instruction, we dont want to examine its
025bb325 296 immediate data as though it were an instruction. */
d95a8903
AC
297 if (current_pc & 0x02)
298 {
025bb325 299 /* Decode this instruction further. */
d95a8903
AC
300 insn &= 0x7fff;
301 }
302 else
303 {
d95a8903
AC
304 if (insn & 0x8000)
305 {
306 if (current_pc == scan_limit)
307 scan_limit += 2; /* extend the search */
cea15572 308
d95a8903 309 current_pc += 2; /* skip the immediate data */
cea15572 310
025bb325 311 /* Check if current pc's location is readable. */
e17a4113
UW
312 if (!safe_read_memory_integer (current_pc, 2, byte_order,
313 &return_value))
cea15572
KI
314 return -1;
315
d95a8903
AC
316 if (insn == 0x8faf) /* add3 sp, sp, xxxx */
317 /* add 16 bit sign-extended offset */
318 {
319 framesize +=
e17a4113
UW
320 -((short) read_memory_unsigned_integer (current_pc,
321 2, byte_order));
d95a8903
AC
322 }
323 else
324 {
025bb325 325 if (((insn >> 8) == 0xe4) /* ld24 r4, xxxxxx; sub sp, r4 */
e17a4113
UW
326 && safe_read_memory_integer (current_pc + 2,
327 2, byte_order,
cea15572 328 &return_value)
7e3dd49e 329 && read_memory_unsigned_integer (current_pc + 2,
e17a4113
UW
330 2, byte_order)
331 == 0x0f24)
d95a8903 332 {
025bb325 333 /* Subtract 24 bit sign-extended negative-offset. */
e17a4113
UW
334 insn = read_memory_unsigned_integer (current_pc - 2,
335 4, byte_order);
d95a8903
AC
336 if (insn & 0x00800000) /* sign extend */
337 insn |= 0xff000000; /* negative */
338 else
339 insn &= 0x00ffffff; /* positive */
340 framesize += insn;
341 }
342 }
cea15572 343 after_push = current_pc + 2;
d95a8903
AC
344 continue;
345 }
346 }
025bb325 347 op1 = insn & 0xf000; /* Isolate just the first nibble. */
d95a8903
AC
348
349 if ((insn & 0xf0ff) == 0x207f)
350 { /* st reg, @-sp */
d95a8903 351 framesize += 4;
d95a8903
AC
352 after_prologue = 0;
353 continue;
354 }
355 if ((insn >> 8) == 0x4f) /* addi sp, xx */
025bb325 356 /* Add 8 bit sign-extended offset. */
d95a8903 357 {
9ffbf372 358 int stack_adjust = (signed char) (insn & 0xff);
d95a8903
AC
359
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. */
364
365 if (stack_adjust < 0)
366 {
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;
372 }
373 continue;
374 }
375 if (insn == 0x1d8f)
376 { /* mv fp, sp */
377 after_prologue = current_pc + 2;
378 break; /* end of stack adjustments */
379 }
cea15572 380
025bb325 381 /* Nop looks like a branch, continue explicitly. */
d95a8903
AC
382 if (insn == 0x7000)
383 {
384 after_prologue = current_pc + 2;
025bb325 385 continue; /* nop occurs between pushes. */
d95a8903 386 }
025bb325 387 /* End of prolog if any of these are trap instructions. */
cea15572
KI
388 if ((insn & 0xfff0) == 0x10f0)
389 {
390 after_prologue = current_pc;
391 break;
392 }
025bb325 393 /* End of prolog if any of these are branch instructions. */
d95a8903
AC
394 if ((op1 == 0x7000) || (op1 == 0xb000) || (op1 == 0xf000))
395 {
396 after_prologue = current_pc;
d95a8903
AC
397 continue;
398 }
025bb325 399 /* Some of the branch instructions are mixed with other types. */
d95a8903
AC
400 if (op1 == 0x1000)
401 {
402 int subop = insn & 0x0ff0;
403 if ((subop == 0x0ec0) || (subop == 0x0fc0))
404 {
405 after_prologue = current_pc;
d95a8903
AC
406 continue; /* jmp , jl */
407 }
408 }
409 }
410
cea15572
KI
411 if (framelength)
412 *framelength = framesize;
413
d95a8903
AC
414 if (current_pc >= scan_limit)
415 {
416 if (pl_endptr)
417 {
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
025bb325 421 end of the prologue? I just don't know. */
d95a8903
AC
422 {
423 *pl_endptr = after_stack_adjust;
424 }
cea15572
KI
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
025bb325 428 end of the prologue? I just don't know. */
cea15572
KI
429 {
430 *pl_endptr = after_push;
431 }
d95a8903
AC
432 else
433 /* We reached the end of the loop without finding the end
025bb325
MS
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.) */
d95a8903
AC
438 *pl_endptr = start_pc;
439 }
cea15572 440 return 0;
d95a8903 441 }
cea15572 442
d95a8903
AC
443 if (after_prologue == 0)
444 after_prologue = current_pc;
445
446 if (pl_endptr)
447 *pl_endptr = after_prologue;
cea15572
KI
448
449 return 0;
d95a8903
AC
450} /* decode_prologue */
451
452/* Function: skip_prologue
025bb325 453 Find end of function prologue. */
d95a8903 454
cea15572 455#define DEFAULT_SEARCH_LIMIT 128
d95a8903 456
63807e1d 457static CORE_ADDR
6093d2eb 458m32r_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
d95a8903 459{
e17a4113 460 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
461 CORE_ADDR func_addr, func_end;
462 struct symtab_and_line sal;
cea15572 463 LONGEST return_value;
d95a8903 464
025bb325 465 /* See what the symbol table says. */
d95a8903
AC
466
467 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
468 {
469 sal = find_pc_line (func_addr, 0);
470
471 if (sal.line != 0 && sal.end <= func_end)
472 {
473 func_end = sal.end;
474 }
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. */
479 {
325fac50 480 func_end = std::min (func_end, func_addr + DEFAULT_SEARCH_LIMIT);
d95a8903
AC
481 }
482 }
483 else
484 func_end = pc + DEFAULT_SEARCH_LIMIT;
cea15572 485
025bb325 486 /* If pc's location is not readable, just quit. */
e17a4113 487 if (!safe_read_memory_integer (pc, 4, byte_order, &return_value))
cea15572
KI
488 return pc;
489
490 /* Find the end of prologue. */
e17a4113 491 if (decode_prologue (gdbarch, pc, func_end, &sal.end, NULL) < 0)
cea15572
KI
492 return pc;
493
d95a8903
AC
494 return sal.end;
495}
496
d95a8903
AC
497struct m32r_unwind_cache
498{
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;
513};
514
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
025bb325 519 for it IS the sp for the next frame. */
d95a8903
AC
520
521static struct m32r_unwind_cache *
94afd7a6 522m32r_frame_unwind_cache (struct frame_info *this_frame,
d95a8903
AC
523 void **this_prologue_cache)
524{
cea15572 525 CORE_ADDR pc, scan_limit;
d95a8903
AC
526 ULONGEST prev_sp;
527 ULONGEST this_base;
22e048c9 528 unsigned long op;
d95a8903
AC
529 int i;
530 struct m32r_unwind_cache *info;
531
cea15572 532
d95a8903 533 if ((*this_prologue_cache))
9a3c8263 534 return (struct m32r_unwind_cache *) (*this_prologue_cache);
d95a8903
AC
535
536 info = FRAME_OBSTACK_ZALLOC (struct m32r_unwind_cache);
537 (*this_prologue_cache) = info;
94afd7a6 538 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
d95a8903
AC
539
540 info->size = 0;
541 info->sp_offset = 0;
d95a8903 542 info->uses_frame = 0;
cea15572 543
94afd7a6
UW
544 scan_limit = get_frame_pc (this_frame);
545 for (pc = get_frame_func (this_frame);
cea15572 546 pc > 0 && pc < scan_limit; pc += 2)
d95a8903
AC
547 {
548 if ((pc & 2) == 0)
549 {
94afd7a6 550 op = get_frame_memory_unsigned (this_frame, pc, 4);
d95a8903
AC
551 if ((op & 0x80000000) == 0x80000000)
552 {
553 /* 32-bit instruction */
554 if ((op & 0xffff0000) == 0x8faf0000)
555 {
556 /* add3 sp,sp,xxxx */
557 short n = op & 0xffff;
558 info->sp_offset += n;
559 }
cea15572 560 else if (((op >> 8) == 0xe4)
94afd7a6 561 && get_frame_memory_unsigned (this_frame, pc + 2,
7e3dd49e 562 2) == 0x0f24)
d95a8903 563 {
cea15572 564 /* ld24 r4, xxxxxx; sub sp, r4 */
d95a8903
AC
565 unsigned long n = op & 0xffffff;
566 info->sp_offset += n;
cea15572 567 pc += 2; /* skip sub instruction */
d95a8903 568 }
d95a8903 569
cea15572
KI
570 if (pc == scan_limit)
571 scan_limit += 2; /* extend the search */
572 pc += 2; /* skip the immediate data */
d95a8903
AC
573 continue;
574 }
575 }
576
577 /* 16-bit instructions */
94afd7a6 578 op = get_frame_memory_unsigned (this_frame, pc, 2) & 0x7fff;
d95a8903
AC
579 if ((op & 0xf0ff) == 0x207f)
580 {
581 /* st rn, @-sp */
582 int regno = ((op >> 8) & 0xf);
583 info->sp_offset -= 4;
584 info->saved_regs[regno].addr = info->sp_offset;
585 }
586 else if ((op & 0xff00) == 0x4f00)
587 {
588 /* addi sp, xx */
9ffbf372 589 int n = (signed char) (op & 0xff);
d95a8903
AC
590 info->sp_offset += n;
591 }
592 else if (op == 0x1d8f)
593 {
594 /* mv fp, sp */
595 info->uses_frame = 1;
596 info->r13_offset = info->sp_offset;
cea15572
KI
597 break; /* end of stack adjustments */
598 }
599 else if ((op & 0xfff0) == 0x10f0)
600 {
025bb325
MS
601 /* End of prologue if this is a trap instruction. */
602 break; /* End of stack adjustments. */
d95a8903 603 }
d95a8903
AC
604 }
605
606 info->size = -info->sp_offset;
607
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)
611 {
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. */
94afd7a6 615 this_base = get_frame_register_unsigned (this_frame, M32R_FP_REGNUM);
d95a8903
AC
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;
619 }
620 else
621 {
622 /* Assume that the FP is this frame's SP but with that pushed
623 stack space added back. */
94afd7a6 624 this_base = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
d95a8903
AC
625 prev_sp = this_base + info->size;
626 }
627
628 /* Convert that SP/BASE into real addresses. */
629 info->prev_sp = prev_sp;
630 info->base = this_base;
631
632 /* Adjust all the saved registers so that they contain addresses and
633 not offsets. */
94afd7a6 634 for (i = 0; i < gdbarch_num_regs (get_frame_arch (this_frame)) - 1; i++)
d95a8903
AC
635 if (trad_frame_addr_p (info->saved_regs, i))
636 info->saved_regs[i].addr = (info->prev_sp + info->saved_regs[i].addr);
637
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];
643
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);
647
648 return info;
649}
650
d95a8903
AC
651static CORE_ADDR
652m32r_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
653{
7e3dd49e 654 return frame_unwind_register_unsigned (next_frame, M32R_SP_REGNUM);
d95a8903
AC
655}
656
657
658static CORE_ADDR
7d9b040b 659m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
d95a8903 660 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
cf84fa6b
AH
661 struct value **args, CORE_ADDR sp,
662 function_call_return_method return_method,
d95a8903
AC
663 CORE_ADDR struct_addr)
664{
e17a4113 665 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
666 int stack_offset, stack_alloc;
667 int argreg = ARG1_REGNUM;
668 int argnum;
669 struct type *type;
670 enum type_code typecode;
671 CORE_ADDR regval;
16ac4ab5 672 gdb_byte *val;
ab0538b8 673 gdb_byte valbuf[M32R_ARG_REGISTER_SIZE];
d95a8903 674 int len;
d95a8903 675
025bb325 676 /* First force sp to a 4-byte alignment. */
d95a8903
AC
677 sp = sp & ~3;
678
679 /* Set the return address. For the m32r, the return breakpoint is
680 always at BP_ADDR. */
681 regcache_cooked_write_unsigned (regcache, LR_REGNUM, bp_addr);
682
683 /* If STRUCT_RETURN is true, then the struct return address (in
684 STRUCT_ADDR) will consume the first argument-passing register.
685 Both adjust the register count and store that value. */
cf84fa6b 686 if (return_method == return_method_struct)
d95a8903
AC
687 {
688 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
689 argreg++;
690 }
691
025bb325 692 /* Now make sure there's space on the stack. */
d95a8903 693 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
4991999e 694 stack_alloc += ((TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3);
025bb325 695 sp -= stack_alloc; /* Make room on stack for args. */
d95a8903
AC
696
697 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
698 {
4991999e 699 type = value_type (args[argnum]);
d95a8903
AC
700 typecode = TYPE_CODE (type);
701 len = TYPE_LENGTH (type);
702
703 memset (valbuf, 0, sizeof (valbuf));
704
705 /* Passes structures that do not fit in 2 registers by reference. */
706 if (len > 8
707 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
708 {
e17a4113
UW
709 store_unsigned_integer (valbuf, 4, byte_order,
710 value_address (args[argnum]));
d95a8903
AC
711 typecode = TYPE_CODE_PTR;
712 len = 4;
713 val = valbuf;
714 }
715 else if (len < 4)
716 {
025bb325 717 /* Value gets right-justified in the register or stack word. */
7e3dd49e 718 memcpy (valbuf + (register_size (gdbarch, argreg) - len),
16ac4ab5 719 (gdb_byte *) value_contents (args[argnum]), len);
d95a8903
AC
720 val = valbuf;
721 }
722 else
16ac4ab5 723 val = (gdb_byte *) value_contents (args[argnum]);
d95a8903
AC
724
725 while (len > 0)
726 {
727 if (argreg > ARGN_REGNUM)
728 {
025bb325 729 /* Must go on the stack. */
d95a8903
AC
730 write_memory (sp + stack_offset, val, 4);
731 stack_offset += 4;
732 }
733 else if (argreg <= ARGN_REGNUM)
734 {
025bb325 735 /* There's room in a register. */
d95a8903 736 regval =
7e3dd49e 737 extract_unsigned_integer (val,
e17a4113
UW
738 register_size (gdbarch, argreg),
739 byte_order);
d95a8903
AC
740 regcache_cooked_write_unsigned (regcache, argreg++, regval);
741 }
742
743 /* Store the value 4 bytes at a time. This means that things
744 larger than 4 bytes may go partly in registers and partly
745 on the stack. */
7e3dd49e
AC
746 len -= register_size (gdbarch, argreg);
747 val += register_size (gdbarch, argreg);
d95a8903
AC
748 }
749 }
750
751 /* Finally, update the SP register. */
752 regcache_cooked_write_unsigned (regcache, M32R_SP_REGNUM, sp);
753
754 return sp;
755}
756
757
758/* Given a return value in `regbuf' with a type `valtype',
759 extract and copy its value into `valbuf'. */
760
761static void
762m32r_extract_return_value (struct type *type, struct regcache *regcache,
7c543f7b 763 gdb_byte *dst)
d95a8903 764{
ac7936df 765 struct gdbarch *gdbarch = regcache->arch ();
e17a4113 766 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
767 int len = TYPE_LENGTH (type);
768 ULONGEST tmp;
769
770 /* By using store_unsigned_integer we avoid having to do
771 anything special for small big-endian values. */
772 regcache_cooked_read_unsigned (regcache, RET1_REGNUM, &tmp);
7c543f7b 773 store_unsigned_integer (dst, (len > 4 ? len - 4 : len), byte_order, tmp);
d95a8903
AC
774
775 /* Ignore return values more than 8 bytes in size because the m32r
025bb325 776 returns anything more than 8 bytes in the stack. */
d95a8903
AC
777 if (len > 4)
778 {
779 regcache_cooked_read_unsigned (regcache, RET1_REGNUM + 1, &tmp);
7c543f7b 780 store_unsigned_integer (dst + len - 4, 4, byte_order, tmp);
d95a8903
AC
781 }
782}
783
63807e1d 784static enum return_value_convention
6a3a010b 785m32r_return_value (struct gdbarch *gdbarch, struct value *function,
c055b101
CV
786 struct type *valtype, struct regcache *regcache,
787 gdb_byte *readbuf, const gdb_byte *writebuf)
14588880
KI
788{
789 if (TYPE_LENGTH (valtype) > 8)
790 return RETURN_VALUE_STRUCT_CONVENTION;
791 else
792 {
793 if (readbuf != NULL)
794 m32r_extract_return_value (valtype, regcache, readbuf);
795 if (writebuf != NULL)
796 m32r_store_return_value (valtype, regcache, writebuf);
797 return RETURN_VALUE_REGISTER_CONVENTION;
798 }
799}
800
801
d95a8903
AC
802
803static CORE_ADDR
804m32r_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
805{
7e3dd49e 806 return frame_unwind_register_unsigned (next_frame, M32R_PC_REGNUM);
d95a8903
AC
807}
808
809/* Given a GDB frame, determine the address of the calling function's
810 frame. This will be used to create a new GDB frame struct. */
811
812static void
94afd7a6 813m32r_frame_this_id (struct frame_info *this_frame,
d95a8903
AC
814 void **this_prologue_cache, struct frame_id *this_id)
815{
816 struct m32r_unwind_cache *info
94afd7a6 817 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
d95a8903
AC
818 CORE_ADDR base;
819 CORE_ADDR func;
3b7344d5 820 struct bound_minimal_symbol msym_stack;
d95a8903
AC
821 struct frame_id id;
822
823 /* The FUNC is easy. */
94afd7a6 824 func = get_frame_func (this_frame);
d95a8903 825
d95a8903
AC
826 /* Check if the stack is empty. */
827 msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
77e371c0 828 if (msym_stack.minsym && info->base == BMSYMBOL_VALUE_ADDRESS (msym_stack))
d95a8903
AC
829 return;
830
831 /* Hopefully the prologue analysis either correctly determined the
832 frame's base (which is the SP from the previous frame), or set
833 that base to "NULL". */
834 base = info->prev_sp;
835 if (base == 0)
836 return;
837
838 id = frame_id_build (base, func);
d95a8903
AC
839 (*this_id) = id;
840}
841
94afd7a6
UW
842static struct value *
843m32r_frame_prev_register (struct frame_info *this_frame,
844 void **this_prologue_cache, int regnum)
d95a8903
AC
845{
846 struct m32r_unwind_cache *info
94afd7a6
UW
847 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
848 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
d95a8903
AC
849}
850
851static const struct frame_unwind m32r_frame_unwind = {
852 NORMAL_FRAME,
8fbca658 853 default_frame_unwind_stop_reason,
d95a8903 854 m32r_frame_this_id,
94afd7a6
UW
855 m32r_frame_prev_register,
856 NULL,
857 default_frame_sniffer
d95a8903
AC
858};
859
d95a8903 860static CORE_ADDR
94afd7a6 861m32r_frame_base_address (struct frame_info *this_frame, void **this_cache)
d95a8903
AC
862{
863 struct m32r_unwind_cache *info
94afd7a6 864 = m32r_frame_unwind_cache (this_frame, this_cache);
d95a8903
AC
865 return info->base;
866}
867
868static const struct frame_base m32r_frame_base = {
869 &m32r_frame_unwind,
870 m32r_frame_base_address,
871 m32r_frame_base_address,
872 m32r_frame_base_address
873};
874
94afd7a6
UW
875/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
876 frame. The frame ID's base needs to match the TOS value saved by
877 save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint. */
d95a8903
AC
878
879static struct frame_id
94afd7a6 880m32r_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
d95a8903 881{
94afd7a6
UW
882 CORE_ADDR sp = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
883 return frame_id_build (sp, get_frame_pc (this_frame));
d95a8903
AC
884}
885
886
887static gdbarch_init_ftype m32r_gdbarch_init;
888
889static struct gdbarch *
890m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
891{
892 struct gdbarch *gdbarch;
893 struct gdbarch_tdep *tdep;
894
895 /* If there is already a candidate, use it. */
896 arches = gdbarch_list_lookup_by_info (arches, &info);
897 if (arches != NULL)
898 return arches->gdbarch;
899
900 /* Allocate space for the new architecture. */
cdd238da 901 tdep = XCNEW (struct gdbarch_tdep);
d95a8903
AC
902 gdbarch = gdbarch_alloc (&info, tdep);
903
53375380
PA
904 set_gdbarch_wchar_bit (gdbarch, 16);
905 set_gdbarch_wchar_signed (gdbarch, 0);
906
d95a8903
AC
907 set_gdbarch_unwind_sp (gdbarch, m32r_unwind_sp);
908
e839132d 909 set_gdbarch_num_regs (gdbarch, M32R_NUM_REGS);
d27b54ad 910 set_gdbarch_pc_regnum (gdbarch, M32R_PC_REGNUM);
d95a8903
AC
911 set_gdbarch_sp_regnum (gdbarch, M32R_SP_REGNUM);
912 set_gdbarch_register_name (gdbarch, m32r_register_name);
913 set_gdbarch_register_type (gdbarch, m32r_register_type);
914
d95a8903 915 set_gdbarch_push_dummy_call (gdbarch, m32r_push_dummy_call);
14588880 916 set_gdbarch_return_value (gdbarch, m32r_return_value);
d95a8903
AC
917
918 set_gdbarch_skip_prologue (gdbarch, m32r_skip_prologue);
919 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
04180708
YQ
920 set_gdbarch_breakpoint_kind_from_pc (gdbarch, m32r_breakpoint_kind_from_pc);
921 set_gdbarch_sw_breakpoint_from_kind (gdbarch, m32r_sw_breakpoint_from_kind);
d95a8903
AC
922 set_gdbarch_memory_insert_breakpoint (gdbarch,
923 m32r_memory_insert_breakpoint);
924 set_gdbarch_memory_remove_breakpoint (gdbarch,
925 m32r_memory_remove_breakpoint);
926
d95a8903
AC
927 set_gdbarch_frame_align (gdbarch, m32r_frame_align);
928
d95a8903
AC
929 frame_base_set_default (gdbarch, &m32r_frame_base);
930
931 /* Methods for saving / extracting a dummy frame's ID. The ID's
932 stack address must match the SP value returned by
933 PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
94afd7a6 934 set_gdbarch_dummy_id (gdbarch, m32r_dummy_id);
d95a8903
AC
935
936 /* Return the unwound PC value. */
937 set_gdbarch_unwind_pc (gdbarch, m32r_unwind_pc);
938
c46b0409
KI
939 /* Hook in ABI-specific overrides, if they have been registered. */
940 gdbarch_init_osabi (info, gdbarch);
941
942 /* Hook in the default unwinders. */
94afd7a6 943 frame_unwind_append_unwinder (gdbarch, &m32r_frame_unwind);
c46b0409 944
1c772458
UW
945 /* Support simple overlay manager. */
946 set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
947
d95a8903
AC
948 return gdbarch;
949}
950
951void
952_initialize_m32r_tdep (void)
953{
954 register_gdbarch_init (bfd_arch_m32r, m32r_gdbarch_init);
955}
This page took 1.643257 seconds and 4 git commands to generate.