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