diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -1462,6 +1462,7 @@ sparc32_store_return_value (struct type *type, struct regcache *regcache,
   if (sparc_floating_p (type) || sparc_complex_floating_p (type))
     {
       /* Floating return values.  */
+      len = (len <= 8) ? len : 8;
       memcpy (buf, valbuf, len);
       regcache->cooked_write (SPARC_F0_REGNUM, buf);
       if (len > 4)
