* README: Mention gdbserver/README.
[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,
9b254dd1 4 2007, 2008 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"
28#include "gdbcore.h" /* for write_memory_unsigned_integer */
29#include "value.h"
30#include "gdbtypes.h"
31#include "frame.h"
32#include "frame-unwind.h"
33#include "frame-base.h"
34#include "trad-frame.h"
35#include "symtab.h"
36#include "dwarf2-frame.h"
697e3bc9 37#include "osabi.h"
342ee437
MS
38
39#include "mn10300-tdep.h"
40
9cacebf5
MS
41/* Forward decl. */
42extern struct trad_frame_cache *mn10300_frame_unwind_cache (struct frame_info*,
43 void **);
342ee437
MS
44
45/* Compute the alignment required by a type. */
46
47static int
48mn10300_type_align (struct type *type)
49{
50 int i, align = 1;
51
52 switch (TYPE_CODE (type))
53 {
54 case TYPE_CODE_INT:
55 case TYPE_CODE_ENUM:
56 case TYPE_CODE_SET:
57 case TYPE_CODE_RANGE:
58 case TYPE_CODE_CHAR:
59 case TYPE_CODE_BOOL:
60 case TYPE_CODE_FLT:
61 case TYPE_CODE_PTR:
62 case TYPE_CODE_REF:
63 return TYPE_LENGTH (type);
64
65 case TYPE_CODE_COMPLEX:
66 return TYPE_LENGTH (type) / 2;
67
68 case TYPE_CODE_STRUCT:
69 case TYPE_CODE_UNION:
70 for (i = 0; i < TYPE_NFIELDS (type); i++)
71 {
72 int falign = mn10300_type_align (TYPE_FIELD_TYPE (type, i));
73 while (align < falign)
74 align <<= 1;
75 }
76 return align;
77
78 case TYPE_CODE_ARRAY:
79 /* HACK! Structures containing arrays, even small ones, are not
80 elligible for returning in registers. */
81 return 256;
82
83 case TYPE_CODE_TYPEDEF:
84 return mn10300_type_align (check_typedef (type));
85
86 default:
87 internal_error (__FILE__, __LINE__, _("bad switch"));
88 }
89}
90
342ee437 91/* Should call_function allocate stack space for a struct return? */
342ee437 92static int
99fe5f9d 93mn10300_use_struct_convention (struct type *type)
342ee437
MS
94{
95 /* Structures bigger than a pair of words can't be returned in
96 registers. */
97 if (TYPE_LENGTH (type) > 8)
98 return 1;
99
100 switch (TYPE_CODE (type))
101 {
102 case TYPE_CODE_STRUCT:
103 case TYPE_CODE_UNION:
104 /* Structures with a single field are handled as the field
105 itself. */
106 if (TYPE_NFIELDS (type) == 1)
99fe5f9d 107 return mn10300_use_struct_convention (TYPE_FIELD_TYPE (type, 0));
342ee437
MS
108
109 /* Structures with word or double-word size are passed in memory, as
110 long as they require at least word alignment. */
111 if (mn10300_type_align (type) >= 4)
112 return 0;
113
114 return 1;
115
116 /* Arrays are addressable, so they're never returned in
117 registers. This condition can only hold when the array is
118 the only field of a struct or union. */
119 case TYPE_CODE_ARRAY:
120 return 1;
121
122 case TYPE_CODE_TYPEDEF:
99fe5f9d 123 return mn10300_use_struct_convention (check_typedef (type));
342ee437
MS
124
125 default:
126 return 0;
127 }
128}
129
342ee437 130static void
99fe5f9d 131mn10300_store_return_value (struct gdbarch *gdbarch, struct type *type,
342ee437
MS
132 struct regcache *regcache, const void *valbuf)
133{
342ee437
MS
134 int len = TYPE_LENGTH (type);
135 int reg, regsz;
136
137 if (TYPE_CODE (type) == TYPE_CODE_PTR)
138 reg = 4;
139 else
140 reg = 0;
141
142 regsz = register_size (gdbarch, reg);
143
144 if (len <= regsz)
145 regcache_raw_write_part (regcache, reg, 0, len, valbuf);
146 else if (len <= 2 * regsz)
147 {
148 regcache_raw_write (regcache, reg, valbuf);
149 gdb_assert (regsz == register_size (gdbarch, reg + 1));
150 regcache_raw_write_part (regcache, reg+1, 0,
151 len - regsz, (char *) valbuf + regsz);
152 }
153 else
154 internal_error (__FILE__, __LINE__,
155 _("Cannot store return value %d bytes long."), len);
156}
157
342ee437 158static void
99fe5f9d 159mn10300_extract_return_value (struct gdbarch *gdbarch, struct type *type,
342ee437
MS
160 struct regcache *regcache, void *valbuf)
161{
342ee437
MS
162 char buf[MAX_REGISTER_SIZE];
163 int len = TYPE_LENGTH (type);
164 int reg, regsz;
165
166 if (TYPE_CODE (type) == TYPE_CODE_PTR)
167 reg = 4;
168 else
169 reg = 0;
170
171 regsz = register_size (gdbarch, reg);
172 if (len <= regsz)
173 {
174 regcache_raw_read (regcache, reg, buf);
175 memcpy (valbuf, buf, len);
176 }
177 else if (len <= 2 * regsz)
178 {
179 regcache_raw_read (regcache, reg, buf);
180 memcpy (valbuf, buf, regsz);
181 gdb_assert (regsz == register_size (gdbarch, reg + 1));
182 regcache_raw_read (regcache, reg + 1, buf);
183 memcpy ((char *) valbuf + regsz, buf, len - regsz);
184 }
185 else
186 internal_error (__FILE__, __LINE__,
187 _("Cannot extract return value %d bytes long."), len);
188}
189
99fe5f9d
KB
190/* Determine, for architecture GDBARCH, how a return value of TYPE
191 should be returned. If it is supposed to be returned in registers,
192 and READBUF is non-zero, read the appropriate value from REGCACHE,
193 and copy it into READBUF. If WRITEBUF is non-zero, write the value
194 from WRITEBUF into REGCACHE. */
195
196static enum return_value_convention
197mn10300_return_value (struct gdbarch *gdbarch, struct type *type,
198 struct regcache *regcache, gdb_byte *readbuf,
199 const gdb_byte *writebuf)
200{
201 if (mn10300_use_struct_convention (type))
202 return RETURN_VALUE_STRUCT_CONVENTION;
203
204 if (readbuf)
205 mn10300_extract_return_value (gdbarch, type, regcache, readbuf);
206 if (writebuf)
207 mn10300_store_return_value (gdbarch, type, regcache, writebuf);
208
209 return RETURN_VALUE_REGISTER_CONVENTION;
210}
211
342ee437
MS
212static char *
213register_name (int reg, char **regs, long sizeof_regs)
214{
215 if (reg < 0 || reg >= sizeof_regs / sizeof (regs[0]))
216 return NULL;
217 else
218 return regs[reg];
219}
220
221static const char *
d93859e2 222mn10300_generic_register_name (struct gdbarch *gdbarch, int reg)
342ee437
MS
223{
224 static char *regs[] =
225 { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
226 "sp", "pc", "mdr", "psw", "lir", "lar", "", "",
227 "", "", "", "", "", "", "", "",
228 "", "", "", "", "", "", "", "fp"
229 };
230 return register_name (reg, regs, sizeof regs);
231}
232
233
234static const char *
d93859e2 235am33_register_name (struct gdbarch *gdbarch, int reg)
342ee437
MS
236{
237 static char *regs[] =
238 { "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
239 "sp", "pc", "mdr", "psw", "lir", "lar", "",
240 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
241 "ssp", "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", ""
242 };
243 return register_name (reg, regs, sizeof regs);
244}
245
4640dd91 246static const char *
d93859e2 247am33_2_register_name (struct gdbarch *gdbarch, int reg)
4640dd91
KB
248{
249 static char *regs[] =
250 {
251 "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
252 "sp", "pc", "mdr", "psw", "lir", "lar", "mdrq", "r0",
253 "r1", "r2", "r3", "r4", "r5", "r6", "r7", "ssp",
254 "msp", "usp", "mcrh", "mcrl", "mcvf", "fpcr", "", "",
255 "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7",
256 "fs8", "fs9", "fs10", "fs11", "fs12", "fs13", "fs14", "fs15",
257 "fs16", "fs17", "fs18", "fs19", "fs20", "fs21", "fs22", "fs23",
258 "fs24", "fs25", "fs26", "fs27", "fs28", "fs29", "fs30", "fs31"
259 };
260 return register_name (reg, regs, sizeof regs);
261}
342ee437
MS
262
263static struct type *
264mn10300_register_type (struct gdbarch *gdbarch, int reg)
265{
266 return builtin_type_int;
267}
268
269static CORE_ADDR
61a1198a 270mn10300_read_pc (struct regcache *regcache)
342ee437 271{
61a1198a
UW
272 ULONGEST val;
273 regcache_cooked_read_unsigned (regcache, E_PC_REGNUM, &val);
274 return val;
342ee437
MS
275}
276
277static void
61a1198a 278mn10300_write_pc (struct regcache *regcache, CORE_ADDR val)
342ee437 279{
61a1198a 280 regcache_cooked_write_unsigned (regcache, E_PC_REGNUM, val);
342ee437
MS
281}
282
283/* The breakpoint instruction must be the same size as the smallest
284 instruction in the instruction set.
285
286 The Matsushita mn10x00 processors have single byte instructions
287 so we need a single byte breakpoint. Matsushita hasn't defined
288 one, so we defined it ourselves. */
289
290const static unsigned char *
67d57894
MD
291mn10300_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
292 int *bp_size)
342ee437
MS
293{
294 static char breakpoint[] = {0xff};
295 *bp_size = 1;
296 return breakpoint;
297}
298
4640dd91 299/* Set offsets of saved registers.
9cacebf5
MS
300 This is a helper function for mn10300_analyze_prologue. */
301
302static void
4640dd91 303set_reg_offsets (struct frame_info *fi,
9cacebf5 304 void **this_cache,
4640dd91
KB
305 int movm_args,
306 int fpregmask,
307 int stack_extra_size,
308 int frame_in_fp)
9cacebf5 309{
d15cf01c 310 struct gdbarch *gdbarch;
9cacebf5
MS
311 struct trad_frame_cache *cache;
312 int offset = 0;
313 CORE_ADDR base;
314
315 if (fi == NULL || this_cache == NULL)
316 return;
317
318 cache = mn10300_frame_unwind_cache (fi, this_cache);
319 if (cache == NULL)
320 return;
d15cf01c 321 gdbarch = get_frame_arch (fi);
9cacebf5 322
4640dd91
KB
323 if (frame_in_fp)
324 {
325 base = frame_unwind_register_unsigned (fi, E_A3_REGNUM);
326 }
327 else
328 {
d15cf01c
MD
329 base = frame_unwind_register_unsigned (fi, E_SP_REGNUM)
330 + stack_extra_size;
4640dd91
KB
331 }
332
333 trad_frame_set_this_base (cache, base);
334
d15cf01c 335 if (AM33_MODE (gdbarch) == 2)
4640dd91
KB
336 {
337 /* If bit N is set in fpregmask, fsN is saved on the stack.
338 The floating point registers are saved in ascending order.
339 For example: fs16 <- Frame Pointer
340 fs17 Frame Pointer + 4 */
341 if (fpregmask != 0)
342 {
343 int i;
344 for (i = 0; i < 32; i++)
345 {
346 if (fpregmask & (1 << i))
347 {
d15cf01c
MD
348 trad_frame_set_reg_addr (cache, E_FS0_REGNUM + i,
349 base + offset);
4640dd91
KB
350 offset += 4;
351 }
352 }
353 }
354 }
355
356
9cacebf5
MS
357 if (movm_args & movm_other_bit)
358 {
359 /* The `other' bit leaves a blank area of four bytes at the
360 beginning of its block of saved registers, making it 32 bytes
361 long in total. */
362 trad_frame_set_reg_addr (cache, E_LAR_REGNUM, base + offset + 4);
363 trad_frame_set_reg_addr (cache, E_LIR_REGNUM, base + offset + 8);
364 trad_frame_set_reg_addr (cache, E_MDR_REGNUM, base + offset + 12);
365 trad_frame_set_reg_addr (cache, E_A0_REGNUM + 1, base + offset + 16);
366 trad_frame_set_reg_addr (cache, E_A0_REGNUM, base + offset + 20);
367 trad_frame_set_reg_addr (cache, E_D0_REGNUM + 1, base + offset + 24);
368 trad_frame_set_reg_addr (cache, E_D0_REGNUM, base + offset + 28);
369 offset += 32;
370 }
371
372 if (movm_args & movm_a3_bit)
373 {
374 trad_frame_set_reg_addr (cache, E_A3_REGNUM, base + offset);
375 offset += 4;
376 }
377 if (movm_args & movm_a2_bit)
378 {
379 trad_frame_set_reg_addr (cache, E_A2_REGNUM, base + offset);
380 offset += 4;
381 }
382 if (movm_args & movm_d3_bit)
383 {
384 trad_frame_set_reg_addr (cache, E_D3_REGNUM, base + offset);
385 offset += 4;
386 }
387 if (movm_args & movm_d2_bit)
388 {
389 trad_frame_set_reg_addr (cache, E_D2_REGNUM, base + offset);
390 offset += 4;
391 }
d15cf01c 392 if (AM33_MODE (gdbarch))
9cacebf5
MS
393 {
394 if (movm_args & movm_exother_bit)
395 {
396 trad_frame_set_reg_addr (cache, E_MCVF_REGNUM, base + offset);
397 trad_frame_set_reg_addr (cache, E_MCRL_REGNUM, base + offset + 4);
398 trad_frame_set_reg_addr (cache, E_MCRH_REGNUM, base + offset + 8);
399 trad_frame_set_reg_addr (cache, E_MDRQ_REGNUM, base + offset + 12);
400 trad_frame_set_reg_addr (cache, E_E1_REGNUM, base + offset + 16);
401 trad_frame_set_reg_addr (cache, E_E0_REGNUM, base + offset + 20);
402 offset += 24;
403 }
404 if (movm_args & movm_exreg1_bit)
405 {
406 trad_frame_set_reg_addr (cache, E_E7_REGNUM, base + offset);
407 trad_frame_set_reg_addr (cache, E_E6_REGNUM, base + offset + 4);
408 trad_frame_set_reg_addr (cache, E_E5_REGNUM, base + offset + 8);
409 trad_frame_set_reg_addr (cache, E_E4_REGNUM, base + offset + 12);
410 offset += 16;
411 }
412 if (movm_args & movm_exreg0_bit)
413 {
414 trad_frame_set_reg_addr (cache, E_E3_REGNUM, base + offset);
415 trad_frame_set_reg_addr (cache, E_E2_REGNUM, base + offset + 4);
416 offset += 8;
417 }
418 }
419 /* The last (or first) thing on the stack will be the PC. */
420 trad_frame_set_reg_addr (cache, E_PC_REGNUM, base + offset);
421 /* Save the SP in the 'traditional' way.
422 This will be the same location where the PC is saved. */
423 trad_frame_set_reg_value (cache, E_SP_REGNUM, base + offset);
424}
425
426/* The main purpose of this file is dealing with prologues to extract
427 information about stack frames and saved registers.
428
429 In gcc/config/mn13000/mn10300.c, the expand_prologue prologue
430 function is pretty readable, and has a nice explanation of how the
431 prologue is generated. The prologues generated by that code will
432 have the following form (NOTE: the current code doesn't handle all
433 this!):
434
435 + If this is an old-style varargs function, then its arguments
436 need to be flushed back to the stack:
437
438 mov d0,(4,sp)
439 mov d1,(4,sp)
440
441 + If we use any of the callee-saved registers, save them now.
442
443 movm [some callee-saved registers],(sp)
444
445 + If we have any floating-point registers to save:
446
447 - Decrement the stack pointer to reserve space for the registers.
448 If the function doesn't need a frame pointer, we may combine
449 this with the adjustment that reserves space for the frame.
450
451 add -SIZE, sp
452
453 - Save the floating-point registers. We have two possible
454 strategies:
455
456 . Save them at fixed offset from the SP:
457
458 fmov fsN,(OFFSETN,sp)
459 fmov fsM,(OFFSETM,sp)
460 ...
461
462 Note that, if OFFSETN happens to be zero, you'll get the
463 different opcode: fmov fsN,(sp)
464
465 . Or, set a0 to the start of the save area, and then use
466 post-increment addressing to save the FP registers.
467
468 mov sp, a0
469 add SIZE, a0
470 fmov fsN,(a0+)
471 fmov fsM,(a0+)
472 ...
473
474 + If the function needs a frame pointer, we set it here.
475
476 mov sp, a3
477
478 + Now we reserve space for the stack frame proper. This could be
479 merged into the `add -SIZE, sp' instruction for FP saves up
480 above, unless we needed to set the frame pointer in the previous
481 step, or the frame is so large that allocating the whole thing at
482 once would put the FP register save slots out of reach of the
483 addressing mode (128 bytes).
484
485 add -SIZE, sp
486
487 One day we might keep the stack pointer constant, that won't
488 change the code for prologues, but it will make the frame
489 pointerless case much more common. */
490
491/* Analyze the prologue to determine where registers are saved,
492 the end of the prologue, etc etc. Return the end of the prologue
493 scanned.
494
495 We store into FI (if non-null) several tidbits of information:
496
497 * stack_size -- size of this stack frame. Note that if we stop in
498 certain parts of the prologue/epilogue we may claim the size of the
499 current frame is zero. This happens when the current frame has
500 not been allocated yet or has already been deallocated.
501
502 * fsr -- Addresses of registers saved in the stack by this frame.
503
504 * status -- A (relatively) generic status indicator. It's a bitmask
505 with the following bits:
506
507 MY_FRAME_IN_SP: The base of the current frame is actually in
508 the stack pointer. This can happen for frame pointerless
509 functions, or cases where we're stopped in the prologue/epilogue
510 itself. For these cases mn10300_analyze_prologue will need up
511 update fi->frame before returning or analyzing the register
512 save instructions.
513
514 MY_FRAME_IN_FP: The base of the current frame is in the
515 frame pointer register ($a3).
516
517 NO_MORE_FRAMES: Set this if the current frame is "start" or
518 if the first instruction looks like mov <imm>,sp. This tells
519 frame chain to not bother trying to unwind past this frame. */
520
521static CORE_ADDR
d15cf01c 522mn10300_analyze_prologue (struct gdbarch *gdbarch, struct frame_info *fi,
9cacebf5
MS
523 void **this_cache,
524 CORE_ADDR pc)
525{
526 CORE_ADDR func_addr, func_end, addr, stop;
4640dd91 527 long stack_extra_size = 0;
9cacebf5
MS
528 int imm_size;
529 unsigned char buf[4];
4640dd91
KB
530 int status;
531 int movm_args = 0;
532 int fpregmask = 0;
9cacebf5 533 char *name;
4640dd91 534 int frame_in_fp = 0;
9cacebf5
MS
535
536 /* Use the PC in the frame if it's provided to look up the
537 start of this function.
538
539 Note: kevinb/2003-07-16: We used to do the following here:
540 pc = (fi ? get_frame_pc (fi) : pc);
541 But this is (now) badly broken when called from analyze_dummy_frame().
542 */
543 if (fi)
544 {
545 pc = (pc ? pc : get_frame_pc (fi));
9cacebf5
MS
546 }
547
548 /* Find the start of this function. */
549 status = find_pc_partial_function (pc, &name, &func_addr, &func_end);
550
551 /* Do nothing if we couldn't find the start of this function
552
553 MVS: comment went on to say "or if we're stopped at the first
554 instruction in the prologue" -- but code doesn't reflect that,
555 and I don't want to do that anyway. */
556 if (status == 0)
557 {
4640dd91
KB
558 addr = pc;
559 goto finish_prologue;
9cacebf5
MS
560 }
561
562 /* If we're in start, then give up. */
563 if (strcmp (name, "start") == 0)
564 {
4640dd91
KB
565 addr = pc;
566 goto finish_prologue;
9cacebf5
MS
567 }
568
9cacebf5
MS
569 /* Figure out where to stop scanning. */
570 stop = fi ? pc : func_end;
571
572 /* Don't walk off the end of the function. */
573 stop = stop > func_end ? func_end : stop;
574
575 /* Start scanning on the first instruction of this function. */
576 addr = func_addr;
577
578 /* Suck in two bytes. */
4640dd91 579 if (addr + 2 > stop || !safe_frame_unwind_memory (fi, addr, buf, 2))
9cacebf5
MS
580 goto finish_prologue;
581
582 /* First see if this insn sets the stack pointer from a register; if
583 so, it's probably the initialization of the stack pointer in _start,
584 so mark this as the bottom-most frame. */
585 if (buf[0] == 0xf2 && (buf[1] & 0xf3) == 0xf0)
586 {
9cacebf5
MS
587 goto finish_prologue;
588 }
589
590 /* Now look for movm [regs],sp, which saves the callee saved registers.
591
592 At this time we don't know if fi->frame is valid, so we only note
593 that we encountered a movm instruction. Later, we'll set the entries
594 in fsr.regs as needed. */
595 if (buf[0] == 0xcf)
596 {
597 /* Extract the register list for the movm instruction. */
598 movm_args = buf[1];
599
600 addr += 2;
601
602 /* Quit now if we're beyond the stop point. */
603 if (addr >= stop)
604 goto finish_prologue;
605
606 /* Get the next two bytes so the prologue scan can continue. */
f2c8bc43 607 if (!safe_frame_unwind_memory (fi, addr, buf, 2))
9cacebf5
MS
608 goto finish_prologue;
609 }
610
d15cf01c 611 if (AM33_MODE (gdbarch) == 2)
4640dd91
KB
612 {
613 /* Determine if any floating point registers are to be saved.
614 Look for one of the following three prologue formats:
615
616 [movm [regs],(sp)] [movm [regs],(sp)] [movm [regs],(sp)]
617
618 add -SIZE,sp add -SIZE,sp add -SIZE,sp
619 fmov fs#,(sp) mov sp,a0/a1 mov sp,a0/a1
620 fmov fs#,(#,sp) fmov fs#,(a0/a1+) add SIZE2,a0/a1
621 ... ... fmov fs#,(a0/a1+)
622 ... ... ...
623 fmov fs#,(#,sp) fmov fs#,(a0/a1+) fmov fs#,(a0/a1+)
624
625 [mov sp,a3] [mov sp,a3]
626 [add -SIZE2,sp] [add -SIZE2,sp] */
627
e92e42f5
KB
628 /* Remember the address at which we started in the event that we
629 don't ultimately find an fmov instruction. Once we're certain
630 that we matched one of the above patterns, we'll set
631 ``restore_addr'' to the appropriate value. Note: At one time
632 in the past, this code attempted to not adjust ``addr'' until
633 there was a fair degree of certainty that the pattern would be
634 matched. However, that code did not wait until an fmov instruction
635 was actually encountered. As a consequence, ``addr'' would
636 sometimes be advanced even when no fmov instructions were found. */
637 CORE_ADDR restore_addr = addr;
638
4640dd91
KB
639 /* First, look for add -SIZE,sp (i.e. add imm8,sp (0xf8feXX)
640 or add imm16,sp (0xfafeXXXX)
641 or add imm32,sp (0xfcfeXXXXXXXX)) */
642 imm_size = 0;
643 if (buf[0] == 0xf8 && buf[1] == 0xfe)
644 imm_size = 1;
645 else if (buf[0] == 0xfa && buf[1] == 0xfe)
646 imm_size = 2;
647 else if (buf[0] == 0xfc && buf[1] == 0xfe)
648 imm_size = 4;
649 if (imm_size != 0)
650 {
651 /* An "add -#,sp" instruction has been found. "addr + 2 + imm_size"
652 is the address of the next instruction. Don't modify "addr" until
653 the next "floating point prologue" instruction is found. If this
654 is not a prologue that saves floating point registers we need to
655 be able to back out of this bit of code and continue with the
656 prologue analysis. */
657 if (addr + 2 + imm_size < stop)
658 {
659 if (!safe_frame_unwind_memory (fi, addr + 2 + imm_size, buf, 3))
660 goto finish_prologue;
661 if ((buf[0] & 0xfc) == 0x3c)
662 {
663 /* Occasionally, especially with C++ code, the "fmov"
664 instructions will be preceded by "mov sp,aN"
665 (aN => a0, a1, a2, or a3).
666
667 This is a one byte instruction: mov sp,aN = 0011 11XX
668 where XX is the register number.
669
e92e42f5
KB
670 Skip this instruction by incrementing addr. The "fmov"
671 instructions will have the form "fmov fs#,(aN+)" in this
672 case, but that will not necessitate a change in the
673 "fmov" parsing logic below. */
4640dd91
KB
674
675 addr++;
676
677 if ((buf[1] & 0xfc) == 0x20)
678 {
679 /* Occasionally, especially with C++ code compiled with
680 the -fomit-frame-pointer or -O3 options, the
681 "mov sp,aN" instruction will be followed by an
682 "add #,aN" instruction. This indicates the
683 "stack_size", the size of the portion of the stack
684 containing the arguments. This instruction format is:
685 add #,aN = 0010 00XX YYYY YYYY
686 where XX is the register number
687 YYYY YYYY is the constant.
688 Note the size of the stack (as a negative number) in
689 the frame info structure. */
690 if (fi)
691 stack_extra_size += -buf[2];
692
693 addr += 2;
694 }
695 }
696
697 if ((buf[0] & 0xfc) == 0x3c ||
698 buf[0] == 0xf9 || buf[0] == 0xfb)
699 {
700 /* An "fmov" instruction has been found indicating that this
701 prologue saves floating point registers (or, as described
702 above, a "mov sp,aN" and possible "add #,aN" have been
703 found and we will assume an "fmov" follows). Process the
704 consecutive "fmov" instructions. */
705 for (addr += 2 + imm_size;;addr += imm_size)
706 {
707 int regnum;
708
709 /* Read the "fmov" instruction. */
710 if (addr >= stop ||
711 !safe_frame_unwind_memory (fi, addr, buf, 4))
712 goto finish_prologue;
713
714 if (buf[0] != 0xf9 && buf[0] != 0xfb)
715 break;
716
e92e42f5
KB
717 /* An fmov instruction has just been seen. We can
718 now really commit to the pattern match. Set the
719 address to restore at the end of this speculative
720 bit of code to the actually address that we've
721 been incrementing (or not) throughout the
722 speculation. */
723 restore_addr = addr;
724
4640dd91
KB
725 /* Get the floating point register number from the
726 2nd and 3rd bytes of the "fmov" instruction:
727 Machine Code: 0000 00X0 YYYY 0000 =>
728 Regnum: 000X YYYY */
729 regnum = (buf[1] & 0x02) << 3;
730 regnum |= ((buf[2] & 0xf0) >> 4) & 0x0f;
731
732 /* Add this register number to the bit mask of floating
733 point registers that have been saved. */
734 fpregmask |= 1 << regnum;
735
736 /* Determine the length of this "fmov" instruction.
737 fmov fs#,(sp) => 3 byte instruction
738 fmov fs#,(#,sp) => 4 byte instruction */
739 imm_size = (buf[0] == 0xf9) ? 3 : 4;
740 }
741 }
742 else
743 {
744 /* No "fmov" was found. Reread the two bytes at the original
745 "addr" to reset the state. */
e92e42f5 746 addr = restore_addr;
4640dd91
KB
747 if (!safe_frame_unwind_memory (fi, addr, buf, 2))
748 goto finish_prologue;
749 }
750 }
751 /* else the prologue consists entirely of an "add -SIZE,sp"
752 instruction. Handle this below. */
753 }
754 /* else no "add -SIZE,sp" was found indicating no floating point
e92e42f5
KB
755 registers are saved in this prologue. */
756
757 /* In the pattern match code contained within this block, `restore_addr'
758 is set to the starting address at the very beginning and then
759 iteratively to the next address to start scanning at once the
760 pattern match has succeeded. Thus `restore_addr' will contain
761 the address to rewind to if the pattern match failed. If the
762 match succeeded, `restore_addr' and `addr' will already have the
763 same value. */
764 addr = restore_addr;
4640dd91
KB
765 }
766
9cacebf5
MS
767 /* Now see if we set up a frame pointer via "mov sp,a3" */
768 if (buf[0] == 0x3f)
769 {
770 addr += 1;
771
772 /* The frame pointer is now valid. */
773 if (fi)
774 {
4640dd91 775 frame_in_fp = 1;
9cacebf5
MS
776 }
777
778 /* Quit now if we're beyond the stop point. */
779 if (addr >= stop)
780 goto finish_prologue;
781
782 /* Get two more bytes so scanning can continue. */
f2c8bc43 783 if (!safe_frame_unwind_memory (fi, addr, buf, 2))
9cacebf5
MS
784 goto finish_prologue;
785 }
786
787 /* Next we should allocate the local frame. No more prologue insns
788 are found after allocating the local frame.
789
790 Search for add imm8,sp (0xf8feXX)
791 or add imm16,sp (0xfafeXXXX)
792 or add imm32,sp (0xfcfeXXXXXXXX).
793
794 If none of the above was found, then this prologue has no
795 additional stack. */
796
797 imm_size = 0;
798 if (buf[0] == 0xf8 && buf[1] == 0xfe)
799 imm_size = 1;
800 else if (buf[0] == 0xfa && buf[1] == 0xfe)
801 imm_size = 2;
802 else if (buf[0] == 0xfc && buf[1] == 0xfe)
803 imm_size = 4;
804
805 if (imm_size != 0)
806 {
807 /* Suck in imm_size more bytes, they'll hold the size of the
808 current frame. */
f2c8bc43 809 if (!safe_frame_unwind_memory (fi, addr + 2, buf, imm_size))
9cacebf5
MS
810 goto finish_prologue;
811
4640dd91 812 /* Note the size of the stack. */
e92e42f5 813 stack_extra_size -= extract_signed_integer (buf, imm_size);
9cacebf5
MS
814
815 /* We just consumed 2 + imm_size bytes. */
816 addr += 2 + imm_size;
817
818 /* No more prologue insns follow, so begin preparation to return. */
819 goto finish_prologue;
820 }
821 /* Do the essentials and get out of here. */
822 finish_prologue:
823 /* Note if/where callee saved registers were saved. */
824 if (fi)
d15cf01c
MD
825 set_reg_offsets (fi, this_cache, movm_args, fpregmask, stack_extra_size,
826 frame_in_fp);
9cacebf5
MS
827 return addr;
828}
829
342ee437
MS
830/* Function: skip_prologue
831 Return the address of the first inst past the prologue of the function. */
832
833static CORE_ADDR
6093d2eb 834mn10300_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
342ee437 835{
d15cf01c 836 return mn10300_analyze_prologue (gdbarch, NULL, NULL, pc);
342ee437
MS
837}
838
839/* Simple frame_unwind_cache.
840 This finds the "extra info" for the frame. */
841struct trad_frame_cache *
842mn10300_frame_unwind_cache (struct frame_info *next_frame,
843 void **this_prologue_cache)
844{
d15cf01c 845 struct gdbarch *gdbarch;
342ee437 846 struct trad_frame_cache *cache;
1fb1ca27 847 CORE_ADDR pc, start, end;
ec20a626 848 void *cache_p;
342ee437
MS
849
850 if (*this_prologue_cache)
851 return (*this_prologue_cache);
852
d15cf01c 853 gdbarch = get_frame_arch (next_frame);
ec20a626 854 cache_p = trad_frame_cache_zalloc (next_frame);
d15cf01c
MD
855 pc = gdbarch_unwind_pc (gdbarch, next_frame);
856 mn10300_analyze_prologue (gdbarch, next_frame, &cache_p, pc);
ec20a626
UW
857 cache = cache_p;
858
1fb1ca27
MS
859 if (find_pc_partial_function (pc, NULL, &start, &end))
860 trad_frame_set_id (cache,
861 frame_id_build (trad_frame_get_this_base (cache),
862 start));
863 else
93d42b30
DJ
864 {
865 start = frame_func_unwind (next_frame, NORMAL_FRAME);
866 trad_frame_set_id (cache,
867 frame_id_build (trad_frame_get_this_base (cache),
868 start));
869 }
342ee437
MS
870
871 (*this_prologue_cache) = cache;
872 return cache;
873}
874
875/* Here is a dummy implementation. */
876static struct frame_id
877mn10300_unwind_dummy_id (struct gdbarch *gdbarch,
878 struct frame_info *next_frame)
879{
880 return frame_id_build (frame_sp_unwind (next_frame),
881 frame_pc_unwind (next_frame));
882}
883
884/* Trad frame implementation. */
885static void
886mn10300_frame_this_id (struct frame_info *next_frame,
887 void **this_prologue_cache,
888 struct frame_id *this_id)
889{
890 struct trad_frame_cache *cache =
891 mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
892
893 trad_frame_get_id (cache, this_id);
894}
895
896static void
897mn10300_frame_prev_register (struct frame_info *next_frame,
898 void **this_prologue_cache,
899 int regnum, int *optimizedp,
900 enum lval_type *lvalp, CORE_ADDR *addrp,
3e6b1689 901 int *realnump, gdb_byte *bufferp)
342ee437
MS
902{
903 struct trad_frame_cache *cache =
904 mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
905
906 trad_frame_get_register (cache, next_frame, regnum, optimizedp,
907 lvalp, addrp, realnump, bufferp);
908 /* Or...
909 trad_frame_get_prev_register (next_frame, cache->prev_regs, regnum,
910 optimizedp, lvalp, addrp, realnump, bufferp);
911 */
912}
913
914static const struct frame_unwind mn10300_frame_unwind = {
915 NORMAL_FRAME,
916 mn10300_frame_this_id,
917 mn10300_frame_prev_register
918};
919
920static CORE_ADDR
921mn10300_frame_base_address (struct frame_info *next_frame,
922 void **this_prologue_cache)
923{
924 struct trad_frame_cache *cache =
925 mn10300_frame_unwind_cache (next_frame, this_prologue_cache);
926
927 return trad_frame_get_this_base (cache);
928}
929
930static const struct frame_unwind *
931mn10300_frame_sniffer (struct frame_info *next_frame)
932{
933 return &mn10300_frame_unwind;
934}
935
936static const struct frame_base mn10300_frame_base = {
937 &mn10300_frame_unwind,
938 mn10300_frame_base_address,
939 mn10300_frame_base_address,
940 mn10300_frame_base_address
941};
942
943static CORE_ADDR
944mn10300_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
945{
946 ULONGEST pc;
947
11411de3 948 pc = frame_unwind_register_unsigned (next_frame, E_PC_REGNUM);
342ee437
MS
949 return pc;
950}
951
952static CORE_ADDR
953mn10300_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
954{
955 ULONGEST sp;
956
11411de3 957 sp = frame_unwind_register_unsigned (next_frame, E_SP_REGNUM);
342ee437
MS
958 return sp;
959}
960
961static void
962mn10300_frame_unwind_init (struct gdbarch *gdbarch)
963{
964 frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
965 frame_unwind_append_sniffer (gdbarch, mn10300_frame_sniffer);
966 frame_base_set_default (gdbarch, &mn10300_frame_base);
967 set_gdbarch_unwind_dummy_id (gdbarch, mn10300_unwind_dummy_id);
968 set_gdbarch_unwind_pc (gdbarch, mn10300_unwind_pc);
969 set_gdbarch_unwind_sp (gdbarch, mn10300_unwind_sp);
970}
971
972/* Function: push_dummy_call
973 *
974 * Set up machine state for a target call, including
975 * function arguments, stack, return address, etc.
976 *
977 */
978
979static CORE_ADDR
980mn10300_push_dummy_call (struct gdbarch *gdbarch,
981 struct value *target_func,
982 struct regcache *regcache,
983 CORE_ADDR bp_addr,
984 int nargs, struct value **args,
985 CORE_ADDR sp,
986 int struct_return,
987 CORE_ADDR struct_addr)
988{
989 const int push_size = register_size (gdbarch, E_PC_REGNUM);
1fb1ca27 990 int regs_used;
342ee437
MS
991 int len, arg_len;
992 int stack_offset = 0;
993 int argnum;
1fb1ca27 994 char *val, valbuf[MAX_REGISTER_SIZE];
342ee437 995
342ee437
MS
996 /* This should be a nop, but align the stack just in case something
997 went wrong. Stacks are four byte aligned on the mn10300. */
998 sp &= ~3;
999
1000 /* Now make space on the stack for the args.
1001
1002 XXX This doesn't appear to handle pass-by-invisible reference
1003 arguments. */
1fb1ca27 1004 regs_used = struct_return ? 1 : 0;
342ee437
MS
1005 for (len = 0, argnum = 0; argnum < nargs; argnum++)
1006 {
1007 arg_len = (TYPE_LENGTH (value_type (args[argnum])) + 3) & ~3;
342ee437
MS
1008 while (regs_used < 2 && arg_len > 0)
1009 {
1010 regs_used++;
1011 arg_len -= push_size;
1012 }
1013 len += arg_len;
1014 }
1015
1016 /* Allocate stack space. */
1017 sp -= len;
1018
1fb1ca27
MS
1019 if (struct_return)
1020 {
1021 regs_used = 1;
9c9acae0 1022 regcache_cooked_write_unsigned (regcache, E_D0_REGNUM, struct_addr);
1fb1ca27
MS
1023 }
1024 else
1025 regs_used = 0;
1026
342ee437
MS
1027 /* Push all arguments onto the stack. */
1028 for (argnum = 0; argnum < nargs; argnum++)
1029 {
1fb1ca27
MS
1030 /* FIXME what about structs? Unions? */
1031 if (TYPE_CODE (value_type (*args)) == TYPE_CODE_STRUCT
1032 && TYPE_LENGTH (value_type (*args)) > 8)
1033 {
1034 /* Change to pointer-to-type. */
1035 arg_len = push_size;
1036 store_unsigned_integer (valbuf, push_size,
1037 VALUE_ADDRESS (*args));
1038 val = &valbuf[0];
1039 }
1040 else
1041 {
1042 arg_len = TYPE_LENGTH (value_type (*args));
1043 val = (char *) value_contents (*args);
1044 }
342ee437
MS
1045
1046 while (regs_used < 2 && arg_len > 0)
1047 {
9c9acae0
UW
1048 regcache_cooked_write_unsigned (regcache, regs_used,
1049 extract_unsigned_integer (val, push_size));
342ee437
MS
1050 val += push_size;
1051 arg_len -= push_size;
1052 regs_used++;
1053 }
1054
1055 while (arg_len > 0)
1056 {
1057 write_memory (sp + stack_offset, val, push_size);
1058 arg_len -= push_size;
1059 val += push_size;
1060 stack_offset += push_size;
1061 }
1062
1063 args++;
1064 }
1065
1066 /* Make space for the flushback area. */
1067 sp -= 8;
1068
1069 /* Push the return address that contains the magic breakpoint. */
1070 sp -= 4;
1071 write_memory_unsigned_integer (sp, push_size, bp_addr);
a64ae7e0
CV
1072
1073 /* The CPU also writes the return address always into the
1074 MDR register on "call". */
1075 regcache_cooked_write_unsigned (regcache, E_MDR_REGNUM, bp_addr);
1076
342ee437
MS
1077 /* Update $sp. */
1078 regcache_cooked_write_unsigned (regcache, E_SP_REGNUM, sp);
1079 return sp;
1080}
1081
336c28c5
KB
1082/* If DWARF2 is a register number appearing in Dwarf2 debug info, then
1083 mn10300_dwarf2_reg_to_regnum (DWARF2) is the corresponding GDB
1084 register number. Why don't Dwarf2 and GDB use the same numbering?
1085 Who knows? But since people have object files lying around with
1086 the existing Dwarf2 numbering, and other people have written stubs
1087 to work with the existing GDB, neither of them can change. So we
1088 just have to cope. */
1089static int
be8626e0 1090mn10300_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2)
336c28c5 1091{
c9f4d572 1092 /* This table is supposed to be shaped like the gdbarch_register_name
336c28c5
KB
1093 initializer in gcc/config/mn10300/mn10300.h. Registers which
1094 appear in GCC's numbering, but have no counterpart in GDB's
1095 world, are marked with a -1. */
1096 static int dwarf2_to_gdb[] = {
1097 0, 1, 2, 3, 4, 5, 6, 7, -1, 8,
1098 15, 16, 17, 18, 19, 20, 21, 22,
1099 32, 33, 34, 35, 36, 37, 38, 39,
1100 40, 41, 42, 43, 44, 45, 46, 47,
1101 48, 49, 50, 51, 52, 53, 54, 55,
bbc1a784
KB
1102 56, 57, 58, 59, 60, 61, 62, 63,
1103 9
336c28c5
KB
1104 };
1105
1106 if (dwarf2 < 0
bbc1a784 1107 || dwarf2 >= ARRAY_SIZE (dwarf2_to_gdb))
154b82dc
KB
1108 {
1109 warning (_("Bogus register number in debug info: %d"), dwarf2);
bbc1a784 1110 return -1;
154b82dc 1111 }
336c28c5
KB
1112
1113 return dwarf2_to_gdb[dwarf2];
1114}
342ee437
MS
1115
1116static struct gdbarch *
1117mn10300_gdbarch_init (struct gdbarch_info info,
1118 struct gdbarch_list *arches)
1119{
1120 struct gdbarch *gdbarch;
1121 struct gdbarch_tdep *tdep;
4640dd91 1122 int num_regs;
342ee437
MS
1123
1124 arches = gdbarch_list_lookup_by_info (arches, &info);
1125 if (arches != NULL)
1126 return arches->gdbarch;
1127
1128 tdep = xmalloc (sizeof (struct gdbarch_tdep));
1129 gdbarch = gdbarch_alloc (&info, tdep);
1130
1131 switch (info.bfd_arch_info->mach)
1132 {
1133 case 0:
1134 case bfd_mach_mn10300:
1135 set_gdbarch_register_name (gdbarch, mn10300_generic_register_name);
1136 tdep->am33_mode = 0;
4640dd91 1137 num_regs = 32;
342ee437
MS
1138 break;
1139 case bfd_mach_am33:
1140 set_gdbarch_register_name (gdbarch, am33_register_name);
1141 tdep->am33_mode = 1;
4640dd91
KB
1142 num_regs = 32;
1143 break;
1144 case bfd_mach_am33_2:
1145 set_gdbarch_register_name (gdbarch, am33_2_register_name);
1146 tdep->am33_mode = 2;
1147 num_regs = 64;
1148 set_gdbarch_fp0_regnum (gdbarch, 32);
342ee437
MS
1149 break;
1150 default:
1151 internal_error (__FILE__, __LINE__,
1152 _("mn10300_gdbarch_init: Unknown mn10300 variant"));
1153 break;
1154 }
1155
1156 /* Registers. */
4640dd91 1157 set_gdbarch_num_regs (gdbarch, num_regs);
342ee437
MS
1158 set_gdbarch_register_type (gdbarch, mn10300_register_type);
1159 set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
1160 set_gdbarch_read_pc (gdbarch, mn10300_read_pc);
1161 set_gdbarch_write_pc (gdbarch, mn10300_write_pc);
1162 set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
1163 set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
336c28c5 1164 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, mn10300_dwarf2_reg_to_regnum);
342ee437
MS
1165
1166 /* Stack unwinding. */
1167 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1168 /* Breakpoints. */
1169 set_gdbarch_breakpoint_from_pc (gdbarch, mn10300_breakpoint_from_pc);
1170 /* decr_pc_after_break? */
1171 /* Disassembly. */
1172 set_gdbarch_print_insn (gdbarch, print_insn_mn10300);
1173
1174 /* Stage 2 */
99fe5f9d 1175 set_gdbarch_return_value (gdbarch, mn10300_return_value);
342ee437
MS
1176
1177 /* Stage 3 -- get target calls working. */
1178 set_gdbarch_push_dummy_call (gdbarch, mn10300_push_dummy_call);
1179 /* set_gdbarch_return_value (store, extract) */
1180
1181
1182 mn10300_frame_unwind_init (gdbarch);
1183
697e3bc9
KB
1184 /* Hook in ABI-specific overrides, if they have been registered. */
1185 gdbarch_init_osabi (info, gdbarch);
1186
342ee437
MS
1187 return gdbarch;
1188}
1189
1190/* Dump out the mn10300 specific architecture information. */
1191
1192static void
d93859e2 1193mn10300_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
342ee437 1194{
d93859e2 1195 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
342ee437
MS
1196 fprintf_unfiltered (file, "mn10300_dump_tdep: am33_mode = %d\n",
1197 tdep->am33_mode);
1198}
1199
1200void
1201_initialize_mn10300_tdep (void)
1202{
1203 gdbarch_register (bfd_arch_mn10300, mn10300_gdbarch_init, mn10300_dump_tdep);
1204}
1205
This page took 0.28987 seconds and 4 git commands to generate.