summaryrefslogtreecommitdiff
path: root/gdb/infcall.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2011-03-15 14:40:18 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2011-03-15 14:40:18 +0000
commit4f7d3c58b92b745b134af53ab6f407eabf05ee09 (patch)
treeef6e2ee9fed3220eb93a3ffbf87511b3e12d0a81 /gdb/infcall.c
parent2fcd95c2f73b1164222c883425bfaa9e2133e27b (diff)
downloadgdb-4f7d3c58b92b745b134af53ab6f407eabf05ee09.tar.gz
* infcall.c (call_function_by_hand): Function return value is
always a non_lval, even when using struct_return.
Diffstat (limited to 'gdb/infcall.c')
-rw-r--r--gdb/infcall.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/gdb/infcall.c b/gdb/infcall.c
index 75de56cadac..d42248ef519 100644
--- a/gdb/infcall.c
+++ b/gdb/infcall.c
@@ -1010,29 +1010,29 @@ When the function is done executing, GDB will silently stop."),
restore_infcall_control_state (inf_status);
/* Figure out the value returned by the function. */
+ retval = allocate_value (values_type);
if (lang_struct_return)
- retval = value_at (values_type, struct_addr);
- else if (TYPE_CODE (target_values_type) == TYPE_CODE_VOID)
+ read_value_memory (retval, 0, 1, struct_addr,
+ value_contents_raw (retval),
+ TYPE_LENGTH (values_type));
+ else if (TYPE_CODE (target_values_type) != TYPE_CODE_VOID)
{
/* If the function returns void, don't bother fetching the
return value. */
- retval = allocate_value (values_type);
- }
- else
- {
switch (gdbarch_return_value (gdbarch, value_type (function),
target_values_type, NULL, NULL, NULL))
{
case RETURN_VALUE_REGISTER_CONVENTION:
case RETURN_VALUE_ABI_RETURNS_ADDRESS:
case RETURN_VALUE_ABI_PRESERVES_ADDRESS:
- retval = allocate_value (values_type);
gdbarch_return_value (gdbarch, value_type (function), values_type,
retbuf, value_contents_raw (retval), NULL);
break;
case RETURN_VALUE_STRUCT_CONVENTION:
- retval = value_at (values_type, struct_addr);
+ read_value_memory (retval, 0, 1, struct_addr,
+ value_contents_raw (retval),
+ TYPE_LENGTH (values_type));
break;
}
}