[Ada] Better handling of dynamic types in ada_value_primitive_packed_val
[deliverable/binutils-gdb.git] / gdb / sh-tdep.c
index 12116fd83b33fe66e381e6f2ae055fbea73c3144..46a1609c1045ae8ed2637174ce416cf4c228ce03 100644 (file)
@@ -1,6 +1,6 @@
 /* Target-dependent code for Renesas Super-H, for GDB.
 
-   Copyright (C) 1993-2005, 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 1993-2015 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -32,8 +32,6 @@
 #include "value.h"
 #include "dis-asm.h"
 #include "inferior.h"
-#include "gdb_string.h"
-#include "gdb_assert.h"
 #include "arch-utils.h"
 #include "floatformat.h"
 #include "regcache.h"
 #include "osabi.h"
 #include "reggroups.h"
 #include "regset.h"
+#include "objfiles.h"
 
 #include "sh-tdep.h"
+#include "sh64-tdep.h"
 
 #include "elf-bfd.h"
 #include "solib-svr4.h"
@@ -67,8 +67,6 @@ static const char *const sh_cc_enum[] = {
 
 static const char *sh_active_calling_convention = sh_cc_gcc;
 
-static void (*sh_show_regs) (struct frame_info *);
-
 #define SH_NUM_REGS 67
 
 struct sh_frame_cache
@@ -342,15 +340,16 @@ sh_sh4_register_name (struct gdbarch *gdbarch, int reg_nr)
     "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
     /* bank 1 51 - 58 */
     "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
+    /* 59 - 66 */
     "", "", "", "", "", "", "", "",
     /* pseudo bank register.  */
     "",
-    /* double precision (pseudo) 59 - 66 */
+    /* double precision (pseudo) 68 - 75 */
     "dr0", "dr2", "dr4", "dr6", "dr8", "dr10", "dr12", "dr14",
-    /* vectors (pseudo) 67 - 70 */
+    /* vectors (pseudo) 76 - 79 */
     "fv0", "fv4", "fv8", "fv12",
-    /* FIXME: missing XF 71 - 86 */
-    /* FIXME: missing XD 87 - 94 */
+    /* FIXME: missing XF */
+    /* FIXME: missing XD */
   };
   if (reg_nr < 0)
     return NULL;
@@ -379,12 +378,13 @@ sh_sh4_nofpu_register_name (struct gdbarch *gdbarch, int reg_nr)
     "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
     /* bank 1 51 - 58 */
     "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
+    /* 59 - 66 */
     "", "", "", "", "", "", "", "",
     /* pseudo bank register.  */
     "",
-    /* double precision (pseudo) 59 - 66 -- not for nofpu target */
+    /* double precision (pseudo) 68 - 75 -- not for nofpu target */
     "", "", "", "", "", "", "", "",
-    /* vectors (pseudo) 67 - 70 -- not for nofpu target */
+    /* vectors (pseudo) 76 - 79 -- not for nofpu target */
     "", "", "", "",
   };
   if (reg_nr < 0)
@@ -533,22 +533,18 @@ sh_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
 
 static CORE_ADDR
 sh_analyze_prologue (struct gdbarch *gdbarch,
-                    CORE_ADDR pc, CORE_ADDR current_pc,
+                    CORE_ADDR pc, CORE_ADDR limit_pc,
                     struct sh_frame_cache *cache, ULONGEST fpscr)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   ULONGEST inst;
-  CORE_ADDR opc;
   int offset;
   int sav_offset = 0;
   int r3_val = 0;
   int reg, sav_reg = -1;
 
-  if (pc >= current_pc)
-    return current_pc;
-
   cache->uses_fp = 0;
-  for (opc = pc + (2 * 28); pc < opc; pc += 2)
+  for (; pc < limit_pc; pc += 2)
     {
       inst = read_memory_unsigned_integer (pc, 2, byte_order);
       /* See where the registers will be saved to.  */
@@ -613,7 +609,8 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
                }
            }
        }
