From 51cdc99310171d6c53d2d00103a0ce34374d0b9b Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Sat, 15 Aug 2015 16:25:53 -0700 Subject: [PATCH] Use macros for some enum bit field sizes. gdb/ChangeLog: * defs.h (LANGUAGE_BITS): Define. * psympriv.h (partial_symbol) : Use SYMBOL_DOMAIN_BITS. (partial_symbol) : Use SYMBOL_ACLASS_BITS. * symtab.h (general_symbol_info> : Usage LANGUAGE_BITS. (minimal_symbol_type): Add nr_minsym_types. (MINSYM_TYPE_BITS): Define. (minimal_symbol) : 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. --- gdb/ChangeLog | 13 +++++++++++++ gdb/defs.h | 5 +++++ gdb/psympriv.h | 4 ++-- gdb/symtab.h | 36 ++++++++++++++++++++++++------------ 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 32096c05017..759f4ce0940 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2015-08-15 Doug Evans + + * defs.h (LANGUAGE_BITS): Define. + * psympriv.h (partial_symbol) : Use SYMBOL_DOMAIN_BITS. + (partial_symbol) : Use SYMBOL_ACLASS_BITS. + * symtab.h (general_symbol_info> : Usage LANGUAGE_BITS. + (minimal_symbol_type): Add nr_minsym_types. + (MINSYM_TYPE_BITS): Define. + (minimal_symbol) : 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 * objfiles.h: Whitespace cleanup. diff --git a/gdb/defs.h b/gdb/defs.h index a555da15dfd..f4951abb223 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -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 250fc08188e..3efb01fe48a 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 e90ce004283..0109b9678d7 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 -- 2.30.2