+2004-01-17 Andrew Cagney <cagney@redhat.com>
+
+ * x86-64-tdep.c (x86_64_init_abi): No need to clear
+ extract_struct_value_address, i386 does not set it.
+ * sparc64-tdep.c (sparc64_init_abi): Do not set
+ extract_struct_value_address, never called.
+ (sparc64_extract_struct_value_address): Delete function.
+ * m68hc11-tdep.c: Update copyright.
+ (m68hc11_gdbarch_init): Delete redundant assignment of
+ extract_struct_value_address.
+ * i386-tdep.c: Update copyright.
+ (i386_gdbarch_init): Do not set extract_struct_value_address,
+ never called.
+ (i386_extract_struct_value_address): Delete function.
+ * sparc-tdep.c (sparc32_gdbarch_init): Do not set
+ extract_struct_value_address, never called.
+ (sparc32_extract_struct_value_address): #if 0 function. Add
+ comments explaining its future.
+
2004-01-17 Daniel Jacobowitz <drow@mvista.com>
* arm-tdep.c (arm_write_pc): New function.
/* Intel 386 target-dependent stuff.
Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
- 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+ Foundation, Inc.
This file is part of GDB.
#undef I387_ST0_REGNUM
}
-
-/* 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
-i386_extract_struct_value_address (struct regcache *regcache)
-{
- char buf[4];
-
- regcache_cooked_read (regcache, I386_EAX_REGNUM, buf);
- return extract_unsigned_integer (buf, 4);
-}
\f
/* This is the variable that is set with "set struct-convention", and
set_gdbarch_value_to_register (gdbarch, i386_value_to_register);
set_gdbarch_return_value (gdbarch, i386_return_value);
- set_gdbarch_extract_struct_value_address (gdbarch,
- i386_extract_struct_value_address);
set_gdbarch_skip_prologue (gdbarch, i386_skip_prologue);
/* Target-dependent code for Motorola 68HC11 & 68HC12
- Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+ Foundation, Inc.
+
Contributed by Stephane Carrez, stcarrez@nerim.fr
This file is part of GDB.
set_gdbarch_return_value_on_stack (gdbarch, m68hc11_return_value_on_stack);
set_gdbarch_store_return_value (gdbarch, m68hc11_store_return_value);
- set_gdbarch_extract_struct_value_address (gdbarch, m68hc11_extract_struct_value_address);
-
set_gdbarch_store_return_value (gdbarch, m68hc11_store_return_value);
set_gdbarch_extract_struct_value_address (gdbarch, m68hc11_extract_struct_value_address);
set_gdbarch_use_struct_convention (gdbarch, m68hc11_use_struct_convention);
return RETURN_VALUE_REGISTER_CONVENTION;
}
+#if 0
+/* NOTE: cagney/2004-01-17: For the moment disable this method. The
+ architecture and CORE-gdb will need new code (and a replacement for
+ EXTRACT_STRUCT_VALUE_ADDRESS) before this can be made to work
+ robustly. Here is a possible function signature: */
+/* NOTE: cagney/2004-01-17: So far only the 32-bit SPARC ABI has been
+ identifed as having a way to robustly recover the address of a
+ struct-convention return-value (after the function has returned).
+ For all other ABIs so far examined, the calling convention makes no
+ guarenteed that the register containing the return-value will be
+ preserved and hence that the return-value's address can be
+ recovered. */
/* Extract from REGCACHE, which contains the (raw) register state, the
address in which a function should return its structure value, as a
CORE_ADDR. */
regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
return read_memory_unsigned_integer (sp + 64, 4);
}
+#endif
static int
sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
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);
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;
-}
\f
void
set_gdbarch_push_dummy_call (gdbarch, sparc64_push_dummy_call);
set_gdbarch_return_value (gdbarch, sparc64_return_value);
- set_gdbarch_extract_struct_value_address
- (gdbarch, sparc64_extract_struct_value_address);
set_gdbarch_stabs_argument_has_addr
(gdbarch, default_stabs_argument_has_addr);
set_gdbarch_value_to_register (gdbarch, i387_value_to_register);
set_gdbarch_return_value (gdbarch, amd64_return_value);
- /* Override, since this is handled by amd64_extract_return_value. */
- set_gdbarch_extract_struct_value_address (gdbarch, NULL);
set_gdbarch_skip_prologue (gdbarch, amd64_skip_prologue);