This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH] Introduce sparc32_return_value
- From: Mark Kettenis <kettenis at chello dot nl>
- To: gdb-patches at sources dot redhat dot com
- Date: Sat, 3 Jan 2004 18:59:09 +0100 (CET)
- Subject: [PATCH] Introduce sparc32_return_value
This modernizes SPARC with respect to return values.
Committed,
Mark
Index: ChangeLog
from Mark Kettenis <kettenis@gnu.org>
* sparc-tdep.c (sparc32_return_value): New function.
(sparc32_use_struct_convention, sparc32_return_value_on_stack):
Remove functions.
(sparc32_gdbarch_init): Set return_value, don't set
extract_return_value, store_return_value, use_struct_convention
and return_value_on_stack.
Index: sparc-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparc-tdep.c,v
retrieving revision 1.135
diff -u -p -r1.135 sparc-tdep.c
--- sparc-tdep.c 3 Jan 2004 10:08:44 -0000 1.135
+++ sparc-tdep.c 3 Jan 2004 17:48:10 -0000
@@ -815,6 +815,23 @@ sparc32_store_return_value (struct type
}
}
+static enum return_value_convention
+sparc32_return_value (struct gdbarch *gdbarch, struct type *type,
+ struct regcache *regcache, void *readbuf,
+ const void *writebuf)
+{
+ if (sparc_structure_or_union_p (type)
+ || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
+ return RETURN_VALUE_STRUCT_CONVENTION;
+
+ if (readbuf)
+ sparc32_extract_return_value (type, regcache, readbuf);
+ if (writebuf)
+ sparc32_store_return_value (type, regcache, writebuf);
+
+ return RETURN_VALUE_REGISTER_CONVENTION;
+}
+
/* Extract from REGCACHE, which contains the (raw) register state, the
address in which a function should return its structure value, as a
CORE_ADDR. */
@@ -829,20 +846,6 @@ sparc_extract_struct_value_address (stru
}
static int
-sparc32_use_struct_convention (int gcc_p, struct type *type)
-{
- gdb_assert (sparc_structure_or_union_p (type));
- return 1;
-}
-
-static int
-sparc32_return_value_on_stack (struct type *type)
-{
- gdb_assert (!sparc_structure_or_union_p (type));
- return (sparc_floating_p (type) && TYPE_LENGTH (type) == 16);
-}
-
-static int
sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
{
return (sparc_structure_or_union_p (type)
@@ -1040,12 +1043,7 @@ sparc32_gdbarch_init (struct gdbarch_inf
set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
- set_gdbarch_extract_return_value (gdbarch, sparc32_extract_return_value);
- set_gdbarch_store_return_value (gdbarch, sparc32_store_return_value);
- set_gdbarch_extract_struct_value_address
- (gdbarch, sparc_extract_struct_value_address);
- set_gdbarch_use_struct_convention (gdbarch, sparc32_use_struct_convention);
- set_gdbarch_return_value_on_stack (gdbarch, sparc32_return_value_on_stack);
+ set_gdbarch_return_value (gdbarch, sparc32_return_value);
set_gdbarch_stabs_argument_has_addr
(gdbarch, sparc32_stabs_argument_has_addr);