diff options
author | Doug Evans <xdje42@gmail.com> | 2015-08-15 16:25:53 -0700 |
---|---|---|
committer | Doug Evans <xdje42@gmail.com> | 2015-08-15 16:25:53 -0700 |
commit | 51cdc99310171d6c53d2d00103a0ce34374d0b9b (patch) | |
tree | 36b05c52658f854c89eeaddf375341e048d8d1b1 /gdb | |
parent | 95cf586902b681310e63ee06d89ba2498d1d5dcf (diff) | |
download | gdb-51cdc99310171d6c53d2d00103a0ce34374d0b9b.zip gdb-51cdc99310171d6c53d2d00103a0ce34374d0b9b.tar.gz gdb-51cdc99310171d6c53d2d00103a0ce34374d0b9b.tar.bz2 |
Use macros for some enum bit field sizes.
gdb/ChangeLog:
* defs.h (LANGUAGE_BITS): Define.
* psympriv.h (partial_symbol) <domain>: Use SYMBOL_DOMAIN_BITS.
(partial_symbol) <aclass>: Use SYMBOL_ACLASS_BITS.
* symtab.h (general_symbol_info> <language>: Usage LANGUAGE_BITS.
(minimal_symbol_type): Add nr_minsym_types.
(MINSYM_TYPE_BITS): Define.
(minimal_symbol) <type>: Use MINSYM_TYPE_BITS.
(domain_enum_tag): Add NR_DOMAINS.
(SYMBOL_DOMAIN_BITS): Change from 4 to 3.
(SYMBOL_ACLASS_BITS): Define from 6 to 5.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/defs.h | 5 | ||||
-rw-r--r-- | gdb/psympriv.h | 4 | ||||
-rw-r--r-- | gdb/symtab.h | 36 |
4 files changed, 44 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 32096c0..759f4ce 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 2015-08-15 Doug Evans <xdje42@gmail.com> + * defs.h (LANGUAGE_BITS): Define. + * psympriv.h (partial_symbol) <domain>: Use SYMBOL_DOMAIN_BITS. + (partial_symbol) <aclass>: Use SYMBOL_ACLASS_BITS. + * symtab.h (general_symbol_info> <language>: Usage LANGUAGE_BITS. + (minimal_symbol_type): Add nr_minsym_types. + (MINSYM_TYPE_BITS): Define. + (minimal_symbol) <type>: Use MINSYM_TYPE_BITS. + (domain_enum_tag): Add NR_DOMAINS. + (SYMBOL_DOMAIN_BITS): Change from 4 to 3. + (SYMBOL_ACLASS_BITS): Define from 6 to 5. + +2015-08-15 Doug Evans <xdje42@gmail.com> + * objfiles.h: Whitespace cleanup. * psympriv.h: Whitespace cleanup. * psymtab.c: Whitespace/coding convention cleanup. @@ -186,6 +186,11 @@ enum language nr_languages }; +/* The number of bits needed to represent all languages, with enough + padding to allow for reasonable growth. */ +#define LANGUAGE_BITS 5 +gdb_static_assert (nr_languages <= (1 << LANGUAGE_BITS)); + enum precision_type { single_precision, diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 250fc08..3efb01f 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -42,13 +42,13 @@ struct partial_symbol /* Name space code. */ - ENUM_BITFIELD(domain_enum_tag) domain : 6; + ENUM_BITFIELD(domain_enum_tag) domain : SYMBOL_DOMAIN_BITS; /* Address class (for info_symbols). Note that we don't allow synthetic "aclass" values here at present, simply because there's no need. */ - ENUM_BITFIELD(address_class) aclass : 6; + ENUM_BITFIELD(address_class) aclass : SYMBOL_ACLASS_BITS; }; #define PSYMBOL_DOMAIN(psymbol) (psymbol)->domain diff --git a/gdb/symtab.h b/gdb/symtab.h index e90ce00..0109b96 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -149,7 +149,7 @@ struct general_symbol_info This is used to select one of the fields from the language specific union above. */ - ENUM_BITFIELD(language) language : 8; + ENUM_BITFIELD(language) language : LANGUAGE_BITS; /* This is only used by Ada. If set, then the 'mangled_lang' field of language_specific is valid. Otherwise, the 'obstack' field is @@ -309,9 +309,15 @@ enum minimal_symbol_type within a given .o file. */ mst_file_text, /* Static version of mst_text */ mst_file_data, /* Static version of mst_data */ - mst_file_bss /* Static version of mst_bss */ + mst_file_bss, /* Static version of mst_bss */ + nr_minsym_types }; +/* The number of enum minimal_symbol_type values, with some padding for + reasonable growth. */ +#define MINSYM_TYPE_BITS 4 +gdb_static_assert (nr_minsym_types <= (1 << MINSYM_TYPE_BITS)); + /* Define a simple structure used to hold some very basic information about all defined global symbols (text, data, bss, abs, etc). The only required information is the general_symbol_info. @@ -345,7 +351,7 @@ struct minimal_symbol /* Classification type for this minimal symbol. */ - ENUM_BITFIELD(minimal_symbol_type) type : 8; + ENUM_BITFIELD(minimal_symbol_type) type : MINSYM_TYPE_BITS; /* Non-zero if this symbol was created by gdb. Such symbols do not appear in the output of "info var|fun". */ @@ -460,12 +466,16 @@ typedef enum domain_enum_tag /* Fortran common blocks. Their naming must be separate from VAR_DOMAIN. They also always use LOC_COMMON_BLOCK. */ - COMMON_BLOCK_DOMAIN + COMMON_BLOCK_DOMAIN, + + /* This must remain last. */ + NR_DOMAINS } domain_enum; /* The number of bits in a symbol used to represent the domain. */ -#define SYMBOL_DOMAIN_BITS 4 +#define SYMBOL_DOMAIN_BITS 3 +gdb_static_assert (NR_DOMAINS <= (1 << SYMBOL_DOMAIN_BITS)); extern const char *domain_name (domain_enum); @@ -595,6 +605,15 @@ enum address_class LOC_FINAL_VALUE }; +/* The number of bits needed for values in enum address_class, with some + padding for reasonable growth, and room for run-time registered address + classes. See symtab.c:MAX_SYMBOL_IMPLS. + This is a #define so that we can have a assertion elsewhere to + verify that we have reserved enough space for synthetic address + classes. */ +#define SYMBOL_ACLASS_BITS 5 +gdb_static_assert (LOC_FINAL_VALUE <= (1 << SYMBOL_ACLASS_BITS)); + /* The methods needed to implement LOC_COMPUTED. These methods can use the symbol's .aux_value for additional per-symbol information. @@ -693,13 +712,6 @@ struct symbol_impl const struct symbol_register_ops *ops_register; }; -/* The number of bits we reserve in a symbol for the aclass index. - This is a #define so that we can have a assertion elsewhere to - verify that we have reserved enough space for synthetic address - classes. */ - -#define SYMBOL_ACLASS_BITS 6 - /* This structure is space critical. See space comments at the top. */ struct symbol |