* pe-dll.c (fill_edata): don't strip underscores
[deliverable/binutils-gdb.git] / gdb / symtab.h
index f54cc5bf606c5d99d2bb3c2400596ae5c3d645ed..977a99d8e00aaa16615885b562c0946aa680e691 100644 (file)
@@ -1,5 +1,6 @@
 /* Symbol table definitions for GDB.
-   Copyright 1986, 1989, 1991, 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+   Copyright 1986, 89, 91, 92, 93, 94, 95, 96, 1998
+             Free Software Foundation, Inc.
 
 This file is part of GDB.
 
@@ -27,6 +28,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define obstack_chunk_free free
 #include "bcache.h"
 
+#include "gnu-regex.h"
+
 /* 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
@@ -85,6 +88,9 @@ struct general_symbol_info
   union
     {
       struct cplus_specific      /* For C++ */
+                               /* start-sanitize-java */
+                               /*  and Java */
+                               /* end-sanitize-java */
        {
          char *demangled_name;
        } cplus_specific;
@@ -135,7 +141,11 @@ extern CORE_ADDR symbol_overlayed_address PARAMS((CORE_ADDR, asection *));
 #define SYMBOL_INIT_LANGUAGE_SPECIFIC(symbol,language)                 \
   do {                                                                 \
     SYMBOL_LANGUAGE (symbol) = language;                               \
-    if (SYMBOL_LANGUAGE (symbol) == language_cplus)                    \
+    if (SYMBOL_LANGUAGE (symbol) == language_cplus                     \
+       /* start-sanitize-java */                                       \
+       || SYMBOL_LANGUAGE (symbol) == language_java                    \
+       /* end-sanitize-java */                                         \
+       )                                                               \
       {                                                                        \
        SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL;                    \
       }                                                                        \
@@ -179,6 +189,25 @@ extern CORE_ADDR symbol_overlayed_address PARAMS((CORE_ADDR, asection *));
            SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL;                \
          }                                                             \
       }                                                                        \
+  /* start-sanitize-java */                                            \
+    if (SYMBOL_LANGUAGE (symbol) == language_java)                     \
+      {                                                                        \
+       demangled =                                                     \
+         cplus_demangle (SYMBOL_NAME (symbol),                         \
+                         DMGL_PARAMS | DMGL_ANSI | DMGL_JAVA);         \
+       if (demangled != NULL)                                          \
+         {                                                             \
+           SYMBOL_LANGUAGE (symbol) = language_java;                   \
+           SYMBOL_CPLUS_DEMANGLED_NAME (symbol) =                      \
+             obsavestring (demangled, strlen (demangled), (obstack));  \
+           free (demangled);                                           \
+         }                                                             \
+       else                                                            \
+         {                                                             \
+           SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL;                \
+         }                                                             \
+      }                                                                        \
+  /* end-sanitize-java */                                              \
     if (demangled == NULL                                              \
        && (SYMBOL_LANGUAGE (symbol) == language_chill                  \
            || SYMBOL_LANGUAGE (symbol) == language_auto))              \
