2011-09-09 Pedro Alves <pedro@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / mn10300-tdep.c
CommitLineData
342ee437
MS
1/* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger.
2
6aba47ca 3 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
7b6bb8da 4 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
342ee437
MS
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
342ee437
MS
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
342ee437 20
342ee437
MS
21#include "defs.h"
22#include "arch-utils.h"
23#include "dis-asm.h"
24#include "gdbtypes.h"
25#include "regcache.h"
26#include "gdb_string.h"
27#include "gdb_assert.h"
025bb325 28#include "gdbcore.h" /* For write_memory_unsigned_integer. */
342ee437
MS
29#include "value.h"
30#include "gdbtypes.h"
31#include "frame.h"
32#include "frame-unwind.h"
33#include "frame-base.h"
342ee437
MS
34#include "symtab.h"
35#include "dwarf2-frame.h"
697e3bc9 36#include "osabi.h"
ee3a2f01 37#include "infcall.h"
6c02c64c 38#include "prologue-value.h"
effa26a9 39#include "target.h"
342ee437
MS
40
41#include "mn10300-tdep.h"
42
6c02c64c
KB
43
44/* The am33-2 has 64 registers. */
45#define MN10300_MAX_NUM_REGS 64
46
47/* This structure holds the results of a prologue analysis. */
48struct mn10300_prologue
49{
d80b854b
UW
50 /* The architecture for which we generated this prologue info. */
51 struct gdbarch *gdbarch;
52
6c02c64c
KB
53 /* The offset from the frame base to the stack pointer --- always
54 zero or negative.
55
56 Calling this a "size" is a bit misleading, but given that the
57 stack grows downwards, using offsets for everything keeps one
58 from going completely sign-crazy: you never change anything's
59 sign for an ADD instruction; always change the second operand's
60 sign for a SUB instruction; and everything takes care of
61 itself. */
62 int frame_size;
63
64 /* Non-zero if this function has initialized the frame pointer from
65 the stack pointer, zero otherwise. */
66 int has_frame_ptr;
67
68 /* If has_frame_ptr is non-zero, this is the offset from the frame
69 base to where the frame pointer points. This is always zero or
70 negative. */
71 int frame_ptr_offset;
72
73 /* The address of the first instruction at which the frame has been
74 set up and the arguments are where the debug info says they are
75 --- as best as we can tell. */
76 CORE_ADDR prologue_end;
77
78 /* reg_offset[R] is the offset from the CFA at which register R is
79 saved, or 1 if register R has not been saved. (Real values are
80 always zero or negative.) */
81 int reg_offset[MN10300_MAX_NUM_REGS];
82};
83
342ee437
MS
84
85/* Compute the alignment required by a type. */
86
87static int
88mn10300_type_align (struct type *type)
89{
90 int i, align = 1;
91
92 switch (TYPE_CODE (type))
93 {
94 case TYPE_CODE_INT:
95 case TYPE_CODE_ENUM:
96 case TYPE_CODE_SET:
97 case TYPE_CODE_RANGE:
98 case TYPE_CODE_CHAR:
99 case TYPE_CODE_BOOL:
100 case TYPE_CODE_FLT:
101 case TYPE_CODE_PTR:
102 case TYPE_CODE_REF:
103 return TYPE_LENGTH (type);
104
105 case TYPE_CODE_COMPLEX:
106 return TYPE_LENGTH (type) / 2;
107
108 case TYPE_CODE_STRUCT:
109 case TYPE_CODE_UNION:
110 for (i = 0; i < TYPE_NFIELDS (type); i++)
111 {
112 int falign = mn10300_type_align (TYPE_FIELD_TYPE (type, i));
113 while (align < falign)
114 align <<= 1;
115 }
116 return align;
117
118 case TYPE_CODE_ARRAY:
119 /* HACK! Structures containing arrays, even small ones, are not
120 elligible for returning in registers. */
121 return 256;
122
123 case TYPE_CODE_TYPEDEF:
124 return mn10300_type_align (check_typedef (type));
125
126 default:
127 internal_error (__FILE__, __LINE__, _("bad switch"));
128 }
129}
130
342ee437 131/* Should call_function allocate stack space for a struct return? */
342ee437 132static int
99fe5f9d 133mn10300_use_struct_convention (struct type *type)
342ee437
MS
134{
135 /* Structures bigger than a pair of words can't be returned in
136 registers. */
137 if (TYPE_LENGTH (type) > 8)
138 return 1;
139
140 switch (TYPE_CODE (type))
141 {
142 case TYPE_CODE_STRUCT:
143 case TYPE_CODE_UNION:
144 /* Structures with a single field are handled as the field
145 itself. */
146 if (TYPE_NFIELDS (type) == 1)
99fe5f9d 147 return mn10300_use_struct_convention (TYPE_FIELD_TYPE (type, 0));
342ee437
MS
148
149 /* Structures with word or double-word size are passed in memory, as
150 long as they require at least word alignment. */
151 if (mn10300_type_align (type) >= 4)
152 return 0;
153
154 return 1;
155
156 /* Arrays are addressable, so they're never returned in
157 registers. This condition can only hold when the array is
158 the only field of a struct or union. */
159 case TYPE_CODE_ARRAY:
160 return 1;
161
162 case TYPE_CODE_TYPEDEF:
99fe5f9d 163 return mn10300_use_struct_convention (check_typedef (type));
342ee437
MS
164
165 default:
166 return 0;
167 }
168}
169
342ee437 170static void
99fe5f9d 171mn10300_store_return_value (struct gdbarch *gdbarch, struct type *type,
342ee437
MS
172 struct regcache *regcache, const void *valbuf)
173{
342ee437
MS
174 int len = TYPE_LENGTH (type);
175 int reg, regsz;
176
177 if (TYPE_CODE (type) == TYPE_CODE_PTR)
178 reg = 4;
179 else
180 reg = 0;
181
182 regsz = register_size (gdbarch, reg);
183
184 if (len <= regsz)
185 regcache_raw_write_part (regcache, reg, 0, len, valbuf);
186 else if (len <= 2 * regsz)
187 {
188 regcache_raw_write (regcache, reg, valbuf);
189 gdb_assert (regsz == register_size (gdbarch, reg + 1));
190 regcache_raw_write_part (regcache, reg+1, 0,
191 len - regsz, (char *) valbuf + regsz);
192 }
193 else
194 internal_error (__FILE__, __LINE__,
195 _("Cannot store return value %d bytes long."), len);
196}
197
342ee437 198static void
99fe5f9d 199mn10300_extract_return_value (struct gdbarch *gdbarch, struct type *type,
342ee437
MS
200 struct regcache *regcache, void *valbuf)
201{
342ee437
MS
202 char buf[MAX_REGISTER_SIZE];
203 int len = TYPE_LENGTH (type);
204 int reg, regsz;
205
206 if (TYPE_CODE (type) == TYPE_CODE_PTR)
207 reg = 4;
208 else
209 reg = 0;
210
211 regsz = register_size (gdbarch, reg);
212 if (len <= regsz)
213 {
214 regcache_raw_read (regcache, reg, buf);
215 memcpy (valbuf, buf, len);
216 }
217 else if (len <= 2 * regsz)
218 {
219 regcache_raw_read (regcache, reg, buf);
220 memcpy (valbuf, buf, regsz);
221 gdb_assert (regsz == register_size (gdbarch, reg + 1));
222 regcache_raw_read (regcache, reg + 1, buf);
223 memcpy ((char *) valbuf + regsz, buf, len - regsz);
224 }
225 else
226 internal_error (__FILE__, __LINE__,
227 _("Cannot extract return value %d bytes long."), len);
228}
229
99fe5f9d
KB
230/* Determine, for architecture GDBARCH, how a return value of TYPE
231 should be returned. If it is supposed to be returned in registers,
232 and READBUF is non-zero, read the appropriate value from REGCACHE,
233 and copy it into READBUF. If WRITEBUF is non-zero, write the value
234 from WRITEBUF into REGCACHE. */
235
236static enum return_value_convention
c055b101
CV
237mn10300_return_value (struct gdbarch *gdbarch, struct type *func_type,
238 struct type *type, struct regcache *regcache,
239 gdb_byte *readbuf, const gdb_byte *writebuf)
99fe5f9d
KB
240{
241 if (mn10300_use_struct_convention (type))
242 return RETURN_VALUE_STRUCT_CONVENTION;
243
244 if (readbuf)
245 mn10300_extract_return_value (gdbarch, type, regcache, readbuf);
246 if (writebuf)
247 mn10300_store_return_value (gdbarch, type, regcache, writebuf);
248
249 return RETURN_VALUE_REGISTER_CONVENTION;
250}
251
342ee437
MS
252static char *
253register_name (int reg, char **regs, long sizeof_regs)
254{
255 if (reg < 0 || reg >= sizeof_regs / sizeof (regs[0]))
256 return NULL;
257 else
258 return regs[reg];
259}
260
261static const char *
d93859e2 262mn10300_generic_register_name (struct gdbarch *gdbarch, int reg)
342ee437
MS
263{
264 static char *regs[] =
265 { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
266 "sp", "pc", "mdr", "psw", "lir", "lar", "", "",
267 "", "", "", "", "", "", "", "",
268 "", "", "", "", "", "", "", "fp"
269 };
270 return register_name (reg, regs, sizeof regs);
271}
272
273
274static const char *
d93859e2 275am33_register_name (struct gdbarch *gdbarch, int reg)
342ee437
MS
276{
277 static char *regs[] =
278 { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
279 "sp", "pc", "mdr", "psw", "lir", "lar", "",
280 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
281 "ssp", "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", ""
282 };
283 return register_name (reg, regs, sizeof regs);
284}
285
4640dd91 286static const char *
d93859e2 287am33_2_register_name (struct gdbarch *gdbarch, int reg)
4640dd91
KB
288{
289 static char *regs[] =
290 {
291 "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
292 "sp", "pc", "mdr", "psw", "lir", "lar", "mdrq", "r0",
293 "r1", "r2", "r3", "r4", "r5", "r6", "r7", "ssp",
294 "msp", "usp", "mcrh", "mcrl", "mcvf", "fpcr", "", "",
295 "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7",
296 "fs8", "fs9", "fs10", "fs11", "fs12", "fs13", "fs14", "fs15",
297 "fs16", "fs17", "fs18", "fs19", "fs20", "fs21", "fs22", "fs23",
298 "fs24", "fs25", "fs26", "fs27", "fs28", "fs29", "fs30", "fs31"
299 };
300 return register_name (reg, regs, sizeof regs);
301}
342ee437
MS
302
303static struct type *
304mn10300_register_type (struct gdbarch *gdbarch, int reg)
305{
0dfff4cb 306 return builtin_type (gdbarch)->builtin_int;
342ee437
MS
307}
308
309static CORE_ADDR
61a1198a 310mn10300_read_pc (struct regcache *regcache)
342ee437 311{
61a1198a
UW
312 ULONGEST val;
313 regcache_cooked_read_unsigned (regcache, E_PC_REGNUM, &val);
314 return val;
342ee437
MS
315}
316
317static void
61a1198a 318mn10300_write_pc (struct regcache *regcache, CORE_ADDR val)
342ee437 319{
61a1198a 320 regcache_cooked_write_unsigned (regcache, E_PC_REGNUM, val);
342ee437
MS
321}
322
323/* The breakpoint instruction must be the same size as the smallest
324 instruction in the instruction set.
325
326 The Matsushita mn10x00 processors have single byte instructions
327 so we need a single byte breakpoint. Matsushita hasn't defined
328 one, so we defined it ourselves. */
329
330const static unsigned char *
67d57894
MD
331mn10300_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
332 int *bp_size)
342ee437
MS
333{
334 static char breakpoint[] = {0xff};
335 *bp_size = 1;
336 return breakpoint;
337}
338
6c02c64c
KB
339/* Model the semantics of pushing a register onto the stack. This
340 is a helper function for mn10300_analyze_prologue, below. */
341static void
342push_reg (pv_t *regs, struct pv_area *stack, int regnum)
343{
344 regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], -4);
345 pv_area_store (stack, regs[E_SP_REGNUM], 4, regs[regnum]);
346}
347
348/* Translate an "r" register number extracted from an instruction encoding
349 into a GDB register number. Adapted from a simulator function
350 of the same name; see am33.igen. */
351static int
352translate_rreg (int rreg)
353{
354 /* The higher register numbers actually correspond to the
355 basic machine's address and data registers. */
356 if (rreg > 7 && rreg < 12)
357 return E_A0_REGNUM + rreg - 8;
358 else if (rreg > 11 && rreg < 16)
359 return E_D0_REGNUM + rreg - 12;
360 else
361 return E_E0_REGNUM + rreg;
362}
363
364/* Find saved registers in a 'struct pv_area'; we pass this to pv_area_scan.
9cacebf5 365
6c02c64c
KB
366 If VALUE is a saved register, ADDR says it was saved at a constant
367 offset from the frame base, and SIZE indicates that the whole
368 register was saved, record its offset in RESULT_UNTYPED. */
9cacebf5 369static void
6c02c64c 370check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value)
9cacebf5 371{
6c02c64c 372 struct mn10300_prologue *result = (struct mn10300_prologue *) result_untyped;
9cacebf5 373
6c02c64c
KB
374 if (value.kind == pvk_register
375 && value.k == 0
376 && pv_is_register (addr, E_SP_REGNUM)
d80b854b 377 && size == register_size (result->gdbarch, value.reg))
6c02c64c
KB
378 result->reg_offset[value.reg] = addr.k;
379}
9cacebf5 380
6c02c64c
KB
381/* Analyze the prologue to determine where registers are saved,
382 the end of the prologue, etc. The result of this analysis is
383 returned in RESULT. See struct mn10300_prologue above for more
384 information. */
385static void
386mn10300_analyze_prologue (struct gdbarch *gdbarch,
387 CORE_ADDR start_pc, CORE_ADDR limit_pc,
388 struct mn10300_prologue *result)
389{
e17a4113 390 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
6c02c64c
KB
391 CORE_ADDR pc, next_pc;
392 int rn;
393 pv_t regs[MN10300_MAX_NUM_REGS];
394 struct pv_area *stack;
395 struct cleanup *back_to;
396 CORE_ADDR after_last_frame_setup_insn = start_pc;
397 int am33_mode = AM33_MODE (gdbarch);
398
399 memset (result, 0, sizeof (*result));
d80b854b 400 result->gdbarch = gdbarch;
9cacebf5 401
6c02c64c 402 for (rn = 0; rn < MN10300_MAX_NUM_REGS; rn++)
4640dd91 403 {
6c02c64c
KB
404 regs[rn] = pv_register (rn, 0);
405 result->reg_offset[rn] = 1;
4640dd91 406 }
55f960e1 407 stack = make_pv_area (E_SP_REGNUM, gdbarch_addr_bit (gdbarch));
6c02c64c
KB
408 back_to = make_cleanup_free_pv_area (stack);
409
410 /* The typical call instruction will have saved the return address on the
411 stack. Space for the return address has already been preallocated in
412 the caller's frame. It's possible, such as when using -mrelax with gcc
413 that other registers were saved as well. If this happens, we really
414 have no chance of deciphering the frame. DWARF info can save the day
415 when this happens. */
416 pv_area_store (stack, regs[E_SP_REGNUM], 4, regs[E_PC_REGNUM]);
417
418 pc = start_pc;
419 while (pc < limit_pc)
4640dd91 420 {
6c02c64c
KB
421 int status;
422 gdb_byte instr[2];
4640dd91 423
6c02c64c
KB
424 /* Instructions can be as small as one byte; however, we usually
425 need at least two bytes to do the decoding, so fetch that many
426 to begin with. */
427 status = target_read_memory (pc, instr, 2);
428 if (status != 0)
429 break;
4640dd91 430
6c02c64c
KB
431 /* movm [regs], sp */
432 if (instr[0] == 0xcf)
4640dd91 433 {
6c02c64c
KB
434 gdb_byte save_mask;
435
436 save_mask = instr[1];
437
438 if ((save_mask & movm_exreg0_bit) && am33_mode)
439 {
440 push_reg (regs, stack, E_E2_REGNUM);
441 push_reg (regs, stack, E_E3_REGNUM);
442 }
443 if ((save_mask & movm_exreg1_bit) && am33_mode)
4640dd91 444 {
6c02c64c
KB
445 push_reg (regs, stack, E_E4_REGNUM);
446 push_reg (regs, stack, E_E5_REGNUM);
447 push_reg (regs, stack, E_E6_REGNUM);
448 push_reg (regs, stack, E_E7_REGNUM);
4640dd91 449 }
6c02c64c
KB
450 if ((save_mask & movm_exother_bit) && am33_mode)
451 {
452 push_reg (regs, stack, E_E0_REGNUM);
453 push_reg (regs, stack, E_E1_REGNUM);
454 push_reg (regs, stack, E_MDRQ_REGNUM);
455 push_reg (regs, stack, E_MCRH_REGNUM);
456 push_reg (regs, stack, E_MCRL_REGNUM);
457 push_reg (regs, stack, E_MCVF_REGNUM);
458 }
459 if (save_mask & movm_d2_bit)
460 push_reg (regs, stack, E_D2_REGNUM);
461 if (save_mask & movm_d3_bit)
462 push_reg (regs, stack, E_D3_REGNUM);
463 if (save_mask & movm_a2_bit)
464 push_reg (regs, stack, E_A2_REGNUM);
465 if (save_mask & movm_a3_bit)
466 push_reg (regs, stack, E_A3_REGNUM);
467 if (save_mask & movm_other_bit)
468 {
469 push_reg (regs, stack, E_D0_REGNUM);
470 push_reg (regs, stack, E_D1_REGNUM);
471 push_reg (regs, stack, E_A0_REGNUM);
472 push_reg (regs, stack, E_A1_REGNUM);
473 push_reg (regs, stack, E_MDR_REGNUM);
474 push_reg (regs, stack, E_LIR_REGNUM);
475 push_reg (regs, stack, E_LAR_REGNUM);
476 /* The `other' bit leaves a blank area of four bytes at
477 the beginning of its block of saved registers, making
478 it 32 bytes long in total. */
479 regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], -4);
480 }
481
482 pc += 2;
483 after_last_frame_setup_insn = pc;
4640dd91 484 }
6c02c64c
KB
485 /* mov sp, aN */
486 else if ((instr[0] & 0xfc) == 0x3c)
487 {
488 int aN = instr[0] & 0x03;
4640dd91 489
6c02c64c 490 regs[E_A0_REGNUM + aN] = regs[E_SP_REGNUM];
4640dd91 491
6c02c64c
KB
492 pc += 1;
493 if (aN == 3)
494 after_last_frame_setup_insn = pc;
495 }
496 /* mov aM, aN */
497 else if ((instr[0] & 0xf0) == 0x90
498 && (instr[0] & 0x03) != ((instr[0] & 0x0c) >> 2))
499 {
500 int aN = instr[0] & 0x03;
501 int aM = (instr[0] & 0x0c) >> 2;
9cacebf5 502
6c02c64c 503 regs[E_A0_REGNUM + aN] = regs[E_A0_REGNUM + aM];
9cacebf5 504
6c02c64c
KB
505 pc += 1;
506 }
507 /* mov dM, dN */
508 else if ((instr[0] & 0xf0) == 0x80
509 && (instr[0] & 0x03) != ((instr[0] & 0x0c) >> 2))
510 {
511 int dN = instr[0] & 0x03;
512 int dM = (instr[0] & 0x0c) >> 2;
9cacebf5 513
6c02c64c 514 regs[E_D0_REGNUM + dN] = regs[E_D0_REGNUM + dM];
9cacebf5 515
6c02c64c
KB
516 pc += 1;
517 }
518 /* mov aM, dN */
519 else if (instr[0] == 0xf1 && (instr[1] & 0xf0) == 0xd0)
520 {
521 int dN = instr[1] & 0x03;
522 int aM = (instr[1] & 0x0c) >> 2;
9cacebf5 523
6c02c64c 524 regs[E_D0_REGNUM + dN] = regs[E_A0_REGNUM + aM];
9cacebf5 525
6c02c64c
KB
526 pc += 2;
527 }
528 /* mov dM, aN */
529 else if (instr[0] == 0xf1 && (instr[1] & 0xf0) == 0xe0)
530 {
531 int aN = instr[1] & 0x03;
532 int dM = (instr[1] & 0x0c) >> 2;
9cacebf5 533
6c02c64c 534 regs[E_A0_REGNUM + aN] = regs[E_D0_REGNUM + dM];
9cacebf5 535
6c02c64c
KB
536 pc += 2;
537 }
538 /* add imm8, SP */
539 else if (instr[0] == 0xf8 && instr[1] == 0xfe)
540 {
541 gdb_byte buf[1];
542 LONGEST imm8;
9cacebf5 543
9cacebf5 544
6c02c64c
KB
545 status = target_read_memory (pc + 2, buf, 1);
546 if (status != 0)
547 break;
9cacebf5 548
e17a4113 549 imm8 = extract_signed_integer (buf, 1, byte_order);
6c02c64c 550 regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], imm8);
9cacebf5 551
6c02c64c
KB
552 pc += 3;
553 /* Stack pointer adjustments are frame related. */
554 after_last_frame_setup_insn = pc;
555 }
556 /* add imm16, SP */
557 else if (instr[0] == 0xfa && instr[1] == 0xfe)
558 {
559 gdb_byte buf[2];
560 LONGEST imm16;
9cacebf5 561
6c02c64c
KB
562 status = target_read_memory (pc + 2, buf, 2);
563 if (status != 0)
564 break;
9cacebf5 565
e17a4113 566 imm16 = extract_signed_integer (buf, 2, byte_order);
6c02c64c 567 regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], imm16);
9cacebf5 568
6c02c64c
KB
569 pc += 4;
570 /* Stack pointer adjustments are frame related. */
571 after_last_frame_setup_insn = pc;
572 }
573 /* add imm32, SP */
574 else if (instr[0] == 0xfc && instr[1] == 0xfe)
575 {
576 gdb_byte buf[4];
577 LONGEST imm32;
9cacebf5 578
6c02c64c
KB
579 status = target_read_memory (pc + 2, buf, 4);
580 if (status != 0)
581 break;
9cacebf5 582
9cacebf5 583
e17a4113 584 imm32 = extract_signed_integer (buf, 4, byte_order);
6c02c64c 585 regs[E_SP_REGNUM] = pv_add_constant (regs[E_SP_REGNUM], imm32);
9cacebf5 586
6c02c64c
KB
587 pc += 6;
588 /* Stack pointer adjustments are frame related. */
589 after_last_frame_setup_insn = pc;
590 }
591 /* add imm8, aN */
592 else if ((instr[0] & 0xfc) == 0x20)
593 {
594 int aN;
595 LONGEST imm8;
9cacebf5 596
6c02c64c 597 aN = instr[0] & 0x03;
e17a4113 598 imm8 = extract_signed_integer (&instr[1], 1, byte_order);
9cacebf5 599
6c02c64c
KB
600 regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN],
601 imm8);
9cacebf5 602
6c02c64c
KB
603 pc += 2;
604 }
605 /* add imm16, aN */
606 else if (instr[0] == 0xfa && (instr[1] & 0xfc) == 0xd0)
607 {
608 int aN;
609 LONGEST imm16;
610 gdb_byte buf[2];
9cacebf5 611
6c02c64c 612 aN = instr[1] & 0x03;
9cacebf5 613
6c02c64c
KB
614 status = target_read_memory (pc + 2, buf, 2);
615 if (status != 0)
616 break;
9cacebf5 617
9cacebf5 618
e17a4113 619 imm16 = extract_signed_integer (buf, 2, byte_order);
9cacebf5 620
6c02c64c
KB
621 regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN],
622 imm16);
9cacebf5 623
6c02c64c
KB
624 pc += 4;
625 }
626 /* add imm32, aN */
627 else if (instr[0] == 0xfc && (instr[1] & 0xfc) == 0xd0)
628 {
629 int aN;
630 LONGEST imm32;
631 gdb_byte buf[4];
9cacebf5 632
6c02c64c 633 aN = instr[1] & 0x03;
9cacebf5 634
6c02c64c
KB
635 status = target_read_memory (pc + 2, buf, 4);
636 if (status != 0)
637 break;
9cacebf5 638
e17a4113 639 imm32 = extract_signed_integer (buf, 2, byte_order);
9cacebf5 640
6c02c64c
KB
641 regs[E_A0_REGNUM + aN] = pv_add_constant (regs[E_A0_REGNUM + aN],
642 imm32);
643 pc += 6;
644 }
645 /* fmov fsM, (rN) */
646 else if (instr[0] == 0xf9 && (instr[1] & 0xfd) == 0x30)
647 {
648 int fsM, sM, Y, rN;
649 gdb_byte buf[1];
9cacebf5 650
6c02c64c 651 Y = (instr[1] & 0x02) >> 1;
9cacebf5 652
6c02c64c
KB
653 status = target_read_memory (pc + 2, buf, 1);
654 if (status != 0)
655 break;
9cacebf5 656
6c02c64c
KB
657 sM = (buf[0] & 0xf0) >> 4;
658 rN = buf[0] & 0x0f;
659 fsM = (Y << 4) | sM;
9cacebf5 660
6c02c64c
KB
661 pv_area_store (stack, regs[translate_rreg (rN)], 4,
662 regs[E_FS0_REGNUM + fsM]);
9cacebf5 663
6c02c64c
KB
664 pc += 3;
665 }
666 /* fmov fsM, (sp) */
667 else if (instr[0] == 0xf9 && (instr[1] & 0xfd) == 0x34)
668 {
669 int fsM, sM, Y;
670 gdb_byte buf[1];
9cacebf5 671
6c02c64c 672 Y = (instr[1] & 0x02) >> 1;
9cacebf5 673
6c02c64c
KB
674 status = target_read_memory (pc + 2, buf, 1);
675 if (status != 0)
676 break;
9cacebf5 677
6c02c64c
KB
678 sM = (buf[0] & 0xf0) >> 4;
679 fsM = (Y << 4) | sM;
9cacebf5 680
6c02c64c
KB
681 pv_area_store (stack, regs[E_SP_REGNUM], 4,
682 regs[E_FS0_REGNUM + fsM]);
9cacebf5 683
6c02c64c
KB
684 pc += 3;
685 }
686 /* fmov fsM, (rN, rI) */
687 else if (instr[0] == 0xfb && instr[1] == 0x37)
688 {
689 int fsM, sM, Z, rN, rI;
690 gdb_byte buf[2];
9cacebf5 691
9cacebf5 692
6c02c64c
KB
693 status = target_read_memory (pc + 2, buf, 2);
694 if (status != 0)
695 break;
83845630 696
6c02c64c
KB
697 rI = (buf[0] & 0xf0) >> 4;
698 rN = buf[0] & 0x0f;
699 sM = (buf[1] & 0xf0) >> 4;
700 Z = (buf[1] & 0x02) >> 1;
701 fsM = (Z << 4) | sM;
83845630 702
6c02c64c
KB
703 pv_area_store (stack,
704 pv_add (regs[translate_rreg (rN)],
705 regs[translate_rreg (rI)]),
706 4, regs[E_FS0_REGNUM + fsM]);
83845630 707
6c02c64c
KB
708 pc += 4;
709 }
710 /* fmov fsM, (d8, rN) */
711 else if (instr[0] == 0xfb && (instr[1] & 0xfd) == 0x30)
4640dd91 712 {
6c02c64c
KB
713 int fsM, sM, Y, rN;
714 LONGEST d8;
715 gdb_byte buf[2];
716
717 Y = (instr[1] & 0x02) >> 1;
718
719 status = target_read_memory (pc + 2, buf, 2);
720 if (status != 0)
721 break;
722
723 sM = (buf[0] & 0xf0) >> 4;
724 rN = buf[0] & 0x0f;
725 fsM = (Y << 4) | sM;
e17a4113 726 d8 = extract_signed_integer (&buf[1], 1, byte_order);
6c02c64c
KB
727
728 pv_area_store (stack,
729 pv_add_constant (regs[translate_rreg (rN)], d8),
730 4, regs[E_FS0_REGNUM + fsM]);
731
732 pc += 4;
4640dd91 733 }
6c02c64c
KB
734 /* fmov fsM, (d24, rN) */
735 else if (instr[0] == 0xfd && (instr[1] & 0xfd) == 0x30)
83845630 736 {
6c02c64c
KB
737 int fsM, sM, Y, rN;
738 LONGEST d24;
739 gdb_byte buf[4];
740
741 Y = (instr[1] & 0x02) >> 1;
742
743 status = target_read_memory (pc + 2, buf, 4);
83845630 744 if (status != 0)
6c02c64c
KB
745 break;
746
747 sM = (buf[0] & 0xf0) >> 4;
748 rN = buf[0] & 0x0f;
749 fsM = (Y << 4) | sM;
e17a4113 750 d24 = extract_signed_integer (&buf[1], 3, byte_order);
6c02c64c
KB
751
752 pv_area_store (stack,
753 pv_add_constant (regs[translate_rreg (rN)], d24),
754 4, regs[E_FS0_REGNUM + fsM]);
755
756 pc += 6;
83845630 757 }
6c02c64c
KB
758 /* fmov fsM, (d32, rN) */
759 else if (instr[0] == 0xfe && (instr[1] & 0xfd) == 0x30)
760 {
761 int fsM, sM, Y, rN;
762 LONGEST d32;
763 gdb_byte buf[5];
4640dd91 764
6c02c64c
KB
765 Y = (instr[1] & 0x02) >> 1;
766
767 status = target_read_memory (pc + 2, buf, 5);
768 if (status != 0)
769 break;
770
771 sM = (buf[0] & 0xf0) >> 4;
772 rN = buf[0] & 0x0f;
773 fsM = (Y << 4) | sM;
e17a4113 774 d32 = extract_signed_integer (&buf[1], 4, byte_order);
9cacebf5 775
6c02c64c
KB
776 pv_area_store (stack,
777 pv_add_constant (regs[translate_rreg (rN)], d32),
778 4, regs[E_FS0_REGNUM + fsM]);
779
780 pc += 7;
781 }
782 /* fmov fsM, (d8, SP) */
783 else if (instr[0] == 0xfb && (instr[1] & 0xfd) == 0x34)
9cacebf5 784 {
6c02c64c
KB
785 int fsM, sM, Y;
786 LONGEST d8;
787 gdb_byte buf[2];
788
789 Y = (instr[1] & 0x02) >> 1;
790
791 status = target_read_memory (pc + 2, buf, 2);
792 if (status != 0)
793 break;
794
795 sM = (buf[0] & 0xf0) >> 4;
796 fsM = (Y << 4) | sM;
e17a4113 797 d8 = extract_signed_integer (&buf[1], 1, byte_order);
6c02c64c
KB
798
799 pv_area_store (stack,
800 pv_add_constant (regs[E_SP_REGNUM], d8),
801 4, regs[E_FS0_REGNUM + fsM]);
802
803 pc += 4;
9cacebf5 804 }
6c02c64c
KB
805 /* fmov fsM, (d24, SP) */
806 else if (instr[0] == 0xfd && (instr[1] & 0xfd) == 0x34)
807 {
808 int fsM, sM, Y;
809 LONGEST d24;
810 gdb_byte buf[4];
9cacebf5 811
6c02c64c 812 Y = (instr[1] & 0x02) >> 1;
9cacebf5 813
6c02c64c
KB
814 status = target_read_memory (pc + 2, buf, 4);
815 if (status != 0)
816 break;
9cacebf5 817
6c02c64c
KB
818 sM = (buf[0] & 0xf0) >> 4;
819 fsM = (Y << 4) | sM;
e17a4113 820 d24 = extract_signed_integer (&buf[1], 3, byte_order);
9cacebf5 821
6c02c64c
KB
822 pv_area_store (stack,
823 pv_add_constant (regs[E_SP_REGNUM], d24),
824 4, regs[E_FS0_REGNUM + fsM]);
9cacebf5 825
6c02c64c
KB
826 pc += 6;
827 }
828 /* fmov fsM, (d32, SP) */
829 else if (instr[0] == 0xfe && (instr[1] & 0xfd) == 0x34)
830 {
831 int fsM, sM, Y;
832 LONGEST d32;
833 gdb_byte buf[5];
9cacebf5 834
6c02c64c 835 Y = (instr[1] & 0x02) >> 1;
9cacebf5 836
6c02c64c
KB
837 status = target_read_memory (pc + 2, buf, 5);
838 if (status != 0)
839 break;
840
841 sM = (buf[0] & 0xf0) >> 4;
842 fsM = (Y << 4) | sM;
e17a4113 843 d32 = extract_signed_integer (&buf[1], 4, byte_order);
6c02c64c
KB
844
845 pv_area_store (stack,
846 pv_add_constant (regs[E_SP_REGNUM], d32),
847 4, regs[E_FS0_REGNUM + fsM]);
848
849 pc += 7;
850 }
851 /* fmov fsM, (rN+) */
852 else if (instr[0] == 0xf9 && (instr[1] & 0xfd) == 0x31)
853 {
854 int fsM, sM, Y, rN, rN_regnum;
855 gdb_byte buf[1];
856
857 Y = (instr[1] & 0x02) >> 1;
858
859 status = target_read_memory (pc + 2, buf, 1);
860 if (status != 0)
861 break;
862
863 sM = (buf[0] & 0xf0) >> 4;
864 rN = buf[0] & 0x0f;
865 fsM = (Y << 4) | sM;
866
867 rN_regnum = translate_rreg (rN);
868
869 pv_area_store (stack, regs[rN_regnum], 4,
870 regs[E_FS0_REGNUM + fsM]);
871 regs[rN_regnum] = pv_add_constant (regs[rN_regnum], 4);
872
873 pc += 3;
874 }
875 /* fmov fsM, (rN+, imm8) */
876 else if (instr[0] == 0xfb && (instr[1] & 0xfd) == 0x31)
877 {
878 int fsM, sM, Y, rN, rN_regnum;
879 LONGEST imm8;
880 gdb_byte buf[2];
881
882 Y = (instr[1] & 0x02) >> 1;
883
884 status = target_read_memory (pc + 2, buf, 2);
885 if (status != 0)
886 break;
887
888 sM = (buf[0] & 0xf0) >> 4;
889 rN = buf[0] & 0x0f;
890 fsM = (Y << 4) | sM;
e17a4113 891 imm8 = extract_signed_integer (&buf[1], 1, byte_order);
6c02c64c
KB
892
893 rN_regnum = translate_rreg (rN);
894
895 pv_area_store (stack, regs[rN_regnum], 4, regs[E_FS0_REGNUM + fsM]);
896 regs[rN_regnum] = pv_add_constant (regs[rN_regnum], imm8);
897
898 pc += 4;
899 }
900 /* fmov fsM, (rN+, imm24) */
901 else if (instr[0] == 0xfd && (instr[1] & 0xfd) == 0x31)
902 {
903 int fsM, sM, Y, rN, rN_regnum;
904 LONGEST imm24;
905 gdb_byte buf[4];
906
907 Y = (instr[1] & 0x02) >> 1;
908
909 status = target_read_memory (pc + 2, buf, 4);
910 if (status != 0)
911 break;
912
913 sM = (buf[0] & 0xf0) >> 4;
914 rN = buf[0] & 0x0f;
915 fsM = (Y << 4) | sM;
e17a4113 916 imm24 = extract_signed_integer (&buf[1], 3, byte_order);
6c02c64c
KB
917
918 rN_regnum = translate_rreg (rN);
919
920 pv_area_store (stack, regs[rN_regnum], 4, regs[E_FS0_REGNUM + fsM]);
921 regs[rN_regnum] = pv_add_constant (regs[rN_regnum], imm24);
922
923 pc += 6;
924 }
925 /* fmov fsM, (rN+, imm32) */
926 else if (instr[0] == 0xfe && (instr[1] & 0xfd) == 0x31)
927 {
928 int fsM, sM, Y, rN, rN_regnum;
929 LONGEST imm32;
930 gdb_byte buf[5];
931
932 Y = (instr[1] & 0x02) >> 1;
933
934 status = target_read_memory (pc + 2, buf, 5);
935 if (status != 0)
936 break;
937
938 sM = (buf[0] & 0xf0) >> 4;
939 rN = buf[0] & 0x0f;
940 fsM = (Y << 4) | sM;
e17a4113 941 imm32 = extract_signed_integer (&buf[1], 4, byte_order);
6c02c64c
KB
942
943 rN_regnum = translate_rreg (rN);
944
945 pv_area_store (stack, regs[rN_regnum], 4, regs[E_FS0_REGNUM + fsM]);
946 regs[rN_regnum] = pv_add_constant (regs[rN_regnum], imm32);
947
948 pc += 7;
949 }
950 /* mov imm8, aN */
951 else if ((instr[0] & 0xf0) == 0x90)
952 {
953 int aN = instr[0] & 0x03;
954 LONGEST imm8;
9cacebf5 955
e17a4113 956 imm8 = extract_signed_integer (&instr[1], 1, byte_order);
9cacebf5 957
6c02c64c
KB
958 regs[E_A0_REGNUM + aN] = pv_constant (imm8);
959 pc += 2;
960 }
961 /* mov imm16, aN */
962 else if ((instr[0] & 0xfc) == 0x24)
963 {
964 int aN = instr[0] & 0x03;
965 gdb_byte buf[2];
966 LONGEST imm16;
967
968 status = target_read_memory (pc + 1, buf, 2);
969 if (status != 0)
970 break;
971
e17a4113 972 imm16 = extract_signed_integer (buf, 2, byte_order);
6c02c64c
KB
973 regs[E_A0_REGNUM + aN] = pv_constant (imm16);
974 pc += 3;
975 }
976 /* mov imm32, aN */
977 else if (instr[0] == 0xfc && ((instr[1] & 0xfc) == 0xdc))
978 {
979 int aN = instr[1] & 0x03;
980 gdb_byte buf[4];
981 LONGEST imm32;
982
983 status = target_read_memory (pc + 2, buf, 4);
984 if (status != 0)
985 break;
986
e17a4113 987 imm32 = extract_signed_integer (buf, 4, byte_order);
6c02c64c
KB
988 regs[E_A0_REGNUM + aN] = pv_constant (imm32);
989 pc += 6;
990 }
991 /* mov imm8, dN */
992 else if ((instr[0] & 0xf0) == 0x80)
993 {
994 int dN = instr[0] & 0x03;
995 LONGEST imm8;
996
e17a4113 997 imm8 = extract_signed_integer (&instr[1], 1, byte_order);
6c02c64c
KB
998
999 regs[E_D0_REGNUM + dN] = pv_constant (imm8);
1000 pc += 2;
1001 }
1002 /* mov imm16, dN */
1003 else if ((instr[0] & 0xfc) == 0x2c)
1004 {
1005 int dN = instr[0] & 0x03;
1006 gdb_byte buf[2];
1007 LONGEST imm16;
1008
1009 status = target_read_memory (pc + 1, buf, 2);
1010 if (status != 0)
1011 break;
1012
e17a4113 1013 imm16 = extract_signed_integer (buf, 2, byte_order);
6c02c64c
KB
1014 regs[E_D0_REGNUM + dN] = pv_constant (imm16);
1015 pc += 3;
1016 }
1017 /* mov imm32, dN */
1018 else if (instr[0] == 0xfc && ((instr[1] & 0xfc) == 0xcc))
1019 {
1020 int dN = instr[1] & 0x03;
1021 gdb_byte buf[4];
1022 LONGEST imm32;
1023
1024 status = target_read_memory (pc + 2, buf, 4);
1025 if (status != 0)
1026 break;
1027
e17a4113 1028 imm32 = extract_signed_integer (buf, 4, byte_order);
6c02c64c
KB
1029 regs[E_D0_REGNUM + dN] = pv_constant (imm32);
1030 pc += 6;
1031 }
1032 else
1033 {
1034 /* We've hit some instruction that we don't recognize. Hopefully,
1035 we have enough to do prologue analysis. */
1036 break;
1037 }
1038 }
1039
1040 /* Is the frame size (offset, really) a known constant? */
1041 if (pv_is_register (regs[E_SP_REGNUM], E_SP_REGNUM))
1042 result->frame_size = regs[E_SP_REGNUM].k;
9cacebf5 1043
6c02c64c
KB
1044 /* Was the frame pointer initialized? */
1045 if (pv_is_register (regs[E_A3_REGNUM], E_SP_REGNUM))
1046 {
1047 result->has_frame_ptr = 1;
1048 result->frame_ptr_offset = regs[E_A3_REGNUM].k;
9cacebf5 1049 }
6c02c64c
KB
1050
1051 /* Record where all the registers were saved. */
1052 pv_area_scan (stack, check_for_saved, (void *) result);
1053
1054 result->prologue_end = after_last_frame_setup_insn;
1055
1056 do_cleanups (back_to);
9cacebf5
MS
1057}
1058
342ee437
MS
1059/* Function: skip_prologue
1060 Return the address of the first inst past the prologue of the function. */
1061
1062static CORE_ADDR
6093d2eb 1063mn10300_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
342ee437 1064{
6c02c64c
KB
1065 char *name;
1066 CORE_ADDR func_addr, func_end;
1067 struct mn10300_prologue p;
1068
1069 /* Try to find the extent of the function that contains PC. */
1070 if (!find_pc_partial_function (pc, &name, &func_addr, &func_end))
1071 return pc;
1072
1073 mn10300_analyze_prologue (gdbarch, pc, func_end, &p);
1074 return p.prologue_end;
342ee437
MS
1075}
1076
6c02c64c
KB
1077/* Wrapper for mn10300_analyze_prologue: find the function start;
1078 use the current frame PC as the limit, then
1079 invoke mn10300_analyze_prologue and return its result. */
1080static struct mn10300_prologue *
1081mn10300_analyze_frame_prologue (struct frame_info *this_frame,
1082 void **this_prologue_cache)
342ee437 1083{
6c02c64c 1084 if (!*this_prologue_cache)
93d42b30 1085 {
6c02c64c
KB
1086 CORE_ADDR func_start, stop_addr;
1087
1088 *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct mn10300_prologue);
1089
1090 func_start = get_frame_func (this_frame);
1091 stop_addr = get_frame_pc (this_frame);
1092
1093 /* If we couldn't find any function containing the PC, then
1094 just initialize the prologue cache, but don't do anything. */
1095 if (!func_start)
1096 stop_addr = func_start;
1097
1098 mn10300_analyze_prologue (get_frame_arch (this_frame),
1099 func_start, stop_addr, *this_prologue_cache);
93d42b30 1100 }
342ee437 1101
6c02c64c
KB
1102 return *this_prologue_cache;
1103}
1104
1105/* Given the next frame and a prologue cache, return this frame's
1106 base. */
1107static CORE_ADDR
1108mn10300_frame_base (struct frame_info *this_frame, void **this_prologue_cache)
1109{
1110 struct mn10300_prologue *p
1111 = mn10300_analyze_frame_prologue (this_frame, this_prologue_cache);
1112
1113 /* In functions that use alloca, the distance between the stack
1114 pointer and the frame base varies dynamically, so we can't use
1115 the SP plus static information like prologue analysis to find the
1116 frame base. However, such functions must have a frame pointer,
1117 to be able to restore the SP on exit. So whenever we do have a
1118 frame pointer, use that to find the base. */
1119 if (p->has_frame_ptr)
1120 {
1121 CORE_ADDR fp = get_frame_register_unsigned (this_frame, E_A3_REGNUM);
1122 return fp - p->frame_ptr_offset;
1123 }
1124 else
1125 {
1126 CORE_ADDR sp = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
1127 return sp - p->frame_size;
1128 }
342ee437
MS
1129}
1130
1131/* Here is a dummy implementation. */
1132static struct frame_id
94afd7a6 1133mn10300_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
342ee437 1134{
94afd7a6
UW
1135 CORE_ADDR sp = get_frame_register_unsigned (this_frame, E_SP_REGNUM);
1136 CORE_ADDR pc = get_frame_register_unsigned (this_frame, E_PC_REGNUM);
1137 return frame_id_build (sp, pc);
342ee437
MS
1138}
1139
342ee437 1140static void
94afd7a6 1141mn10300_frame_this_id (struct frame_info *this_frame,
342ee437
MS
1142 void **this_prologue_cache,
1143 struct frame_id *this_id)
1144{
025bb325
MS
1145 *this_id = frame_id_build (mn10300_frame_base (this_frame,
1146 this_prologue_cache),
6c02c64c 1147 get_frame_func (this_frame));
342ee437 1148
342ee437
MS
1149}
1150
94afd7a6
UW
1151static struct value *
1152mn10300_frame_prev_register (struct frame_info *this_frame,
6c02c64c 1153 void **this_prologue_cache, int regnum)
342ee437 1154{
6c02c64c
KB
1155 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
1156 struct mn10300_prologue *p
1157 = mn10300_analyze_frame_prologue (this_frame, this_prologue_cache);
1158 CORE_ADDR frame_base = mn10300_frame_base (this_frame, this_prologue_cache);
1159 int reg_size = register_size (get_frame_arch (this_frame), regnum);
1160
1161 if (regnum == E_SP_REGNUM)
1162 return frame_unwind_got_constant (this_frame, regnum, frame_base);
1163
1164 /* If prologue analysis says we saved this register somewhere,
1165 return a description of the stack slot holding it. */
1166 if (p->reg_offset[regnum] != 1)
1167 return frame_unwind_got_memory (this_frame, regnum,
1168 frame_base + p->reg_offset[regnum]);
1169
1170 /* Otherwise, presume we haven't changed the value of this
1171 register, and get it from the next frame. */
1172 return frame_unwind_got_register (this_frame, regnum, regnum);
342ee437
MS
1173}
1174
1175static const struct frame_unwind mn10300_frame_unwind = {
1176 NORMAL_FRAME,
8fbca658 1177 default_frame_unwind_stop_reason,
342ee437 1178 mn10300_frame_this_id,
94afd7a6
UW
1179 mn10300_frame_prev_register,
1180 NULL,
1181 default_frame_sniffer
342ee437
MS
1182};
1183
1184static CORE_ADDR
6c02c64c 1185mn10300_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
342ee437
MS
1186{
1187 ULONGEST pc;
1188
6c02c64c 1189 pc = frame_unwind_register_unsigned (this_frame, E_PC_REGNUM);
342ee437
MS
1190 return pc;
1191}
1192
1193static CORE_ADDR
6c02c64c 1194mn10300_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
342ee437
MS
1195{
1196 ULONGEST sp;
1197
6c02c64c 1198 sp = frame_unwind_register_unsigned (this_frame, E_SP_REGNUM);
342ee437
MS
1199 return sp;
1200}
1201
1202static void
1203mn10300_frame_unwind_init (struct gdbarch *gdbarch)
1204{
94afd7a6
UW
1205 dwarf2_append_unwinders (gdbarch);
1206 frame_unwind_append_unwinder (gdbarch, &mn10300_frame_unwind);
94afd7a6 1207 set_gdbarch_dummy_id (gdbarch, mn10300_dummy_id);
342ee437
MS
1208 set_gdbarch_unwind_pc (gdbarch, mn10300_unwind_pc);
1209 set_gdbarch_unwind_sp (gdbarch, mn10300_unwind_sp);
1210}
1211
1212/* Function: push_dummy_call
1213 *
1214 * Set up machine state for a target call, including
1215 * function arguments, stack, return address, etc.
1216 *
1217 */
1218
1219static CORE_ADDR
1220mn10300_push_dummy_call (struct gdbarch *gdbarch,
1221 struct value *target_func,
1222 struct regcache *regcache,
1223 CORE_ADDR bp_addr,
1224 int nargs, struct value **args,
1225 CORE_ADDR sp,
1226 int struct_return,
1227 CORE_ADDR struct_addr)
1228{
e17a4113 1229 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
342ee437 1230 const int push_size = register_size (gdbarch, E_PC_REGNUM);
1fb1ca27 1231 int regs_used;
342ee437
MS
1232 int len, arg_len;
1233 int stack_offset = 0;
1234 int argnum;
1fb1ca27 1235 char *val, valbuf[MAX_REGISTER_SIZE];
342ee437 1236
342ee437
MS
1237 /* This should be a nop, but align the stack just in case something
1238 went wrong. Stacks are four byte aligned on the mn10300. */
1239 sp &= ~3;
1240
1241 /* Now make space on the stack for the args.
1242
1243 XXX This doesn't appear to handle pass-by-invisible reference
1244 arguments. */
1fb1ca27 1245 regs_used = struct_return ? 1 : 0;
342ee437
MS
1246 for (len = 0, argnum = 0; argnum < nargs; argnum++)
1247 {
1248 arg_len = (TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3;
342ee437
MS
1249 while (regs_used < 2 && arg_len > 0)
1250 {
1251 regs_used++;
1252 arg_len -= push_size;
1253 }
1254 len += arg_len;
1255 }
1256
1257 /* Allocate stack space. */
1258 sp -= len;
1259
1fb1ca27
MS
1260 if (struct_return)
1261 {
1262 regs_used = 1;
9c9acae0 1263 regcache_cooked_write_unsigned (regcache, E_D0_REGNUM, struct_addr);
1fb1ca27
MS
1264 }
1265 else
1266 regs_used = 0;
1267
025bb325 1268 /* Push all arguments onto the stack. */
342ee437
MS
1269 for (argnum = 0; argnum < nargs; argnum++)
1270 {
1fb1ca27
MS
1271 /* FIXME what about structs? Unions? */
1272 if (TYPE_CODE (value_type (*args)) == TYPE_CODE_STRUCT
1273 && TYPE_LENGTH (value_type (*args)) > 8)
1274 {
1275 /* Change to pointer-to-type. */
1276 arg_len = push_size;
e17a4113 1277 store_unsigned_integer (valbuf, push_size, byte_order,
42ae5230 1278 value_address (*args));
1fb1ca27
MS
1279 val = &valbuf[0];
1280 }
1281 else
1282 {
1283 arg_len = TYPE_LENGTH (value_type (*args));
1284 val = (char *) value_contents (*args);
1285 }
342ee437
MS
1286
1287 while (regs_used < 2 && arg_len > 0)
1288 {
9c9acae0 1289 regcache_cooked_write_unsigned (regcache, regs_used,
e17a4113 1290 extract_unsigned_integer (val, push_size, byte_order));
342ee437
MS
1291 val += push_size;
1292 arg_len -= push_size;
1293 regs_used++;
1294 }
1295
1296 while (arg_len > 0)
1297 {
1298 write_memory (sp + stack_offset, val, push_size);
1299 arg_len -= push_size;
1300 val += push_size;
1301 stack_offset += push_size;
1302 }
1303
1304 args++;
1305 }
1306
1307 /* Make space for the flushback area. */
1308 sp -= 8;
1309
1310 /* Push the return address that contains the magic breakpoint. */
1311 sp -= 4;
e17a4113 1312 write_memory_unsigned_integer (sp, push_size, byte_order, bp_addr);
a64ae7e0
CV
1313
1314 /* The CPU also writes the return address always into the
1315 MDR register on "call". */
1316 regcache_cooked_write_unsigned (regcache, E_MDR_REGNUM, bp_addr);
1317
342ee437
MS
1318 /* Update $sp. */
1319 regcache_cooked_write_unsigned (regcache, E_SP_REGNUM, sp);
ee3a2f01
KB
1320
1321 /* On the mn10300, it's possible to move some of the stack adjustment
1322 and saving of the caller-save registers out of the prologue and
1323 into the call sites. (When using gcc, this optimization can
1324 occur when using the -mrelax switch.) If this occurs, the dwarf2
1325 info will reflect this fact. We can test to see if this is the
1326 case by creating a new frame using the current stack pointer and
1327 the address of the function that we're about to call. We then
1328 unwind SP and see if it's different than the SP of our newly
1329 created frame. If the SP values are the same, the caller is not
1330 expected to allocate any additional stack. On the other hand, if
1331 the SP values are different, the difference determines the
1332 additional stack that must be allocated.
1333
1334 Note that we don't update the return value though because that's
1335 the value of the stack just after pushing the arguments, but prior
1336 to performing the call. This value is needed in order to
025bb325 1337 construct the frame ID of the dummy call. */
ee3a2f01
KB
1338 {
1339 CORE_ADDR func_addr = find_function_addr (target_func, NULL);
1340 CORE_ADDR unwound_sp
1341 = mn10300_unwind_sp (gdbarch, create_new_frame (sp, func_addr));
1342 if (sp != unwound_sp)
1343 regcache_cooked_write_unsigned (regcache, E_SP_REGNUM,
1344 sp - (unwound_sp - sp));
1345 }
1346
342ee437
MS
1347 return sp;
1348}
1349
336c28c5
KB
1350/* If DWARF2 is a register number appearing in Dwarf2 debug info, then
1351 mn10300_dwarf2_reg_to_regnum (DWARF2) is the corresponding GDB
1352 register number. Why don't Dwarf2 and GDB use the same numbering?
1353 Who knows? But since people have object files lying around with
1354 the existing Dwarf2 numbering, and other people have written stubs
1355 to work with the existing GDB, neither of them can change. So we
1356 just have to cope. */
1357static int
be8626e0 1358mn10300_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2)
336c28c5 1359{
c9f4d572 1360 /* This table is supposed to be shaped like the gdbarch_register_name
336c28c5
KB
1361 initializer in gcc/config/mn10300/mn10300.h. Registers which
1362 appear in GCC's numbering, but have no counterpart in GDB's
1363 world, are marked with a -1. */
1364 static int dwarf2_to_gdb[] = {
1365 0, 1, 2, 3, 4, 5, 6, 7, -1, 8,
1366 15, 16, 17, 18, 19, 20, 21, 22,
1367 32, 33, 34, 35, 36, 37, 38, 39,
1368 40, 41, 42, 43, 44, 45, 46, 47,
1369 48, 49, 50, 51, 52, 53, 54, 55,
bbc1a784 1370 56, 57, 58, 59, 60, 61, 62, 63,
6c02c64c 1371 9, 11
336c28c5
KB
1372 };
1373
1374 if (dwarf2 < 0
bbc1a784 1375 || dwarf2 >= ARRAY_SIZE (dwarf2_to_gdb))
154b82dc
KB
1376 {
1377 warning (_("Bogus register number in debug info: %d"), dwarf2);
bbc1a784 1378 return -1;
154b82dc 1379 }
336c28c5
KB
1380
1381 return dwarf2_to_gdb[dwarf2];
1382}
342ee437
MS
1383
1384static struct gdbarch *
1385mn10300_gdbarch_init (struct gdbarch_info info,
1386 struct gdbarch_list *arches)
1387{
1388 struct gdbarch *gdbarch;
1389 struct gdbarch_tdep *tdep;
4640dd91 1390 int num_regs;
342ee437
MS
1391
1392 arches = gdbarch_list_lookup_by_info (arches, &info);
1393 if (arches != NULL)
1394 return arches->gdbarch;
1395
1396 tdep = xmalloc (sizeof (struct gdbarch_tdep));
1397 gdbarch = gdbarch_alloc (&info, tdep);
1398
1399 switch (info.bfd_arch_info->mach)
1400 {
1401 case 0:
1402 case bfd_mach_mn10300:
1403 set_gdbarch_register_name (gdbarch, mn10300_generic_register_name);
1404 tdep->am33_mode = 0;
4640dd91 1405 num_regs = 32;
342ee437
MS
1406 break;
1407 case bfd_mach_am33:
1408 set_gdbarch_register_name (gdbarch, am33_register_name);
1409 tdep->am33_mode = 1;
4640dd91
KB
1410 num_regs = 32;
1411 break;
1412 case bfd_mach_am33_2:
1413 set_gdbarch_register_name (gdbarch, am33_2_register_name);
1414 tdep->am33_mode = 2;
1415 num_regs = 64;
1416 set_gdbarch_fp0_regnum (gdbarch, 32);
342ee437
MS
1417 break;
1418 default:
1419 internal_error (__FILE__, __LINE__,
1420 _("mn10300_gdbarch_init: Unknown mn10300 variant"));
1421 break;
1422 }
1423
1b31f75d
KB
1424 /* By default, chars are unsigned. */
1425 set_gdbarch_char_signed (gdbarch, 0);
1426
342ee437 1427 /* Registers. */
4640dd91 1428 set_gdbarch_num_regs (gdbarch, num_regs);
342ee437
MS
1429 set_gdbarch_register_type (gdbarch, mn10300_register_type);
1430 set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
1431 set_gdbarch_read_pc (gdbarch, mn10300_read_pc);
1432 set_gdbarch_write_pc (gdbarch, mn10300_write_pc);
1433 set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
1434 set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
336c28c5 1435 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, mn10300_dwarf2_reg_to_regnum);
342ee437
MS
1436
1437 /* Stack unwinding. */
1438 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1439 /* Breakpoints. */
1440 set_gdbarch_breakpoint_from_pc (gdbarch, mn10300_breakpoint_from_pc);
025bb325 1441 /* decr_pc_after_break? */
342ee437
MS
1442 /* Disassembly. */
1443 set_gdbarch_print_insn (gdbarch, print_insn_mn10300);
1444
1445 /* Stage 2 */
99fe5f9d 1446 set_gdbarch_return_value (gdbarch, mn10300_return_value);
342ee437
MS
1447
1448 /* Stage 3 -- get target calls working. */
1449 set_gdbarch_push_dummy_call (gdbarch, mn10300_push_dummy_call);
1450 /* set_gdbarch_return_value (store, extract) */
1451
1452
1453 mn10300_frame_unwind_init (gdbarch);
1454
697e3bc9
KB
1455 /* Hook in ABI-specific overrides, if they have been registered. */
1456 gdbarch_init_osabi (info, gdbarch);
1457
342ee437
MS
1458 return gdbarch;
1459}
1460
025bb325 1461/* Dump out the mn10300 specific architecture information. */
342ee437
MS
1462
1463static void
d93859e2 1464mn10300_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
342ee437 1465{
d93859e2 1466 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
342ee437
MS
1467 fprintf_unfiltered (file, "mn10300_dump_tdep: am33_mode = %d\n",
1468 tdep->am33_mode);
1469}
1470
63807e1d
PA
1471/* Provide a prototype to silence -Wmissing-prototypes. */
1472extern initialize_file_ftype _initialize_mn10300_tdep;
1473
342ee437
MS
1474void
1475_initialize_mn10300_tdep (void)
1476{
1477 gdbarch_register (bfd_arch_mn10300, mn10300_gdbarch_init, mn10300_dump_tdep);
1478}
1479
This page took 0.970987 seconds and 4 git commands to generate.