aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/gdbarch.h13
-rwxr-xr-xgdb/gdbarch.sh14
-rw-r--r--gdb/sparc-tdep.c3
4 files changed, 30 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 016a213..35c6cea 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2008-04-29 Joel Brobecker <brobecker@adacore.com>
+
+ * gdbarch.sh: Document the return_value method. Explain that
+ the FUNCTYPE parameter might be NULL.
+ * gdbarch.h: Regenerated.
+ * sparc-tdep.c (sparc32_push_dummy_code): Do not pass the function
+ type when calling using_struct_return, as this is unnecessary
+ on this target.
+
2008-04-28 Joel Brobecker <brobecker@adacore.com>
* terminal.h (create_tty_session): Fix return type.
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index 6b4658e..220c2dd 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -360,9 +360,16 @@ typedef CORE_ADDR (gdbarch_integer_to_address_ftype) (struct gdbarch *gdbarch, s
extern CORE_ADDR gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf);
extern void set_gdbarch_integer_to_address (struct gdbarch *gdbarch, gdbarch_integer_to_address_ftype *integer_to_address);
-/* It has been suggested that this, well actually its predecessor,
- should take the type/value of the function to be called and not the
- return type. This is left as an exercise for the reader. */
+/* Return the return-value convention that will be used by FUNCTYPE
+ to return a value of type VALTYPE. FUNCTYPE may be NULL in which
+ case the return convention is computed based only on VALTYPE.
+
+ If READBUF is not NULL, extract the return value and save it in this buffer.
+
+ If WRITEBUF is not NULL, it contains a return value which will be
+ stored into the appropriate register. This can be used when we want
+ to force the value returned by a function (see the "return" command
+ for instance). */
extern int gdbarch_return_value_p (struct gdbarch *gdbarch);
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
index f9fee17..91d970e 100755
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -470,10 +470,16 @@ f:CORE_ADDR:pointer_to_address:struct type *type, const gdb_byte *buf:type, buf:
f:void:address_to_pointer:struct type *type, gdb_byte *buf, CORE_ADDR addr:type, buf, addr::unsigned_address_to_pointer::0
M:CORE_ADDR:integer_to_address:struct type *type, const gdb_byte *buf:type, buf
-# It has been suggested that this, well actually its predecessor,
-# should take the type/value of the function to be called and not the
-# return type. This is left as an exercise for the reader.
-
+# Return the return-value convention that will be used by FUNCTYPE
+# to return a value of type VALTYPE. FUNCTYPE may be NULL in which
+# case the return convention is computed based only on VALTYPE.
+#
+# If READBUF is not NULL, extract the return value and save it in this buffer.
+#
+# If WRITEBUF is not NULL, it contains a return value which will be
+# stored into the appropriate register. This can be used when we want
+# to force the value returned by a function (see the "return" command
+# for instance).
M:enum return_value_convention:return_value:struct type *functype, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf:functype, valtype, regcache, readbuf, writebuf
m:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip:0:0
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
index 0140c0f..20f67bc 100644
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -388,8 +388,7 @@ sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
*bp_addr = sp - 4;
*real_pc = funcaddr;
- if (using_struct_return (SYMBOL_TYPE (find_pc_function (funcaddr)),
- value_type))
+ if (using_struct_return (NULL, value_type))
{
gdb_byte buf[4];