Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009 Free Software Foundation, Inc.
+ 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
This file is part of GDB.
struct value;
-/* Needed if another module needs to maintain its own list of values. */
-
-void value_prepend_to_list (struct value **head, struct value *val);
-void value_remove_from_list (struct value **head, struct value *val);
-
/* Values are stored in a chain, so that they can be deleted easily
over calls to the inferior. Values assigned to internal variables,
put into the value history or exposed to Python are taken off this
/* Type of the value. */
-extern struct type *value_type (struct value *);
+extern struct type *value_type (const struct value *);
/* This is being used to change the type of an existing value, that
code should instead be creating a new value with the changed type
/* Only used for bitfields; number of bits contained in them. */
-extern int value_bitsize (struct value *);
+extern int value_bitsize (const struct value *);
extern void set_value_bitsize (struct value *, int bit);
/* Only used for bitfields; position of start of field. For
gdbarch_bits_big_endian=0 targets, it is the position of the LSB. For
gdbarch_bits_big_endian=1 targets, it is the position of the MSB. */
-extern int value_bitpos (struct value *);
+extern int value_bitpos (const struct value *);
extern void set_value_bitpos (struct value *, int bit);
+/* Only used for bitfields; the containing value. This allows a
+ single read from the target when displaying multiple
+ bitfields. */
+
+struct value *value_parent (struct value *);
+
/* Describes offset of a value within lval of a structure in bytes.
If lval == lval_memory, this is an offset to the address. If lval
== lval_register, this is a further offset from location.address
within the registers structure. Note also the member
embedded_offset below. */
-extern int value_offset (struct value *);
+extern int value_offset (const struct value *);
extern void set_value_offset (struct value *, int offset);
/* The comment from "struct value" reads: ``Is it modifiable? Only
normally. */
extern struct type *value_enclosing_type (struct value *);
-extern struct value *value_change_enclosing_type (struct value *val,
- struct type *new_type);
+extern void set_value_enclosing_type (struct value *val,
+ struct type *new_type);
+
extern int value_pointed_to_offset (struct value *value);
extern void set_value_pointed_to_offset (struct value *value, int val);
extern int value_embedded_offset (struct value *value);
should call 'error'. */
void (*write) (struct value *toval, struct value *fromval);
+ /* Check the validity of some bits in VALUE. This should return 1
+ if all the bits starting at OFFSET and extending for LENGTH bits
+ are valid, or 0 if any bit is invalid. */
+ int (*check_validity) (const struct value *value, int offset, int length);
+
+ /* Return 1 if any bit in VALUE is valid, 0 if they are all invalid. */
+ int (*check_any_valid) (const struct value *value);
+
+ /* If non-NULL, this is used to implement pointer indirection for
+ this value. This method may return NULL, in which case value_ind
+ will fall back to ordinary indirection. */
+ struct value *(*indirect) (struct value *value);
+
+ /* If non-NULL, this is used to determine whether the indicated bits
+ of VALUE are a synthetic pointer. */
+ int (*check_synthetic_pointer) (const struct value *value,
+ int offset, int length);
+
/* Return a duplicate of VALUE's closure, for use in a new value.
This may simply return the same closure, if VALUE's is
reference-counted or statically allocated.
This may be NULL, in which case VALUE's closure is re-used in the
new value. */
- void *(*copy_closure) (struct value *v);
+ void *(*copy_closure) (const struct value *v);
/* Drop VALUE's reference to its closure. Maybe this frees the
closure; maybe this decrements a reference count; maybe the
/* If VALUE is lval_computed, return its closure. The meaning of the
returned value depends on the functions VALUE uses. */
-extern void *value_computed_closure (struct value *value);
+extern void *value_computed_closure (const struct value *value);
/* If zero, contents of this value are in the contents field. If
nonzero, contents are in inferior. If the lval field is lval_memory,
extern int value_lazy (struct value *);
extern void set_value_lazy (struct value *value, int val);
+extern int value_stack (struct value *);
+extern void set_value_stack (struct value *value, int val);
+
/* value_contents() and value_contents_raw() both return the address
of the gdb buffer used to hold a copy of the contents of the lval.
value_contents() is used when the contents of the buffer are needed
extern gdb_byte *value_contents_all_raw (struct value *);
extern const gdb_byte *value_contents_all (struct value *);
+/* Like value_contents_all, but does not require that the returned
+ bits be valid. This should only be used in situations where you
+ plan to check the validity manually. */
+extern const gdb_byte *value_contents_for_printing (struct value *value);
+
extern int value_fetch_lazy (struct value *val);
extern int value_contents_equal (struct value *val1, struct value *val2);
extern int value_optimized_out (struct value *value);
extern void set_value_optimized_out (struct value *value, int val);
+/* Like value_optimized_out, but return false if any bit in the object
+ is valid. */
+extern int value_entirely_optimized_out (const struct value *value);
+
/* Set or return field indicating whether a variable is initialized or
not, based on debugging information supplied by the compiler.
1 = initialized; 0 = uninitialized. */
/* Set COMPONENT's location as appropriate for a component of WHOLE
--- regardless of what kind of lvalue WHOLE is. */
extern void set_value_component_location (struct value *component,
- struct value *whole);
+ const struct value *whole);
/* While the following fields are per- VALUE .CONTENT .PIECE (i.e., a
single value might have multiple LVALs), this hacked interface is
extern struct value *coerce_array (struct value *value);
-/* Internal variables (variables for convenience of use of debugger)
- are recorded as a chain of these structures. */
+/* Given a value, determine whether the bits starting at OFFSET and
+ extending for LENGTH bits are valid. This returns nonzero if all
+ bits in the given range are valid, zero if any bit is invalid. */
-typedef struct value * (*internalvar_make_value) (struct internalvar *);
+extern int value_bits_valid (const struct value *value,
+ int offset, int length);
-struct internalvar
-{
- struct internalvar *next;
- char *name;
- struct value *value;
- internalvar_make_value make_value;
- int endian;
- /* True if this internalvar is the canonical name for a convenience
- function. */
- int canonical;
-};
+/* Given a value, determine whether the bits starting at OFFSET and
+ extending for LENGTH bits are a synthetic pointer. */
+
+extern int value_bits_synthetic_pointer (const struct value *value,
+ int offset, int length);
\f
struct frame_info;
struct fn_field;
-extern void print_address_demangle (CORE_ADDR, struct ui_file *, int);
+extern void print_address_demangle (struct gdbarch *, CORE_ADDR,
+ struct ui_file *, int);
extern LONGEST value_as_long (struct value *val);
extern DOUBLEST value_as_double (struct value *val);
extern DOUBLEST unpack_double (struct type *type, const gdb_byte *valaddr,
int *invp);
extern CORE_ADDR unpack_pointer (struct type *type, const gdb_byte *valaddr);
+LONGEST unpack_bits_as_long (struct type *field_type, const gdb_byte *valaddr,
+ int bitpos, int bitsize);
extern LONGEST unpack_field_as_long (struct type *type,
const gdb_byte *valaddr,
int fieldno);
extern void pack_long (gdb_byte *buf, struct type *type, LONGEST num);
extern struct value *value_from_longest (struct type *type, LONGEST num);
+extern struct value *value_from_ulongest (struct type *type, ULONGEST num);
extern struct value *value_from_pointer (struct type *type, CORE_ADDR addr);
extern struct value *value_from_double (struct type *type, DOUBLEST num);
extern struct value *value_from_decfloat (struct type *type,
const gdb_byte *decbytes);
-extern struct value *value_from_string (char *string);
extern struct value *value_at (struct type *type, CORE_ADDR addr);
extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr);
extern void value_free_to_mark (struct value *mark);
-extern struct value *value_typed_string (char *ptr, int len,
- struct type *char_type);
-extern struct value *value_string (char *ptr, int len);
-extern struct value *value_bitstring (char *ptr, int len);
+extern struct value *value_cstring (char *ptr, int len,
+ struct type *char_type);
+extern struct value *value_string (char *ptr, int len,
+ struct type *char_type);
+extern struct value *value_bitstring (char *ptr, int len,
+ struct type *index_type);
extern struct value *value_array (int lowbound, int highbound,
struct value **elemvec);
extern struct value *value_binop (struct value *arg1, struct value *arg2,
enum exp_opcode op);
-extern struct value *value_ptradd (struct value *arg1, struct value *arg2);
-
-extern struct value *value_ptrsub (struct value *arg1, struct value *arg2);
+extern struct value *value_ptradd (struct value *arg1, LONGEST arg2);
extern LONGEST value_ptrdiff (struct value *arg1, struct value *arg2);
extern struct value *value_struct_elt (struct value **argp,
struct value **args,
- char *name, int *static_memfuncp,
- char *err);
+ const char *name, int *static_memfuncp,
+ const char *err);
extern struct value *value_aggregate_elt (struct type *curtype,
char *name,
+ struct type *expect_type,
int want_address,
enum noside noside);
extern struct value *value_static_field (struct type *type, int fieldno);
-extern struct fn_field *value_find_oload_method_list (struct value **, char *,
+extern struct fn_field *value_find_oload_method_list (struct value **,
+ const char *,
int, int *,
struct type **, int *);
+enum oload_search_type { NON_METHOD, METHOD, BOTH };
+
extern int find_overload_match (struct type **arg_types, int nargs,
- char *name, int method, int lax,
+ const char *name,
+ enum oload_search_type method, int lax,
struct value **objp, struct symbol *fsym,
struct value **valp, struct symbol **symp,
- int *staticp);
+ int *staticp, const int no_adl);
extern struct value *value_field (struct value *arg1, int fieldno);
extern struct value *value_cast (struct type *type, struct value *arg2);
+extern struct value *value_reinterpret_cast (struct type *type,
+ struct value *arg);
+
+extern struct value *value_dynamic_cast (struct type *type, struct value *arg);
+
extern struct value *value_zero (struct type *type, enum lval_type lv);
extern struct value *value_one (struct type *type, enum lval_type lv);
extern struct value *value_repeat (struct value *arg1, int count);
-extern struct value *value_subscript (struct value *array, struct value *idx);
+extern struct value *value_subscript (struct value *array, LONGEST index);
extern struct value *value_bitstring_subscript (struct type *type,
struct value *bitstring,
- struct value *idx);
+ LONGEST index);
extern struct value *register_value_being_returned (struct type *valtype,
struct regcache *retbuf);
extern int value_bit_index (struct type *type, const gdb_byte *addr,
int index);
-extern int using_struct_return (struct type *func_type,
+extern int using_struct_return (struct gdbarch *gdbarch,
+ struct type *func_type,
struct type *value_type);
extern struct value *evaluate_expression (struct expression *exp);
extern struct value *evaluate_type (struct expression *exp);
+extern struct value *evaluate_subexp (struct type *expect_type,
+ struct expression *exp,
+ int *pos, enum noside noside);
+
extern struct value *evaluate_subexpression_type (struct expression *exp,
int subexp);
+extern void fetch_subexp_value (struct expression *exp, int *pc,
+ struct value **valp, struct value **resultp,
+ struct value **val_chain);
+
extern char *extract_field_op (struct expression *exp, int *subexp);
extern struct value *evaluate_subexp_with_coercion (struct expression *,
extern struct value *access_value_history (int num);
-extern struct value *value_of_internalvar (struct internalvar *var);
+extern struct value *value_of_internalvar (struct gdbarch *gdbarch,
+ struct internalvar *var);
+
+extern int get_internalvar_integer (struct internalvar *var, LONGEST *l);
extern void set_internalvar (struct internalvar *var, struct value *val);
+extern void set_internalvar_integer (struct internalvar *var, LONGEST l);
+
+extern void set_internalvar_string (struct internalvar *var,
+ const char *string);
+
+extern void clear_internalvar (struct internalvar *var);
+
extern void set_internalvar_component (struct internalvar *var,
int offset,
int bitpos, int bitsize,
extern struct internalvar *create_internalvar (const char *name);
+typedef struct value * (*internalvar_make_value) (struct gdbarch *,
+ struct internalvar *);
extern struct internalvar *
create_internalvar_type_lazy (char *name, internalvar_make_value fun);
extern int value_equal (struct value *arg1, struct value *arg2);
+extern int value_equal_contents (struct value *arg1, struct value *arg2);
+
extern int value_less (struct value *arg1, struct value *arg2);
extern int value_logical_not (struct value *arg1);
extern struct value *value_fn_field (struct value **arg1p, struct fn_field *f,
int j, struct type *type, int offset);
+extern int binop_types_user_defined_p (enum exp_opcode op,
+ struct type *type1,
+ struct type *type2);
+
extern int binop_user_defined_p (enum exp_opcode op, struct value *arg1,
struct value *arg2);
extern int destructor_name_p (const char *name, const struct type *type);
+extern void value_incref (struct value *val);
+
extern void value_free (struct value *val);
extern void free_all_values (void);
+extern void free_value_chain (struct value *v);
+
extern void release_value (struct value *val);
extern int record_latest_value (struct value *val);
-extern void modify_field (gdb_byte *addr, LONGEST fieldval, int bitpos,
- int bitsize);
+extern void modify_field (struct type *type, gdb_byte *addr,
+ LONGEST fieldval, int bitpos, int bitsize);
extern void type_print (struct type *type, char *varstring,
struct ui_file *stream, int show);
extern int val_print (struct type *type, const gdb_byte *valaddr,
int embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
+ const struct value *val,
const struct value_print_options *options,
const struct language_defn *language);
const struct value_print_options *options,
const struct language_defn *language);
-extern int val_print_string (struct type *elttype, CORE_ADDR addr, int len,
+extern int val_print_string (struct type *elttype, const char *encoding,
+ CORE_ADDR addr, int len,
struct ui_file *stream,
const struct value_print_options *options);
extern struct value *value_copy (struct value *);
+extern struct value *value_non_lval (struct value *);
+
+extern void preserve_one_value (struct value *, struct objfile *, htab_t);
+
/* From valops.c */
extern struct value *varying_to_slice (struct value *);
extern struct value *value_of_local (const char *name, int complain);
-extern struct value * value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound);
+extern struct value *value_subscripted_rvalue (struct value *array,
+ LONGEST index, int lowerbound);
/* User function handler. */
-typedef struct value *(*internal_function_fn) (void *cookie,
+typedef struct value *(*internal_function_fn) (struct gdbarch *gdbarch,
+ const struct language_defn *language,
+ void *cookie,
int argc,
struct value **argv);
internal_function_fn handler,
void *cookie);
-struct value *call_internal_function (struct value *function,
+struct value *call_internal_function (struct gdbarch *gdbarch,
+ const struct language_defn *language,
+ struct value *function,
int argc, struct value **argv);
char *value_internal_function_name (struct value *);