@@ -208,6 +237,9 @@ extern CORE_ADDR symbol_overlayed_address PARAMS((CORE_ADDR, asection *));
 
 #define SYMBOL_DEMANGLED_NAME(symbol)                                  \
   (SYMBOL_LANGUAGE (symbol) == language_cplus                          \
+   /* start-sanitize-java */                                           \
+   || SYMBOL_LANGUAGE (symbol) == language_java                                \
+   /* end-sanitize-java */                                             \
    ? SYMBOL_CPLUS_DEMANGLED_NAME (symbol)                              \
    : (SYMBOL_LANGUAGE (symbol) == language_chill                       \
       ? SYMBOL_CHILL_DEMANGLED_NAME (symbol)                           \
@@ -281,14 +313,17 @@ struct minimal_symbol
 
   struct general_symbol_info ginfo;
 
-  /* The info field is available for caching machine-specific information that
-     The AMD 29000 tdep.c uses it to remember things it has decoded from the
-     instructions in the function header, so it doesn't have to rederive the
-     info constantly (over a serial line).  It is initialized to zero and
-     stays that way until target-dependent code sets it.  Storage for any data
-     pointed to by this field should be allocated on the symbol_obstack for
-     the associated objfile.  The type would be "void *" except for reasons
-     of compatibility with older compilers.  This field is optional. */
+  /* The info field is available for caching machine-specific information
+     so it doesn't have to rederive the info constantly (over a serial line).
+     It is initialized to zero and stays that way until target-dependent code
+     sets it.  Storage for any data pointed to by this field should be allo-
+     cated on the symbol_obstack for the associated objfile.  
+     The type would be "void *" except for reasons of compatibility with older
+     compilers.  This field is optional.
+
+     Currently, the AMD 29000 tdep.c uses it to remember things it has decoded
+     from the instructions in the function header, and the MIPS-16 code uses
+     it to identify 16-bit procedures.  */
 
   char *info;
 
@@ -462,7 +497,24 @@ typedef enum
   /* LABEL_NAMESPACE may be used for names of labels (for gotos);
      currently it is not used and labels are not recorded at all.  */
 
-  LABEL_NAMESPACE
+  LABEL_NAMESPACE,
+
+  /* Searching namespaces. These overlap with VAR_NAMESPACE, providing
+     some granularity with the search_symbols function. */
+
+  /* Everything in VAR_NAMESPACE minus FUNCTIONS_-, TYPES_-, and
+     METHODS_NAMESPACE */
+  VARIABLES_NAMESPACE,
+
+  /* All functions -- for some reason not methods, though. */
+  FUNCTIONS_NAMESPACE,
+
+  /* All defined types */
+  TYPES_NAMESPACE,
+
+  /* All class methods -- why is this separated out? */
+  METHODS_NAMESPACE
+
 } namespace_enum;
 
 /* An address-class says where to find the value of a symbol.  */
@@ -584,6 +636,22 @@ enum address_class
   LOC_OPTIMIZED_OUT
 };
 
+/* Linked list of symbol's live ranges. */
+
+struct range_list              
+{
+  CORE_ADDR start;
+  CORE_ADDR end;
+  struct range_list *next;     
+};
+
+/* Linked list of aliases for a particular main/primary symbol.  */
+struct alias_list
+  {
+    struct symbol *sym;
+    struct alias_list *next;
+  };
+
 struct symbol
 {
 
@@ -623,13 +691,25 @@ struct symbol
       short basereg;
     }
   aux_value;
+
+
+  /* Link to a list of aliases for this symbol.
+     Only a "primary/main symbol may have aliases.  */
+  struct alias_list *aliases;
+
+  /* List of ranges where this symbol is active.  This is only
+     used by alias symbols at the current time.  */
+  struct range_list *ranges;
 };
 
+
 #define SYMBOL_NAMESPACE(symbol)       (symbol)->namespace
 #define SYMBOL_CLASS(symbol)           (symbol)->aclass
 #define SYMBOL_TYPE(symbol)            (symbol)->type
 #define SYMBOL_LINE(symbol)            (symbol)->line
 #define SYMBOL_BASEREG(symbol)         (symbol)->aux_value.basereg
+#define SYMBOL_ALIASES(symbol)         (symbol)->aliases
+#define SYMBOL_RANGES(symbol)          (symbol)->ranges
 \f
 /* A partial_symbol records the name, namespace, and address class of
    symbols whose types we have not parsed yet.  For functions, it also
@@ -807,6 +887,13 @@ struct symtab
 
     enum language language;
 
+    /* String that identifies the format of the debugging information, such
+       as "stabs", "dwarf 1", "dwarf 2", "coff", etc.  This is mostly useful
+       for automated testing of gdb but may also be information that is
+       useful to the user. */
+
+    char *debugformat;
+
     /* String of version information.  May be zero.  */
 
     char *version;
