From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9069 invoked by alias); 20 Aug 2003 16:49:18 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 9055 invoked from network); 20 Aug 2003 16:49:15 -0000 Received: from unknown (HELO concert.shout.net) (204.253.184.25) by sources.redhat.com with SMTP; 20 Aug 2003 16:49:15 -0000 Received: from duracef.shout.net (duracef.shout.net [204.253.184.12]) by concert.shout.net (8.12.9/8.12.9) with ESMTP id h7KGnCca027124 for ; Wed, 20 Aug 2003 11:49:12 -0500 Received: from duracef.shout.net (localhost [127.0.0.1]) by duracef.shout.net (8.12.9/8.12.9) with ESMTP id h7KGnCHK008522 for ; Wed, 20 Aug 2003 11:49:12 -0500 Received: (from mec@localhost) by duracef.shout.net (8.12.9/8.12.9/Submit) id h7KGnC26008521 for gdb-patches@sources.redhat.com; Wed, 20 Aug 2003 12:49:12 -0400 Date: Wed, 20 Aug 2003 16:49:00 -0000 From: Michael Elizabeth Chastain Message-Id: <200308201649.h7KGnC26008521@duracef.shout.net> To: gdb-patches@sources.redhat.com Subject: Re: [rfa] ENUM BITFIELD, here it comes again X-SW-Source: 2003-08/txt/msg00341.txt.bz2 [Argh, I keep sending to gdb-patches@redhat.com instead of gdb-patches@sources.redhat.com. My mistake.] Okay, here is the next round, with the commments edited in symtab.h. Testing: I rebuilt gdb and it compiles. Since it's just a comment change, I didn't run the test suite again. Okay to commit? If there are more issues in symtab.h, can I commit the defs.h part, at least? Michael C === 2003-08-20 Michael Chastain * defs.h (ENUM_BITFIELD): New macro. * symtab.h (ENUM_BITFIELD): Use it. (BYTE_BITFIELD): Remove old macro, which was already disabled. Index: defs.h =================================================================== RCS file: /cvs/src/src/gdb/defs.h,v retrieving revision 1.127 diff -u -r1.127 defs.h --- defs.h 9 Aug 2003 14:57:30 -0000 1.127 +++ defs.h 19 Aug 2003 18:34:31 -0000 @@ -285,6 +285,15 @@ #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; Index: symtab.h =================================================================== RCS file: /cvs/src/src/gdb/symtab.h,v retrieving revision 1.77 diff -c -3 -p -r1.77 symtab.h *** symtab.h 22 Jul 2003 15:41:59 -0000 1.77 --- symtab.h 20 Aug 2003 16:34:31 -0000 *************** struct blockvector; *** 35,51 **** 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 --- 35,40 ---- *************** struct general_symbol_info *** 107,113 **** 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 --- 96,102 ---- This is used to select one of the fields from the language specific union above. */ ! 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 *************** extern char *symbol_demangled_name (stru *** 227,232 **** --- 216,252 ---- #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. *************** struct minimal_symbol *** 268,304 **** 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. */ ! 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; /* Minimal symbols with the same hash key are kept on a linked list. This is the link. */ --- 288,296 ---- char *filename; #endif ! /* Classification type for this minimal symbol. */ ! ENUM_BITFIELD(minimal_symbol_type) type : 8; /* Minimal symbols with the same hash key are kept on a linked list. This is the link. */ *************** struct minimal_symbol *** 321,327 **** /* Different name domains for symbols. Looking up a symbol specifies a domain and ignores symbol definitions in other name domains. */ ! typedef enum { /* UNDEF_DOMAIN is used when a domain has not been discovered or none of the following apply. This usually indicates an error either --- 313,319 ---- /* Different name domains for symbols. Looking up a symbol specifies a domain and ignores symbol definitions in other name domains. */ ! 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 *************** struct symbol *** 578,588 **** /* Domain code. */ ! domain_enum domain BYTE_BITFIELD; /* Address class */ ! enum address_class aclass 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 --- 570,580 ---- /* Domain code. */ ! ENUM_BITFIELD(domain_enum_tag) domain : 6; /* Address class */ ! 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 *************** struct partial_symbol *** 655,665 **** /* Name space code. */ ! domain_enum domain BYTE_BITFIELD; /* Address class (for info_symbols) */ ! enum address_class aclass BYTE_BITFIELD; }; --- 647,657 ---- /* Name space code. */ ! ENUM_BITFIELD(domain_enum_tag) domain : 6; /* Address class (for info_symbols) */ ! ENUM_BITFIELD(address_class) aclass : 6; }; --h7KGdDs21142.1061397553/int-mx1.corp.redhat.com--