* symtab.h (struct symbol, general_symbol_info, minimal_symbol,
authorJohn Gilmore <gnu@cygnus>
Wed, 12 Jan 1994 09:53:06 +0000 (09:53 +0000)
committerJohn Gilmore <gnu@cygnus>
Wed, 12 Jan 1994 09:53:06 +0000 (09:53 +0000)
partial_symbol):  Shrink the storage sizes of symbols, by making
enums into 1-byte bitfields when compiled __GNUC__, moving all the
enums and small ints to the end of each struct to improve
alignment, and switching the section number from int to unsigned short.

gdb/ChangeLog
gdb/symtab.h

index 1276cc53444a2352ce96712c7bb120e3293ea99d..72e436b268d2be93882827020077cf45dc792ef2 100644 (file)
@@ -1,3 +1,12 @@
+Wed Jan 12 01:44:25 1994  John Gilmore  (gnu@cygnus.com)
+
+       * symtab.h (struct symbol, general_symbol_info, minimal_symbol,
+       partial_symbol):  Shrink the storage sizes of symbols, by making
+       enums into 1-byte bitfields when compiled __GNUC__, moving all the
+       enums and small ints to the end of each struct to improve
+       alignment, and switching the section number from int to unsigned
+       short.
+
 Wed Jan 12 00:16:26 1994  John Gilmore  (gnu@cygnus.com)
 
        * symtab.c (find_addr_symbol):  New routine that will find the nearest
index 8a4f17bd20d7be0491245e08dcb9a43071b5cd9b..d7f62a87d654c3da714649f0aa970ba8ec443aa2 100644 (file)
@@ -26,10 +26,20 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define obstack_chunk_alloc xmalloc
 #define obstack_chunk_free free
 
+/* GNU C supports enums that are bitfields.  Some old compilers don't. */
+#if defined(__GNUC__) && !defined(BYTE_BITFIELD)
+#define        BYTE_BITFIELD   :8;
+#else
+#define        BYTE_BITFIELD   /*nothing*/
+#endif
+
 /* Define a structure for the information that is common to all symbol types,
    including minimal symbols, partial symbols, and full symbols.  In a
    multilanguage environment, some language specific information may need to
-   be recorded along with each symbol. */
+   be recorded along with each symbol.
+
+   These fields are ordered to encourage good packing, since we frequently
+   have tens or hundreds of thousands of these.  */
 
 struct general_symbol_info
 {
@@ -61,12 +71,6 @@ struct general_symbol_info
     }
   value;
 
-  /* Record the source code language that applies to this symbol.
-     This is used to select one of the fields from the language specific
-     union below. */
-
-  enum language language;
-
   /* Since one and only one language can apply, wrap the language specific
      information inside a union. */
 
@@ -82,6 +86,12 @@ struct general_symbol_info
        } chill_specific;
     } language_specific;
 
+  /* Record the source code language that applies to this symbol.
+     This is used to select one of the fields from the language specific
+     union above. */
+
+  enum language language BYTE_BITFIELD;
+
   /* Which section is this symbol in?  This is an index into
      section_offsets for this objfile.  Negative means that the symbol
      does not get relocated relative to a section.
@@ -89,7 +99,7 @@ struct general_symbol_info
      expect all symbol-reading code to set it correctly (the ELF code
      also tries to set it correctly).  */
 
-  int section;
+  unsigned short section;
 };
 
 #define SYMBOL_NAME(symbol)            (symbol)->ginfo.name
@@ -294,7 +304,7 @@ struct minimal_symbol
       mst_file_text,           /* Static version of mst_text */
       mst_file_data,           /* Static version of mst_data */
       mst_file_bss             /* Static version of mst_bss */
-    } type;
+    } type BYTE_BITFIELD;
 
 };
 
@@ -548,17 +558,17 @@ struct symbol
 
   struct general_symbol_info ginfo;
 
-  /* Name space code.  */
+  /* Data type of value */
 
-  enum namespace namespace;
+  struct type *type;
 
-  /* Address class */
+  /* Name space code.  */
 
-  enum address_class class;
+  enum namespace namespace BYTE_BITFIELD;
 
-  /* Data type of value */
+  /* Address class */
 
-  struct type *type;
+  enum address_class class BYTE_BITFIELD;
 
   /* Line number of definition.  FIXME:  Should we really make the assumption
      that nobody will try to debug files longer than 64K lines?  What about
@@ -575,7 +585,6 @@ struct symbol
       short basereg;
     }
   aux_value;
-
 };
 
 #define SYMBOL_NAMESPACE(symbol)       (symbol)->namespace
@@ -600,11 +609,11 @@ struct partial_symbol
 
   /* Name space code.  */
 
-  enum namespace namespace;
+  enum namespace namespace BYTE_BITFIELD;
 
   /* Address class (for info_symbols) */
 
-  enum address_class class;
+  enum address_class class BYTE_BITFIELD;
 
 };
 
@@ -991,14 +1000,15 @@ reread_symbols PARAMS ((void));
 /* Functions for dealing with the minimal symbol table, really a misc
    address<->symbol mapping for things we don't have debug symbols for.  */
 
-extern void
-prim_record_minimal_symbol PARAMS ((const char *, CORE_ADDR,
-                                   enum minimal_symbol_type));
+extern void prim_record_minimal_symbol PARAMS ((const char *, CORE_ADDR,
+                                               enum minimal_symbol_type,
+                                               struct objfile *));
 
-extern void
-prim_record_minimal_symbol_and_info PARAMS ((const char *, CORE_ADDR,
-                                            enum minimal_symbol_type,
-                                            char *info, int section));
+extern void prim_record_minimal_symbol_and_info
+  PARAMS ((const char *, CORE_ADDR,
+          enum minimal_symbol_type,
+          char *info, int section,
+          struct objfile *));
 
 extern struct minimal_symbol *
 lookup_minimal_symbol PARAMS ((const char *, struct objfile *));