* gdb.threads/gcore-thread.exp: Use gdb_gcore_cmd.
[deliverable/binutils-gdb.git] / gdb / value.h
index 83c94fcab771b3590ebe667ad11ee9e7b604582f..368593574938870bb59ad8db2e2601957616efe2 100644 (file)
@@ -1,8 +1,6 @@
 /* Definitions for values of C expressions, for GDB.
 
-   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, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 1986-2012 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -76,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
@@ -139,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);
@@ -180,6 +195,11 @@ struct lval_funcs
      will fall back to ordinary indirection.  */
   struct value *(*indirect) (struct value *value);
 
+  /* If non-NULL, this is used to implement reference resolving for
+     this value.  This method may return NULL, in which case coerce_ref
+     will fall back to ordinary references resolving.  */
+  struct value *(*coerce_ref) (const 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,
@@ -209,11 +229,25 @@ 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.  */
 
-extern const struct lval_funcs *value_computed_funcs (struct value *value);
+extern const struct lval_funcs *value_computed_funcs (const struct value *);
 
 /* If VALUE is lval_computed, return its closure.  The meaning of the
    returned value depends on the functions VALUE uses.  */
@@ -314,6 +348,9 @@ extern void set_value_component_location (struct value *component,
 extern enum lval_type *deprecated_value_lval_hack (struct value *);
 #define VALUE_LVAL(val) (*deprecated_value_lval_hack (val))
 
+/* Like VALUE_LVAL, except the parameter can be const.  */
+extern enum lval_type value_lval_const (const struct value *value);
+
 /* If lval == lval_memory, return the address in the inferior.  If
    lval == lval_register, return the byte offset into the registers
    structure.  Otherwise, return 0.  The returned address
@@ -340,6 +377,24 @@ extern struct frame_id *deprecated_value_frame_id_hack (struct value *);
 extern short *deprecated_value_regnum_hack (struct value *);
 #define VALUE_REGNUM(val) (*deprecated_value_regnum_hack (val))
 
+/* Return value after lval_funcs->coerce_ref (after check_typedef).  Return
+   NULL if lval_funcs->coerce_ref is not applicable for whatever reason.  */
+
+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);
@@ -436,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);
@@ -489,13 +545,17 @@ extern struct value *default_value_from_register (struct type *type,
                                                  int regnum,
                                                  struct frame_info *frame);
 
+extern void read_frame_register_value (struct value *value,
+                                      struct frame_info *frame);
+
 extern struct value *value_from_register (struct type *type, int regnum,
                                          struct frame_info *frame);
 
 extern CORE_ADDR address_from_register (struct type *type, int regnum,
                                        struct frame_info *frame);
 
-extern struct value *value_of_variable (struct symbol *var, struct block *b);
+extern struct value *value_of_variable (struct symbol *var,
+                                       const struct block *b);
 
 extern struct value *address_of_variable (struct symbol *var, struct block *b);
 
@@ -508,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);
@@ -524,12 +587,10 @@ extern struct value *value_mark (void);
 
 extern void value_free_to_mark (struct value *mark);
 
-extern struct value *value_cstring (char *ptr, int len,
+extern struct value *value_cstring (char *ptr, ssize_t len,
                                    struct type *char_type);
-extern struct value *value_string (char *ptr, int len,
+extern struct value *value_string (char *ptr, ssize_t 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);
@@ -579,14 +640,9 @@ 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 type **arg_types, int nargs,
+extern int find_overload_match (struct value **args, int nargs,
                                const char *name,
                                enum oload_search_type method, int lax,
                                struct value **objp, struct symbol *fsym,
@@ -600,13 +656,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);
 
@@ -636,7 +692,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);
@@ -702,10 +758,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);
 
@@ -755,12 +855,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);
@@ -778,8 +880,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,
@@ -787,17 +889,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,
This page took 0.027742 seconds and 4 git commands to generate.