2002-11-13 Andrew Cagney <cagney@redhat.com>
[deliverable/binutils-gdb.git] / gdb / sh-tdep.c
index 67ebbf3fc9bf2f8d5013557f567bf1ac7c9d7176..3d6c48845dfb3bdc66189939ddcbf32a06e0fd36 100644 (file)
@@ -884,7 +884,14 @@ sh_saved_pc_after_call (struct frame_info *frame)
 static int
 sh_use_struct_convention (int gcc_p, struct type *type)
 {
+#if 0
   return (TYPE_LENGTH (type) > 1);
+#else
+  int len = TYPE_LENGTH (type);
+  int nelem = TYPE_NFIELDS (type);
+  return ((len != 1 && len != 2 && len != 4 && len != 8) || nelem != 1) &&
+         (len != 8 || TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) != 4);
+#endif
 }
 
 static int
@@ -986,7 +993,7 @@ sh_find_callers_reg (struct frame_info *fi, int regnum)
     if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
       /* When the caller requests PR from the dummy frame, we return PC because
          that's where the previous routine appears to have done a call from. */
-      return generic_read_register_dummy (fi->pc, fi->frame, regnum);
+      return deprecated_read_register_dummy (fi->pc, fi->frame, regnum);
     else
       {
        FRAME_INIT_SAVED_REGS (fi);
@@ -1008,7 +1015,7 @@ sh64_get_saved_pr (struct frame_info *fi, int pr_regnum)
     if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
       /* When the caller requests PR from the dummy frame, we return PC because
          that's where the previous routine appears to have done a call from. */
-      return generic_read_register_dummy (fi->pc, fi->frame, pr_regnum);
+      return deprecated_read_register_dummy (fi->pc, fi->frame, pr_regnum);
     else
       {
        FRAME_INIT_SAVED_REGS (fi);
@@ -1722,11 +1729,11 @@ sh_init_extra_frame_info (int fromleaf, struct frame_info *fi)
     {
       /* We need to setup fi->frame here because run_stack_dummy gets it wrong
          by assuming it's always FP.  */
-      fi->frame = generic_read_register_dummy (fi->pc, fi->frame,
-                                              SP_REGNUM);
-      fi->extra_info->return_pc = generic_read_register_dummy (fi->pc,
-                                                              fi->frame,
-                                                              PC_REGNUM);
+      fi->frame = deprecated_read_register_dummy (fi->pc, fi->frame,
+                                                 SP_REGNUM);
+      fi->extra_info->return_pc = deprecated_read_register_dummy (fi->pc,
+                                                                 fi->frame,
+                                                                 PC_REGNUM);
       fi->extra_info->f_offset = -(CALL_DUMMY_LENGTH + 4);
       fi->extra_info->leaf_function = 0;
       return;
@@ -1754,10 +1761,10 @@ sh64_init_extra_frame_info (int fromleaf, struct frame_info *fi)
     {
       /* We need to setup fi->frame here because run_stack_dummy gets it wrong
          by assuming it's always FP.  */
-      fi->frame = generic_read_register_dummy (fi->pc, fi->frame,
-                                              SP_REGNUM);
+      fi->frame = deprecated_read_register_dummy (fi->pc, fi->frame,
+                                                 SP_REGNUM);
       fi->extra_info->return_pc = 
-       generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
+       deprecated_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
       fi->extra_info->f_offset = -(CALL_DUMMY_LENGTH + 4);
       fi->extra_info->leaf_function = 0;
       return;
@@ -1867,7 +1874,7 @@ sh64_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp,
   if (addrp)
     *addrp = REGISTER_BYTE (live_regnum);
   if (raw_buffer)
-    read_register_gen (live_regnum, raw_buffer);
+    deprecated_read_register_gen (live_regnum, raw_buffer);
 }
 
 /* Extract from an array REGBUF containing the (raw) register state
@@ -2045,8 +2052,11 @@ sh_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
       if (len < 4)
        {
          /* value gets right-justified in the register or stack word */
-         memcpy (valbuf + (4 - len),
-                 (char *) VALUE_CONTENTS (args[argnum]), len);
+         if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
+           memcpy (valbuf + (4 - len),
+                   (char *) VALUE_CONTENTS (args[argnum]), len);
+         else
+           memcpy (valbuf, (char *) VALUE_CONTENTS (args[argnum]), len);
          val = valbuf;
        }
       else
@@ -2213,7 +2223,8 @@ sh64_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
              if (float_arg_index <= tdep->FLOAT_ARGLAST_REGNUM)
                {
                  /* Goes in FR0...FR11 */
-                 write_register_gen (FP0_REGNUM + float_arg_index, val);
+                 deprecated_write_register_gen (FP0_REGNUM + float_arg_index,
+                                                val);
                  fp_args[float_arg_index] = 1;
                  /* Skip the corresponding general argument register. */
                  int_argreg ++;
@@ -2256,7 +2267,7 @@ sh64_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
                       call the gdbarch function to do register
                       writes, and that will properly know how to deal
                       with pseudoregs. */
-                   write_register_gen (regnum, val);
+                   deprecated_write_register_gen (regnum, val);
                    fp_args[double_arg_index] = 1;
                    fp_args[double_arg_index + 1] = 1;
                    /* Skip the corresponding general argument register. */
@@ -2457,22 +2468,25 @@ sh_default_store_return_value (struct type *type, char *valbuf)
     {
       /* Add leading zeros to the value. */
       memset (buf, 0, REGISTER_RAW_SIZE (R0_REGNUM));
-      memcpy (buf + REGISTER_RAW_SIZE (R0_REGNUM) - TYPE_LENGTH (type),
-             valbuf, TYPE_LENGTH (type));
-      write_register_bytes (REGISTER_BYTE (R0_REGNUM), buf, 
-                           REGISTER_RAW_SIZE (R0_REGNUM));
+      if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
+       memcpy (buf + REGISTER_RAW_SIZE (R0_REGNUM) - TYPE_LENGTH (type),
+               valbuf, TYPE_LENGTH (type));
+      else
+       memcpy (buf, valbuf, TYPE_LENGTH (type));
+      deprecated_write_register_bytes (REGISTER_BYTE (R0_REGNUM), buf, 
+                                      REGISTER_RAW_SIZE (R0_REGNUM));
     }
   else
-    write_register_bytes (REGISTER_BYTE (R0_REGNUM), valbuf, 
-                         TYPE_LENGTH (type));
+    deprecated_write_register_bytes (REGISTER_BYTE (R0_REGNUM), valbuf, 
+                                    TYPE_LENGTH (type));
 }
 
 static void
 sh3e_sh4_store_return_value (struct type *type, char *valbuf)
 {
   if (TYPE_CODE (type) == TYPE_CODE_FLT) 
-    write_register_bytes (REGISTER_BYTE (FP0_REGNUM), 
-                         valbuf, TYPE_LENGTH (type));
+    deprecated_write_register_bytes (REGISTER_BYTE (FP0_REGNUM), 
+                                    valbuf, TYPE_LENGTH (type));
   else
     sh_default_store_return_value (type, valbuf);
 }
@@ -2488,7 +2502,7 @@ sh64_store_return_value (struct type *type, char *valbuf)
       if (len == 4)
        {
          /* Return value stored in FP0_REGNUM */
-         write_register_gen (FP0_REGNUM, valbuf);
+         deprecated_write_register_gen (FP0_REGNUM, valbuf);
        }
       if (len == 8)
        {
@@ -2511,10 +2525,10 @@ sh64_store_return_value (struct type *type, char *valbuf)
            offset = REGISTER_RAW_SIZE (return_register) - len;
 
          memcpy (buf + offset, valbuf, len);
-         write_register_gen (return_register, buf);
+         deprecated_write_register_gen (return_register, buf);
        }
       else
-       write_register_gen (return_register, valbuf);
+       deprecated_write_register_gen (return_register, valbuf);
     }
 }
 
