aboutsummaryrefslogtreecommitdiff
path: root/gdb/symtab.h
diff options
context:
space:
mode:
authorJohn Gilmore <gnu@cygnus>1994-01-12 09:53:06 +0000
committerJohn Gilmore <gnu@cygnus>1994-01-12 09:53:06 +0000
commit21578747f0e17fc823bfe562ea6dc84017d47d40 (patch)
tree03427b86820d1cf3d12e9f85ac71918837c164e7 /gdb/symtab.h
parente0ea0fbd4169183ce4ddc6563503ea6b9f04c133 (diff)
downloadgdb-21578747f0e17fc823bfe562ea6dc84017d47d40.zip
gdb-21578747f0e17fc823bfe562ea6dc84017d47d40.tar.gz
gdb-21578747f0e17fc823bfe562ea6dc84017d47d40.tar.bz2
* 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.
Diffstat (limited to 'gdb/symtab.h')
-rw-r--r--gdb/symtab.h60
1 files changed, 35 insertions, 25 deletions
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 8a4f17b..d7f62a8 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -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 *));