* [PATCH] Handle complex return values like structure types
@ 2012-07-24 16:37 Andreas Schwab
0 siblings, 0 replies; only message in thread
From: Andreas Schwab @ 2012-07-24 16:37 UTC (permalink / raw)
To: gdb-patches
Complex types are basically just structures with two fields, and they
are handled like this wrt the return method. Tested on m68k-linux and
committed.
Andreas.
* m68k-tdep.c (m68k_reg_struct_return_p): Accept complex types.
(m68k_return_value): Handle complex types like structures.
(m68k_svr4_return_value): Likewise.
---
gdb/m68k-tdep.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c
index b1e2cd4..b507c37 100644
--- a/gdb/m68k-tdep.c
+++ b/gdb/m68k-tdep.c
@@ -377,8 +377,8 @@ m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
m68k_store_return_value (type, regcache, valbuf);
}
-/* Return non-zero if TYPE, which is assumed to be a structure or
- union type, should be returned in registers for architecture
+/* Return non-zero if TYPE, which is assumed to be a structure, union or
+ complex type, should be returned in registers for architecture
GDBARCH. */
static int
@@ -388,7 +388,8 @@ m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
enum type_code code = TYPE_CODE (type);
int len = TYPE_LENGTH (type);
- gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
+ gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
+ || code == TYPE_CODE_COMPLEX);
if (tdep->struct_return == pcc_struct_return)
return 0;
@@ -410,7 +411,8 @@ m68k_return_value (struct gdbarch *gdbarch, struct value *function,
enum type_code code = TYPE_CODE (type);
/* GCC returns a `long double' in memory too. */
- if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
+ if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
+ || code == TYPE_CODE_COMPLEX)
&& !m68k_reg_struct_return_p (gdbarch, type))
|| (code == TYPE_CODE_FLT && TYPE_LENGTH (type) == 12))
{
@@ -444,7 +446,8 @@ m68k_svr4_return_value (struct gdbarch *gdbarch, struct value *function,
{
enum type_code code = TYPE_CODE (type);
- if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
+ if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
+ || code == TYPE_CODE_COMPLEX)
&& !m68k_reg_struct_return_p (gdbarch, type))
{
/* The System V ABI says that:
--
1.7.11.3
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-07-24 16:37 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-24 16:37 [PATCH] Handle complex return values like structure types Andreas Schwab
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox