aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/sparc-tdep.c4
-rw-r--r--gdb/sparc64-tdep.c17
3 files changed, 26 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c26ac14..3fc95a8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2004-01-11 Mark Kettenis <kettenis@gnu.org>
+ * sparc-tdep.c (sparc32_extract_struct_value_address): Rename from
+ sparc_extract_struct_value_address.
+ (sparc32_gdbarch_init): Set extract_struct_value_address.
+ * sparc64-tdep.c (sparc64_extract_struct_value_address): New
+ function.
+ (sparc64_init_abi): Set extract_struct_value_address. Don't set
+ return_value_on_stack.
+
* NEWS: Mention that %cs and %ss have been added to the AMD64
configurations
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
index 26d2c24..e79f038 100644
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -839,7 +839,7 @@ sparc32_return_value (struct gdbarch *gdbarch, struct type *type,
CORE_ADDR. */
static CORE_ADDR
-sparc_extract_struct_value_address (struct regcache *regcache)
+sparc32_extract_struct_value_address (struct regcache *regcache)
{
ULONGEST sp;
@@ -1069,6 +1069,8 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
set_gdbarch_return_value (gdbarch, sparc32_return_value);
+ set_gdbarch_extract_struct_value_address
+ (gdbarch, sparc32_extract_struct_value_address);
set_gdbarch_stabs_argument_has_addr
(gdbarch, sparc32_stabs_argument_has_addr);
diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
index 2e56ec9..b32a24c 100644
--- a/gdb/sparc64-tdep.c
+++ b/gdb/sparc64-tdep.c
@@ -1086,6 +1086,19 @@ sparc64_return_value (struct gdbarch *gdbarch, struct type *type,
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. */
+
+static CORE_ADDR
+sparc64_extract_struct_value_address (struct regcache *regcache)
+{
+ ULONGEST addr;
+
+ regcache_cooked_read_unsigned (regcache, SPARC_O0_REGNUM, &addr);
+ return addr;
+}
void
@@ -1117,8 +1130,8 @@ sparc64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_push_dummy_call (gdbarch, sparc64_push_dummy_call);
set_gdbarch_return_value (gdbarch, sparc64_return_value);
- set_gdbarch_return_value_on_stack
- (gdbarch, generic_return_value_on_stack_not);
+ set_gdbarch_extract_struct_value_address
+ (gdbarch, sparc64_extract_struct_value_address);
set_gdbarch_stabs_argument_has_addr
(gdbarch, default_stabs_argument_has_addr);