From fce7b099819fc3a60b6fc7021a6bcdf04f0639eb Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Tue, 26 Dec 2006 05:03:11 +0000 Subject: * sparc64-tdep.c (sparc64_extract_return_value): Add handling for array types. (sparc64_store_return_value): Likewise. --- gdb/sparc64-tdep.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'gdb/sparc64-tdep.c') diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c index 01c8961205c..a3a734bff80 100644 --- a/gdb/sparc64-tdep.c +++ b/gdb/sparc64-tdep.c @@ -1086,6 +1086,15 @@ sparc64_extract_return_value (struct type *type, struct regcache *regcache, regcache_cooked_read (regcache, SPARC_F0_REGNUM + i, buf + i * 4); memcpy (valbuf, buf, len); } + else if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + { + /* Small arrays are returned the same way as small structures. */ + gdb_assert (len <= 32); + + for (i = 0; i < ((len + 7) / 8); i++) + regcache_cooked_read (regcache, SPARC_O0_REGNUM + i, buf + i * 8); + memcpy (valbuf, buf, len); + } else { /* Integral and pointer return values. */ @@ -1131,6 +1140,16 @@ sparc64_store_return_value (struct type *type, struct regcache *regcache, for (i = 0; i < len / 4; i++) regcache_cooked_write (regcache, SPARC_F0_REGNUM + i, buf + i * 4); } + else if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + { + /* Small arrays are returned the same way as small structures. */ + gdb_assert (len <= 32); + + memset (buf, 0, sizeof (buf)); + memcpy (buf, valbuf, len); + for (i = 0; i < ((len + 7) / 8); i++) + regcache_cooked_write (regcache, SPARC_O0_REGNUM + i, buf + i * 8); + } else { /* Integral and pointer return values. */ -- cgit v1.2.1