aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2011-12-22 19:41:59 +0000
committerTom Tromey <tromey@redhat.com>2011-12-22 19:41:59 +0000
commit87784a4754fe23d02ee8392357a8291ff2b6ed79 (patch)
tree266b8f4403807c3b7e490b595861cbf71c7efa41 /gdb
parentde8bee766b6bf227b4fd9cd65f64c8c64795760a (diff)
downloadgdb-87784a4754fe23d02ee8392357a8291ff2b6ed79.zip
gdb-87784a4754fe23d02ee8392357a8291ff2b6ed79.tar.gz
gdb-87784a4754fe23d02ee8392357a8291ff2b6ed79.tar.bz2
* value.c (struct value) <modifiable, lazy, optimized_out,
initialized, stack>: Now bitfields. Move to top. <reference_count>: Move earlier.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/value.c73
2 files changed, 44 insertions, 35 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 8b6b718..6fa76d6 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2011-12-22 Tom Tromey <tromey@redhat.com>
+
+ * value.c (struct value) <modifiable, lazy, optimized_out,
+ initialized, stack>: Now bitfields. Move to top.
+ <reference_count>: Move earlier.
+
2011-12-21 Tom Tromey <tromey@redhat.com>
* minsyms.h: Rearrange. Document header and all functions.
diff --git a/gdb/value.c b/gdb/value.c
index d263d0c..b0aa415 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -169,6 +169,9 @@ ranges_contain (VEC(range_s) *ranges, int offset, int length)
static struct cmd_list_element *functionlist;
+/* Note that the fields in this structure are arranged to save a bit
+ of memory. */
+
struct value
{
/* Type of value; either not an lval, or one of the various
@@ -176,7 +179,34 @@ struct value
enum lval_type lval;
/* Is it modifiable? Only relevant if lval != not_lval. */
- int modifiable;
+ unsigned int modifiable : 1;
+
+ /* If zero, contents of this value are in the contents field. If
+ nonzero, contents are in inferior. If the lval field is lval_memory,
+ the contents are in inferior memory at location.address plus offset.
+ The lval field may also be lval_register.
+
+ WARNING: This field is used by the code which handles watchpoints
+ (see breakpoint.c) to decide whether a particular value can be
+ watched by hardware watchpoints. If the lazy flag is set for
+ some member of a value chain, it is assumed that this member of
+ the chain doesn't need to be watched as part of watching the
+ value itself. This is how GDB avoids watching the entire struct
+ or array when the user wants to watch a single struct member or
+ array element. If you ever change the way lazy flag is set and
+ reset, be sure to consider this use as well! */
+ unsigned int lazy : 1;
+
+ /* If nonzero, this is the value of a variable which does not
+ actually exist in the program. */
+ unsigned int optimized_out : 1;
+
+ /* If value is a variable, is it initialized or not. */
+ unsigned int initialized : 1;
+
+ /* If value is from the stack. If this is set, read_stack will be
+ used instead of read_memory to enable extra caching. */
+ unsigned int stack : 1;
/* Location of value (if lval). */
union
@@ -217,6 +247,13 @@ struct value
gdbarch_bits_big_endian=1 targets, it is the position of the MSB. */
int bitpos;
+ /* The number of references to this value. When a value is created,
+ the value chain holds a reference, so REFERENCE_COUNT is 1. If
+ release_value is called, this value is removed from the chain but
+ the caller of release_value now has a reference to this value.
+ The caller must arrange for a call to value_free later. */
+ int reference_count;
+
/* Only used for bitfields; the containing value. This allows a
single read from the target when displaying multiple
bitfields. */
@@ -282,33 +319,6 @@ struct value
/* Register number if the value is from a register. */
short regnum;
- /* If zero, contents of this value are in the contents field. If
- nonzero, contents are in inferior. If the lval field is lval_memory,
- the contents are in inferior memory at location.address plus offset.
- The lval field may also be lval_register.
-
- WARNING: This field is used by the code which handles watchpoints
- (see breakpoint.c) to decide whether a particular value can be
- watched by hardware watchpoints. If the lazy flag is set for
- some member of a value chain, it is assumed that this member of
- the chain doesn't need to be watched as part of watching the
- value itself. This is how GDB avoids watching the entire struct
- or array when the user wants to watch a single struct member or
- array element. If you ever change the way lazy flag is set and
- reset, be sure to consider this use as well! */
- char lazy;
-
- /* If nonzero, this is the value of a variable which does not
- actually exist in the program. */
- char optimized_out;
-
- /* If value is a variable, is it initialized or not. */
- int initialized;
-
- /* If value is from the stack. If this is set, read_stack will be
- used instead of read_memory to enable extra caching. */
- int stack;
-
/* Actual contents of the value. Target byte-order. NULL or not
valid if lazy is nonzero. */
gdb_byte *contents;
@@ -317,13 +327,6 @@ struct value
rather than available, since the common and default case is for a
value to be available. This is filled in at value read time. */
VEC(range_s) *unavailable;
-
- /* The number of references to this value. When a value is created,
- the value chain holds a reference, so REFERENCE_COUNT is 1. If
- release_value is called, this value is removed from the chain but
- the caller of release_value now has a reference to this value.
- The caller must arrange for a call to value_free later. */
- int reference_count;
};
int