1 /* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger.
2 Copyright 1996, 1997, 1998 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
28 #include "gdb_string.h"
32 extern void _initialize_mn10300_tdep (void);
33 static CORE_ADDR mn10300_analyze_prologue PARAMS ((struct frame_info * fi,
36 /* Additional info used by the frame */
38 struct frame_extra_info
45 static char *mn10300_generic_register_names[] =
46 {"d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
47 "sp", "pc", "mdr", "psw", "lir", "lar", "", "",
48 "", "", "", "", "", "", "", "",
49 "", "", "", "", "", "", "", "fp"};
51 static char **mn10300_register_names = mn10300_generic_register_names;
52 static char *am33_register_names[] =
54 "d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
55 "sp", "pc", "mdr", "psw", "lir", "lar", "",
56 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
57 "ssp", "msp", "usp", "mcrh", "mcrl", "mcvf", "", "", ""};
61 mn10300_register_name (i)
64 return mn10300_register_names[i];
68 mn10300_saved_pc_after_call (fi)
69 struct frame_info *fi;
71 return read_memory_integer (read_register (SP_REGNUM), 4);
75 mn10300_extract_return_value (type, regbuf, valbuf)
80 if (TYPE_CODE (type) == TYPE_CODE_PTR)
81 memcpy (valbuf, regbuf + REGISTER_BYTE (4), TYPE_LENGTH (type));
83 memcpy (valbuf, regbuf + REGISTER_BYTE (0), TYPE_LENGTH (type));
87 mn10300_extract_struct_value_address (regbuf)
90 return extract_address (regbuf + REGISTER_BYTE (4),
91 REGISTER_RAW_SIZE (4));
95 mn10300_store_return_value (type, valbuf)
99 if (TYPE_CODE (type) == TYPE_CODE_PTR)
100 write_register_bytes (REGISTER_BYTE (4), valbuf, TYPE_LENGTH (type));
102 write_register_bytes (REGISTER_BYTE (0), valbuf, TYPE_LENGTH (type));
105 static struct frame_info *analyze_dummy_frame PARAMS ((CORE_ADDR, CORE_ADDR));
106 static struct frame_info *
107 analyze_dummy_frame (pc, frame)
111 static struct frame_info *dummy = NULL;
114 dummy = xmalloc (sizeof (struct frame_info));
115 dummy->saved_regs = xmalloc (SIZEOF_FRAME_SAVED_REGS);
116 dummy->extra_info = xmalloc (sizeof (struct frame_extra_info));
121 dummy->frame = frame;
122 dummy->extra_info->status = 0;
123 dummy->extra_info->stack_size = 0;
124 memset (dummy->saved_regs, '\000', SIZEOF_FRAME_SAVED_REGS);
125 mn10300_analyze_prologue (dummy, 0);
129 /* Values for frame_info.status */
131 #define MY_FRAME_IN_SP 0x1
132 #define MY_FRAME_IN_FP 0x2
133 #define NO_MORE_FRAMES 0x4
136 /* Should call_function allocate stack space for a struct return? */
138 mn10300_use_struct_convention (gcc_p, type)
142 return (TYPE_NFIELDS (type) > 1 || TYPE_LENGTH (type) > 8);
145 /* The breakpoint instruction must be the same size as the smallest
146 instruction in the instruction set.
148 The Matsushita mn10x00 processors have single byte instructions
149 so we need a single byte breakpoint. Matsushita hasn't defined
150 one, so we defined it ourselves. */
153 mn10300_breakpoint_from_pc (bp_addr, bp_size)
157 static char breakpoint[] =
164 /* Fix fi->frame if it's bogus at this point. This is a helper
165 function for mn10300_analyze_prologue. */
168 fix_frame_pointer (fi, stack_size)
169 struct frame_info *fi;
172 if (fi && fi->next == NULL)
174 if (fi->extra_info->status & MY_FRAME_IN_SP)
175 fi->frame = read_sp () - stack_size;
176 else if (fi->extra_info->status & MY_FRAME_IN_FP)
177 fi->frame = read_register (A3_REGNUM);
182 /* Set offsets of registers saved by movm instruction.
183 This is a helper function for mn10300_analyze_prologue. */
186 set_movm_offsets (fi, movm_args)
187 struct frame_info *fi;
192 if (fi == NULL || movm_args == 0)
195 if (movm_args & 0x10)
197 fi->saved_regs[A3_REGNUM] = fi->frame + offset;
200 if (movm_args & 0x20)
202 fi->saved_regs[A2_REGNUM] = fi->frame + offset;
205 if (movm_args & 0x40)
207 fi->saved_regs[D3_REGNUM] = fi->frame + offset;
210 if (movm_args & 0x80)
212 fi->saved_regs[D2_REGNUM] = fi->frame + offset;
215 if (am33_mode && movm_args & 0x02)
217 fi->saved_regs[E0_REGNUM + 5] = fi->frame + offset;
218 fi->saved_regs[E0_REGNUM + 4] = fi->frame + offset + 4;
219 fi->saved_regs[E0_REGNUM + 3] = fi->frame + offset + 8;
220 fi->saved_regs[E0_REGNUM + 2] = fi->frame + offset + 12;
225 /* The main purpose of this file is dealing with prologues to extract
226 information about stack frames and saved registers.
228 For reference here's how prologues look on the mn10300:
231 movm [d2,d3,a2,a3],sp
235 Without frame pointer:
236 movm [d2,d3,a2,a3],sp (if needed)
239 One day we might keep the stack pointer constant, that won't
240 change the code for prologues, but it will make the frame
241 pointerless case much more common. */
243 /* Analyze the prologue to determine where registers are saved,
244 the end of the prologue, etc etc. Return the end of the prologue
247 We store into FI (if non-null) several tidbits of information:
249 * stack_size -- size of this stack frame. Note that if we stop in
250 certain parts of the prologue/epilogue we may claim the size of the
251 current frame is zero. This happens when the current frame has
252 not been allocated yet or has already been deallocated.
254 * fsr -- Addresses of registers saved in the stack by this frame.
256 * status -- A (relatively) generic status indicator. It's a bitmask
257 with the following bits:
259 MY_FRAME_IN_SP: The base of the current frame is actually in
260 the stack pointer. This can happen for frame pointerless
261 functions, or cases where we're stopped in the prologue/epilogue
262 itself. For these cases mn10300_analyze_prologue will need up
263 update fi->frame before returning or analyzing the register
266 MY_FRAME_IN_FP: The base of the current frame is in the
267 frame pointer register ($a2).
269 NO_MORE_FRAMES: Set this if the current frame is "start" or
270 if the first instruction looks like mov <imm>,sp. This tells
271 frame chain to not bother trying to unwind past this frame. */
274 mn10300_analyze_prologue (fi, pc)
275 struct frame_info *fi;
278 CORE_ADDR func_addr, func_end, addr, stop;
279 CORE_ADDR stack_size;
281 unsigned char buf[4];
282 int status, movm_args = 0;
285 /* Use the PC in the frame if it's provided to look up the
286 start of this function. */
287 pc = (fi ? fi->pc : pc);
289 /* Find the start of this function. */
290 status = find_pc_partial_function (pc, &name, &func_addr, &func_end);
292 /* Do nothing if we couldn't find the start of this function or if we're
293 stopped at the first instruction in the prologue. */
299 /* If we're in start, then give up. */
300 if (strcmp (name, "start") == 0)
303 fi->extra_info->status = NO_MORE_FRAMES;
307 /* At the start of a function our frame is in the stack pointer. */
309 fi->extra_info->status = MY_FRAME_IN_SP;
311 /* Get the next two bytes into buf, we need two because rets is a two
312 byte insn and the first isn't enough to uniquely identify it. */
313 status = read_memory_nobpt (pc, buf, 2);
317 /* If we're physically on an "rets" instruction, then our frame has
318 already been deallocated. Note this can also be true for retf
319 and ret if they specify a size of zero.
321 In this case fi->frame is bogus, we need to fix it. */
322 if (fi && buf[0] == 0xf0 && buf[1] == 0xfc)
324 if (fi->next == NULL)
325 fi->frame = read_sp ();
329 /* Similarly if we're stopped on the first insn of a prologue as our
330 frame hasn't been allocated yet. */
331 if (fi && fi->pc == func_addr)
333 if (fi->next == NULL)
334 fi->frame = read_sp ();
338 /* Figure out where to stop scanning. */
339 stop = fi ? fi->pc : func_end;
341 /* Don't walk off the end of the function. */
342 stop = stop > func_end ? func_end : stop;
344 /* Start scanning on the first instruction of this function. */
347 /* Suck in two bytes. */
348 status = read_memory_nobpt (addr, buf, 2);
351 fix_frame_pointer (fi, 0);
355 /* First see if this insn sets the stack pointer; if so, it's something
356 we won't understand, so quit now. */
357 if (buf[0] == 0xf2 && (buf[1] & 0xf3) == 0xf0)
360 fi->extra_info->status = NO_MORE_FRAMES;
364 /* Now look for movm [regs],sp, which saves the callee saved registers.
366 At this time we don't know if fi->frame is valid, so we only note
367 that we encountered a movm instruction. Later, we'll set the entries
368 in fsr.regs as needed. */
371 /* Extract the register list for the movm instruction. */
372 status = read_memory_nobpt (addr + 1, buf, 1);
377 /* Quit now if we're beyond the stop point. */
380 /* Fix fi->frame since it's bogus at this point. */
381 if (fi && fi->next == NULL)
382 fi->frame = read_sp ();
384 /* Note if/where callee saved registers were saved. */
385 set_movm_offsets (fi, movm_args);
389 /* Get the next two bytes so the prologue scan can continue. */
390 status = read_memory_nobpt (addr, buf, 2);
393 /* Fix fi->frame since it's bogus at this point. */
394 if (fi && fi->next == NULL)
395 fi->frame = read_sp ();
397 /* Note if/where callee saved registers were saved. */
398 set_movm_offsets (fi, movm_args);
403 /* Now see if we set up a frame pointer via "mov sp,a3" */
408 /* The frame pointer is now valid. */
411 fi->extra_info->status |= MY_FRAME_IN_FP;
412 fi->extra_info->status &= ~MY_FRAME_IN_SP;
415 /* Quit now if we're beyond the stop point. */
418 /* Fix fi->frame if it's bogus at this point. */
419 fix_frame_pointer (fi, 0);
421 /* Note if/where callee saved registers were saved. */
422 set_movm_offsets (fi, movm_args);
426 /* Get two more bytes so scanning can continue. */
427 status = read_memory_nobpt (addr, buf, 2);
430 /* Fix fi->frame if it's bogus at this point. */
431 fix_frame_pointer (fi, 0);
433 /* Note if/where callee saved registers were saved. */
434 set_movm_offsets (fi, movm_args);
439 /* Next we should allocate the local frame. No more prologue insns
440 are found after allocating the local frame.
442 Search for add imm8,sp (0xf8feXX)
443 or add imm16,sp (0xfafeXXXX)
444 or add imm32,sp (0xfcfeXXXXXXXX).
446 If none of the above was found, then this prologue has no
449 status = read_memory_nobpt (addr, buf, 2);
452 /* Fix fi->frame if it's bogus at this point. */
453 fix_frame_pointer (fi, 0);
455 /* Note if/where callee saved registers were saved. */
456 set_movm_offsets (fi, movm_args);
461 if (buf[0] == 0xf8 && buf[1] == 0xfe)
463 else if (buf[0] == 0xfa && buf[1] == 0xfe)
465 else if (buf[0] == 0xfc && buf[1] == 0xfe)
470 /* Suck in imm_size more bytes, they'll hold the size of the
472 status = read_memory_nobpt (addr + 2, buf, imm_size);
475 /* Fix fi->frame if it's bogus at this point. */
476 fix_frame_pointer (fi, 0);
478 /* Note if/where callee saved registers were saved. */
479 set_movm_offsets (fi, movm_args);
483 /* Note the size of the stack in the frame info structure. */
484 stack_size = extract_signed_integer (buf, imm_size);
486 fi->extra_info->stack_size = stack_size;
488 /* We just consumed 2 + imm_size bytes. */
489 addr += 2 + imm_size;
491 /* No more prologue insns follow, so begin preparation to return. */
492 /* Fix fi->frame if it's bogus at this point. */
493 fix_frame_pointer (fi, stack_size);
495 /* Note if/where callee saved registers were saved. */
496 set_movm_offsets (fi, movm_args);
500 /* We never found an insn which allocates local stack space, regardless
501 this is the end of the prologue. */
502 /* Fix fi->frame if it's bogus at this point. */
503 fix_frame_pointer (fi, 0);
505 /* Note if/where callee saved registers were saved. */
506 set_movm_offsets (fi, movm_args);
510 /* Function: frame_chain
511 Figure out and return the caller's frame pointer given current
514 We don't handle dummy frames yet but we would probably just return the
515 stack pointer that was in use at the time the function call was made? */
518 mn10300_frame_chain (fi)
519 struct frame_info *fi;
521 struct frame_info *dummy;
522 /* Walk through the prologue to determine the stack size,
523 location of saved registers, end of the prologue, etc. */
524 if (fi->extra_info->status == 0)
525 mn10300_analyze_prologue (fi, (CORE_ADDR) 0);
527 /* Quit now if mn10300_analyze_prologue set NO_MORE_FRAMES. */
528 if (fi->extra_info->status & NO_MORE_FRAMES)
531 /* Now that we've analyzed our prologue, determine the frame
532 pointer for our caller.
534 If our caller has a frame pointer, then we need to
535 find the entry value of $a3 to our function.
537 If fsr.regs[A3_REGNUM] is nonzero, then it's at the memory
538 location pointed to by fsr.regs[A3_REGNUM].
540 Else it's still in $a3.
542 If our caller does not have a frame pointer, then his
543 frame base is fi->frame + -caller's stack size. */
545 /* The easiest way to get that info is to analyze our caller's frame.
546 So we set up a dummy frame and call mn10300_analyze_prologue to
547 find stuff for us. */
548 dummy = analyze_dummy_frame (FRAME_SAVED_PC (fi), fi->frame);
550 if (dummy->extra_info->status & MY_FRAME_IN_FP)
552 /* Our caller has a frame pointer. So find the frame in $a3 or
554 if (fi->saved_regs[A3_REGNUM])
555 return (read_memory_integer (fi->saved_regs[A3_REGNUM], REGISTER_SIZE));
557 return read_register (A3_REGNUM);
563 adjust += (fi->saved_regs[D2_REGNUM] ? 4 : 0);
564 adjust += (fi->saved_regs[D3_REGNUM] ? 4 : 0);
565 adjust += (fi->saved_regs[A2_REGNUM] ? 4 : 0);
566 adjust += (fi->saved_regs[A3_REGNUM] ? 4 : 0);
569 adjust += (fi->saved_regs[E0_REGNUM + 5] ? 4 : 0);
570 adjust += (fi->saved_regs[E0_REGNUM + 4] ? 4 : 0);
571 adjust += (fi->saved_regs[E0_REGNUM + 3] ? 4 : 0);
572 adjust += (fi->saved_regs[E0_REGNUM + 2] ? 4 : 0);
575 /* Our caller does not have a frame pointer. So his frame starts
576 at the base of our frame (fi->frame) + register save space
578 return fi->frame + adjust + -dummy->extra_info->stack_size;
582 /* Function: skip_prologue
583 Return the address of the first inst past the prologue of the function. */
586 mn10300_skip_prologue (pc)
589 /* We used to check the debug symbols, but that can lose if
590 we have a null prologue. */
591 return mn10300_analyze_prologue (NULL, pc);
595 /* Function: pop_frame
596 This routine gets called when either the user uses the `return'
597 command, or the call dummy breakpoint gets hit. */
600 mn10300_pop_frame (frame)
601 struct frame_info *frame;
605 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
606 generic_pop_dummy_frame ();
609 write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
611 /* Restore any saved registers. */
612 for (regnum = 0; regnum < NUM_REGS; regnum++)
613 if (frame->saved_regs[regnum] != 0)
617 value = read_memory_unsigned_integer (frame->saved_regs[regnum],
618 REGISTER_RAW_SIZE (regnum));
619 write_register (regnum, value);
622 /* Actually cut back the stack. */
623 write_register (SP_REGNUM, FRAME_FP (frame));
625 /* Don't we need to set the PC?!? XXX FIXME. */
628 /* Throw away any cached frame information. */
629 flush_cached_frames ();
632 /* Function: push_arguments
633 Setup arguments for a call to the target. Arguments go in
634 order on the stack. */
637 mn10300_push_arguments (nargs, args, sp, struct_return, struct_addr)
641 unsigned char struct_return;
642 CORE_ADDR struct_addr;
646 int stack_offset = 0;
647 int regsused = struct_return ? 1 : 0;
649 /* This should be a nop, but align the stack just in case something
650 went wrong. Stacks are four byte aligned on the mn10300. */
653 /* Now make space on the stack for the args.
655 XXX This doesn't appear to handle pass-by-invisible reference
657 for (argnum = 0; argnum < nargs; argnum++)
659 int arg_length = (TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 3) & ~3;
661 while (regsused < 2 && arg_length > 0)
669 /* Allocate stack space. */
672 regsused = struct_return ? 1 : 0;
673 /* Push all arguments onto the stack. */
674 for (argnum = 0; argnum < nargs; argnum++)
679 /* XXX Check this. What about UNIONS? */
680 if (TYPE_CODE (VALUE_TYPE (*args)) == TYPE_CODE_STRUCT
681 && TYPE_LENGTH (VALUE_TYPE (*args)) > 8)
683 /* XXX Wrong, we want a pointer to this argument. */
684 len = TYPE_LENGTH (VALUE_TYPE (*args));
685 val = (char *) VALUE_CONTENTS (*args);
689 len = TYPE_LENGTH (VALUE_TYPE (*args));
690 val = (char *) VALUE_CONTENTS (*args);
693 while (regsused < 2 && len > 0)
695 write_register (regsused, extract_unsigned_integer (val, 4));
703 write_memory (sp + stack_offset, val, 4);
712 /* Make space for the flushback area. */
717 /* Function: push_return_address (pc)
718 Set up the return address for the inferior function call.
719 Needed for targets where we don't actually execute a JSR/BSR instruction */
722 mn10300_push_return_address (pc, sp)
726 unsigned char buf[4];
728 store_unsigned_integer (buf, 4, CALL_DUMMY_ADDRESS ());
729 write_memory (sp - 4, buf, 4);
733 /* Function: store_struct_return (addr,sp)
734 Store the structure value return address for an inferior function
738 mn10300_store_struct_return (addr, sp)
742 /* The structure return address is passed as the first argument. */
743 write_register (0, addr);
747 /* Function: frame_saved_pc
748 Find the caller of this frame. We do this by seeing if RP_REGNUM
749 is saved in the stack anywhere, otherwise we get it from the
750 registers. If the inner frame is a dummy frame, return its PC
751 instead of RP, because that's where "caller" of the dummy-frame
755 mn10300_frame_saved_pc (fi)
756 struct frame_info *fi;
760 adjust += (fi->saved_regs[D2_REGNUM] ? 4 : 0);
761 adjust += (fi->saved_regs[D3_REGNUM] ? 4 : 0);
762 adjust += (fi->saved_regs[A2_REGNUM] ? 4 : 0);
763 adjust += (fi->saved_regs[A3_REGNUM] ? 4 : 0);
766 adjust += (fi->saved_regs[E0_REGNUM + 5] ? 4 : 0);
767 adjust += (fi->saved_regs[E0_REGNUM + 4] ? 4 : 0);
768 adjust += (fi->saved_regs[E0_REGNUM + 3] ? 4 : 0);
769 adjust += (fi->saved_regs[E0_REGNUM + 2] ? 4 : 0);
772 return (read_memory_integer (fi->frame + adjust, REGISTER_SIZE));
775 /* Function: mn10300_init_extra_frame_info
776 Setup the frame's frame pointer, pc, and frame addresses for saved
777 registers. Most of the work is done in mn10300_analyze_prologue().
779 Note that when we are called for the last frame (currently active frame),
780 that fi->pc and fi->frame will already be setup. However, fi->frame will
781 be valid only if this routine uses FP. For previous frames, fi-frame will
782 always be correct. mn10300_analyze_prologue will fix fi->frame if
785 We can be called with the PC in the call dummy under two circumstances.
786 First, during normal backtracing, second, while figuring out the frame
787 pointer just prior to calling the target function (see run_stack_dummy). */
790 mn10300_init_extra_frame_info (fi)
791 struct frame_info *fi;
794 fi->pc = FRAME_SAVED_PC (fi->next);
796 frame_saved_regs_zalloc (fi);
797 fi->extra_info = (struct frame_extra_info *)
798 frame_obstack_alloc (sizeof (struct frame_extra_info));
800 fi->extra_info->status = 0;
801 fi->extra_info->stack_size = 0;
803 mn10300_analyze_prologue (fi, 0);
806 /* Function: mn10300_virtual_frame_pointer
807 Return the register that the function uses for a frame pointer,
808 plus any necessary offset to be applied to the register before
809 any frame pointer offsets. */
812 mn10300_virtual_frame_pointer (pc, reg, offset)
817 struct frame_info *dummy = analyze_dummy_frame (pc, 0);
818 /* Set up a dummy frame_info, Analyze the prolog and fill in the
820 /* Results will tell us which type of frame it uses. */
821 if (dummy->extra_info->status & MY_FRAME_IN_SP)
824 *offset = -(dummy->extra_info->stack_size);
833 /* This can be made more generic later. */
835 set_machine_hook (filename)
840 if (bfd_get_mach (exec_bfd) == bfd_mach_mn10300
841 || bfd_get_mach (exec_bfd) == 0)
843 mn10300_register_names = mn10300_generic_register_names;
847 if (bfd_get_mach (exec_bfd) == bfd_mach_am33)
850 mn10300_register_names = am33_register_names;
856 _initialize_mn10300_tdep ()
858 /* printf("_initialize_mn10300_tdep\n"); */
860 tm_print_insn = print_insn_mn10300;
862 specify_exec_file_hook (set_machine_hook);