* 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.
This commit is contained in:
John Gilmore 1994-01-12 09:53:06 +00:00
parent e0ea0fbd41
commit 21578747f0
2 changed files with 46 additions and 27 deletions

View 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

View 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,18 +558,18 @@ struct symbol
struct general_symbol_info ginfo;
/* Name space code. */
enum namespace namespace;
/* Address class */
enum address_class class;
/* Data type of value */
struct type *type;
/* Name space code. */
enum namespace namespace BYTE_BITFIELD;
/* Address class */
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
machine generated programs? */
@ -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 *));