This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Use macros for some enum bit field sizes.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=51cdc99310171d6c53d2d00103a0ce34374d0b9b

commit 51cdc99310171d6c53d2d00103a0ce34374d0b9b
Author: Doug Evans <xdje42@gmail.com>
Date:   Sat Aug 15 16:25:53 2015 -0700

    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.

Diff:
---
 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 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.
diff --git a/gdb/defs.h b/gdb/defs.h
index a555da1..f4951ab 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 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]