diff options
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/gdbarch.h | 13 | ||||
-rwxr-xr-x | gdb/gdbarch.sh | 14 | ||||
-rw-r--r-- | gdb/sparc-tdep.c | 3 |
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]; |