* value.c (struct value) <modifiable, lazy, optimized_out,

initialized, stack>: Now bitfields.  Move to top.
	<reference_count>: Move earlier.
This commit is contained in:
Tom Tromey 2011-12-22 19:41:59 +00:00
parent de8bee766b
commit 87784a4754
2 changed files with 44 additions and 35 deletions

View File

@ -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.

View File

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