* vax-tdep.c (vax_return_value): Implement
authorMark Kettenis <kettenis@gnu.org>
Mon, 17 May 2004 22:12:13 +0000 (22:12 +0000)
committerMark Kettenis <kettenis@gnu.org>
Mon, 17 May 2004 22:12:13 +0000 (22:12 +0000)
RETURN_VALUE_ABI_RETURNS_ADDRESS.

gdb/ChangeLog
gdb/vax-tdep.c

index 27d005854da84ceb735c8f7646030854b409106f..a3efd1e850c6ce73984c6d4aa0078444fcae8360 100644 (file)
@@ -1,3 +1,8 @@
+2004-05-18  Mark Kettenis  <kettenis@gnu.org>
+
+       * vax-tdep.c (vax_return_value): Implement
+       RETURN_VALUE_ABI_RETURNS_ADDRESS.
+
 2004-05-17  Mark Kettenis  <kettenis@gnu.org>
 
        * vax-tdep.c (vax_return_value): Fix typo.
index f9f044a45aa8853fd3b5adbe6bc44ffae0b445f5..e5b7cb8b683e54220c3583647eb2f2fe6e3c5bc2 100644 (file)
@@ -212,7 +212,21 @@ vax_return_value (struct gdbarch *gdbarch, struct type *type,
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
       || TYPE_CODE (type) == TYPE_CODE_UNION
       || TYPE_CODE (type) == TYPE_CODE_ARRAY)
-    return RETURN_VALUE_STRUCT_CONVENTION;
+    {
+      /* The default on VAX is to return structures in static memory.
+         Consequently a function must return the address where we can
+         find the return value.  */
+
+      if (readbuf)
+       {
+         ULONGEST addr;
+
+         regcache_raw_read_unsigned (regcache, VAX_R0_REGNUM, &addr);
+         read_memory (addr, readbuf, len);
+       }
+
+      return RETURN_VALUE_ABI_RETURNS_ADDRESS;
+    }
 
   if (readbuf)
     {