testsuite: i386 regression for funcargs.exp
[deliverable/binutils-gdb.git] / gdb / m32r-tdep.c
CommitLineData
d95a8903
AC
1/* Target-dependent code for Renesas M32R, for GDB.
2
618f726f 3 Copyright (C) 1996-2016 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"
77e371c0 38#include "objfiles.h"
d95a8903 39
9b32d526 40#include "m32r-tdep.h"
d95a8903
AC
41
42/* Local functions */
43
44extern void _initialize_m32r_tdep (void);
45
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);
8181d85f
DJ
94 bp_tgt->placed_size = bp_tgt->shadow_len = 4;
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
16ac4ab5 168static const gdb_byte *
025bb325
MS
169m32r_breakpoint_from_pc (struct gdbarch *gdbarch,
170 CORE_ADDR *pcptr, int *lenptr)
d95a8903 171{
025bb325
MS
172 static gdb_byte be_bp_entry[] = {
173 0x10, 0xf1, 0x70, 0x00
174 }; /* dpt -> nop */
175 static gdb_byte le_bp_entry[] = {
176 0x00, 0x70, 0xf1, 0x10
177 }; /* dpt -> nop */
16ac4ab5 178 gdb_byte *bp;
d95a8903
AC
179
180 /* Determine appropriate breakpoint. */
67d57894 181 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
d95a8903
AC
182 {
183 if ((*pcptr & 3) == 0)
184 {
9f0b0322
KI
185 bp = be_bp_entry;
186 *lenptr = 4;
d95a8903
AC
187 }
188 else
189 {
9f0b0322
KI
190 bp = be_bp_entry;
191 *lenptr = 2;
d95a8903
AC
192 }
193 }
194 else
195 {
196 if ((*pcptr & 3) == 0)
197 {
9f0b0322
KI
198 bp = le_bp_entry;
199 *lenptr = 4;
d95a8903
AC
200 }
201 else
202 {
9f0b0322
KI
203 bp = le_bp_entry + 2;
204 *lenptr = 2;
d95a8903
AC
205 }
206 }
207
208 return bp;
209}
210
211
212char *m32r_register_names[] = {
213 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
214 "r8", "r9", "r10", "r11", "r12", "fp", "lr", "sp",
215 "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch",
216 "evb"
217};
218
d95a8903 219static const char *
d93859e2 220m32r_register_name (struct gdbarch *gdbarch, int reg_nr)
d95a8903
AC
221{
222 if (reg_nr < 0)
223 return NULL;
9b32d526 224 if (reg_nr >= M32R_NUM_REGS)
d95a8903
AC
225 return NULL;
226 return m32r_register_names[reg_nr];
227}
228
229
230/* Return the GDB type object for the "standard" data type
231 of data in register N. */
232
233static struct type *
234m32r_register_type (struct gdbarch *gdbarch, int reg_nr)
235{
236 if (reg_nr == M32R_PC_REGNUM)
0dfff4cb 237 return builtin_type (gdbarch)->builtin_func_ptr;
d95a8903 238 else if (reg_nr == M32R_SP_REGNUM || reg_nr == M32R_FP_REGNUM)
0dfff4cb 239 return builtin_type (gdbarch)->builtin_data_ptr;
d95a8903 240 else
df4df182 241 return builtin_type (gdbarch)->builtin_int32;
d95a8903
AC
242}
243
244
245/* Write into appropriate registers a function return value
025bb325 246 of type TYPE, given in virtual format.
d95a8903 247
025bb325 248 Things always get returned in RET1_REGNUM, RET2_REGNUM. */
d95a8903
AC
249
250static void
251m32r_store_return_value (struct type *type, struct regcache *regcache,
7c543f7b 252 const gdb_byte *valbuf)
d95a8903 253{
e17a4113
UW
254 struct gdbarch *gdbarch = get_regcache_arch (regcache);
255 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
256 CORE_ADDR regval;
257 int len = TYPE_LENGTH (type);
258
e17a4113 259 regval = extract_unsigned_integer (valbuf, len > 4 ? 4 : len, byte_order);
d95a8903
AC
260 regcache_cooked_write_unsigned (regcache, RET1_REGNUM, regval);
261
262 if (len > 4)
263 {
7c543f7b 264 regval = extract_unsigned_integer (valbuf + 4,
e17a4113 265 len - 4, byte_order);
d95a8903
AC
266 regcache_cooked_write_unsigned (regcache, RET1_REGNUM + 1, regval);
267 }
268}
269
025bb325 270/* This is required by skip_prologue. The results of decoding a prologue
d95a8903
AC
271 should be cached because this thrashing is getting nuts. */
272
cea15572 273static int
e17a4113
UW
274decode_prologue (struct gdbarch *gdbarch,
275 CORE_ADDR start_pc, CORE_ADDR scan_limit,
cea15572 276 CORE_ADDR *pl_endptr, unsigned long *framelength)
d95a8903 277{
e17a4113 278 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
279 unsigned long framesize;
280 int insn;
281 int op1;
d95a8903 282 CORE_ADDR after_prologue = 0;
cea15572 283 CORE_ADDR after_push = 0;
d95a8903
AC
284 CORE_ADDR after_stack_adjust = 0;
285 CORE_ADDR current_pc;
cea15572 286 LONGEST return_value;
d95a8903
AC
287
288 framesize = 0;
289 after_prologue = 0;
290
291 for (current_pc = start_pc; current_pc < scan_limit; current_pc += 2)
292 {
025bb325 293 /* Check if current pc's location is readable. */
e17a4113 294 if (!safe_read_memory_integer (current_pc, 2, byte_order, &return_value))
cea15572
KI
295 return -1;
296
e17a4113 297 insn = read_memory_unsigned_integer (current_pc, 2, byte_order);
d95a8903 298
cea15572
KI
299 if (insn == 0x0000)
300 break;
301
d95a8903 302 /* If this is a 32 bit instruction, we dont want to examine its
025bb325 303 immediate data as though it were an instruction. */
d95a8903
AC
304 if (current_pc & 0x02)
305 {
025bb325 306 /* Decode this instruction further. */
d95a8903
AC
307 insn &= 0x7fff;
308 }
309 else
310 {
d95a8903
AC
311 if (insn & 0x8000)
312 {
313 if (current_pc == scan_limit)
314 scan_limit += 2; /* extend the search */
cea15572 315
d95a8903 316 current_pc += 2; /* skip the immediate data */
cea15572 317
025bb325 318 /* Check if current pc's location is readable. */
e17a4113
UW
319 if (!safe_read_memory_integer (current_pc, 2, byte_order,
320 &return_value))
cea15572
KI
321 return -1;
322
d95a8903
AC
323 if (insn == 0x8faf) /* add3 sp, sp, xxxx */
324 /* add 16 bit sign-extended offset */
325 {
326 framesize +=
e17a4113
UW
327 -((short) read_memory_unsigned_integer (current_pc,
328 2, byte_order));
d95a8903
AC
329 }
330 else
331 {
025bb325 332 if (((insn >> 8) == 0xe4) /* ld24 r4, xxxxxx; sub sp, r4 */
e17a4113
UW
333 && safe_read_memory_integer (current_pc + 2,
334 2, byte_order,
cea15572 335 &return_value)
7e3dd49e 336 && read_memory_unsigned_integer (current_pc + 2,
e17a4113
UW
337 2, byte_order)
338 == 0x0f24)
d95a8903 339 {
025bb325 340 /* Subtract 24 bit sign-extended negative-offset. */
e17a4113
UW
341 insn = read_memory_unsigned_integer (current_pc - 2,
342 4, byte_order);
d95a8903
AC
343 if (insn & 0x00800000) /* sign extend */
344 insn |= 0xff000000; /* negative */
345 else
346 insn &= 0x00ffffff; /* positive */
347 framesize += insn;
348 }
349 }
cea15572 350 after_push = current_pc + 2;
d95a8903
AC
351 continue;
352 }
353 }
025bb325 354 op1 = insn & 0xf000; /* Isolate just the first nibble. */
d95a8903
AC
355
356 if ((insn & 0xf0ff) == 0x207f)
357 { /* st reg, @-sp */
358 int regno;
359 framesize += 4;
360 regno = ((insn >> 8) & 0xf);
361 after_prologue = 0;
362 continue;
363 }
364 if ((insn >> 8) == 0x4f) /* addi sp, xx */
025bb325 365 /* Add 8 bit sign-extended offset. */
d95a8903 366 {
9ffbf372 367 int stack_adjust = (signed char) (insn & 0xff);
d95a8903
AC
368
369 /* there are probably two of these stack adjustments:
370 1) A negative one in the prologue, and
371 2) A positive one in the epilogue.
372 We are only interested in the first one. */
373
374 if (stack_adjust < 0)
375 {
376 framesize -= stack_adjust;
377 after_prologue = 0;
378 /* A frameless function may have no "mv fp, sp".
379 In that case, this is the end of the prologue. */
380 after_stack_adjust = current_pc + 2;
381 }
382 continue;
383 }
384 if (insn == 0x1d8f)
385 { /* mv fp, sp */
386 after_prologue = current_pc + 2;
387 break; /* end of stack adjustments */
388 }
cea15572 389
025bb325 390 /* Nop looks like a branch, continue explicitly. */
d95a8903
AC
391 if (insn == 0x7000)
392 {
393 after_prologue = current_pc + 2;
025bb325 394 continue; /* nop occurs between pushes. */
d95a8903 395 }
025bb325 396 /* End of prolog if any of these are trap instructions. */
cea15572
KI
397 if ((insn & 0xfff0) == 0x10f0)
398 {
399 after_prologue = current_pc;
400 break;
401 }
025bb325 402 /* End of prolog if any of these are branch instructions. */
d95a8903
AC
403 if ((op1 == 0x7000) || (op1 == 0xb000) || (op1 == 0xf000))
404 {
405 after_prologue = current_pc;
d95a8903
AC
406 continue;
407 }
025bb325 408 /* Some of the branch instructions are mixed with other types. */
d95a8903
AC
409 if (op1 == 0x1000)
410 {
411 int subop = insn & 0x0ff0;
412 if ((subop == 0x0ec0) || (subop == 0x0fc0))
413 {
414 after_prologue = current_pc;
d95a8903
AC
415 continue; /* jmp , jl */
416 }
417 }
418 }
419
cea15572
KI
420 if (framelength)
421 *framelength = framesize;
422
d95a8903
AC
423 if (current_pc >= scan_limit)
424 {
425 if (pl_endptr)
426 {
427 if (after_stack_adjust != 0)
428 /* We did not find a "mv fp,sp", but we DID find
429 a stack_adjust. Is it safe to use that as the
025bb325 430 end of the prologue? I just don't know. */
d95a8903
AC
431 {
432 *pl_endptr = after_stack_adjust;
433 }
cea15572
KI
434 else if (after_push != 0)
435 /* We did not find a "mv fp,sp", but we DID find
436 a push. Is it safe to use that as the
025bb325 437 end of the prologue? I just don't know. */
cea15572
KI
438 {
439 *pl_endptr = after_push;
440 }
d95a8903
AC
441 else
442 /* We reached the end of the loop without finding the end
025bb325
MS
443 of the prologue. No way to win -- we should report
444 failure. The way we do that is to return the original
445 start_pc. GDB will set a breakpoint at the start of
446 the function (etc.) */
d95a8903
AC
447 *pl_endptr = start_pc;
448 }
cea15572 449 return 0;
d95a8903 450 }
cea15572 451
d95a8903
AC
452 if (after_prologue == 0)
453 after_prologue = current_pc;
454
455 if (pl_endptr)
456 *pl_endptr = after_prologue;
cea15572
KI
457
458 return 0;
d95a8903
AC
459} /* decode_prologue */
460
461/* Function: skip_prologue
025bb325 462 Find end of function prologue. */
d95a8903 463
cea15572 464#define DEFAULT_SEARCH_LIMIT 128
d95a8903 465
63807e1d 466static CORE_ADDR
6093d2eb 467m32r_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
d95a8903 468{
e17a4113 469 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
470 CORE_ADDR func_addr, func_end;
471 struct symtab_and_line sal;
cea15572 472 LONGEST return_value;
d95a8903 473
025bb325 474 /* See what the symbol table says. */
d95a8903
AC
475
476 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
477 {
478 sal = find_pc_line (func_addr, 0);
479
480 if (sal.line != 0 && sal.end <= func_end)
481 {
482 func_end = sal.end;
483 }
484 else
485 /* Either there's no line info, or the line after the prologue is after
486 the end of the function. In this case, there probably isn't a
487 prologue. */
488 {
489 func_end = min (func_end, func_addr + DEFAULT_SEARCH_LIMIT);
490 }
491 }
492 else
493 func_end = pc + DEFAULT_SEARCH_LIMIT;
cea15572 494
025bb325 495 /* If pc's location is not readable, just quit. */
e17a4113 496 if (!safe_read_memory_integer (pc, 4, byte_order, &return_value))
cea15572
KI
497 return pc;
498
499 /* Find the end of prologue. */
e17a4113 500 if (decode_prologue (gdbarch, pc, func_end, &sal.end, NULL) < 0)
cea15572
KI
501 return pc;
502
d95a8903
AC
503 return sal.end;
504}
505
d95a8903
AC
506struct m32r_unwind_cache
507{
508 /* The previous frame's inner most stack address. Used as this
509 frame ID's stack_addr. */
510 CORE_ADDR prev_sp;
511 /* The frame's base, optionally used by the high-level debug info. */
512 CORE_ADDR base;
513 int size;
514 /* How far the SP and r13 (FP) have been offset from the start of
515 the stack frame (as defined by the previous frame's stack
516 pointer). */
517 LONGEST sp_offset;
518 LONGEST r13_offset;
519 int uses_frame;
520 /* Table indicating the location of each and every register. */
521 struct trad_frame_saved_reg *saved_regs;
522};
523
524/* Put here the code to store, into fi->saved_regs, the addresses of
525 the saved registers of frame described by FRAME_INFO. This
526 includes special registers such as pc and fp saved in special ways
527 in the stack frame. sp is even more special: the address we return
025bb325 528 for it IS the sp for the next frame. */
d95a8903
AC
529
530static struct m32r_unwind_cache *
94afd7a6 531m32r_frame_unwind_cache (struct frame_info *this_frame,
d95a8903
AC
532 void **this_prologue_cache)
533{
cea15572 534 CORE_ADDR pc, scan_limit;
d95a8903
AC
535 ULONGEST prev_sp;
536 ULONGEST this_base;
22e048c9 537 unsigned long op;
d95a8903
AC
538 int i;
539 struct m32r_unwind_cache *info;
540
cea15572 541
d95a8903 542 if ((*this_prologue_cache))
9a3c8263 543 return (struct m32r_unwind_cache *) (*this_prologue_cache);
d95a8903
AC
544
545 info = FRAME_OBSTACK_ZALLOC (struct m32r_unwind_cache);
546 (*this_prologue_cache) = info;
94afd7a6 547 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
d95a8903
AC
548
549 info->size = 0;
550 info->sp_offset = 0;
d95a8903 551 info->uses_frame = 0;
cea15572 552
94afd7a6
UW
553 scan_limit = get_frame_pc (this_frame);
554 for (pc = get_frame_func (this_frame);
cea15572 555 pc > 0 && pc < scan_limit; pc += 2)
d95a8903
AC
556 {
557 if ((pc & 2) == 0)
558 {
94afd7a6 559 op = get_frame_memory_unsigned (this_frame, pc, 4);
d95a8903
AC
560 if ((op & 0x80000000) == 0x80000000)
561 {
562 /* 32-bit instruction */
563 if ((op & 0xffff0000) == 0x8faf0000)
564 {
565 /* add3 sp,sp,xxxx */
566 short n = op & 0xffff;
567 info->sp_offset += n;
568 }
cea15572 569 else if (((op >> 8) == 0xe4)
94afd7a6 570 && get_frame_memory_unsigned (this_frame, pc + 2,
7e3dd49e 571 2) == 0x0f24)
d95a8903 572 {
cea15572 573 /* ld24 r4, xxxxxx; sub sp, r4 */
d95a8903
AC
574 unsigned long n = op & 0xffffff;
575 info->sp_offset += n;
cea15572 576 pc += 2; /* skip sub instruction */
d95a8903 577 }
d95a8903 578
cea15572
KI
579 if (pc == scan_limit)
580 scan_limit += 2; /* extend the search */
581 pc += 2; /* skip the immediate data */
d95a8903
AC
582 continue;
583 }
584 }
585
586 /* 16-bit instructions */
94afd7a6 587 op = get_frame_memory_unsigned (this_frame, pc, 2) & 0x7fff;
d95a8903
AC
588 if ((op & 0xf0ff) == 0x207f)
589 {
590 /* st rn, @-sp */
591 int regno = ((op >> 8) & 0xf);
592 info->sp_offset -= 4;
593 info->saved_regs[regno].addr = info->sp_offset;
594 }
595 else if ((op & 0xff00) == 0x4f00)
596 {
597 /* addi sp, xx */
9ffbf372 598 int n = (signed char) (op & 0xff);
d95a8903
AC
599 info->sp_offset += n;
600 }
601 else if (op == 0x1d8f)
602 {
603 /* mv fp, sp */
604 info->uses_frame = 1;
605 info->r13_offset = info->sp_offset;
cea15572
KI
606 break; /* end of stack adjustments */
607 }
608 else if ((op & 0xfff0) == 0x10f0)
609 {
025bb325
MS
610 /* End of prologue if this is a trap instruction. */
611 break; /* End of stack adjustments. */
d95a8903 612 }
d95a8903
AC
613 }
614
615 info->size = -info->sp_offset;
616
617 /* Compute the previous frame's stack pointer (which is also the
618 frame's ID's stack address), and this frame's base pointer. */
619 if (info->uses_frame)
620 {
621 /* The SP was moved to the FP. This indicates that a new frame
622 was created. Get THIS frame's FP value by unwinding it from
623 the next frame. */
94afd7a6 624 this_base = get_frame_register_unsigned (this_frame, M32R_FP_REGNUM);
d95a8903
AC
625 /* The FP points at the last saved register. Adjust the FP back
626 to before the first saved register giving the SP. */
627 prev_sp = this_base + info->size;
628 }
629 else
630 {
631 /* Assume that the FP is this frame's SP but with that pushed
632 stack space added back. */
94afd7a6 633 this_base = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
d95a8903
AC
634 prev_sp = this_base + info->size;
635 }
636
637 /* Convert that SP/BASE into real addresses. */
638 info->prev_sp = prev_sp;
639 info->base = this_base;
640
641 /* Adjust all the saved registers so that they contain addresses and
642 not offsets. */
94afd7a6 643 for (i = 0; i < gdbarch_num_regs (get_frame_arch (this_frame)) - 1; i++)
d95a8903
AC
644 if (trad_frame_addr_p (info->saved_regs, i))
645 info->saved_regs[i].addr = (info->prev_sp + info->saved_regs[i].addr);
646
647 /* The call instruction moves the caller's PC in the callee's LR.
648 Since this is an unwind, do the reverse. Copy the location of LR
649 into PC (the address / regnum) so that a request for PC will be
650 converted into a request for the LR. */
651 info->saved_regs[M32R_PC_REGNUM] = info->saved_regs[LR_REGNUM];
652
653 /* The previous frame's SP needed to be computed. Save the computed
654 value. */
655 trad_frame_set_value (info->saved_regs, M32R_SP_REGNUM, prev_sp);
656
657 return info;
658}
659
660static CORE_ADDR
61a1198a 661m32r_read_pc (struct regcache *regcache)
d95a8903 662{
7e3dd49e 663 ULONGEST pc;
61a1198a 664 regcache_cooked_read_unsigned (regcache, M32R_PC_REGNUM, &pc);
d95a8903
AC
665 return pc;
666}
667
d95a8903
AC
668static CORE_ADDR
669m32r_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
670{
7e3dd49e 671 return frame_unwind_register_unsigned (next_frame, M32R_SP_REGNUM);
d95a8903
AC
672}
673
674
675static CORE_ADDR
7d9b040b 676m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
d95a8903
AC
677 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
678 struct value **args, CORE_ADDR sp, int struct_return,
679 CORE_ADDR struct_addr)
680{
e17a4113 681 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
682 int stack_offset, stack_alloc;
683 int argreg = ARG1_REGNUM;
684 int argnum;
685 struct type *type;
686 enum type_code typecode;
687 CORE_ADDR regval;
16ac4ab5
KI
688 gdb_byte *val;
689 gdb_byte valbuf[MAX_REGISTER_SIZE];
d95a8903 690 int len;
d95a8903 691
025bb325 692 /* First force sp to a 4-byte alignment. */
d95a8903
AC
693 sp = sp & ~3;
694
695 /* Set the return address. For the m32r, the return breakpoint is
696 always at BP_ADDR. */
697 regcache_cooked_write_unsigned (regcache, LR_REGNUM, bp_addr);
698
699 /* If STRUCT_RETURN is true, then the struct return address (in
700 STRUCT_ADDR) will consume the first argument-passing register.
701 Both adjust the register count and store that value. */
702 if (struct_return)
703 {
704 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
705 argreg++;
706 }
707
025bb325 708 /* Now make sure there's space on the stack. */
d95a8903 709 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
4991999e 710 stack_alloc += ((TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3);
025bb325 711 sp -= stack_alloc; /* Make room on stack for args. */
d95a8903
AC
712
713 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
714 {
4991999e 715 type = value_type (args[argnum]);
d95a8903
AC
716 typecode = TYPE_CODE (type);
717 len = TYPE_LENGTH (type);
718
719 memset (valbuf, 0, sizeof (valbuf));
720
721 /* Passes structures that do not fit in 2 registers by reference. */
722 if (len > 8
723 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
724 {
e17a4113
UW
725 store_unsigned_integer (valbuf, 4, byte_order,
726 value_address (args[argnum]));
d95a8903
AC
727 typecode = TYPE_CODE_PTR;
728 len = 4;
729 val = valbuf;
730 }
731 else if (len < 4)
732 {
025bb325 733 /* Value gets right-justified in the register or stack word. */
7e3dd49e 734 memcpy (valbuf + (register_size (gdbarch, argreg) - len),
16ac4ab5 735 (gdb_byte *) value_contents (args[argnum]), len);
d95a8903
AC
736 val = valbuf;
737 }
738 else
16ac4ab5 739 val = (gdb_byte *) value_contents (args[argnum]);
d95a8903
AC
740
741 while (len > 0)
742 {
743 if (argreg > ARGN_REGNUM)
744 {
025bb325 745 /* Must go on the stack. */
d95a8903
AC
746 write_memory (sp + stack_offset, val, 4);
747 stack_offset += 4;
748 }
749 else if (argreg <= ARGN_REGNUM)
750 {
025bb325 751 /* There's room in a register. */
d95a8903 752 regval =
7e3dd49e 753 extract_unsigned_integer (val,
e17a4113
UW
754 register_size (gdbarch, argreg),
755 byte_order);
d95a8903
AC
756 regcache_cooked_write_unsigned (regcache, argreg++, regval);
757 }
758
759 /* Store the value 4 bytes at a time. This means that things
760 larger than 4 bytes may go partly in registers and partly
761 on the stack. */
7e3dd49e
AC
762 len -= register_size (gdbarch, argreg);
763 val += register_size (gdbarch, argreg);
d95a8903
AC
764 }
765 }
766
767 /* Finally, update the SP register. */
768 regcache_cooked_write_unsigned (regcache, M32R_SP_REGNUM, sp);
769
770 return sp;
771}
772
773
774/* Given a return value in `regbuf' with a type `valtype',
775 extract and copy its value into `valbuf'. */
776
777static void
778m32r_extract_return_value (struct type *type, struct regcache *regcache,
7c543f7b 779 gdb_byte *dst)
d95a8903 780{
e17a4113
UW
781 struct gdbarch *gdbarch = get_regcache_arch (regcache);
782 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d95a8903
AC
783 int len = TYPE_LENGTH (type);
784 ULONGEST tmp;
785
786 /* By using store_unsigned_integer we avoid having to do
787 anything special for small big-endian values. */
788 regcache_cooked_read_unsigned (regcache, RET1_REGNUM, &tmp);
7c543f7b 789 store_unsigned_integer (dst, (len > 4 ? len - 4 : len), byte_order, tmp);
d95a8903
AC
790
791 /* Ignore return values more than 8 bytes in size because the m32r
025bb325 792 returns anything more than 8 bytes in the stack. */
d95a8903
AC
793 if (len > 4)
794 {
795 regcache_cooked_read_unsigned (regcache, RET1_REGNUM + 1, &tmp);
7c543f7b 796 store_unsigned_integer (dst + len - 4, 4, byte_order, tmp);
d95a8903
AC
797 }
798}
799
63807e1d 800static enum return_value_convention
6a3a010b 801m32r_return_value (struct gdbarch *gdbarch, struct value *function,
c055b101
CV
802 struct type *valtype, struct regcache *regcache,
803 gdb_byte *readbuf, const gdb_byte *writebuf)
14588880
KI
804{
805 if (TYPE_LENGTH (valtype) > 8)
806 return RETURN_VALUE_STRUCT_CONVENTION;
807 else
808 {
809 if (readbuf != NULL)
810 m32r_extract_return_value (valtype, regcache, readbuf);
811 if (writebuf != NULL)
812 m32r_store_return_value (valtype, regcache, writebuf);
813 return RETURN_VALUE_REGISTER_CONVENTION;
814 }
815}
816
817
d95a8903
AC
818
819static CORE_ADDR
820m32r_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
821{
7e3dd49e 822 return frame_unwind_register_unsigned (next_frame, M32R_PC_REGNUM);
d95a8903
AC
823}
824
825/* Given a GDB frame, determine the address of the calling function's
826 frame. This will be used to create a new GDB frame struct. */
827
828static void
94afd7a6 829m32r_frame_this_id (struct frame_info *this_frame,
d95a8903
AC
830 void **this_prologue_cache, struct frame_id *this_id)
831{
832 struct m32r_unwind_cache *info
94afd7a6 833 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
d95a8903
AC
834 CORE_ADDR base;
835 CORE_ADDR func;
3b7344d5 836 struct bound_minimal_symbol msym_stack;
d95a8903
AC
837 struct frame_id id;
838
839 /* The FUNC is easy. */
94afd7a6 840 func = get_frame_func (this_frame);
d95a8903 841
d95a8903
AC
842 /* Check if the stack is empty. */
843 msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
77e371c0 844 if (msym_stack.minsym && info->base == BMSYMBOL_VALUE_ADDRESS (msym_stack))
d95a8903
AC
845 return;
846
847 /* Hopefully the prologue analysis either correctly determined the
848 frame's base (which is the SP from the previous frame), or set
849 that base to "NULL". */
850 base = info->prev_sp;
851 if (base == 0)
852 return;
853
854 id = frame_id_build (base, func);
d95a8903
AC
855 (*this_id) = id;
856}
857
94afd7a6
UW
858static struct value *
859m32r_frame_prev_register (struct frame_info *this_frame,
860 void **this_prologue_cache, int regnum)
d95a8903
AC
861{
862 struct m32r_unwind_cache *info
94afd7a6
UW
863 = m32r_frame_unwind_cache (this_frame, this_prologue_cache);
864 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
d95a8903
AC
865}
866
867static const struct frame_unwind m32r_frame_unwind = {
868 NORMAL_FRAME,
8fbca658 869 default_frame_unwind_stop_reason,
d95a8903 870 m32r_frame_this_id,
94afd7a6
UW
871 m32r_frame_prev_register,
872 NULL,
873 default_frame_sniffer
d95a8903
AC
874};
875
d95a8903 876static CORE_ADDR
94afd7a6 877m32r_frame_base_address (struct frame_info *this_frame, void **this_cache)
d95a8903
AC
878{
879 struct m32r_unwind_cache *info
94afd7a6 880 = m32r_frame_unwind_cache (this_frame, this_cache);
d95a8903
AC
881 return info->base;
882}
883
884static const struct frame_base m32r_frame_base = {
885 &m32r_frame_unwind,
886 m32r_frame_base_address,
887 m32r_frame_base_address,
888 m32r_frame_base_address
889};
890
94afd7a6
UW
891/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
892 frame. The frame ID's base needs to match the TOS value saved by
893 save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint. */
d95a8903
AC
894
895static struct frame_id
94afd7a6 896m32r_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
d95a8903 897{
94afd7a6
UW
898 CORE_ADDR sp = get_frame_register_unsigned (this_frame, M32R_SP_REGNUM);
899 return frame_id_build (sp, get_frame_pc (this_frame));
d95a8903
AC
900}
901
902
903static gdbarch_init_ftype m32r_gdbarch_init;
904
905static struct gdbarch *
906m32r_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
907{
908 struct gdbarch *gdbarch;
909 struct gdbarch_tdep *tdep;
910
911 /* If there is already a candidate, use it. */
912 arches = gdbarch_list_lookup_by_info (arches, &info);
913 if (arches != NULL)
914 return arches->gdbarch;
915
916 /* Allocate space for the new architecture. */
70ba0933 917 tdep = XNEW (struct gdbarch_tdep);
d95a8903
AC
918 gdbarch = gdbarch_alloc (&info, tdep);
919
920 set_gdbarch_read_pc (gdbarch, m32r_read_pc);
d95a8903
AC
921 set_gdbarch_unwind_sp (gdbarch, m32r_unwind_sp);
922
e839132d 923 set_gdbarch_num_regs (gdbarch, M32R_NUM_REGS);
d27b54ad 924 set_gdbarch_pc_regnum (gdbarch, M32R_PC_REGNUM);
d95a8903
AC
925 set_gdbarch_sp_regnum (gdbarch, M32R_SP_REGNUM);
926 set_gdbarch_register_name (gdbarch, m32r_register_name);
927 set_gdbarch_register_type (gdbarch, m32r_register_type);
928
d95a8903 929 set_gdbarch_push_dummy_call (gdbarch, m32r_push_dummy_call);
14588880 930 set_gdbarch_return_value (gdbarch, m32r_return_value);
d95a8903
AC
931
932 set_gdbarch_skip_prologue (gdbarch, m32r_skip_prologue);
933 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
d95a8903
AC
934 set_gdbarch_breakpoint_from_pc (gdbarch, m32r_breakpoint_from_pc);
935 set_gdbarch_memory_insert_breakpoint (gdbarch,
936 m32r_memory_insert_breakpoint);
937 set_gdbarch_memory_remove_breakpoint (gdbarch,
938 m32r_memory_remove_breakpoint);
939
d95a8903
AC
940 set_gdbarch_frame_align (gdbarch, m32r_frame_align);
941
d95a8903
AC
942 frame_base_set_default (gdbarch, &m32r_frame_base);
943
944 /* Methods for saving / extracting a dummy frame's ID. The ID's
945 stack address must match the SP value returned by
946 PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
94afd7a6 947 set_gdbarch_dummy_id (gdbarch, m32r_dummy_id);
d95a8903
AC
948
949 /* Return the unwound PC value. */
950 set_gdbarch_unwind_pc (gdbarch, m32r_unwind_pc);
951
952 set_gdbarch_print_insn (gdbarch, print_insn_m32r);
953
c46b0409
KI
954 /* Hook in ABI-specific overrides, if they have been registered. */
955 gdbarch_init_osabi (info, gdbarch);
956
957 /* Hook in the default unwinders. */
94afd7a6 958 frame_unwind_append_unwinder (gdbarch, &m32r_frame_unwind);
c46b0409 959
1c772458
UW
960 /* Support simple overlay manager. */
961 set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
962
d95a8903
AC
963 return gdbarch;
964}
965
966void
967_initialize_m32r_tdep (void)
968{
969 register_gdbarch_init (bfd_arch_m32r, m32r_gdbarch_init);
970}
This page took 1.094063 seconds and 4 git commands to generate.