aboutsummaryrefslogtreecommitdiff
path: root/gdb/value.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/value.h')
-rw-r--r--gdb/value.h39
1 files changed, 32 insertions, 7 deletions
diff --git a/gdb/value.h b/gdb/value.h
index 7f71dc4..c3dfb17 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -50,7 +50,7 @@ struct value *value_next (struct value *);
/* 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
@@ -61,14 +61,14 @@ extern void deprecated_set_value_type (struct value *value,
/* 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
@@ -83,7 +83,7 @@ struct value *value_parent (struct value *);
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
@@ -164,13 +164,21 @@ struct lval_funcs
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_all_valid) (const struct value *value);
+
/* 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
@@ -195,7 +203,7 @@ extern struct lval_funcs *value_computed_funcs (struct value *value);
/* 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,
@@ -249,6 +257,11 @@ extern gdb_byte *value_contents_writeable (struct value *);
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);
@@ -257,6 +270,10 @@ 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. */
@@ -266,7 +283,7 @@ extern void set_value_initialized (struct value *, int);
/* 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
@@ -313,6 +330,13 @@ extern struct value *coerce_ref (struct value *value);
extern struct value *coerce_array (struct value *value);
+/* 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. */
+
+extern int value_bits_valid (const struct value *value,
+ int offset, int length);
+
#include "symtab.h"
@@ -647,6 +671,7 @@ 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);