From 87784a4754fe23d02ee8392357a8291ff2b6ed79 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 22 Dec 2011 19:41:59 +0000 Subject: * value.c (struct value) : Now bitfields. Move to top. : Move earlier. --- gdb/ChangeLog | 6 +++++ gdb/value.c | 73 +++++++++++++++++++++++++++++++---------------------------- 2 files changed, 44 insertions(+), 35 deletions(-) (limited to 'gdb') 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 + + * value.c (struct value) : Now bitfields. Move to top. + : Move earlier. + 2011-12-21 Tom Tromey * 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 -- cgit v1.1