/* Low level packing and unpacking of values for GDB, the GNU Debugger.
- Copyright (C) 1986-2000, 2002-2012 Free Software Foundation, Inc.
+ Copyright (C) 1986-2013 Free Software Foundation, Inc.
This file is part of GDB.
void
set_value_parent (struct value *value, struct value *parent)
{
+ struct value *old = value->parent;
+
value->parent = parent;
+ if (parent != NULL)
+ value_incref (parent);
+ value_free (old);
}
gdb_byte *
{
return value->modifiable;
}
-void
-deprecated_set_value_modifiable (struct value *value, int modifiable)
-{
- value->modifiable = modifiable;
-}
\f
/* Return a mark in the value chain. All values allocated after the
mark is obtained (except for those released) are subject to being freed
}
val->unavailable = VEC_copy (range_s, arg->unavailable);
- val->parent = arg->parent;
- if (val->parent)
- value_incref (val->parent);
+ set_value_parent (val, arg->parent);
if (VALUE_LVAL (val) == lval_computed)
{
const struct lval_funcs *funcs = val->location.computed.funcs;
static void
function_destroyer (struct cmd_list_element *self, void *ignore)
{
- xfree (self->name);
+ xfree ((char *) self->name);
xfree (self->doc);
}
v->offset = (value_embedded_offset (arg1)
+ offset
+ (bitpos - v->bitpos) / 8);
- v->parent = arg1;
- value_incref (v->parent);
+ set_value_parent (v, arg1);
if (!value_lazy (arg1))
value_fetch_lazy (v);
}
}
\f
+/* Return the return value convention that will be used for the
+ specified type. */
+
+enum return_value_convention
+struct_return_convention (struct gdbarch *gdbarch,
+ struct value *function, struct type *value_type)
+{
+ enum type_code code = TYPE_CODE (value_type);
+
+ if (code == TYPE_CODE_ERROR)
+ error (_("Function return type unknown."));
+
+ /* Probe the architecture for the return-value convention. */
+ return gdbarch_return_value (gdbarch, function, value_type,
+ NULL, NULL, NULL);
+}
+
/* Return true if the function returning the specified type is using
the convention of returning structures in memory (passing in the
address as a hidden first parameter). */
using_struct_return (struct gdbarch *gdbarch,
struct value *function, struct type *value_type)
{
- enum type_code code = TYPE_CODE (value_type);
-
- if (code == TYPE_CODE_ERROR)
- error (_("Function return type unknown."));
-
- if (code == TYPE_CODE_VOID)
+ if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
/* A void return value is never in memory. See also corresponding
code in "print_return_value". */
return 0;
- /* Probe the architecture for the return-value convention. */
- return (gdbarch_return_value (gdbarch, function, value_type,
- NULL, NULL, NULL)
+ return (struct_return_convention (gdbarch, function, value_type)
!= RETURN_VALUE_REGISTER_CONVENTION);
}