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, |