-      else if (IS_MOVI20 (inst))
+      else if (IS_MOVI20 (inst)
+              && (pc + 2 < limit_pc))
         {
          if (sav_reg < 0)
            {
@@ -655,14 +652,17 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
        }
       else if (IS_MOV_SP_FP (inst))
        {
+         pc += 2;
+         /* Don't go any further than six more instructions.  */
+         limit_pc = min (limit_pc, pc + (2 * 6));
+
          cache->uses_fp = 1;
          /* At this point, only allow argument register moves to other
             registers or argument register moves to @(X,fp) which are
             moving the register arguments onto the stack area allocated
             by a former add somenumber to SP call.  Don't allow moving
             to an fp indirect address above fp + cache->sp_offset.  */
-         pc += 2;
-         for (opc = pc + 12; pc < opc; pc += 2)
+         for (; pc < limit_pc; pc += 2)
            {
              inst = read_memory_integer (pc, 2, byte_order);
              if (IS_MOV_ARG_TO_IND_R14 (inst))
@@ -694,9 +694,12 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
             jsr, which will be very confusing.  Most likely the next
             instruction is going to be IS_MOV_SP_FP in the delay slot.  If
             so, note that before returning the current pc.  */
-         inst = read_memory_integer (pc + 2, 2, byte_order);
-         if (IS_MOV_SP_FP (inst))
-           cache->uses_fp = 1;
+         if (pc + 2 < limit_pc)
+           {
+             inst = read_memory_integer (pc + 2, 2, byte_order);
+             if (IS_MOV_SP_FP (inst))
+               cache->uses_fp = 1;
+           }
          break;
        }
 #if 0          /* This used to just stop when it found an instruction
@@ -712,55 +715,42 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
 }
 
 /* Skip any prologue before the guts of a function.  */
-
-/* Skip the prologue using the debug information.  If this fails we'll
-   fall back on the 'guess' method below.  */
-static CORE_ADDR
-after_prologue (CORE_ADDR pc)
-{
-  struct symtab_and_line sal;
-  CORE_ADDR func_addr, func_end;
-
-  /* If we can not find the symbol in the partial symbol table, then
-     there is no hope we can determine the function's start address
-     with this code.  */
-  if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
-    return 0;
-
-  /* Get the line associated with FUNC_ADDR.  */
-  sal = find_pc_line (func_addr, 0);
-
-  /* There are only two cases to consider.  First, the end of the source line
-     is within the function bounds.  In that case we return the end of the
-     source line.  Second is the end of the source line extends beyond the
-     bounds of the current function.  We need to use the slow code to
-     examine instructions in that case.  */
-  if (sal.end < func_end)
-    return sal.end;
-  else
-    return 0;
-}
-
 static CORE_ADDR
-sh_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
+sh_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  CORE_ADDR pc;
+  CORE_ADDR post_prologue_pc, func_addr, func_end_addr, limit_pc;
   struct sh_frame_cache cache;
 
   /* See if we can determine the end of the prologue via the symbol table.
      If so, then return either PC, or the PC after the prologue, whichever
      is greater.  */
-  pc = after_prologue (start_pc);
+  if (find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr))
+    {
+      post_prologue_pc = skip_prologue_using_sal (gdbarch, func_addr);
+      if (post_prologue_pc != 0)
+        return max (pc, post_prologue_pc);
+    }
+
+  /* Can't determine prologue from the symbol table, need to examine
+     instructions.  */
+
+  /* Find an upper limit on the function prologue using the debug
+     information.  If the debug information could not be used to provide
+     that bound, then use an arbitrary large number as the upper bound.  */
+  limit_pc = skip_prologue_using_sal (gdbarch, pc);
+  if (limit_pc == 0)
+    /* Don't go any further than 28 instructions.  */
+    limit_pc = pc + (2 * 28);
 
-  /* If after_prologue returned a useful address, then use it.  Else
-     fall back on the instruction skipping code.  */
-  if (pc)
-    return max (pc, start_pc);
+  /* Do not allow limit_pc to be past the function end, if we know
+     where that end is...  */
+  if (func_end_addr != 0)
+    limit_pc = min (limit_pc, func_end_addr);
 
   cache.sp_offset = -4;
-  pc = sh_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache, 0);
-  if (!cache.uses_fp)
-    return start_pc;
+  post_prologue_pc = sh_analyze_prologue (gdbarch, pc, limit_pc, &cache, 0);
+  if (cache.uses_fp)
+    pc = post_prologue_pc;
 
   return pc;
 }
@@ -916,22 +906,22 @@ sh_frame_align (struct gdbarch *ignore, CORE_ADDR sp)
    to R7.  */
 
 /* Helper function to justify value in register according to endianess.  */
-static char *
+static const gdb_byte *
 sh_justify_value_in_reg (struct gdbarch *gdbarch, struct value *val, int len)
 {
-  static char valbuf[4];
+  static gdb_byte valbuf[4];
 
   memset (valbuf, 0, sizeof (valbuf));
   if (len < 4)
     {
       /* value gets right-justified in the register or stack word.  */
       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
-       memcpy (valbuf + (4 - len), (char *) value_contents (val), len);
+       memcpy (valbuf + (4 - len), value_contents (val), len);
       else
-       memcpy (valbuf, (char *) value_contents (val), len);
+       memcpy (valbuf, value_contents (val), len);
       return valbuf;
     }
-  return (char *) value_contents (val);
+  return value_contents (val);
 }
 
 /* Helper function to eval number of bytes to allocate on stack.  */
