import gdb-1999-12-06 snapshot
[deliverable/binutils-gdb.git] / gdb / mn10300-tdep.c
CommitLineData
c906108c
SS
1/* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger.
2 Copyright 1996, 1997, 1998 Free Software Foundation, Inc.
3
c5aa993b 4 This file is part of GDB.
c906108c 5
c5aa993b
JM
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.
c906108c 10
c5aa993b
JM
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.
c906108c 15
c5aa993b
JM
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. */
c906108c
SS
20
21#include "defs.h"
22#include "frame.h"
23#include "inferior.h"
24#include "obstack.h"
25#include "target.h"
26#include "value.h"
27#include "bfd.h"
28#include "gdb_string.h"
29#include "gdbcore.h"
30#include "symfile.h"
31
c2c6d25f 32extern void _initialize_mn10300_tdep (void);
c5aa993b
JM
33static CORE_ADDR mn10300_analyze_prologue PARAMS ((struct frame_info * fi,
34 CORE_ADDR pc));
c906108c
SS
35
36/* Additional info used by the frame */
37
38struct frame_extra_info
c5aa993b
JM
39 {
40 int status;
41 int stack_size;
42 };
c906108c 43
0f71a2f6 44
c5aa993b
JM
45static char *mn10300_generic_register_names[] =
46{"d0", "d1", "d2", "d3", "a0", "a1", "a2", "a3",
47 "sp", "pc", "mdr", "psw", "lir", "lar", "", "",
48 "", "", "", "", "", "", "", "",
49 "", "", "", "", "", "", "", "fp"};
0f71a2f6
JM
50
51static char **mn10300_register_names = mn10300_generic_register_names;
c2d11a7d
JM
52static char *am33_register_names[] =
53{
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", "", "", ""};
58static int am33_mode;
0f71a2f6
JM
59
60char *
61mn10300_register_name (i)
62 int i;
63{
64 return mn10300_register_names[i];
65}
66
67CORE_ADDR
68mn10300_saved_pc_after_call (fi)
69 struct frame_info *fi;
70{
71 return read_memory_integer (read_register (SP_REGNUM), 4);
72}
73
74void
75mn10300_extract_return_value (type, regbuf, valbuf)
76 struct type *type;
77 char *regbuf;
78 char *valbuf;
79{
80 if (TYPE_CODE (type) == TYPE_CODE_PTR)
81 memcpy (valbuf, regbuf + REGISTER_BYTE (4), TYPE_LENGTH (type));
82 else
83 memcpy (valbuf, regbuf + REGISTER_BYTE (0), TYPE_LENGTH (type));
84}
85
86CORE_ADDR
87mn10300_extract_struct_value_address (regbuf)
88 char *regbuf;
89{
90 return extract_address (regbuf + REGISTER_BYTE (4),
91 REGISTER_RAW_SIZE (4));
92}
93
94void
95mn10300_store_return_value (type, valbuf)
96 struct type *type;
97 char *valbuf;
98{
99 if (TYPE_CODE (type) == TYPE_CODE_PTR)
100 write_register_bytes (REGISTER_BYTE (4), valbuf, TYPE_LENGTH (type));
101 else
102 write_register_bytes (REGISTER_BYTE (0), valbuf, TYPE_LENGTH (type));
103}
104
c906108c
SS
105static struct frame_info *analyze_dummy_frame PARAMS ((CORE_ADDR, CORE_ADDR));
106static struct frame_info *
107analyze_dummy_frame (pc, frame)
108 CORE_ADDR pc;
109 CORE_ADDR frame;
110{
111 static struct frame_info *dummy = NULL;
112 if (dummy == NULL)
113 {
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));
117 }
118 dummy->next = NULL;
119 dummy->prev = NULL;
120 dummy->pc = pc;
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);
126 return dummy;
127}
128
129/* Values for frame_info.status */
130
131#define MY_FRAME_IN_SP 0x1
132#define MY_FRAME_IN_FP 0x2
133#define NO_MORE_FRAMES 0x4
134
135
136/* Should call_function allocate stack space for a struct return? */
137int
138mn10300_use_struct_convention (gcc_p, type)
139 int gcc_p;
140 struct type *type;
141{
142 return (TYPE_NFIELDS (type) > 1 || TYPE_LENGTH (type) > 8);
143}
144
145/* The breakpoint instruction must be the same size as the smallest
146 instruction in the instruction set.
147
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. */
151
152unsigned char *
153mn10300_breakpoint_from_pc (bp_addr, bp_size)
154 CORE_ADDR *bp_addr;
155 int *bp_size;
156{
c5aa993b
JM
157 static char breakpoint[] =
158 {0xff};
c906108c
SS
159 *bp_size = 1;
160 return breakpoint;
161}
162
163
164/* Fix fi->frame if it's bogus at this point. This is a helper
165 function for mn10300_analyze_prologue. */
166
167static void
168fix_frame_pointer (fi, stack_size)
c5aa993b
JM
169 struct frame_info *fi;
170 int stack_size;
c906108c
SS
171{
172 if (fi && fi->next == NULL)
173 {
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);
178 }
179}
180
181
182/* Set offsets of registers saved by movm instruction.
183 This is a helper function for mn10300_analyze_prologue. */
184
185static void
186set_movm_offsets (fi, movm_args)
c5aa993b
JM
187 struct frame_info *fi;
188 int movm_args;
c906108c
SS
189{
190 int offset = 0;
191
192 if (fi == NULL || movm_args == 0)
193 return;
194
195 if (movm_args & 0x10)
196 {
197 fi->saved_regs[A3_REGNUM] = fi->frame + offset;
198 offset += 4;
199 }
200 if (movm_args & 0x20)
201 {
202 fi->saved_regs[A2_REGNUM] = fi->frame + offset;
203 offset += 4;
204 }
205 if (movm_args & 0x40)
206 {
207 fi->saved_regs[D3_REGNUM] = fi->frame + offset;
208 offset += 4;
209 }
210 if (movm_args & 0x80)
211 {
212 fi->saved_regs[D2_REGNUM] = fi->frame + offset;
213 offset += 4;
214 }
c2d11a7d
JM
215 if (am33_mode && movm_args & 0x02)
216 {
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;
221 }
c906108c
SS
222}
223
224
225/* The main purpose of this file is dealing with prologues to extract
226 information about stack frames and saved registers.
227
228 For reference here's how prologues look on the mn10300:
229
c5aa993b
JM
230 With frame pointer:
231 movm [d2,d3,a2,a3],sp
232 mov sp,a3
233 add <size>,sp
c906108c 234
c5aa993b
JM
235 Without frame pointer:
236 movm [d2,d3,a2,a3],sp (if needed)
237 add <size>,sp
c906108c
SS
238
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. */
c5aa993b 242
c906108c
SS
243/* Analyze the prologue to determine where registers are saved,
244 the end of the prologue, etc etc. Return the end of the prologue
245 scanned.
246
247 We store into FI (if non-null) several tidbits of information:
248
c5aa993b
JM
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.
c906108c 253
c5aa993b 254 * fsr -- Addresses of registers saved in the stack by this frame.
c906108c 255
c5aa993b
JM
256 * status -- A (relatively) generic status indicator. It's a bitmask
257 with the following bits:
c906108c 258
c5aa993b
JM
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
264 save instructions.
c906108c 265
c5aa993b
JM
266 MY_FRAME_IN_FP: The base of the current frame is in the
267 frame pointer register ($a2).
c906108c 268
c5aa993b
JM
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. */
c906108c
SS
272
273static CORE_ADDR
274mn10300_analyze_prologue (fi, pc)
c5aa993b
JM
275 struct frame_info *fi;
276 CORE_ADDR pc;
c906108c
SS
277{
278 CORE_ADDR func_addr, func_end, addr, stop;
279 CORE_ADDR stack_size;
280 int imm_size;
281 unsigned char buf[4];
282 int status, movm_args = 0;
283 char *name;
284
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);
288
289 /* Find the start of this function. */
290 status = find_pc_partial_function (pc, &name, &func_addr, &func_end);
291
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. */
294 if (status == 0)
43ff13b4
JM
295 {
296 return pc;
297 }
c906108c
SS
298
299 /* If we're in start, then give up. */
300 if (strcmp (name, "start") == 0)
301 {
302 if (fi != NULL)
303 fi->extra_info->status = NO_MORE_FRAMES;
304 return pc;
305 }
306
307 /* At the start of a function our frame is in the stack pointer. */
308 if (fi)
309 fi->extra_info->status = MY_FRAME_IN_SP;
310
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);
314 if (status != 0)
315 return pc;
316
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.
320
321 In this case fi->frame is bogus, we need to fix it. */
322 if (fi && buf[0] == 0xf0 && buf[1] == 0xfc)
323 {
324 if (fi->next == NULL)
325 fi->frame = read_sp ();
326 return fi->pc;
327 }
328
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)
332 {
333 if (fi->next == NULL)
334 fi->frame = read_sp ();
335 return fi->pc;
336 }
337
338 /* Figure out where to stop scanning. */
339 stop = fi ? fi->pc : func_end;
340
341 /* Don't walk off the end of the function. */
342 stop = stop > func_end ? func_end : stop;
343
344 /* Start scanning on the first instruction of this function. */
345 addr = func_addr;
346
347 /* Suck in two bytes. */
348 status = read_memory_nobpt (addr, buf, 2);
349 if (status != 0)
350 {
351 fix_frame_pointer (fi, 0);
352 return addr;
353 }
354
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)
358 {
359 if (fi)
360 fi->extra_info->status = NO_MORE_FRAMES;
361 return addr;
362 }
363
364 /* Now look for movm [regs],sp, which saves the callee saved registers.
365
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. */
369 if (buf[0] == 0xcf)
370 {
371 /* Extract the register list for the movm instruction. */
372 status = read_memory_nobpt (addr + 1, buf, 1);
373 movm_args = *buf;
374
375 addr += 2;
376
377 /* Quit now if we're beyond the stop point. */
378 if (addr >= stop)
379 {
380 /* Fix fi->frame since it's bogus at this point. */
381 if (fi && fi->next == NULL)
382 fi->frame = read_sp ();
383
384 /* Note if/where callee saved registers were saved. */
385 set_movm_offsets (fi, movm_args);
386 return addr;
387 }
388
389 /* Get the next two bytes so the prologue scan can continue. */
390 status = read_memory_nobpt (addr, buf, 2);
391 if (status != 0)
392 {
393 /* Fix fi->frame since it's bogus at this point. */
394 if (fi && fi->next == NULL)
395 fi->frame = read_sp ();
396
397 /* Note if/where callee saved registers were saved. */
398 set_movm_offsets (fi, movm_args);
399 return addr;
400 }
401 }
402
403 /* Now see if we set up a frame pointer via "mov sp,a3" */
404 if (buf[0] == 0x3f)
405 {
406 addr += 1;
407
408 /* The frame pointer is now valid. */
409 if (fi)
410 {
411 fi->extra_info->status |= MY_FRAME_IN_FP;
412 fi->extra_info->status &= ~MY_FRAME_IN_SP;
413 }
414
415 /* Quit now if we're beyond the stop point. */
416 if (addr >= stop)
417 {
418 /* Fix fi->frame if it's bogus at this point. */
419 fix_frame_pointer (fi, 0);
420
421 /* Note if/where callee saved registers were saved. */
422 set_movm_offsets (fi, movm_args);
423 return addr;
424 }
425
426 /* Get two more bytes so scanning can continue. */
427 status = read_memory_nobpt (addr, buf, 2);
428 if (status != 0)
429 {
430 /* Fix fi->frame if it's bogus at this point. */
431 fix_frame_pointer (fi, 0);
432
433 /* Note if/where callee saved registers were saved. */
434 set_movm_offsets (fi, movm_args);
435 return addr;
436 }
437 }
c5aa993b 438
c906108c
SS
439 /* Next we should allocate the local frame. No more prologue insns
440 are found after allocating the local frame.
c5aa993b 441
c906108c 442 Search for add imm8,sp (0xf8feXX)
c5aa993b
JM
443 or add imm16,sp (0xfafeXXXX)
444 or add imm32,sp (0xfcfeXXXXXXXX).
445
c906108c
SS
446 If none of the above was found, then this prologue has no
447 additional stack. */
448
449 status = read_memory_nobpt (addr, buf, 2);
450 if (status != 0)
451 {
452 /* Fix fi->frame if it's bogus at this point. */
453 fix_frame_pointer (fi, 0);
454
455 /* Note if/where callee saved registers were saved. */
456 set_movm_offsets (fi, movm_args);
457 return addr;
458 }
459
460 imm_size = 0;
461 if (buf[0] == 0xf8 && buf[1] == 0xfe)
462 imm_size = 1;
463 else if (buf[0] == 0xfa && buf[1] == 0xfe)
464 imm_size = 2;
465 else if (buf[0] == 0xfc && buf[1] == 0xfe)
466 imm_size = 4;
467
468 if (imm_size != 0)
469 {
470 /* Suck in imm_size more bytes, they'll hold the size of the
471 current frame. */
472 status = read_memory_nobpt (addr + 2, buf, imm_size);
473 if (status != 0)
474 {
475 /* Fix fi->frame if it's bogus at this point. */
476 fix_frame_pointer (fi, 0);
477
478 /* Note if/where callee saved registers were saved. */
479 set_movm_offsets (fi, movm_args);
480 return addr;
481 }
482
483 /* Note the size of the stack in the frame info structure. */
484 stack_size = extract_signed_integer (buf, imm_size);
485 if (fi)
486 fi->extra_info->stack_size = stack_size;
487
488 /* We just consumed 2 + imm_size bytes. */
489 addr += 2 + imm_size;
490
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);
494
495 /* Note if/where callee saved registers were saved. */
496 set_movm_offsets (fi, movm_args);
497 return addr;
498 }
499
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);
504
505 /* Note if/where callee saved registers were saved. */
506 set_movm_offsets (fi, movm_args);
507 return addr;
508}
c5aa993b 509
c906108c
SS
510/* Function: frame_chain
511 Figure out and return the caller's frame pointer given current
512 frame_info struct.
513
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? */
516
517CORE_ADDR
518mn10300_frame_chain (fi)
519 struct frame_info *fi;
520{
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)
c5aa993b 525 mn10300_analyze_prologue (fi, (CORE_ADDR) 0);
c906108c
SS
526
527 /* Quit now if mn10300_analyze_prologue set NO_MORE_FRAMES. */
528 if (fi->extra_info->status & NO_MORE_FRAMES)
529 return 0;
530
531 /* Now that we've analyzed our prologue, determine the frame
532 pointer for our caller.
533
c5aa993b
JM
534 If our caller has a frame pointer, then we need to
535 find the entry value of $a3 to our function.
536
537 If fsr.regs[A3_REGNUM] is nonzero, then it's at the memory
538 location pointed to by fsr.regs[A3_REGNUM].
c906108c 539
c5aa993b 540 Else it's still in $a3.
c906108c 541
c5aa993b
JM
542 If our caller does not have a frame pointer, then his
543 frame base is fi->frame + -caller's stack size. */
c906108c 544
c906108c
SS
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);
549
550 if (dummy->extra_info->status & MY_FRAME_IN_FP)
551 {
552 /* Our caller has a frame pointer. So find the frame in $a3 or
553 in the stack. */
554 if (fi->saved_regs[A3_REGNUM])
555 return (read_memory_integer (fi->saved_regs[A3_REGNUM], REGISTER_SIZE));
556 else
557 return read_register (A3_REGNUM);
558 }
559 else
560 {
561 int adjust = 0;
562
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);
c2d11a7d
JM
567 if (am33_mode)
568 {
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);
573 }
c906108c
SS
574
575 /* Our caller does not have a frame pointer. So his frame starts
c5aa993b
JM
576 at the base of our frame (fi->frame) + register save space
577 + <his size>. */
c906108c
SS
578 return fi->frame + adjust + -dummy->extra_info->stack_size;
579 }
580}
581
582/* Function: skip_prologue
583 Return the address of the first inst past the prologue of the function. */
584
585CORE_ADDR
586mn10300_skip_prologue (pc)
587 CORE_ADDR pc;
588{
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);
592}
593
594
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. */
598
599void
600mn10300_pop_frame (frame)
601 struct frame_info *frame;
602{
603 int regnum;
604
c5aa993b 605 if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
c906108c
SS
606 generic_pop_dummy_frame ();
607 else
608 {
609 write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
610
611 /* Restore any saved registers. */
612 for (regnum = 0; regnum < NUM_REGS; regnum++)
613 if (frame->saved_regs[regnum] != 0)
614 {
615 ULONGEST value;
616
617 value = read_memory_unsigned_integer (frame->saved_regs[regnum],
c5aa993b 618 REGISTER_RAW_SIZE (regnum));
c906108c
SS
619 write_register (regnum, value);
620 }
621
622 /* Actually cut back the stack. */
623 write_register (SP_REGNUM, FRAME_FP (frame));
624
625 /* Don't we need to set the PC?!? XXX FIXME. */
626 }
627
628 /* Throw away any cached frame information. */
629 flush_cached_frames ();
630}
631
632/* Function: push_arguments
633 Setup arguments for a call to the target. Arguments go in
634 order on the stack. */
635
636CORE_ADDR
637mn10300_push_arguments (nargs, args, sp, struct_return, struct_addr)
638 int nargs;
639 value_ptr *args;
640 CORE_ADDR sp;
641 unsigned char struct_return;
642 CORE_ADDR struct_addr;
643{
644 int argnum = 0;
645 int len = 0;
646 int stack_offset = 0;
647 int regsused = struct_return ? 1 : 0;
648
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. */
651 sp &= ~3;
652
653 /* Now make space on the stack for the args.
654
655 XXX This doesn't appear to handle pass-by-invisible reference
656 arguments. */
657 for (argnum = 0; argnum < nargs; argnum++)
658 {
659 int arg_length = (TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 3) & ~3;
660
661 while (regsused < 2 && arg_length > 0)
662 {
663 regsused++;
664 arg_length -= 4;
665 }
666 len += arg_length;
667 }
668
669 /* Allocate stack space. */
670 sp -= len;
671
672 regsused = struct_return ? 1 : 0;
673 /* Push all arguments onto the stack. */
674 for (argnum = 0; argnum < nargs; argnum++)
675 {
676 int len;
677 char *val;
678
679 /* XXX Check this. What about UNIONS? */
680 if (TYPE_CODE (VALUE_TYPE (*args)) == TYPE_CODE_STRUCT
681 && TYPE_LENGTH (VALUE_TYPE (*args)) > 8)
682 {
683 /* XXX Wrong, we want a pointer to this argument. */
c5aa993b
JM
684 len = TYPE_LENGTH (VALUE_TYPE (*args));
685 val = (char *) VALUE_CONTENTS (*args);
c906108c
SS
686 }
687 else
688 {
689 len = TYPE_LENGTH (VALUE_TYPE (*args));
c5aa993b 690 val = (char *) VALUE_CONTENTS (*args);
c906108c
SS
691 }
692
693 while (regsused < 2 && len > 0)
694 {
695 write_register (regsused, extract_unsigned_integer (val, 4));
696 val += 4;
697 len -= 4;
698 regsused++;
699 }
700
701 while (len > 0)
702 {
703 write_memory (sp + stack_offset, val, 4);
704 len -= 4;
705 val += 4;
706 stack_offset += 4;
707 }
708
709 args++;
710 }
711
712 /* Make space for the flushback area. */
713 sp -= 8;
714 return sp;
715}
716
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 */
c5aa993b 720
c906108c
SS
721CORE_ADDR
722mn10300_push_return_address (pc, sp)
723 CORE_ADDR pc;
724 CORE_ADDR sp;
725{
726 unsigned char buf[4];
727
728 store_unsigned_integer (buf, 4, CALL_DUMMY_ADDRESS ());
729 write_memory (sp - 4, buf, 4);
730 return sp - 4;
731}
732
733/* Function: store_struct_return (addr,sp)
734 Store the structure value return address for an inferior function
735 call. */
c5aa993b 736
c906108c
SS
737CORE_ADDR
738mn10300_store_struct_return (addr, sp)
739 CORE_ADDR addr;
740 CORE_ADDR sp;
741{
742 /* The structure return address is passed as the first argument. */
743 write_register (0, addr);
744 return sp;
745}
c5aa993b 746
c906108c
SS
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
752 will be found. */
753
754CORE_ADDR
755mn10300_frame_saved_pc (fi)
756 struct frame_info *fi;
757{
758 int adjust = 0;
759
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);
c2d11a7d
JM
764 if (am33_mode)
765 {
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);
770 }
c906108c
SS
771
772 return (read_memory_integer (fi->frame + adjust, REGISTER_SIZE));
773}
774
c906108c
SS
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().
778
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
783 it's not valid.
784
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). */
788
789void
790mn10300_init_extra_frame_info (fi)
791 struct frame_info *fi;
792{
793 if (fi->next)
794 fi->pc = FRAME_SAVED_PC (fi->next);
795
796 frame_saved_regs_zalloc (fi);
797 fi->extra_info = (struct frame_extra_info *)
798 frame_obstack_alloc (sizeof (struct frame_extra_info));
799
800 fi->extra_info->status = 0;
801 fi->extra_info->stack_size = 0;
802
803 mn10300_analyze_prologue (fi, 0);
804}
805
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. */
810
811void
812mn10300_virtual_frame_pointer (pc, reg, offset)
813 CORE_ADDR pc;
814 long *reg;
815 long *offset;
816{
817 struct frame_info *dummy = analyze_dummy_frame (pc, 0);
818 /* Set up a dummy frame_info, Analyze the prolog and fill in the
819 extra info. */
820 /* Results will tell us which type of frame it uses. */
821 if (dummy->extra_info->status & MY_FRAME_IN_SP)
822 {
c5aa993b 823 *reg = SP_REGNUM;
c906108c
SS
824 *offset = -(dummy->extra_info->stack_size);
825 }
826 else
827 {
c5aa993b 828 *reg = A3_REGNUM;
c906108c
SS
829 *offset = 0;
830 }
831}
c5aa993b 832
c906108c
SS
833/* This can be made more generic later. */
834static void
835set_machine_hook (filename)
836 char *filename;
837{
838 int i;
839
840 if (bfd_get_mach (exec_bfd) == bfd_mach_mn10300
841 || bfd_get_mach (exec_bfd) == 0)
842 {
843 mn10300_register_names = mn10300_generic_register_names;
844 }
845
c2d11a7d
JM
846 am33_mode = 0;
847 if (bfd_get_mach (exec_bfd) == bfd_mach_am33)
848 {
849
850 mn10300_register_names = am33_register_names;
851 am33_mode = 1;
852 }
c906108c
SS
853}
854
855void
856_initialize_mn10300_tdep ()
857{
858/* printf("_initialize_mn10300_tdep\n"); */
859
860 tm_print_insn = print_insn_mn10300;
861
862 specify_exec_file_hook (set_machine_hook);
863}
This page took 0.073157 seconds and 4 git commands to generate.