diff options
author | Andrew Cagney <cagney@redhat.com> | 2004-01-26 20:36:32 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2004-01-26 20:36:32 +0000 |
commit | a67af2b9de8208a715df12a4fa4da0d05c08570e (patch) | |
tree | 710ebf24425830c1c89fb0c82768cb72ee11d35e /gdb/symtab.h | |
parent | 838e70c548d07aa651332912e3d537ea0772c98e (diff) | |
download | gdb-a67af2b9de8208a715df12a4fa4da0d05c08570e.zip gdb-a67af2b9de8208a715df12a4fa4da0d05c08570e.tar.gz gdb-a67af2b9de8208a715df12a4fa4da0d05c08570e.tar.bz2 |
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.
Diffstat (limited to 'gdb/symtab.h')
-rw-r--r-- | gdb/symtab.h | 61 |
1 files changed, 30 insertions, 31 deletions
diff --git a/gdb/symtab.h b/gdb/symtab.h index 95813bd..c56c053 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -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. - - 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. */ - -struct location_funcs +/* The methods needed to implement a symbol class. These methods can + use the symbol's .aux_value for additional per-symbol information. + + At present this is only used to implement location expressions. */ + +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 |