@@ -1042,8 +1032,6 @@ sh_next_flt_argreg (struct gdbarch *gdbarch, int len, struct type *func_type)
 static int
 sh_treat_as_flt_p (struct type *type)
 {
-  int len = TYPE_LENGTH (type);
-
   /* Ordinary float types are obviously treated as float.  */
   if (TYPE_CODE (type) == TYPE_CODE_FLT)
     return 1;
@@ -1078,7 +1066,7 @@ sh_push_dummy_call_fpu (struct gdbarch *gdbarch,
   struct type *func_type = value_type (function);
   struct type *type;
   CORE_ADDR regval;
-  char *val;
+  const gdb_byte *val;
   int len, reg_size = 0;
   int pass_on_stack = 0;
   int treat_as_flt;
@@ -1219,7 +1207,7 @@ sh_push_dummy_call_nofpu (struct gdbarch *gdbarch,
   struct type *func_type = value_type (function);
   struct type *type;
   CORE_ADDR regval;
-  char *val;
+  const gdb_byte *val;
   int len, reg_size = 0;
   int pass_on_stack = 0;
   int last_reg_arg = INT_MAX;
@@ -1312,7 +1300,7 @@ sh_push_dummy_call_nofpu (struct gdbarch *gdbarch,
    TYPE, and copy that, in virtual format, into VALBUF.  */
 static void
 sh_extract_return_value_nofpu (struct type *type, struct regcache *regcache,
-                              void *valbuf)
+                              gdb_byte *valbuf)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -1331,7 +1319,7 @@ sh_extract_return_value_nofpu (struct type *type, struct regcache *regcache,
     {
       int i, regnum = R0_REGNUM;
       for (i = 0; i < len; i += 4)
-       regcache_raw_read (regcache, regnum++, (char *) valbuf + i);
+       regcache_raw_read (regcache, regnum++, valbuf + i);
     }
   else
     error (_("bad size for return value"));
@@ -1339,7 +1327,7 @@ sh_extract_return_value_nofpu (struct type *type, struct regcache *regcache,
 
 static void
 sh_extract_return_value_fpu (struct type *type, struct regcache *regcache,
-                            void *valbuf)
+                            gdb_byte *valbuf)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   if (sh_treat_as_flt_p (type))
@@ -1349,9 +1337,9 @@ sh_extract_return_value_fpu (struct type *type, struct regcache *regcache,
       for (i = 0; i < len; i += 4)
        if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
          regcache_raw_read (regcache, regnum++,
-                            (char *) valbuf + len - 4 - i);
+                            valbuf + len - 4 - i);
        else
-         regcache_raw_read (regcache, regnum++, (char *) valbuf + i);
+         regcache_raw_read (regcache, regnum++, valbuf + i);
     }
   else
     sh_extract_return_value_nofpu (type, regcache, valbuf);
@@ -1365,7 +1353,7 @@ sh_extract_return_value_fpu (struct type *type, struct regcache *regcache,
    the result is stored in r0, left-justified.  */
 static void
 sh_store_return_value_nofpu (struct type *type, struct regcache *regcache,
-                            const void *valbuf)
+                            const gdb_byte *valbuf)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -1381,13 +1369,13 @@ sh_store_return_value_nofpu (struct type *type, struct regcache *regcache,
     {
       int i, regnum = R0_REGNUM;
       for (i = 0; i < len; i += 4)
-       regcache_raw_write (regcache, regnum++, (char *) valbuf + i);
+       regcache_raw_write (regcache, regnum++, valbuf + i);
     }
 }
 
 static void
 sh_store_return_value_fpu (struct type *type, struct regcache *regcache,
-                          const void *valbuf)
+                          const gdb_byte *valbuf)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   if (sh_treat_as_flt_p (type))
@@ -1397,19 +1385,21 @@ sh_store_return_value_fpu (struct type *type, struct regcache *regcache,
       for (i = 0; i < len; i += 4)
        if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
          regcache_raw_write (regcache, regnum++,
-                             (char *) valbuf + len - 4 - i);
+                             valbuf + len - 4 - i);
        else
-         regcache_raw_write (regcache, regnum++, (char *) valbuf + i);
+         regcache_raw_write (regcache, regnum++, valbuf + i);
     }
   else
     sh_store_return_value_nofpu (type, regcache, valbuf);
 }
 
 static enum return_value_convention
-sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *func_type,
+sh_return_value_nofpu (struct gdbarch *gdbarch, struct value *function,
                       struct type *type, struct regcache *regcache,
                       gdb_byte *readbuf, const gdb_byte *writebuf)
 {
+  struct type *func_type = function ? value_type (function) : NULL;
+
   if (sh_use_struct_convention_nofpu (
        sh_is_renesas_calling_convention (func_type), type))
     return RETURN_VALUE_STRUCT_CONVENTION;
@@ -1421,10 +1411,12 @@ sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *func_type,
 }
 
 static enum return_value_convention
-sh_return_value_fpu (struct gdbarch *gdbarch, struct type *func_type,
+sh_return_value_fpu (struct gdbarch *gdbarch, struct value *function,
                     struct type *type, struct regcache *regcache,
                     gdb_byte *readbuf, const gdb_byte *writebuf)
 {
+  struct type *func_type = function ? value_type (function) : NULL;
+
   if (sh_use_struct_convention (
        sh_is_renesas_calling_convention (func_type), type))
     return RETURN_VALUE_STRUCT_CONVENTION;
@@ -1435,714 +1427,6 @@ sh_return_value_fpu (struct gdbarch *gdbarch, struct type *func_type,
   return RETURN_VALUE_REGISTER_CONVENTION;
 }
 
-/* Print the registers in a form similar to the E7000.  */
-
-static void
-sh_generic_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum
-                                          (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-}
-
-static void
-sh3_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum
-                                         (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-}
-
-static void
-sh2e_show_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum (gdbarch)), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("FP0-FP7  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 0),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 1),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 2),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 3),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 4),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 5),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 6),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 7));
-  printf_filtered
-    ("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 8),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 9),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 10),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 11),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 12),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 13),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 14),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 15));
-}
-
-static void
-sh2a_show_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
-
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum (gdbarch)), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx      TBR %08lx     MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, TBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    (pr ? "DR0-DR6  %08lx%08lx  %08lx%08lx  %08lx%08lx  %08lx%08lx\n"
-       : "FP0-FP7  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 0),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 1),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 2),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 3),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 4),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 5),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 6),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 7));
-  printf_filtered
-    (pr ? "DR8-DR14 %08lx%08lx  %08lx%08lx  %08lx%08lx  %08lx%08lx\n"
-       : "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 8),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 9),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 10),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 11),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 12),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 13),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 14),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 15));
-  printf_filtered
-    ("BANK=%-3d\n", (int) get_frame_register_unsigned (frame, BANK_REGNUM));
-  printf_filtered
-    ("R0b-R7b  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 0),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 1),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 2),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 3),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 4),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 5),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 6),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 7));
-  printf_filtered
-    ("R8b-R14b %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 8),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 9),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 10),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 11),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 12),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 13),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 14));
-  printf_filtered
-    ("MACHb=%08lx IVNb=%08lx PRb=%08lx GBRb=%08lx MACLb=%08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 15),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 16),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 17),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 18),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 19));
-}
-
-static void
-sh2a_nofpu_show_regs (struct frame_info *frame)
-{
-  int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
-
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum
-                                         (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx      TBR %08lx     MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, TBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("BANK=%-3d\n", (int) get_frame_register_unsigned (frame, BANK_REGNUM));
-  printf_filtered
-    ("R0b-R7b  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 0),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 1),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 2),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 3),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 4),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 5),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 6),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 7));
-  printf_filtered
-    ("R8b-R14b %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 8),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 9),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 10),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 11),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 12),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 13),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 14));
-  printf_filtered
-    ("MACHb=%08lx IVNb=%08lx PRb=%08lx GBRb=%08lx MACLb=%08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 15),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 16),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 17),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 18),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 19));
-}
-
-static void
-sh3e_show_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum (gdbarch)), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("FP0-FP7  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 0),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 1),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 2),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 3),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 4),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 5),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 6),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 7));
-  printf_filtered
-    ("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 8),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 9),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 10),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 11),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 12),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 13),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 14),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 15));
-}
-
-static void
-sh3_dsp_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum
-                                         (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx      DSR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, DSR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
-     (long) get_frame_register_unsigned (frame, A0G_REGNUM) & 0xff,
-     (long) get_frame_register_unsigned (frame, A0_REGNUM),
-     (long) get_frame_register_unsigned (frame, M0_REGNUM),
-     (long) get_frame_register_unsigned (frame, X0_REGNUM),
-     (long) get_frame_register_unsigned (frame, Y0_REGNUM),
-     (long) get_frame_register_unsigned (frame, RS_REGNUM),
-     (long) get_frame_register_unsigned (frame, MOD_REGNUM));
-  printf_filtered
-    ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
-     (long) get_frame_register_unsigned (frame, A1G_REGNUM) & 0xff,
-     (long) get_frame_register_unsigned (frame, A1_REGNUM),
-     (long) get_frame_register_unsigned (frame, M1_REGNUM),
-     (long) get_frame_register_unsigned (frame, X1_REGNUM),
-     (long) get_frame_register_unsigned (frame, Y1_REGNUM),
-     (long) get_frame_register_unsigned (frame, RE_REGNUM));
-}
-
-static void
-sh4_show_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
-
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum (gdbarch)), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    (pr ? "DR0-DR6  %08lx%08lx  %08lx%08lx  %08lx%08lx  %08lx%08lx\n"
-       : "FP0-FP7  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 0),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 1),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 2),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 3),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 4),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 5),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 6),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 7));
-  printf_filtered
-    (pr ? "DR8-DR14 %08lx%08lx  %08lx%08lx  %08lx%08lx  %08lx%08lx\n"
-       : "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 8),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 9),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 10),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 11),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 12),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 13),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 14),
-     (long) get_frame_register_unsigned
-             (frame, gdbarch_fp0_regnum (gdbarch) + 15));
-}
-
-static void
-sh4_nofpu_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum
-                                         (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-}
-
-static void
-sh_dsp_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-                                       gdbarch_pc_regnum
-                                         (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx      DSR %08lx     MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, DSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
-     (long) get_frame_register_unsigned (frame, A0G_REGNUM) & 0xff,
-     (long) get_frame_register_unsigned (frame, A0_REGNUM),
-     (long) get_frame_register_unsigned (frame, M0_REGNUM),
-     (long) get_frame_register_unsigned (frame, X0_REGNUM),
-     (long) get_frame_register_unsigned (frame, Y0_REGNUM),
-     (long) get_frame_register_unsigned (frame, RS_REGNUM),
-     (long) get_frame_register_unsigned (frame, MOD_REGNUM));
-  printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
-     (long) get_frame_register_unsigned (frame, A1G_REGNUM) & 0xff,
-     (long) get_frame_register_unsigned (frame, A1_REGNUM),
-     (long) get_frame_register_unsigned (frame, M1_REGNUM),
-     (long) get_frame_register_unsigned (frame, X1_REGNUM),
-     (long) get_frame_register_unsigned (frame, Y1_REGNUM),
-     (long) get_frame_register_unsigned (frame, RE_REGNUM));
-}
-
-static void
-sh_show_regs_command (char *args, int from_tty)
-{
-  if (sh_show_regs)
-    (*sh_show_regs) (get_current_frame ());
-}
-
 static struct type *
 sh_sh2a_register_type (struct gdbarch *gdbarch, int reg_nr)
 {
@@ -2237,16 +1521,16 @@ sh_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
 
 /* On the sh4, the DRi pseudo registers are problematic if the target
    is little endian.  When the user writes one of those registers, for
-   instance with 'ser var $dr0=1', we want the double to be stored
+   instance with 'set var $dr0=1', we want the double to be stored
    like this: 
-   fr0 = 0x00 0x00 0x00 0x00 0x00 0xf0 0x3f 
-   fr1 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
+   fr0 = 0x00 0x00 0xf0 0x3f 
+   fr1 = 0x00 0x00 0x00 0x00 
 
    This corresponds to little endian byte order & big endian word
    order.  However if we let gdb write the register w/o conversion, it
    will write fr0 and fr1 this way:
-   fr0 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00
-   fr1 = 0x00 0x00 0x00 0x00 0x00 0xf0 0x3f
+   fr0 = 0x00 0x00 0x00 0x00
+   fr1 = 0x00 0x00 0xf0 0x3f
    because it will consider fr0 and fr1 as a single LE stretch of memory.
    
    To achieve what we want we must force gdb to store things in
@@ -2255,16 +1539,23 @@ sh_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
 
    In case the target is big endian, there is no problem, the
    raw bytes will look like:
-   fr0 = 0x3f 0xf0 0x00 0x00 0x00 0x00 0x00
-   fr1 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
+   fr0 = 0x3f 0xf0 0x00 0x00
+   fr1 = 0x00 0x00 0x00 0x00
 
    The other pseudo registers (the FVs) also don't pose a problem
    because they are stored as 4 individual FP elements.  */
 
 static void
-sh_register_convert_to_virtual (int regnum, struct type *type,
-                               char *from, char *to)
+sh_register_convert_to_virtual (struct gdbarch *gdbarch, int regnum,
+                               struct type *type, gdb_byte *from, gdb_byte *to)
 {
+  if (gdbarch_byte_order (gdbarch) != BFD_ENDIAN_LITTLE)
+    {
+      /* It is a no-op.  */
+      memcpy (to, from, register_size (gdbarch, regnum));
+      return;
+    }
+
   if (regnum >= DR0_REGNUM && regnum <= DR_LAST_REGNUM)
     {
       DOUBLEST val;
@@ -2278,9 +1569,16 @@ sh_register_convert_to_virtual (int regnum, struct type *type,
 }
 
 static void
-sh_register_convert_to_raw (struct type *type, int regnum,
-                           const void *from, void *to)
+sh_register_convert_to_raw (struct gdbarch *gdbarch, struct type *type,
+                           int regnum, const gdb_byte *from, gdb_byte *to)
 {
+  if (gdbarch_byte_order (gdbarch) != BFD_ENDIAN_LITTLE)
+    {
+      /* It is a no-op.  */
+      memcpy (to, from, register_size (gdbarch, regnum));
+      return;
+    }
+
   if (regnum >= DR0_REGNUM && regnum <= DR_LAST_REGNUM)
     {
       DOUBLEST val = extract_typed_floating (from, type);
@@ -2343,7 +1641,7 @@ sh_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
                         int reg_nr, gdb_byte *buffer)
 {
   int base_regnum;
-  char temp_buffer[MAX_REGISTER_SIZE];
+  gdb_byte temp_buffer[MAX_REGISTER_SIZE];
   enum register_status status;
 
   if (reg_nr == PSEUDO_BANK_REGNUM)
@@ -2359,7 +1657,7 @@ sh_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
       if (status == REG_VALID)
        {
          /* We must pay attention to the endiannes. */
-         sh_register_convert_to_virtual (reg_nr,
+         sh_register_convert_to_virtual (gdbarch, reg_nr,
                                          register_type (gdbarch, reg_nr),
                                          temp_buffer, buffer);
        }
@@ -2382,7 +1680,7 @@ sh_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
                          int reg_nr, const gdb_byte *buffer)
 {
   int base_regnum, portion;
-  char temp_buffer[MAX_REGISTER_SIZE];
+  gdb_byte temp_buffer[MAX_REGISTER_SIZE];
 
   if (reg_nr == PSEUDO_BANK_REGNUM)
     {
@@ -2401,7 +1699,7 @@ sh_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
       base_regnum = dr_reg_base_num (gdbarch, reg_nr);
 
       /* We must pay attention to the endiannes.  */
-      sh_register_convert_to_raw (register_type (gdbarch, reg_nr),
+      sh_register_convert_to_raw (gdbarch, register_type (gdbarch, reg_nr),
                                  reg_nr, buffer, temp_buffer);
 
       /* Write the real regs for which this one is an alias.  */
@@ -2418,7 +1716,7 @@ sh_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
       /* Write the real regs for which this one is an alias.  */
       for (portion = 0; portion < 4; portion++)
        regcache_raw_write (regcache, base_regnum + portion,
-                           ((char *) buffer
+                           (buffer
                             + register_size (gdbarch,
                                              base_regnum) * portion));
     }
@@ -2559,7 +1857,7 @@ sh_frame_cache (struct frame_info *this_frame, void **this_cache)
   int i;
 
   if (*this_cache)
-    return *this_cache;
+    return (struct sh_frame_cache *) *this_cache;
 
   cache = sh_alloc_frame_cache ();
   *this_cache = cache;
@@ -2578,7 +1876,16 @@ sh_frame_cache (struct frame_info *this_frame, void **this_cache)
   if (cache->pc != 0)
     {
       ULONGEST fpscr;
-      fpscr = get_frame_register_unsigned (this_frame, FPSCR_REGNUM);
+
+      /* Check for the existence of the FPSCR register.         If it exists,
+        fetch its value for use in prologue analysis.  Passing a zero
+        value is the best choice for architecture variants upon which
+        there's no FPSCR register.  */
+      if (gdbarch_register_reggroup_p (gdbarch, FPSCR_REGNUM, all_reggroup))
+       fpscr = get_frame_register_unsigned (this_frame, FPSCR_REGNUM);
+      else
+       fpscr = 0;
+
       sh_analyze_prologue (gdbarch, cache->pc, current_pc, cache, fpscr);
     }
 
@@ -2692,11 +1999,65 @@ static const struct frame_base sh_frame_base = {
   sh_frame_base_address
 };
 
-/* The epilogue is defined here as the area at the end of a function,
+static struct sh_frame_cache *
+sh_make_stub_cache (struct frame_info *this_frame)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  struct sh_frame_cache *cache;
+
+  cache = sh_alloc_frame_cache ();
+
+  cache->saved_sp
+    = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
+
+  return cache;
+}
+
+static void
+sh_stub_this_id (struct frame_info *this_frame, void **this_cache,
+                 struct frame_id *this_id)
+{
+  struct sh_frame_cache *cache;
+
+  if (*this_cache == NULL)
+    *this_cache = sh_make_stub_cache (this_frame);
+  cache = (struct sh_frame_cache *) *this_cache;
+
+  *this_id = frame_id_build (cache->saved_sp, get_frame_pc (this_frame));
+}
+
+static int
+sh_stub_unwind_sniffer (const struct frame_unwind *self,
+                        struct frame_info *this_frame,
+                        void **this_prologue_cache)
+{
+  CORE_ADDR addr_in_block;
+
+  addr_in_block = get_frame_address_in_block (this_frame);
+  if (in_plt_section (addr_in_block))
+    return 1;
+
+  return 0;
+}
+
+static const struct frame_unwind sh_stub_unwind =
+{
+  NORMAL_FRAME,
+  default_frame_unwind_stop_reason,
+  sh_stub_this_id,
+  sh_frame_prev_register,
+  NULL,
+  sh_stub_unwind_sniffer
+};
+
+/* Implement the stack_frame_destroyed_p gdbarch method.
+
+   The epilogue is defined here as the area at the end of a function,
    either on the `ret' instruction itself or after an instruction which
    destroys the function's stack frame.  */
+
 static int
-sh_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
+sh_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR func_addr = 0, func_end = 0;
@@ -2835,34 +2196,45 @@ sh_corefile_collect_regset (const struct regset *regset,
 /* The following two regsets have the same contents, so it is tempting to
    unify them, but they are distiguished by their address, so don't.  */
 
-struct regset sh_corefile_gregset =
+const struct regset sh_corefile_gregset =
 {
   NULL,
   sh_corefile_supply_regset,
   sh_corefile_collect_regset
 };
 
-static struct regset sh_corefile_fpregset =
+static const struct regset sh_corefile_fpregset =
 {
   NULL,
   sh_corefile_supply_regset,
   sh_corefile_collect_regset
 };
 
-static const struct regset *
-sh_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name,
-                            size_t sect_size)
+static void
+sh_iterate_over_regset_sections (struct gdbarch *gdbarch,
+                                iterate_over_regset_sections_cb *cb,
+                                void *cb_data,
+                                const struct regcache *regcache)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
-  if (tdep->core_gregmap && strcmp (sect_name, ".reg") == 0)
-    return &sh_corefile_gregset;
+  if (tdep->core_gregmap != NULL)
+    cb (".reg", tdep->sizeof_gregset, &sh_corefile_gregset, NULL, cb_data);
+
+  if (tdep->core_fpregmap != NULL)
+    cb (".reg2", tdep->sizeof_fpregset, &sh_corefile_fpregset, NULL, cb_data);
+}
 
-  if (tdep->core_fpregmap && strcmp (sect_name, ".reg2") == 0)
-    return &sh_corefile_fpregset;
+/* This is the implementation of gdbarch method
+   return_in_first_hidden_param_p.  */
 
-  return NULL;
+static int
+sh_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
+                                    struct type *type)
+{
+  return 0;
 }
+
 \f
 
 static struct gdbarch *
@@ -2871,56 +2243,9 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   struct gdbarch *gdbarch;
   struct gdbarch_tdep *tdep;
 
-  sh_show_regs = sh_generic_show_regs;
-  switch (info.bfd_arch_info->mach)
-    {
-    case bfd_mach_sh2e:
-      sh_show_regs = sh2e_show_regs;
-      break;
-    case bfd_mach_sh2a:
-      sh_show_regs = sh2a_show_regs;
-      break;
-    case bfd_mach_sh2a_nofpu:
-      sh_show_regs = sh2a_nofpu_show_regs;
-      break;
-    case bfd_mach_sh_dsp:
-      sh_show_regs = sh_dsp_show_regs;
-      break;
-
-    case bfd_mach_sh3:
-    case bfd_mach_sh3_nommu:
-    case bfd_mach_sh2a_nofpu_or_sh3_nommu:
-      sh_show_regs = sh3_show_regs;
-      break;
-
-    case bfd_mach_sh3e:
-    case bfd_mach_sh2a_or_sh3e:
-      sh_show_regs = sh3e_show_regs;
-      break;
-
-    case bfd_mach_sh3_dsp:
-    case bfd_mach_sh4al_dsp:
-      sh_show_regs = sh3_dsp_show_regs;
-      break;
-
-    case bfd_mach_sh4:
-    case bfd_mach_sh4a:
-    case bfd_mach_sh2a_or_sh4:
-      sh_show_regs = sh4_show_regs;
-      break;
-
-    case bfd_mach_sh4_nofpu:
-    case bfd_mach_sh4_nommu_nofpu:
-    case bfd_mach_sh4a_nofpu:
-    case bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu:
-      sh_show_regs = sh4_nofpu_show_regs;
-      break;
-
-    case bfd_mach_sh5:
-      sh_show_regs = sh64_show_regs;
-      /* SH5 is handled entirely in sh64-tdep.c.  */
-      return sh64_gdbarch_init (info, arches);
-    }
+  /* SH5 is handled entirely in sh64-tdep.c.  */
+  if (info.bfd_arch_info->mach == bfd_mach_sh5)
+    return sh64_gdbarch_init (info, arches);
 
   /* If there is already a candidate, use it.  */
   arches = gdbarch_list_lookup_by_info (arches, &info);
@@ -2929,7 +2254,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   /* None found, create a new architecture from the information
      provided.  */
-  tdep = XZALLOC (struct gdbarch_tdep);
+  tdep = XCNEW (struct gdbarch_tdep);
   gdbarch = gdbarch_alloc (&info, tdep);
 
   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
@@ -2961,6 +2286,8 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
 
   set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_nofpu);
+  set_gdbarch_return_in_first_hidden_param_p (gdbarch,
+                                             sh_return_in_first_hidden_param_p);
 
   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
 
@@ -2970,11 +2297,12 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_dummy_id (gdbarch, sh_dummy_id);
   frame_base_set_default (gdbarch, &sh_frame_base);
 
-  set_gdbarch_in_function_epilogue_p (gdbarch, sh_in_function_epilogue_p);
+  set_gdbarch_stack_frame_destroyed_p (gdbarch, sh_stack_frame_destroyed_p);
 
   dwarf2_frame_set_init_reg (gdbarch, sh_dwarf2_frame_init_reg);
 
-  set_gdbarch_regset_from_core_section (gdbarch, sh_regset_from_core_section);
+  set_gdbarch_iterate_over_regset_sections
+    (gdbarch, sh_iterate_over_regset_sections);
 
   switch (info.bfd_arch_info->mach)
     {
@@ -2989,6 +2317,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
     case bfd_mach_sh2e:
       /* doubles on sh2e and sh3e are actually 4 byte.  */
       set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
+      set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
 
       set_gdbarch_register_name (gdbarch, sh_sh2e_register_name);
       set_gdbarch_register_type (gdbarch, sh_sh3e_register_type);
@@ -3034,6 +2363,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
     case bfd_mach_sh2a_or_sh3e:
       /* doubles on sh2e and sh3e are actually 4 byte.  */
       set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
+      set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
 
       set_gdbarch_register_name (gdbarch, sh_sh3e_register_name);
       set_gdbarch_register_type (gdbarch, sh_sh3e_register_type);
@@ -3081,6 +2411,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   gdbarch_init_osabi (info, gdbarch);
 
   dwarf2_append_unwinders (gdbarch);
+  frame_unwind_append_unwinder (gdbarch, &sh_stub_unwind);
   frame_unwind_append_unwinder (gdbarch, &sh_frame_unwind);
 
   return gdbarch;
@@ -3105,12 +2436,8 @@ extern initialize_file_ftype _initialize_sh_tdep;  /* -Wmissing-prototypes */
 void
 _initialize_sh_tdep (void)
 {
-  struct cmd_list_element *c;
-
   gdbarch_register (bfd_arch_sh, sh_gdbarch_init, NULL);
 
-  add_com ("regs", class_vars, sh_show_regs_command, _("Print all registers"));
-  
   add_prefix_cmd ("sh", no_class, set_sh_command, "SH specific commands.",
                   &setshcmdlist, "set sh ", 0, &setlist);
   add_prefix_cmd ("sh", no_class, show_sh_command, "SH specific commands.",
This page took 0.044594 seconds and 4 git commands to generate.