2003-01-03 Andrew Cagney <cagney@redhat.com>
[platform/upstream/binutils.git] / gdb / mn10200-tdep.c
1 /* Target-dependent code for the Matsushita MN10200 for GDB, the GNU debugger.
2    Copyright 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
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.
10
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.
15
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.  */
20
21 #include "defs.h"
22 #include "frame.h"
23 #include "inferior.h"
24 #include "target.h"
25 #include "value.h"
26 #include "bfd.h"
27 #include "gdb_string.h"
28 #include "gdbcore.h"
29 #include "symfile.h"
30 #include "regcache.h"
31
32
33 /* Should call_function allocate stack space for a struct return?  */
34 int
35 mn10200_use_struct_convention (int gcc_p, struct type *type)
36 {
37   return (TYPE_NFIELDS (type) > 1 || TYPE_LENGTH (type) > 8);
38 }
39 /* *INDENT-OFF* */
40 /* The main purpose of this file is dealing with prologues to extract
41    information about stack frames and saved registers.
42
43    For reference here's how prologues look on the mn10200:
44
45      With frame pointer:
46         mov fp,a0
47         mov sp,fp
48         add <size>,sp
49         Register saves for d2, d3, a1, a2 as needed.  Saves start
50         at fp - <size> + <outgoing_args_size> and work towards higher
51         addresses.  Note that the saves are actually done off the stack
52         pointer in the prologue!  This makes for smaller code and easier
53         prologue scanning as the displacement fields will unlikely
54         be more than 8 bits!
55
56      Without frame pointer:
57         add <size>,sp
58         Register saves for d2, d3, a1, a2 as needed.  Saves start
59         at sp + <outgoing_args_size> and work towards higher addresses.
60
61      Out of line prologue:
62         add <local size>,sp  -- optional
63         jsr __prologue
64         add <outgoing_size>,sp -- optional
65
66    The stack pointer remains constant throughout the life of most
67    functions.  As a result the compiler will usually omit the
68    frame pointer, so we must handle frame pointerless functions.  */
69
70 /* Analyze the prologue to determine where registers are saved,
71    the end of the prologue, etc etc.  Return the end of the prologue
72    scanned.
73
74    We store into FI (if non-null) several tidbits of information:
75
76     * stack_size -- size of this stack frame.  Note that if we stop in
77     certain parts of the prologue/epilogue we may claim the size of the
78     current frame is zero.  This happens when the current frame has
79     not been allocated yet or has already been deallocated.
80
81     * fsr -- Addresses of registers saved in the stack by this frame.
82
83     * status -- A (relatively) generic status indicator.  It's a bitmask
84     with the following bits: 
85
86       MY_FRAME_IN_SP: The base of the current frame is actually in
87       the stack pointer.  This can happen for frame pointerless
88       functions, or cases where we're stopped in the prologue/epilogue
89       itself.  For these cases mn10200_analyze_prologue will need up
90       update fi->frame before returning or analyzing the register
91       save instructions.
92
93       MY_FRAME_IN_FP: The base of the current frame is in the
94       frame pointer register ($a2).
95
96       CALLER_A2_IN_A0: $a2 from the caller's frame is temporarily
97       in $a0.  This can happen if we're stopped in the prologue.
98
99       NO_MORE_FRAMES: Set this if the current frame is "start" or
100       if the first instruction looks like mov <imm>,sp.  This tells
101       frame chain to not bother trying to unwind past this frame.  */
102 /* *INDENT-ON* */
103
104
105
106
107 #define MY_FRAME_IN_SP 0x1
108 #define MY_FRAME_IN_FP 0x2
109 #define CALLER_A2_IN_A0 0x4
110 #define NO_MORE_FRAMES 0x8
111
112 static CORE_ADDR
113 mn10200_analyze_prologue (struct frame_info *fi, CORE_ADDR pc)
114 {
115   CORE_ADDR func_addr, func_end, addr, stop;
116   CORE_ADDR stack_size = 0;
117   unsigned char buf[4];
118   int status;
119   char *name;
120   int out_of_line_prologue = 0;
121
122   /* Use the PC in the frame if it's provided to look up the
123      start of this function.  */
124   pc = (fi ? get_frame_pc (fi) : pc);
125
126   /* Find the start of this function.  */
127   status = find_pc_partial_function (pc, &name, &func_addr, &func_end);
128
129   /* Do nothing if we couldn't find the start of this function or if we're
130      stopped at the first instruction in the prologue.  */
131   if (status == 0)
132     return pc;
133
134   /* If we're in start, then give up.  */
135   if (strcmp (name, "start") == 0)
136     {
137       if (fi)
138         fi->status = NO_MORE_FRAMES;
139       return pc;
140     }
141
142   /* At the start of a function our frame is in the stack pointer.  */
143   if (fi)
144     fi->status = MY_FRAME_IN_SP;
145
146   /* If we're physically on an RTS instruction, then our frame has already
147      been deallocated.
148
149      fi->frame is bogus, we need to fix it.  */
150   if (fi && get_frame_pc (fi) + 1 == func_end)
151     {
152       status = target_read_memory (get_frame_pc (fi), buf, 1);
153       if (status != 0)
154         {
155           if (fi->next == NULL)
156             deprecated_update_frame_base_hack (fi, read_sp ());
157           return get_frame_pc (fi);
158         }
159
160       if (buf[0] == 0xfe)
161         {
162           if (fi->next == NULL)
163             deprecated_update_frame_base_hack (fi, read_sp ());
164           return get_frame_pc (fi);
165         }
166     }
167
168   /* Similarly if we're stopped on the first insn of a prologue as our
169      frame hasn't been allocated yet.  */
170   if (fi && get_frame_pc (fi) == func_addr)
171     {
172       if (fi->next == NULL)
173         deprecated_update_frame_base_hack (fi, read_sp ());
174       return get_frame_pc (fi);
175     }
176
177   /* Figure out where to stop scanning.  */
178   stop = fi ? get_frame_pc (fi) : func_end;
179
180   /* Don't walk off the end of the function.  */
181   stop = stop > func_end ? func_end : stop;
182
183   /* Start scanning on the first instruction of this function.  */
184   addr = func_addr;
185
186   status = target_read_memory (addr, buf, 2);
187   if (status != 0)
188     {
189       if (fi && fi->next == NULL && fi->status & MY_FRAME_IN_SP)
190         deprecated_update_frame_base_hack (fi, read_sp ());
191       return addr;
192     }
193
194   /* First see if this insn sets the stack pointer; if so, it's something
195      we won't understand, so quit now.   */
196   if (buf[0] == 0xdf
197       || (buf[0] == 0xf4 && buf[1] == 0x77))
198     {
199       if (fi)
200         fi->status = NO_MORE_FRAMES;
201       return addr;
202     }
203
204   /* Now see if we have a frame pointer.
205
206      Search for mov a2,a0 (0xf278)
207      then       mov a3,a2 (0xf27e).  */
208
209   if (buf[0] == 0xf2 && buf[1] == 0x78)
210     {
211       /* Our caller's $a2 will be found in $a0 now.  Note it for
212          our callers.  */
213       if (fi)
214         fi->status |= CALLER_A2_IN_A0;
215       addr += 2;
216       if (addr >= stop)
217         {
218           /* We still haven't allocated our local stack.  Handle this
219              as if we stopped on the first or last insn of a function.   */
220           if (fi && fi->next == NULL)
221             deprecated_update_frame_base_hack (fi, read_sp ());
222           return addr;
223         }
224
225       status = target_read_memory (addr, buf, 2);
226       if (status != 0)
227         {
228           if (fi && fi->next == NULL)
229             deprecated_update_frame_base_hack (fi, read_sp ());
230           return addr;
231         }
232       if (buf[0] == 0xf2 && buf[1] == 0x7e)
233         {
234           addr += 2;
235
236           /* Our frame pointer is valid now.  */
237           if (fi)
238             {
239               fi->status |= MY_FRAME_IN_FP;
240               fi->status &= ~MY_FRAME_IN_SP;
241             }
242           if (addr >= stop)
243             return addr;
244         }
245       else
246         {
247           if (fi && fi->next == NULL)
248             deprecated_update_frame_base_hack (fi, read_sp ());
249           return addr;
250         }
251     }
252
253   /* Next we should allocate the local frame.
254
255      Search for add imm8,a3 (0xd3XX)
256      or add imm16,a3 (0xf70bXXXX)
257      or add imm24,a3 (0xf467XXXXXX).
258
259      If none of the above was found, then this prologue has
260      no stack, and therefore can't have any register saves,
261      so quit now.  */
262   status = target_read_memory (addr, buf, 2);
263   if (status != 0)
264     {
265       if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
266         deprecated_update_frame_base_hack (fi, read_sp ());
267       return addr;
268     }
269   if (buf[0] == 0xd3)
270     {
271       stack_size = extract_signed_integer (&buf[1], 1);
272       if (fi)
273         fi->stack_size = stack_size;
274       addr += 2;
275       if (addr >= stop)
276         {
277           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
278             deprecated_update_frame_base_hack (fi, read_sp () - stack_size);
279           return addr;
280         }
281     }
282   else if (buf[0] == 0xf7 && buf[1] == 0x0b)
283     {
284       status = target_read_memory (addr + 2, buf, 2);
285       if (status != 0)
286         {
287           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
288             deprecated_update_frame_base_hack (fi, read_sp ());
289           return addr;
290         }
291       stack_size = extract_signed_integer (buf, 2);
292       if (fi)
293         fi->stack_size = stack_size;
294       addr += 4;
295       if (addr >= stop)
296         {
297           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
298             deprecated_update_frame_base_hack (fi, read_sp () - stack_size);
299           return addr;
300         }
301     }
302   else if (buf[0] == 0xf4 && buf[1] == 0x67)
303     {
304       status = target_read_memory (addr + 2, buf, 3);
305       if (status != 0)
306         {
307           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
308             deprecated_update_frame_base_hack (fi, read_sp ());
309           return addr;
310         }
311       stack_size = extract_signed_integer (buf, 3);
312       if (fi)
313         fi->stack_size = stack_size;
314       addr += 5;
315       if (addr >= stop)
316         {
317           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
318             deprecated_update_frame_base_hack (fi, read_sp () - stack_size);
319           return addr;
320         }
321     }
322
323   /* Now see if we have a call to __prologue for an out of line
324      prologue.  */
325   status = target_read_memory (addr, buf, 2);
326   if (status != 0)
327     return addr;
328
329   /* First check for 16bit pc-relative call to __prologue.  */
330   if (buf[0] == 0xfd)
331     {
332       CORE_ADDR temp;
333       status = target_read_memory (addr + 1, buf, 2);
334       if (status != 0)
335         {
336           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
337             deprecated_update_frame_base_hack (fi, read_sp ());
338           return addr;
339         }
340
341       /* Get the PC this instruction will branch to.  */
342       temp = (extract_signed_integer (buf, 2) + addr + 3) & 0xffffff;
343
344       /* Get the name of the function at the target address.  */
345       status = find_pc_partial_function (temp, &name, NULL, NULL);
346       if (status == 0)
347         {
348           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
349             deprecated_update_frame_base_hack (fi, read_sp ());
350           return addr;
351         }
352
353       /* Note if it is an out of line prologue.  */
354       out_of_line_prologue = (strcmp (name, "__prologue") == 0);
355
356       /* This sucks up 3 bytes of instruction space.  */
357       if (out_of_line_prologue)
358         addr += 3;
359
360       if (addr >= stop)
361         {
362           if (fi && fi->next == NULL)
363             {
364               fi->stack_size -= 16;
365               deprecated_update_frame_base_hack (fi, read_sp () - fi->stack_size);
366             }
367           return addr;
368         }
369     }
370   /* Now check for the 24bit pc-relative call to __prologue.  */
371   else if (buf[0] == 0xf4 && buf[1] == 0xe1)
372     {
373       CORE_ADDR temp;
374       status = target_read_memory (addr + 2, buf, 3);
375       if (status != 0)
376         {
377           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
378             deprecated_update_frame_base_hack (fi, read_sp ());
379           return addr;
380         }
381
382       /* Get the PC this instruction will branch to.  */
383       temp = (extract_signed_integer (buf, 3) + addr + 5) & 0xffffff;
384
385       /* Get the name of the function at the target address.  */
386       status = find_pc_partial_function (temp, &name, NULL, NULL);
387       if (status == 0)
388         {
389           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
390             deprecated_update_frame_base_hack (fi, read_sp ());
391           return addr;
392         }
393
394       /* Note if it is an out of line prologue.  */
395       out_of_line_prologue = (strcmp (name, "__prologue") == 0);
396
397       /* This sucks up 5 bytes of instruction space.  */
398       if (out_of_line_prologue)
399         addr += 5;
400
401       if (addr >= stop)
402         {
403           if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP))
404             {
405               fi->stack_size -= 16;
406               deprecated_update_frame_base_hack (fi, read_sp () - fi->stack_size);
407             }
408           return addr;
409         }
410     }
411
412   /* Now actually handle the out of line prologue.  */
413   if (out_of_line_prologue)
414     {
415       int outgoing_args_size = 0;
416
417       /* First adjust the stack size for this function.  The out of
418          line prologue saves 4 registers (16bytes of data).  */
419       if (fi)
420         fi->stack_size -= 16;
421
422       /* Update fi->frame if necessary.  */
423       if (fi && fi->next == NULL)
424         deprecated_update_frame_base_hack (fi, read_sp () - fi->stack_size);
425
426       /* After the out of line prologue, there may be another
427          stack adjustment for the outgoing arguments.
428
429          Search for add imm8,a3 (0xd3XX)
430          or     add imm16,a3 (0xf70bXXXX)
431          or     add imm24,a3 (0xf467XXXXXX).  */
432
433       status = target_read_memory (addr, buf, 2);
434       if (status != 0)
435         {
436           if (fi)
437             {
438               fi->fsr.regs[2] = fi->frame + fi->stack_size + 4;
439               fi->fsr.regs[3] = fi->frame + fi->stack_size + 8;
440               fi->fsr.regs[5] = fi->frame + fi->stack_size + 12;
441               fi->fsr.regs[6] = fi->frame + fi->stack_size + 16;
442             }
443           return addr;
444         }
445
446       if (buf[0] == 0xd3)
447         {
448           outgoing_args_size = extract_signed_integer (&buf[1], 1);
449           addr += 2;
450         }
451       else if (buf[0] == 0xf7 && buf[1] == 0x0b)
452         {
453           status = target_read_memory (addr + 2, buf, 2);
454           if (status != 0)
455             {
456               if (fi)
457                 {
458                   fi->fsr.regs[2] = fi->frame + fi->stack_size + 4;
459                   fi->fsr.regs[3] = fi->frame + fi->stack_size + 8;
460                   fi->fsr.regs[5] = fi->frame + fi->stack_size + 12;
461                   fi->fsr.regs[6] = fi->frame + fi->stack_size + 16;
462                 }
463               return addr;
464             }
465           outgoing_args_size = extract_signed_integer (buf, 2);
466           addr += 4;
467         }
468       else if (buf[0] == 0xf4 && buf[1] == 0x67)
469         {
470           status = target_read_memory (addr + 2, buf, 3);
471           if (status != 0)
472             {
473               if (fi && fi->next == NULL)
474                 {
475                   fi->fsr.regs[2] = fi->frame + fi->stack_size + 4;
476                   fi->fsr.regs[3] = fi->frame + fi->stack_size + 8;
477                   fi->fsr.regs[5] = fi->frame + fi->stack_size + 12;
478                   fi->fsr.regs[6] = fi->frame + fi->stack_size + 16;
479                 }
480               return addr;
481             }
482           outgoing_args_size = extract_signed_integer (buf, 3);
483           addr += 5;
484         }
485       else
486         outgoing_args_size = 0;
487
488       /* Now that we know the size of the outgoing arguments, fix
489          fi->frame again if this is the innermost frame.  */
490       if (fi && fi->next == NULL)
491         deprecated_update_frame_base_hack (fi, fi->frame - outgoing_args_size);
492
493       /* Note the register save information and update the stack
494          size for this frame too.  */
495       if (fi)
496         {
497           fi->fsr.regs[2] = fi->frame + fi->stack_size + 4;
498           fi->fsr.regs[3] = fi->frame + fi->stack_size + 8;
499           fi->fsr.regs[5] = fi->frame + fi->stack_size + 12;
500           fi->fsr.regs[6] = fi->frame + fi->stack_size + 16;
501           fi->stack_size += outgoing_args_size;
502         }
503       /* There can be no more prologue insns, so return now.  */
504       return addr;
505     }
506
507   /* At this point fi->frame needs to be correct.
508
509      If MY_FRAME_IN_SP is set and we're the innermost frame, then we
510      need to fix fi->frame so that backtracing, find_frame_saved_regs,
511      etc work correctly.  */
512   if (fi && fi->next == NULL && (fi->status & MY_FRAME_IN_SP) != 0)
513     deprecated_update_frame_base_hack (fi, read_sp () - fi->stack_size);
514
515   /* And last we have the register saves.  These are relatively
516      simple because they're physically done off the stack pointer,
517      and thus the number of different instructions we need to
518      check is greatly reduced because we know the displacements
519      will be small.
520
521      Search for movx d2,(X,a3) (0xf55eXX)
522      then       movx d3,(X,a3) (0xf55fXX)
523      then       mov  a1,(X,a3) (0x5dXX)    No frame pointer case
524      then       mov  a2,(X,a3) (0x5eXX)    No frame pointer case
525      or  mov  a0,(X,a3) (0x5cXX)           Frame pointer case.  */
526
527   status = target_read_memory (addr, buf, 2);
528   if (status != 0)
529     return addr;
530   if (buf[0] == 0xf5 && buf[1] == 0x5e)
531     {
532       if (fi)
533         {
534           status = target_read_memory (addr + 2, buf, 1);
535           if (status != 0)
536             return addr;
537           fi->fsr.regs[2] = (fi->frame + stack_size
538                              + extract_signed_integer (buf, 1));
539         }
540       addr += 3;
541       if (addr >= stop)
542         return addr;
543       status = target_read_memory (addr, buf, 2);
544       if (status != 0)
545         return addr;
546     }
547   if (buf[0] == 0xf5 && buf[1] == 0x5f)
548     {
549       if (fi)
550         {
551           status = target_read_memory (addr + 2, buf, 1);
552           if (status != 0)
553             return addr;
554           fi->fsr.regs[3] = (fi->frame + stack_size
555                              + extract_signed_integer (buf, 1));
556         }
557       addr += 3;
558       if (addr >= stop)
559         return addr;
560       status = target_read_memory (addr, buf, 2);
561       if (status != 0)
562         return addr;
563     }
564   if (buf[0] == 0x5d)
565     {
566       if (fi)
567         {
568           status = target_read_memory (addr + 1, buf, 1);
569           if (status != 0)
570             return addr;
571           fi->fsr.regs[5] = (fi->frame + stack_size
572                              + extract_signed_integer (buf, 1));
573         }
574       addr += 2;
575       if (addr >= stop)
576         return addr;
577       status = target_read_memory (addr, buf, 2);
578       if (status != 0)
579         return addr;
580     }
581   if (buf[0] == 0x5e || buf[0] == 0x5c)
582     {
583       if (fi)
584         {
585           status = target_read_memory (addr + 1, buf, 1);
586           if (status != 0)
587             return addr;
588           fi->fsr.regs[6] = (fi->frame + stack_size
589                              + extract_signed_integer (buf, 1));
590           fi->status &= ~CALLER_A2_IN_A0;
591         }
592       addr += 2;
593       if (addr >= stop)
594         return addr;
595       return addr;
596     }
597   return addr;
598 }
599
600 /* Function: frame_chain
601    Figure out and return the caller's frame pointer given current
602    frame_info struct.
603
604    We don't handle dummy frames yet but we would probably just return the
605    stack pointer that was in use at the time the function call was made?  */
606
607 CORE_ADDR
608 mn10200_frame_chain (struct frame_info *fi)
609 {
610   struct frame_info dummy_frame;
611
612   /* Walk through the prologue to determine the stack size,
613      location of saved registers, end of the prologue, etc.  */
614   if (fi->status == 0)
615     mn10200_analyze_prologue (fi, (CORE_ADDR) 0);
616
617   /* Quit now if mn10200_analyze_prologue set NO_MORE_FRAMES.  */
618   if (fi->status & NO_MORE_FRAMES)
619     return 0;
620
621   /* Now that we've analyzed our prologue, determine the frame
622      pointer for our caller.
623
624      If our caller has a frame pointer, then we need to
625      find the entry value of $a2 to our function.
626
627      If CALLER_A2_IN_A0, then the chain is in $a0.
628
629      If fsr.regs[6] is nonzero, then it's at the memory
630      location pointed to by fsr.regs[6].
631
632      Else it's still in $a2.
633
634      If our caller does not have a frame pointer, then his
635      frame base is fi->frame + -caller's stack size + 4.  */
636
637   /* The easiest way to get that info is to analyze our caller's frame.
638
639      So we set up a dummy frame and call mn10200_analyze_prologue to
640      find stuff for us.  */
641   deprecated_update_frame_pc_hack (&dummy_frame, FRAME_SAVED_PC (fi));
642   deprecated_update_frame_base_hack (&dummy_frame, fi->frame);
643   memset (dummy_frame.fsr.regs, '\000', sizeof dummy_frame.fsr.regs);
644   dummy_frame.status = 0;
645   dummy_frame.stack_size = 0;
646   mn10200_analyze_prologue (&dummy_frame, 0);
647
648   if (dummy_frame.status & MY_FRAME_IN_FP)
649     {
650       /* Our caller has a frame pointer.  So find the frame in $a2, $a0,
651          or in the stack.  */
652       if (fi->fsr.regs[6])
653         return (read_memory_integer (fi->fsr.regs[FP_REGNUM], REGISTER_SIZE)
654                 & 0xffffff);
655       else if (fi->status & CALLER_A2_IN_A0)
656         return read_register (4);
657       else
658         return read_register (FP_REGNUM);
659     }
660   else
661     {
662       /* Our caller does not have a frame pointer.  So his frame starts
663          at the base of our frame (fi->frame) + <his size> + 4 (saved pc).  */
664       return fi->frame + -dummy_frame.stack_size + 4;
665     }
666 }
667
668 /* Function: skip_prologue
669    Return the address of the first inst past the prologue of the function.  */
670
671 CORE_ADDR
672 mn10200_skip_prologue (CORE_ADDR pc)
673 {
674   /* We used to check the debug symbols, but that can lose if
675      we have a null prologue.  */
676   return mn10200_analyze_prologue (NULL, pc);
677 }
678
679 /* Function: pop_frame
680    This routine gets called when either the user uses the `return'
681    command, or the call dummy breakpoint gets hit.  */
682
683 void
684 mn10200_pop_frame (struct frame_info *frame)
685 {
686   int regnum;
687
688   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame), frame->frame, frame->frame))
689     generic_pop_dummy_frame ();
690   else
691     {
692       write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
693
694       /* Restore any saved registers.  */
695       for (regnum = 0; regnum < NUM_REGS; regnum++)
696         if (frame->fsr.regs[regnum] != 0)
697           {
698             ULONGEST value;
699
700             value = read_memory_unsigned_integer (frame->fsr.regs[regnum],
701                                                 REGISTER_RAW_SIZE (regnum));
702             write_register (regnum, value);
703           }
704
705       /* Actually cut back the stack.  */
706       write_register (SP_REGNUM, get_frame_base (frame));
707
708       /* Don't we need to set the PC?!?  XXX FIXME.  */
709     }
710
711   /* Throw away any cached frame information.  */
712   flush_cached_frames ();
713 }
714
715 /* Function: push_arguments
716    Setup arguments for a call to the target.  Arguments go in
717    order on the stack.  */
718
719 CORE_ADDR
720 mn10200_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
721                         unsigned char struct_return, CORE_ADDR struct_addr)
722 {
723   int argnum = 0;
724   int len = 0;
725   int stack_offset = 0;
726   int regsused = struct_return ? 1 : 0;
727
728   /* This should be a nop, but align the stack just in case something
729      went wrong.  Stacks are two byte aligned on the mn10200.  */
730   sp &= ~1;
731
732   /* Now make space on the stack for the args.
733
734      XXX This doesn't appear to handle pass-by-invisible reference
735      arguments.  */
736   for (argnum = 0; argnum < nargs; argnum++)
737     {
738       int arg_length = (TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 1) & ~1;
739
740       /* If we've used all argument registers, then this argument is
741          pushed.  */
742       if (regsused >= 2 || arg_length > 4)
743         {
744           regsused = 2;
745           len += arg_length;
746         }
747       /* We know we've got some arg register space left.  If this argument
748          will fit entirely in regs, then put it there.  */
749       else if (arg_length <= 2
750                || TYPE_CODE (VALUE_TYPE (args[argnum])) == TYPE_CODE_PTR)
751         {
752           regsused++;
753         }
754       else if (regsused == 0)
755         {
756           regsused = 2;
757         }
758       else
759         {
760           regsused = 2;
761           len += arg_length;
762         }
763     }
764
765   /* Allocate stack space.  */
766   sp -= len;
767
768   regsused = struct_return ? 1 : 0;
769   /* Push all arguments onto the stack. */
770   for (argnum = 0; argnum < nargs; argnum++)
771     {
772       int len;
773       char *val;
774
775       /* XXX Check this.  What about UNIONS?  */
776       if (TYPE_CODE (VALUE_TYPE (*args)) == TYPE_CODE_STRUCT
777           && TYPE_LENGTH (VALUE_TYPE (*args)) > 8)
778         {
779           /* XXX Wrong, we want a pointer to this argument.  */
780           len = TYPE_LENGTH (VALUE_TYPE (*args));
781           val = (char *) VALUE_CONTENTS (*args);
782         }
783       else
784         {
785           len = TYPE_LENGTH (VALUE_TYPE (*args));
786           val = (char *) VALUE_CONTENTS (*args);
787         }
788
789       if (regsused < 2
790           && (len <= 2
791               || TYPE_CODE (VALUE_TYPE (*args)) == TYPE_CODE_PTR))
792         {
793           write_register (regsused, extract_unsigned_integer (val, 4));
794           regsused++;
795         }
796       else if (regsused == 0 && len == 4)
797         {
798           write_register (regsused, extract_unsigned_integer (val, 2));
799           write_register (regsused + 1, extract_unsigned_integer (val + 2, 2));
800           regsused = 2;
801         }
802       else
803         {
804           regsused = 2;
805           while (len > 0)
806             {
807               write_memory (sp + stack_offset, val, 2);
808
809               len -= 2;
810               val += 2;
811               stack_offset += 2;
812             }
813         }
814       args++;
815     }
816
817   return sp;
818 }
819
820 /* Function: push_return_address (pc)
821    Set up the return address for the inferior function call.
822    Needed for targets where we don't actually execute a JSR/BSR instruction */
823
824 CORE_ADDR
825 mn10200_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
826 {
827   unsigned char buf[4];
828
829   store_unsigned_integer (buf, 4, CALL_DUMMY_ADDRESS ());
830   write_memory (sp - 4, buf, 4);
831   return sp - 4;
832 }
833
834 /* Function: store_struct_return (addr,sp)
835    Store the structure value return address for an inferior function
836    call.  */
837
838 CORE_ADDR
839 mn10200_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
840 {
841   /* The structure return address is passed as the first argument.  */
842   write_register (0, addr);
843   return sp;
844 }
845
846 /* Function: frame_saved_pc 
847    Find the caller of this frame.  We do this by seeing if RP_REGNUM
848    is saved in the stack anywhere, otherwise we get it from the
849    registers.  If the inner frame is a dummy frame, return its PC
850    instead of RP, because that's where "caller" of the dummy-frame
851    will be found.  */
852
853 CORE_ADDR
854 mn10200_frame_saved_pc (struct frame_info *fi)
855 {
856   /* The saved PC will always be at the base of the current frame.  */
857   return (read_memory_integer (fi->frame, REGISTER_SIZE) & 0xffffff);
858 }
859
860 /* Function: init_extra_frame_info
861    Setup the frame's frame pointer, pc, and frame addresses for saved
862    registers.  Most of the work is done in mn10200_analyze_prologue().
863
864    Note that when we are called for the last frame (currently active frame),
865    that get_frame_pc (fi) and fi->frame will already be setup.  However, fi->frame will
866    be valid only if this routine uses FP.  For previous frames, fi-frame will
867    always be correct.  mn10200_analyze_prologue will fix fi->frame if
868    it's not valid.
869
870    We can be called with the PC in the call dummy under two circumstances.
871    First, during normal backtracing, second, while figuring out the frame
872    pointer just prior to calling the target function (see run_stack_dummy).  */
873
874 void
875 mn10200_init_extra_frame_info (struct frame_info *fi)
876 {
877   if (fi->next)
878     deprecated_update_frame_pc_hack (fi, FRAME_SAVED_PC (fi->next));
879
880   memset (fi->fsr.regs, '\000', sizeof fi->fsr.regs);
881   fi->status = 0;
882   fi->stack_size = 0;
883
884   mn10200_analyze_prologue (fi, 0);
885 }
886
887 void
888 _initialize_mn10200_tdep (void)
889 {
890   tm_print_insn = print_insn_mn10200;
891 }