@@ -4199,7 +4213,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   struct gdbarch *gdbarch;
   struct gdbarch_tdep *tdep;
   gdbarch_register_name_ftype *sh_register_name;
-  gdbarch_store_return_value_ftype *sh_store_return_value;
+  gdbarch_deprecated_store_return_value_ftype *sh_store_return_value;
   gdbarch_register_virtual_type_ftype *sh_register_virtual_type;
   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
 
@@ -4276,10 +4290,10 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_pc_regnum (gdbarch, 16);
   set_gdbarch_register_size (gdbarch, 4);
   set_gdbarch_register_bytes (gdbarch, SH_DEFAULT_NUM_REGS * 4);
-  set_gdbarch_do_registers_info (gdbarch, sh_do_registers_info);
+  set_gdbarch_deprecated_do_registers_info (gdbarch, sh_do_registers_info);
   set_gdbarch_breakpoint_from_pc (gdbarch, sh_breakpoint_from_pc);
   set_gdbarch_frame_chain (gdbarch, sh_frame_chain);
-  set_gdbarch_get_saved_register (gdbarch, generic_get_saved_register);
+  set_gdbarch_get_saved_register (gdbarch, deprecated_generic_get_saved_register);
   set_gdbarch_init_extra_frame_info (gdbarch, sh_init_extra_frame_info);
   set_gdbarch_deprecated_extract_return_value (gdbarch, sh_extract_return_value);
   set_gdbarch_push_arguments (gdbarch, sh_push_arguments);
@@ -4503,7 +4517,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       set_gdbarch_pseudo_register_read (gdbarch, sh64_pseudo_register_read);
       set_gdbarch_pseudo_register_write (gdbarch, sh64_pseudo_register_write);
 
-      set_gdbarch_do_registers_info (gdbarch, sh64_do_registers_info);
+      set_gdbarch_deprecated_do_registers_info (gdbarch, sh64_do_registers_info);
       set_gdbarch_frame_init_saved_regs (gdbarch, sh64_nofp_frame_init_saved_regs);
       set_gdbarch_breakpoint_from_pc (gdbarch, sh_sh64_breakpoint_from_pc);
       set_gdbarch_init_extra_frame_info (gdbarch, sh64_init_extra_frame_info);
@@ -4544,7 +4558,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
   set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
-  set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);/*??should be 8?*/
+  set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
 
   set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
   set_gdbarch_call_dummy_length (gdbarch, 0);
@@ -4565,7 +4579,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
   set_gdbarch_push_return_address (gdbarch, sh_push_return_address);
 
-  set_gdbarch_store_return_value (gdbarch, sh_store_return_value);
+  set_gdbarch_deprecated_store_return_value (gdbarch, sh_store_return_value);
   set_gdbarch_skip_prologue (gdbarch, sh_skip_prologue);
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
   set_gdbarch_decr_pc_after_break (gdbarch, 0);
This page took 0.027223 seconds and 4 git commands to generate.