2001-01-02 Michael Snyder <msnyder@cleaver.cygnus.com>
authorMichael Snyder <msnyder@vmware.com>
Tue, 2 Jan 2001 23:51:35 +0000 (23:51 +0000)
committerMichael Snyder <msnyder@vmware.com>
Tue, 2 Jan 2001 23:51:35 +0000 (23:51 +0000)
        * sh-tdep.c (sh_extract_return_value):  Allow for small return type.
        (sh_sh4_extract_return_value): Call sh_extract_return_value for

gdb/ChangeLog
gdb/sh-tdep.c

index 517e743a82d9fcaf9e44ff9ce214f40e2e999760..6d6ab823126afb3caf74d81ababb97888436b17d 100644 (file)
@@ -1,5 +1,8 @@
 2001-01-02  Michael Snyder  <msnyder@cleaver.cygnus.com>
 
+       * sh-tdep.c (sh_extract_return_value):  Allow for small return type.
+       (sh_sh4_extract_return_value): Call sh_extract_return_value for
+       non-float types.
        * sparc-tdep.c (sparc_frame_chain): Fix typo in comment.
        Update copyright notice.
        
index b3a8f9ffc2e4851740a5b3b75e24a24c21f9603f..74783bf2a607c3dc5cb251323f7d386aae2c9a60 100644 (file)
@@ -1060,8 +1060,20 @@ sh_extract_return_value (struct type *type, char *regbuf, char *valbuf)
 static void
 sh_default_store_return_value (struct type *type, char *valbuf)
 {
-  write_register_bytes (REGISTER_BYTE (0), 
-                       valbuf, TYPE_LENGTH (type));
+  char buf[32];        /* more than enough... */
+
+  if (TYPE_LENGTH (type) < REGISTER_RAW_SIZE (R0_REGNUM))
+    {
+      /* 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));
+    }
+  else
+    write_register_bytes (REGISTER_BYTE (R0_REGNUM), valbuf, 
+                         TYPE_LENGTH (type));
 }
 
 static void
@@ -1071,8 +1083,7 @@ sh3e_sh4_store_return_value (struct type *type, char *valbuf)
     write_register_bytes (REGISTER_BYTE (FP0_REGNUM), 
                          valbuf, TYPE_LENGTH (type));
   else
-    write_register_bytes (REGISTER_BYTE (0), 
-                         valbuf, TYPE_LENGTH (type));
+    sh_default_store_return_value (type, valbuf);
 }