| Index: gdb/value.h
|
| diff --git a/gdb/value.h b/gdb/value.h
|
| index 5651e082a11a2b84409a24e6c56778a0f0b5cc92..d8b157f0b83b84b834ce4f1b56f0bbb4a252f950 100644
|
| --- a/gdb/value.h
|
| +++ b/gdb/value.h
|
| @@ -74,6 +74,7 @@ extern void set_value_bitpos (struct value *, int bit);
|
| bitfields. */
|
|
|
| struct value *value_parent (struct value *);
|
| +extern void set_value_parent (struct value *value, struct value *parent);
|
|
|
| /* 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
|
| @@ -137,6 +138,22 @@ extern struct type *value_enclosing_type (struct value *);
|
| extern void set_value_enclosing_type (struct value *val,
|
| struct type *new_type);
|
|
|
| +/* Returns value_type or value_enclosing_type depending on
|
| + value_print_options.objectprint.
|
| +
|
| + If RESOLVE_SIMPLE_TYPES is 0 the enclosing type will be resolved
|
| + only for pointers and references, else it will be returned
|
| + for all the types (e.g. structures). This option is useful
|
| + to prevent retrieving enclosing type for the base classes fields.
|
| +
|
| + REAL_TYPE_FOUND is used to inform whether the real type was found
|
| + (or just static type was used). The NULL may be passed if it is not
|
| + necessary. */
|
| +
|
| +extern struct type *value_actual_type (struct value *value,
|
| + int resolve_simple_types,
|
| + int *real_type_found);
|
| +
|
| 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);
|
| @@ -212,6 +229,20 @@ extern struct value *allocate_computed_value (struct type *type,
|
| const struct lval_funcs *funcs,
|
| void *closure);
|
|
|
| +/* Helper function to check the validity of some bits of a value.
|
| +
|
| + If TYPE represents some aggregate type (e.g., a structure), return 1.
|
| +
|
| + Otherwise, any of the bytes starting at OFFSET and extending for
|
| + TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
|
| + return 0. The checking is done using FUNCS.
|
| +
|
| + Otherwise, return 1. */
|
| +
|
| +extern int valprint_check_validity (struct ui_file *stream, struct type *type,
|
| + int embedded_offset,
|
| + const struct value *val);
|
| +
|
| extern struct value *allocate_optimized_out_value (struct type *type);
|
|
|
| /* If VALUE is lval_computed, return its lval_funcs structure. */
|
| @@ -351,6 +382,19 @@ extern short *deprecated_value_regnum_hack (struct value *);
|
|
|
| extern struct value *coerce_ref_if_computed (const struct value *arg);
|
|
|
| +/* Setup a new value type and enclosing value type for dereferenced value VALUE.
|
| + ENC_TYPE is the new enclosing type that should be set. ORIGINAL_TYPE and
|
| + ORIGINAL_VAL are the type and value of the original reference or pointer.
|
| +
|
| + Note, that VALUE is modified by this function.
|
| +
|
| + It is a common implementation for coerce_ref and value_ind. */
|
| +
|
| +extern struct value * readjust_indirect_value_type (struct value *value,
|
| + struct type *enc_type,
|
| + struct type *original_type,
|
| + struct value *original_val);
|
| +
|
| /* Convert a REF to the object referenced. */
|
|
|
| extern struct value *coerce_ref (struct value *value);
|
| @@ -447,8 +491,9 @@ extern void read_value_memory (struct value *val, int embedded_offset,
|
| struct frame_info;
|
| struct fn_field;
|
|
|
| -extern void print_address_demangle (struct gdbarch *, CORE_ADDR,
|
| - struct ui_file *, int);
|
| +extern int print_address_demangle (const struct value_print_options *,
|
| + struct gdbarch *, CORE_ADDR,
|
| + struct ui_file *, int);
|
|
|
| extern LONGEST value_as_long (struct value *val);
|
| extern DOUBLEST value_as_double (struct value *val);
|
| @@ -523,6 +568,9 @@ extern int symbol_read_needs_frame (struct symbol *);
|
| extern struct value *read_var_value (struct symbol *var,
|
| struct frame_info *frame);
|
|
|
| +extern struct value *default_read_var_value (struct symbol *var,
|
| + struct frame_info *frame);
|
| +
|
| extern struct value *allocate_value (struct type *type);
|
| extern struct value *allocate_value_lazy (struct type *type);
|
| extern void allocate_value_contents (struct value *value);
|
| @@ -594,11 +642,6 @@ extern struct value *value_aggregate_elt (struct type *curtype,
|
|
|
| extern struct value *value_static_field (struct type *type, int fieldno);
|
|
|
| -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 value **args, int nargs,
|
| @@ -615,13 +658,13 @@ extern struct value *value_primitive_field (struct value *arg1, int offset,
|
| struct type *arg_type);
|
|
|
|
|
| -extern struct type *value_rtti_target_type (struct value *, int *, int *,
|
| - int *);
|
| +extern struct type *value_rtti_indirect_type (struct value *, int *, int *,
|
| + int *);
|
|
|
| extern struct value *value_full_object (struct value *, struct type *, int,
|
| int, int);
|
|
|
| -extern struct value *value_cast_pointers (struct type *, struct value *);
|
| +extern struct value *value_cast_pointers (struct type *, struct value *, int);
|
|
|
| extern struct value *value_cast (struct type *type, struct value *arg2);
|
|
|
| @@ -651,7 +694,7 @@ extern int value_bit_index (struct type *type, const gdb_byte *addr,
|
| int index);
|
|
|
| extern int using_struct_return (struct gdbarch *gdbarch,
|
| - struct type *func_type,
|
| + struct value *function,
|
| struct type *value_type);
|
|
|
| extern struct value *evaluate_expression (struct expression *exp);
|
| @@ -717,10 +760,54 @@ extern struct internalvar *lookup_only_internalvar (const char *name);
|
|
|
| extern struct internalvar *create_internalvar (const char *name);
|
|
|
| -typedef struct value * (*internalvar_make_value) (struct gdbarch *,
|
| - struct internalvar *);
|
| +extern VEC (char_ptr) *complete_internalvar (const char *name);
|
| +
|
| +/* An internalvar can be dynamically computed by supplying a vector of
|
| + function pointers to perform various operations. */
|
| +
|
| +struct internalvar_funcs
|
| +{
|
| + /* Compute the value of the variable. The DATA argument passed to
|
| + the function is the same argument that was passed to
|
| + `create_internalvar_type_lazy'. */
|
| +
|
| + struct value *(*make_value) (struct gdbarch *arch,
|
| + struct internalvar *var,
|
| + void *data);
|
| +
|
| + /* Update the agent expression EXPR with bytecode to compute the
|
| + value. VALUE is the agent value we are updating. The DATA
|
| + argument passed to this function is the same argument that was
|
| + passed to `create_internalvar_type_lazy'. If this pointer is
|
| + NULL, then the internalvar cannot be compiled to an agent
|
| + expression. */
|
| +
|
| + void (*compile_to_ax) (struct internalvar *var,
|
| + struct agent_expr *expr,
|
| + struct axs_value *value,
|
| + void *data);
|
| +
|
| + /* If non-NULL, this is called to destroy DATA. The DATA argument
|
| + passed to this function is the same argument that was passed to
|
| + `create_internalvar_type_lazy'. */
|
| +
|
| + void (*destroy) (void *data);
|
| +};
|
| +
|
| extern struct internalvar *
|
| - create_internalvar_type_lazy (char *name, internalvar_make_value fun);
|
| +create_internalvar_type_lazy (const char *name,
|
| + const struct internalvar_funcs *funcs,
|
| + void *data);
|
| +
|
| +/* Compile an internal variable to an agent expression. VAR is the
|
| + variable to compile; EXPR and VALUE are the agent expression we are
|
| + updating. This will return 0 if there is no known way to compile
|
| + VAR, and 1 if VAR was successfully compiled. It may also throw an
|
| + exception on error. */
|
| +
|
| +extern int compile_internalvar_to_ax (struct internalvar *var,
|
| + struct agent_expr *expr,
|
| + struct axs_value *value);
|
|
|
| extern struct internalvar *lookup_internalvar (const char *name);
|
|
|
| @@ -770,12 +857,14 @@ extern void free_value_chain (struct value *v);
|
|
|
| extern void release_value (struct value *val);
|
|
|
| +extern void release_value_or_incref (struct value *val);
|
| +
|
| extern int record_latest_value (struct value *val);
|
|
|
| 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,
|
| +extern void type_print (struct type *type, const char *varstring,
|
| struct ui_file *stream, int show);
|
|
|
| extern char *type_to_string (struct type *type);
|
| @@ -793,8 +882,8 @@ extern void print_floating (const gdb_byte *valaddr, struct type *type,
|
| extern void print_decimal_floating (const gdb_byte *valaddr, struct type *type,
|
| struct ui_file *stream);
|
|
|
| -extern int value_print (struct value *val, struct ui_file *stream,
|
| - const struct value_print_options *options);
|
| +extern void value_print (struct value *val, struct ui_file *stream,
|
| + const struct value_print_options *options);
|
|
|
| extern void value_print_array_elements (struct value *val,
|
| struct ui_file *stream, int format,
|
| @@ -802,17 +891,17 @@ extern void value_print_array_elements (struct value *val,
|
|
|
| extern struct value *value_release_to_mark (struct value *mark);
|
|
|
| -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);
|
| -
|
| -extern int common_val_print (struct value *val,
|
| - struct ui_file *stream, int recurse,
|
| - const struct value_print_options *options,
|
| - const struct language_defn *language);
|
| +extern void 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);
|
| +
|
| +extern void common_val_print (struct value *val,
|
| + struct ui_file *stream, int recurse,
|
| + const struct value_print_options *options,
|
| + const struct language_defn *language);
|
|
|
| extern int val_print_string (struct type *elttype, const char *encoding,
|
| CORE_ADDR addr, int len,
|
|
|