This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [rfa] ENUM BITFIELD, here it comes again


[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  <mec@shout.net>

	* 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--


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]