2004-01-26 Andrew Cagney <cagney@redhat.com>

* dwarf2loc.c (dwarf_expr_frame_base): Use SYMBOL_OPS instead of
	SYMBOL_LOCATION_FUNCS
	(dwarf2_loclist_funcs, dwarf2_locexpr_funcs): Change type to
	"struct symbol_ops".
	* dwarf2loc.h (dwarf2_locexpr_funcs, dwarf2_loclist_funcs): Change
	type to "struct symbol_ops".
	* symtab.h (struct symbol_ops): Rename "struct location_funcs".
	(struct symbol): Replace ".aux_value.loc.funcs" and
	".aux_value.loc.baton" with ".ops" and ".aux_value.ptr".
	(SYMBOL_OBJFILE): Delete macro.
	(SYMBOL_LOCATION_FUNCS): Delete macro.
	(SYMBOL_LOCATION_BATON): Update.
	* dwarf2read.c (dwarf2_symbol_mark_computed): Set SYMBOL_OPS
	intead of SYMBOL_LOCATION_FUNCS.
	* ax-gdb.c (gen_var_ref): Ditto.
	* printcmd.c (address_info): Ditto.
	* findvar.c (read_var_value): Ditto.
	(symbol_read_needs_frame): Ditto.
This commit is contained in:
Andrew Cagney
2004-01-26 20:36:32 +00:00
parent 838e70c548
commit a67af2b9de
8 changed files with 84 additions and 52 deletions

View File

@@ -546,21 +546,12 @@ enum address_class
LOC_COMPUTED_ARG
};
/* A structure of function pointers describing the location of a
variable, structure member, or structure base class.
/* The methods needed to implement a symbol class. These methods can
use the symbol's .aux_value for additional per-symbol information.
These functions' BATON arguments are generic data pointers, holding
whatever data the functions need --- the code which provides this
structure also provides the actual contents of the baton, and
decides its form. However, there may be other rules about where
the baton data must be allocated; whoever is pointing to this
`struct location_funcs' object will know the rules. For example,
when a symbol S's location is LOC_COMPUTED, then
SYMBOL_LOCATION_FUNCS(S) is pointing to a location_funcs structure,
and SYMBOL_LOCATION_BATON(S) is the baton, which must be allocated
on the same obstack as the symbol itself. */
At present this is only used to implement location expressions. */
struct location_funcs
struct symbol_ops
{
/* Return the value of the variable SYMBOL, relative to the stack
@@ -608,6 +599,12 @@ struct symbol
ENUM_BITFIELD(domain_enum_tag) domain : 6;
/* Address class */
/* NOTE: cagney/2003-11-02: The fields "aclass" and "ops" contain
overlapping information. By creating a per-aclass ops vector, or
using the aclass as an index into an ops table, the aclass and
ops fields can be merged. The latter, for instance, would shave
32-bits from each symbol (relative to a symbol lookup, any table
index overhead would be in the noise). */
ENUM_BITFIELD(address_class) aclass : 6;
@@ -617,28 +614,30 @@ struct symbol
unsigned short line;
/* Some symbols require an additional value to be recorded on a per-
symbol basis. Stash those values here. */
/* Method's for symbol's of this class. */
/* NOTE: cagney/2003-11-02: See comment above attached to "aclass". */
const struct symbol_ops *ops;
/* Some symbols require additional information to be recorded on a
per- symbol basis. Stash those values here. */
union
{
/* Used by LOC_BASEREG and LOC_BASEREG_ARG. */
short basereg;
/* For a LOC_COMPUTED or LOC_COMPUTED_ARG symbol, this is the
baton and location_funcs structure to find its location. For a
LOC_BLOCK symbol for a function in a compilation unit compiled
with DWARF 2 information, this is information used internally
by the DWARF 2 code --- specifically, the location expression
for the frame base for this function. */
/* An arbitrary data pointer. Note that this data must be
allocated using the same obstack as the symbol itself. */
/* So far it is only used by LOC_COMPUTED and LOC_COMPUTED_ARG to
find the location location information. For a LOC_BLOCK symbol
for a function in a compilation unit compiled with DWARF 2
information, this is information used internally by the DWARF 2
code --- specifically, the location expression for the frame
base for this function. */
/* FIXME drow/2003-02-21: For the LOC_BLOCK case, it might be better
to add a magic symbol to the block containing this information,
or to have a generic debug info annotation slot for symbols. */
struct
{
void *baton;
struct location_funcs *funcs;
} loc;
void *ptr;
}
aux_value;
@@ -652,8 +651,8 @@ struct symbol
#define SYMBOL_LINE(symbol) (symbol)->line
#define SYMBOL_BASEREG(symbol) (symbol)->aux_value.basereg
#define SYMBOL_OBJFILE(symbol) (symbol)->aux_value.objfile
#define SYMBOL_LOCATION_BATON(symbol) (symbol)->aux_value.loc.baton
#define SYMBOL_LOCATION_FUNCS(symbol) (symbol)->aux_value.loc.funcs
#define SYMBOL_OPS(symbol) (symbol)->ops
#define SYMBOL_LOCATION_BATON(symbol) (symbol)->aux_value.ptr
/* A partial_symbol records the name, domain, and address class of
symbols whose types we have not parsed yet. For functions, it also