This commit was generated by cvs2svn to track changes on a CVS vendor
[external/binutils.git] / gdb / sh-tdep.c
1 /* Target-dependent code for Hitachi Super-H, for GDB.
2    Copyright 1993, 1994, 1995, 1996, 1997, 1998 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, Boston, MA 02111-1307, USA.  */
19
20 /*
21  Contributed by Steve Chamberlain
22                 sac@cygnus.com
23  */
24
25 #include "defs.h"
26 #include "frame.h"
27 #include "obstack.h"
28 #include "symtab.h"
29 #include "symfile.h"
30 #include "gdbtypes.h"
31 #include "gdbcmd.h"
32 #include "gdbcore.h"
33 #include "value.h"
34 #include "dis-asm.h"
35 #include "inferior.h"           /* for BEFORE_TEXT_END etc. */
36 #include "gdb_string.h"
37
38 /* A set of original names, to be used when restoring back to generic
39    registers from a specific set.  */
40
41 static char *sh_generic_reg_names[] = {
42   "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",
43   "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",
44   "pc",   "pr",   "gbr",  "vbr",  "mach", "macl", "sr",
45   "fpul", "fpscr",
46   "fr0",  "fr1",  "fr2",  "fr3",  "fr4",  "fr5",  "fr6",  "fr7",
47   "fr8",  "fr9",  "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
48   "ssr",  "spc",
49   "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
50   "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
51 };
52
53 static char *sh_reg_names[] = {
54   "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",
55   "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",
56   "pc",   "pr",   "gbr",  "vbr",  "mach", "macl", "sr",
57   "",     "",
58   "",     "",     "",     "",     "",     "",     "",     "",
59   "",     "",     "",     "",     "",     "",     "",     "",
60   "",     "",
61   "",     "",     "",     "",     "",     "",     "",     "",
62   "",     "",     "",     "",     "",     "",     "",     "",
63 };
64
65 static char *sh3_reg_names[] = {
66   "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",
67   "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",
68   "pc",   "pr",   "gbr",  "vbr",  "mach", "macl", "sr",
69   "",     "",
70   "",     "",     "",     "",     "",     "",     "",     "",
71   "",     "",     "",     "",     "",     "",     "",     "",
72   "ssr",  "spc",
73   "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
74   "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1"
75 };
76
77 static char *sh3e_reg_names[] = {
78   "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",
79   "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",
80   "pc",   "pr",   "gbr",  "vbr",  "mach", "macl", "sr",
81   "fpul", "fpscr",
82   "fr0",  "fr1",  "fr2",  "fr3",  "fr4",  "fr5",  "fr6",  "fr7",
83   "fr8",  "fr9",  "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
84   "ssr",  "spc",
85   "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
86   "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
87 };
88
89 char **sh_register_names = sh_generic_reg_names;
90
91
92 struct {
93   char **regnames;
94   int mach;
95 } sh_processor_type_table[] = {
96   { sh_reg_names, bfd_mach_sh },
97   { sh3_reg_names, bfd_mach_sh3 },
98   { sh3e_reg_names, bfd_mach_sh3e },
99   { sh3e_reg_names, bfd_mach_sh4 },
100   { NULL, 0 }
101 };
102
103 /* Prologue looks like
104    [mov.l       <regs>,@-r15]...
105    [sts.l       pr,@-r15]
106    [mov.l       r14,@-r15]
107    [mov         r15,r14]
108 */
109
110 #define IS_STS(x)               ((x) == 0x4f22)
111 #define IS_PUSH(x)              (((x) & 0xff0f) == 0x2f06)
112 #define GET_PUSHED_REG(x)       (((x) >> 4) & 0xf)
113 #define IS_MOV_SP_FP(x)         ((x) == 0x6ef3)
114 #define IS_ADD_SP(x)            (((x) & 0xff00) == 0x7f00)
115 #define IS_MOV_R3(x)            (((x) & 0xff00) == 0x1a00)
116 #define IS_SHLL_R3(x)           ((x) == 0x4300)
117 #define IS_ADD_R3SP(x)          ((x) == 0x3f3c)
118 #define IS_FMOV(x)              (((x) & 0xf00f) == 0xf00b)
119 #define FPSCR_SZ                (1 << 20)
120
121
122 /* Should call_function allocate stack space for a struct return?  */
123 int
124 sh_use_struct_convention (gcc_p, type)
125      int gcc_p;
126      struct type *type;
127 {
128   return (TYPE_LENGTH (type) > 1);
129 }
130
131
132 /* Skip any prologue before the guts of a function */
133
134 CORE_ADDR
135 sh_skip_prologue (start_pc)
136      CORE_ADDR start_pc;
137 {
138   int w;
139
140   w = read_memory_integer (start_pc, 2);
141   while (IS_STS (w)
142          || IS_FMOV (w)
143          || IS_PUSH (w)
144          || IS_MOV_SP_FP (w)
145          || IS_MOV_R3 (w)
146          || IS_ADD_R3SP (w)
147          || IS_ADD_SP (w)
148          || IS_SHLL_R3 (w))
149     {
150       start_pc += 2;
151       w = read_memory_integer (start_pc, 2);
152     }
153
154   return start_pc;
155 }
156
157 /* Disassemble an instruction.  */
158
159 int
160 gdb_print_insn_sh (memaddr, info)
161      bfd_vma memaddr;
162      disassemble_info *info;
163 {
164   if (TARGET_BYTE_ORDER == BIG_ENDIAN)
165     return print_insn_sh (memaddr, info);
166   else
167     return print_insn_shl (memaddr, info);
168 }
169
170 /* Given a GDB frame, determine the address of the calling function's frame.
171    This will be used to create a new GDB frame struct, and then
172    INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
173
174    For us, the frame address is its stack pointer value, so we look up
175    the function prologue to determine the caller's sp value, and return it.  */
176
177 CORE_ADDR
178 sh_frame_chain (frame)
179      struct frame_info *frame;
180 {
181   if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
182     return frame->frame;        /* dummy frame same as caller's frame */
183   if (!inside_entry_file (frame->pc))
184     return read_memory_integer (FRAME_FP (frame) + frame->f_offset, 4);
185   else
186     return 0;
187 }
188
189 /* Find REGNUM on the stack.  Otherwise, it's in an active register.  One thing
190    we might want to do here is to check REGNUM against the clobber mask, and
191    somehow flag it as invalid if it isn't saved on the stack somewhere.  This
192    would provide a graceful failure mode when trying to get the value of
193    caller-saves registers for an inner frame.  */
194
195 CORE_ADDR
196 sh_find_callers_reg (fi, regnum)
197      struct frame_info *fi;
198      int regnum;
199 {
200   struct frame_saved_regs fsr;
201
202   for (; fi; fi = fi->next)
203     if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
204       /* When the caller requests PR from the dummy frame, we return PC because
205          that's where the previous routine appears to have done a call from. */
206       return generic_read_register_dummy (fi->pc, fi->frame, regnum);
207     else 
208       {
209         FRAME_FIND_SAVED_REGS(fi, fsr);
210         if (fsr.regs[regnum] != 0)
211           return read_memory_integer (fsr.regs[regnum], 
212                                       REGISTER_RAW_SIZE(regnum));
213       }
214   return read_register (regnum);
215 }
216
217 /* Put here the code to store, into a struct frame_saved_regs, the
218    addresses of the saved registers of frame described by FRAME_INFO.
219    This includes special registers such as pc and fp saved in special
220    ways in the stack frame.  sp is even more special: the address we
221    return for it IS the sp for the next frame. */
222
223 void
224 sh_frame_find_saved_regs (fi, fsr)
225      struct frame_info *fi;
226      struct frame_saved_regs *fsr;
227 {
228   int where[NUM_REGS];
229   int rn;
230   int have_fp = 0;
231   int depth;
232   int pc;
233   int opc;
234   int insn;
235   int r3_val = 0;
236   char * dummy_regs = generic_find_dummy_frame (fi->pc, fi->frame);
237
238   if (dummy_regs)
239     {
240       /* DANGER!  This is ONLY going to work if the char buffer format of
241          the saved registers is byte-for-byte identical to the 
242          CORE_ADDR regs[NUM_REGS] format used by struct frame_saved_regs! */
243       memcpy (&fsr->regs, dummy_regs, sizeof(fsr));
244       return;
245     }
246
247   opc = pc = get_pc_function_start (fi->pc);
248
249   insn = read_memory_integer (pc, 2);
250
251   fi->leaf_function = 1;
252   fi->f_offset = 0;
253
254   for (rn = 0; rn < NUM_REGS; rn++)
255     where[rn] = -1;
256
257   depth = 0;
258
259   /* Loop around examining the prologue insns until we find something
260      that does not appear to be part of the prologue.  But give up
261      after 20 of them, since we're getting silly then. */
262
263   while (pc < opc + 20 * 2)
264     {
265       /* See where the registers will be saved to */
266       if (IS_PUSH (insn))
267         {
268           pc += 2;
269           rn = GET_PUSHED_REG (insn);
270           where[rn] = depth;
271           insn = read_memory_integer (pc, 2);
272           depth += 4;
273         }
274       else if (IS_STS (insn))
275         {
276           pc += 2;
277           where[PR_REGNUM] = depth;
278           insn = read_memory_integer (pc, 2);
279           /* If we're storing the pr then this isn't a leaf */
280           fi->leaf_function = 0;
281           depth += 4;
282         }
283       else if (IS_MOV_R3 (insn))
284         {
285           r3_val = ((insn & 0xff) ^ 0x80) - 0x80;
286           pc += 2;
287           insn = read_memory_integer (pc, 2);
288         }
289       else if (IS_SHLL_R3 (insn))
290         {
291           r3_val <<= 1;
292           pc += 2;
293           insn = read_memory_integer (pc, 2);
294         }
295       else if (IS_ADD_R3SP (insn))
296         {
297           depth += -r3_val;
298           pc += 2;
299           insn = read_memory_integer (pc, 2);
300         }
301       else if (IS_ADD_SP (insn))
302         {
303           pc += 2;
304           depth -= ((insn & 0xff) ^ 0x80) - 0x80;
305           insn = read_memory_integer (pc, 2);
306         }
307       else if (IS_FMOV (insn))
308         {
309           pc += 2;
310           insn = read_memory_integer (pc, 2);
311           if (read_register (FPSCR_REGNUM) & FPSCR_SZ)
312             {
313               depth += 8;
314             }
315           else
316             {
317               depth += 4;
318             }
319         }
320       else
321         break;
322     }
323
324   /* Now we know how deep things are, we can work out their addresses */
325
326   for (rn = 0; rn < NUM_REGS; rn++)
327     {
328       if (where[rn] >= 0)
329         {
330           if (rn == FP_REGNUM)
331             have_fp = 1;
332
333           fsr->regs[rn] = fi->frame - where[rn] + depth - 4;
334         }
335       else
336         {
337           fsr->regs[rn] = 0;
338         }
339     }
340
341   if (have_fp)
342     {
343       fsr->regs[SP_REGNUM] = read_memory_integer (fsr->regs[FP_REGNUM], 4);
344     }
345   else
346     {
347       fsr->regs[SP_REGNUM] = fi->frame - 4;
348     }
349
350   fi->f_offset = depth - where[FP_REGNUM] - 4;
351   /* Work out the return pc - either from the saved pr or the pr
352      value */
353 }
354
355 /* initialize the extra info saved in a FRAME */
356
357 void
358 sh_init_extra_frame_info (fromleaf, fi)
359      int fromleaf;
360      struct frame_info *fi;
361 {
362   struct frame_saved_regs fsr;
363
364   if (fi->next)
365     fi->pc = FRAME_SAVED_PC (fi->next);
366
367   if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
368     {
369       /* We need to setup fi->frame here because run_stack_dummy gets it wrong
370          by assuming it's always FP.  */
371       fi->frame     = generic_read_register_dummy (fi->pc, fi->frame, 
372                                                    SP_REGNUM);
373       fi->return_pc = generic_read_register_dummy (fi->pc, fi->frame, 
374                                                    PC_REGNUM);
375       fi->f_offset = -(CALL_DUMMY_LENGTH + 4);
376       fi->leaf_function = 0;
377       return;
378     }
379   else
380     {
381       FRAME_FIND_SAVED_REGS (fi, fsr);
382       fi->return_pc = sh_find_callers_reg (fi, PR_REGNUM);
383     }
384 }
385
386 /* Discard from the stack the innermost frame,
387    restoring all saved registers.  */
388
389 void
390 sh_pop_frame ()
391 {
392   register struct frame_info *frame = get_current_frame ();
393   register CORE_ADDR fp;
394   register int regnum;
395   struct frame_saved_regs fsr;
396
397   if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
398     generic_pop_dummy_frame ();
399   else
400   {
401     fp = FRAME_FP (frame);
402     get_frame_saved_regs (frame, &fsr);
403
404     /* Copy regs from where they were saved in the frame */
405     for (regnum = 0; regnum < NUM_REGS; regnum++)
406       if (fsr.regs[regnum])
407         write_register (regnum, read_memory_integer (fsr.regs[regnum], 4));
408
409     write_register (PC_REGNUM, frame->return_pc);
410     write_register (SP_REGNUM, fp + 4);
411   }
412   flush_cached_frames ();
413 }
414
415 /* Function: push_arguments
416    Setup the function arguments for calling a function in the inferior.
417
418    On the Hitachi SH architecture, there are four registers (R4 to R7)
419    which are dedicated for passing function arguments.  Up to the first
420    four arguments (depending on size) may go into these registers.
421    The rest go on the stack.
422
423    Arguments that are smaller than 4 bytes will still take up a whole
424    register or a whole 32-bit word on the stack, and will be 
425    right-justified in the register or the stack word.  This includes
426    chars, shorts, and small aggregate types.
427
428    Arguments that are larger than 4 bytes may be split between two or 
429    more registers.  If there are not enough registers free, an argument
430    may be passed partly in a register (or registers), and partly on the
431    stack.  This includes doubles, long longs, and larger aggregates. 
432    As far as I know, there is no upper limit to the size of aggregates 
433    that will be passed in this way; in other words, the convention of 
434    passing a pointer to a large aggregate instead of a copy is not used.
435
436    An exceptional case exists for struct arguments (and possibly other
437    aggregates such as arrays) if the size is larger than 4 bytes but 
438    not a multiple of 4 bytes.  In this case the argument is never split 
439    between the registers and the stack, but instead is copied in its
440    entirety onto the stack, AND also copied into as many registers as 
441    there is room for.  In other words, space in registers permitting, 
442    two copies of the same argument are passed in.  As far as I can tell,
443    only the one on the stack is used, although that may be a function 
444    of the level of compiler optimization.  I suspect this is a compiler
445    bug.  Arguments of these odd sizes are left-justified within the 
446    word (as opposed to arguments smaller than 4 bytes, which are 
447    right-justified).
448  
449
450    If the function is to return an aggregate type such as a struct, it 
451    is either returned in the normal return value register R0 (if its 
452    size is no greater than one byte), or else the caller must allocate
453    space into which the callee will copy the return value (if the size
454    is greater than one byte).  In this case, a pointer to the return 
455    value location is passed into the callee in register R2, which does 
456    not displace any of the other arguments passed in via registers R4
457    to R7.   */
458
459 CORE_ADDR
460 sh_push_arguments (nargs, args, sp, struct_return, struct_addr)
461      int nargs;
462      value_ptr *args;
463      CORE_ADDR sp;
464      unsigned char struct_return;
465      CORE_ADDR struct_addr;
466 {
467   int stack_offset, stack_alloc;
468   int argreg;
469   int argnum;
470   struct type *type;
471   CORE_ADDR regval;
472   char *val;
473   char valbuf[4];
474   int len;
475   int odd_sized_struct;
476
477   /* first force sp to a 4-byte alignment */
478   sp = sp & ~3;
479
480   /* The "struct return pointer" pseudo-argument has its own dedicated 
481      register */
482   if (struct_return)
483       write_register (STRUCT_RETURN_REGNUM, struct_addr);
484
485   /* Now make sure there's space on the stack */
486   for (argnum = 0, stack_alloc = 0;
487        argnum < nargs; argnum++)
488     stack_alloc += ((TYPE_LENGTH(VALUE_TYPE(args[argnum])) + 3) & ~3);
489   sp -= stack_alloc;    /* make room on stack for args */
490
491
492   /* Now load as many as possible of the first arguments into
493      registers, and push the rest onto the stack.  There are 16 bytes
494      in four registers available.  Loop thru args from first to last.  */
495
496   argreg = ARG0_REGNUM;
497   for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
498     {
499       type = VALUE_TYPE (args[argnum]);
500       len  = TYPE_LENGTH (type);
501       memset(valbuf, 0, sizeof(valbuf));
502       if (len < 4)
503         { /* value gets right-justified in the register or stack word */
504           memcpy(valbuf + (4 - len), 
505                  (char *) VALUE_CONTENTS (args[argnum]), len);
506           val = valbuf;
507         }
508       else
509         val = (char *) VALUE_CONTENTS (args[argnum]);
510
511       if (len > 4 && (len & 3) != 0)
512         odd_sized_struct = 1;           /* such structs go entirely on stack */
513       else 
514         odd_sized_struct = 0;
515       while (len > 0)
516         {
517           if (argreg > ARGLAST_REGNUM || odd_sized_struct)
518             {                           /* must go on the stack */
519               write_memory (sp + stack_offset, val, 4);
520               stack_offset += 4;
521             }
522           /* NOTE WELL!!!!!  This is not an "else if" clause!!!
523              That's because some *&^%$ things get passed on the stack
524              AND in the registers!   */
525           if (argreg <= ARGLAST_REGNUM)
526             {                           /* there's room in a register */
527               regval = extract_address (val, REGISTER_RAW_SIZE(argreg));
528               write_register (argreg++, regval);
529             }
530           /* Store the value 4 bytes at a time.  This means that things
531              larger than 4 bytes may go partly in registers and partly
532              on the stack.  */
533           len -= REGISTER_RAW_SIZE(argreg);
534           val += REGISTER_RAW_SIZE(argreg);
535         }
536     }
537   return sp;
538 }
539
540 /* Function: push_return_address (pc)
541    Set up the return address for the inferior function call.
542    Needed for targets where we don't actually execute a JSR/BSR instruction */
543
544 CORE_ADDR
545 sh_push_return_address (pc, sp)
546      CORE_ADDR pc;
547      CORE_ADDR sp;
548 {
549   write_register (PR_REGNUM, CALL_DUMMY_ADDRESS ());
550   return sp;
551 }
552
553 /* Function: fix_call_dummy
554    Poke the callee function's address into the destination part of 
555    the CALL_DUMMY.  The address is actually stored in a data word 
556    following the actualy CALL_DUMMY instructions, which will load
557    it into a register using PC-relative addressing.  This function
558    expects the CALL_DUMMY to look like this:
559
560         mov.w @(2,PC), R8
561         jsr   @R8
562         nop
563         trap
564         <destination>
565   */
566
567 #if 0
568 void
569 sh_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p)
570      char *dummy;
571      CORE_ADDR pc;
572      CORE_ADDR fun;
573      int nargs;
574      value_ptr *args;
575      struct type *type;
576      int gcc_p;
577 {
578   *(unsigned long *) (dummy + 8) = fun;
579 }
580 #endif
581
582
583 /* Modify the actual processor type. */
584
585 int
586 sh_target_architecture_hook (ap)
587      const bfd_arch_info_type *ap;
588 {
589   int i, j;
590
591   if (ap->arch != bfd_arch_sh)
592     return 0;
593
594   for (i = 0; sh_processor_type_table[i].regnames != NULL; i++)
595     {
596       if (sh_processor_type_table[i].mach == ap->mach)
597         {
598           sh_register_names = sh_processor_type_table[i].regnames;
599           return 1;
600         }
601     }
602
603   fatal ("Architecture `%s' unreconized", ap->printable_name);
604 }
605
606 /* Print the registers in a form similar to the E7000 */
607
608 static void
609 sh_show_regs (args, from_tty)
610      char *args;
611      int from_tty;
612 {
613   int cpu;
614   if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
615     cpu = TARGET_ARCHITECTURE->mach;
616   else
617     cpu = 0;
618
619   /* FIXME: sh4 has more registers */
620   if (cpu == bfd_mach_sh4)
621     cpu = bfd_mach_sh3;
622
623   printf_filtered ("PC=%08x SR=%08x PR=%08x MACH=%08x MACHL=%08x\n",
624                    read_register (PC_REGNUM),
625                    read_register (SR_REGNUM),
626                    read_register (PR_REGNUM),
627                    read_register (MACH_REGNUM),
628                    read_register (MACL_REGNUM));
629
630   printf_filtered ("GBR=%08x VBR=%08x",
631                    read_register (GBR_REGNUM),
632                    read_register (VBR_REGNUM));
633   if (cpu == bfd_mach_sh3 || cpu == bfd_mach_sh3e)
634     {
635       printf_filtered (" SSR=%08x SPC=%08x",
636                        read_register (SSR_REGNUM),
637                        read_register (SPC_REGNUM));
638       if (cpu == bfd_mach_sh3e)
639         {
640           printf_filtered (" FPUL=%08x FPSCR=%08x",
641                            read_register (FPUL_REGNUM),
642                            read_register (FPSCR_REGNUM));
643         }
644     }
645
646   printf_filtered ("\nR0-R7  %08x %08x %08x %08x %08x %08x %08x %08x\n",
647                    read_register (0),
648                    read_register (1),
649                    read_register (2),
650                    read_register (3),
651                    read_register (4),
652                    read_register (5),
653                    read_register (6),
654                    read_register (7));
655   printf_filtered ("R8-R15 %08x %08x %08x %08x %08x %08x %08x %08x\n",
656                    read_register (8),
657                    read_register (9),
658                    read_register (10),
659                    read_register (11),
660                    read_register (12),
661                    read_register (13),
662                    read_register (14),
663                    read_register (15));
664   if (cpu == bfd_mach_sh3e)
665     {
666       printf_filtered ("FP0-FP7  %08x %08x %08x %08x %08x %08x %08x %08x\n",
667                        read_register (FP0_REGNUM + 0),
668                        read_register (FP0_REGNUM + 1),
669                        read_register (FP0_REGNUM + 2),
670                        read_register (FP0_REGNUM + 3),
671                        read_register (FP0_REGNUM + 4),
672                        read_register (FP0_REGNUM + 5),
673                        read_register (FP0_REGNUM + 6),
674                        read_register (FP0_REGNUM + 7));
675       printf_filtered ("FP8-FP15 %08x %08x %08x %08x %08x %08x %08x %08x\n",
676                        read_register (FP0_REGNUM + 8),
677                        read_register (FP0_REGNUM + 9),
678                        read_register (FP0_REGNUM + 10),
679                        read_register (FP0_REGNUM + 11),
680                        read_register (FP0_REGNUM + 12),
681                        read_register (FP0_REGNUM + 13),
682                        read_register (FP0_REGNUM + 14),
683                        read_register (FP0_REGNUM + 15));
684     }
685 }
686
687 /* Function: extract_return_value
688    Find a function's return value in the appropriate registers (in regbuf),
689    and copy it into valbuf.  */
690
691 void
692 sh_extract_return_value (type, regbuf, valbuf)
693      struct type *type;
694      void *regbuf;
695      void *valbuf;
696 {
697   int len = TYPE_LENGTH(type);
698
699   if (len <= 4)
700     memcpy (valbuf, ((char *) regbuf) + 4 - len, len);
701   else if (len <= 8)
702     memcpy (valbuf, ((char *) regbuf) + 8 - len, len);
703   else
704     error ("bad size for return value");
705 }
706
707 void
708 _initialize_sh_tdep ()
709 {
710   struct cmd_list_element *c;
711
712   tm_print_insn = gdb_print_insn_sh;
713
714   target_architecture_hook = sh_target_architecture_hook;
715
716   add_com ("regs", class_vars, sh_show_regs, "Print all registers");
717 }