@@ -820,14 +907,6 @@ struct symtab
 
     struct objfile *objfile;
 
-    /* Anything extra for this symtab.  This is for target machines
-       with special debugging info of some sort (which cannot just
-       be represented in a normal symtab).  */
-
-#if defined (EXTRA_SYMTAB_INFO)
-    EXTRA_SYMTAB_INFO
-#endif
-
   };
 
 #define BLOCKVECTOR(symtab)    (symtab)->blockvector
@@ -1041,12 +1120,17 @@ find_pc_sect_function PARAMS ((CORE_ADDR, asection *));
   
 /* lookup function from address, return name, start addr and end addr */
 
-extern int find_pc_partial_function PARAMS ((CORE_ADDR, char **, 
+extern int 
+find_pc_partial_function PARAMS ((CORE_ADDR, char **,
                                             CORE_ADDR *, CORE_ADDR *));
 
 extern void
 clear_pc_function_cache PARAMS ((void));
 
+extern int 
+find_pc_sect_partial_function PARAMS ((CORE_ADDR, asection *, 
+                                       char **, CORE_ADDR *, CORE_ADDR *));
+
 /* from symtab.c: */
 
 /* lookup partial symbol table by filename */
@@ -1206,8 +1290,8 @@ find_addr_symbol PARAMS ((CORE_ADDR, struct symtab **, CORE_ADDR *));
 
 /* Given a symtab and line number, return the pc there.  */
 
-extern CORE_ADDR
-find_line_pc PARAMS ((struct symtab *, int));
+extern int
+find_line_pc PARAMS ((struct symtab *, int, CORE_ADDR *));
 
 extern int 
 find_line_pc_range PARAMS ((struct symtab_and_line,
@@ -1284,6 +1368,8 @@ select_source_symtab PARAMS ((struct symtab *));
 
 extern char **make_symbol_completion_list PARAMS ((char *, char *));
 
+extern void _initialize_source PARAMS ((void));
+
 /* symtab.c */
 
 extern struct partial_symtab *
@@ -1294,10 +1380,10 @@ find_main_psymtab PARAMS ((void));
 extern struct blockvector *
 blockvector_for_pc PARAMS ((CORE_ADDR, int *));
 
-
 extern struct blockvector *
 blockvector_for_pc_sect PARAMS ((CORE_ADDR, asection *, int *, 
                                 struct symtab *));
+
 /* symfile.c */
 
 extern void
@@ -1314,4 +1400,32 @@ in_prologue PARAMS ((CORE_ADDR pc, CORE_ADDR func_start));
 extern struct symbol *
 fixup_symbol_section PARAMS ((struct symbol  *, struct objfile *));
 
+/* Symbol searching */
+
+/* When using search_symbols, a list of the following structs is returned.
+   Callers must free the search list using free_symbol_search! */
+struct symbol_search
+{
+  /* The block in which the match was found. Could be, for example,
+     STATIC_BLOCK or GLOBAL_BLOCK. */
+  int block;
+
+  /* Information describing what was found.
+
+     If symtab abd symbol are NOT NULL, then information was found
+     for this match. */
+  struct symtab *symtab;
+  struct symbol *symbol;
+
+  /* If msymbol is non-null, then a match was made on something for
+     which only minimal_symbols exist. */
+  struct minimal_symbol *msymbol;
+
+  /* A link to the next match, or NULL for the end. */
+  struct symbol_search *next;
+};
+
+extern void search_symbols PARAMS ((char *, namespace_enum, int, char **, struct symbol_search **));
+extern void free_search_symbols PARAMS ((struct symbol_search *));
+
 #endif /* !defined(SYMTAB_H) */
This page took 0.027465 seconds and 4 git commands to generate.