diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/defs.h | 9 | ||||
-rw-r--r-- | gdb/symtab.h | 86 |
3 files changed, 54 insertions, 47 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 895c940..cd1cc76 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2003-08-20 Michael Chastain <mec@shout.net> + + * defs.h (ENUM_BITFIELD): New macro. + * symtab.h (ENUM_BITFIELD): Use it. + (BYTE_BITFIELD): Remove old macro, which was already disabled. + 2003-08-19 Shrinivas Atre <shrinivasa@kpitcummins.com> * MAINTAINERS (write after approval): Add myself. @@ -285,6 +285,15 @@ struct cleanup #endif #endif +/* Be conservative and use enum bitfields only with GCC. + This is copied from gcc 3.3.1, system.h. */ + +#if defined(__GNUC__) && (__GNUC__ >= 2) +#define ENUM_BITFIELD(TYPE) enum TYPE +#else +#define ENUM_BITFIELD(TYPE) unsigned int +#endif + /* Needed for various prototypes */ struct symtab; diff --git a/gdb/symtab.h b/gdb/symtab.h index 29df929..a7f1e30 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -35,17 +35,6 @@ struct blockvector; struct axs_value; struct agent_expr; -/* Don't do this; it means that if some .o's are compiled with GNU C - and some are not (easy to do accidentally the way we configure - things; also it is a pain to have to "make clean" every time you - want to switch compilers), then GDB dies a horrible death. */ -/* GNU C supports enums that are bitfields. Some compilers don't. */ -#if 0 && 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 @@ -107,7 +96,7 @@ struct general_symbol_info This is used to select one of the fields from the language specific union above. */ - enum language language BYTE_BITFIELD; + ENUM_BITFIELD(language) language : 8; /* Which section is this symbol in? This is an index into section_offsets for this objfile. Negative means that the symbol @@ -227,6 +216,37 @@ extern char *symbol_demangled_name (struct general_symbol_info *symbol); #define SYMBOL_MATCHES_NATURAL_NAME(symbol, name) \ (strcmp_iw (SYMBOL_NATURAL_NAME (symbol), (name)) == 0) +/* Classification types for a minimal symbol. These should be taken as + "advisory only", since if gdb can't easily figure out a + classification it simply selects mst_unknown. It may also have to + guess when it can't figure out which is a better match between two + types (mst_data versus mst_bss) for example. Since the minimal + symbol info is sometimes derived from the BFD library's view of a + file, we need to live with what information bfd supplies. */ + +enum minimal_symbol_type +{ + mst_unknown = 0, /* Unknown type, the default */ + mst_text, /* Generally executable instructions */ + mst_data, /* Generally initialized data */ + mst_bss, /* Generally uninitialized data */ + mst_abs, /* Generally absolute (nonrelocatable) */ + /* GDB uses mst_solib_trampoline for the start address of a shared + library trampoline entry. Breakpoints for shared library functions + are put there if the shared library is not yet loaded. + After the shared library is loaded, lookup_minimal_symbol will + prefer the minimal symbol from the shared library (usually + a mst_text symbol) over the mst_solib_trampoline symbol, and the + breakpoints will be moved to their true address in the shared + library via breakpoint_re_set. */ + mst_solib_trampoline, /* Shared library trampoline code */ + /* For the mst_file* types, the names are only guaranteed to be unique + 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 */ +}; + /* 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. @@ -268,37 +288,9 @@ struct minimal_symbol char *filename; #endif - /* Classification types for this symbol. These should be taken as "advisory - only", since if gdb can't easily figure out a classification it simply - selects mst_unknown. It may also have to guess when it can't figure out - which is a better match between two types (mst_data versus mst_bss) for - example. Since the minimal symbol info is sometimes derived from the - BFD library's view of a file, we need to live with what information bfd - supplies. */ + /* Classification type for this minimal symbol. */ - enum minimal_symbol_type - { - mst_unknown = 0, /* Unknown type, the default */ - mst_text, /* Generally executable instructions */ - mst_data, /* Generally initialized data */ - mst_bss, /* Generally uninitialized data */ - mst_abs, /* Generally absolute (nonrelocatable) */ - /* GDB uses mst_solib_trampoline for the start address of a shared - library trampoline entry. Breakpoints for shared library functions - are put there if the shared library is not yet loaded. - After the shared library is loaded, lookup_minimal_symbol will - prefer the minimal symbol from the shared library (usually - a mst_text symbol) over the mst_solib_trampoline symbol, and the - breakpoints will be moved to their true address in the shared - library via breakpoint_re_set. */ - mst_solib_trampoline, /* Shared library trampoline code */ - /* For the mst_file* types, the names are only guaranteed to be unique - 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 */ - } - type BYTE_BITFIELD; + ENUM_BITFIELD(minimal_symbol_type) type : 8; /* Minimal symbols with the same hash key are kept on a linked list. This is the link. */ @@ -321,7 +313,7 @@ struct minimal_symbol /* Different name domains for symbols. Looking up a symbol specifies a domain and ignores symbol definitions in other name domains. */ -typedef enum +typedef enum domain_enum_tag { /* UNDEF_DOMAIN is used when a domain has not been discovered or none of the following apply. This usually indicates an error either @@ -578,11 +570,11 @@ struct symbol /* Domain code. */ - domain_enum domain BYTE_BITFIELD; + ENUM_BITFIELD(domain_enum_tag) domain : 6; /* Address class */ - enum address_class aclass BYTE_BITFIELD; + ENUM_BITFIELD(address_class) aclass : 6; /* Line number of definition. FIXME: Should we really make the assumption that nobody will try to debug files longer than 64K lines? What about @@ -655,11 +647,11 @@ struct partial_symbol /* Name space code. */ - domain_enum domain BYTE_BITFIELD; + ENUM_BITFIELD(domain_enum_tag) domain : 6; /* Address class (for info_symbols) */ - enum address_class aclass BYTE_BITFIELD; + ENUM_BITFIELD(address_class) aclass : 6; }; |