aboutsummaryrefslogtreecommitdiff
path: root/gdb/symtab.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/symtab.h')
-rw-r--r--gdb/symtab.h151
1 files changed, 104 insertions, 47 deletions
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 4bf17d7..977a99d 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -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
@@ -84,7 +87,10 @@ struct general_symbol_info
union
{
- struct cplus_specific /* For C++ and Java */
+ struct cplus_specific /* For C++ */
+ /* start-sanitize-java */
+ /* and Java */
+ /* end-sanitize-java */
{
char *demangled_name;
} cplus_specific;
@@ -136,7 +142,10 @@ extern CORE_ADDR symbol_overlayed_address PARAMS((CORE_ADDR, asection *));
do { \
SYMBOL_LANGUAGE (symbol) = language; \
if (SYMBOL_LANGUAGE (symbol) == language_cplus \
- || SYMBOL_LANGUAGE (symbol) == language_java) \
+ /* start-sanitize-java */ \
+ || SYMBOL_LANGUAGE (symbol) == language_java \
+ /* end-sanitize-java */ \
+ ) \
{ \
SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL; \
} \
@@ -180,6 +189,7 @@ 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 = \
@@ -197,6 +207,7 @@ extern CORE_ADDR symbol_overlayed_address PARAMS((CORE_ADDR, asection *));
SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL; \
} \
} \
+ /* end-sanitize-java */ \
if (demangled == NULL \
&& (SYMBOL_LANGUAGE (symbol) == language_chill \
|| SYMBOL_LANGUAGE (symbol) == language_auto)) \
@@ -226,7 +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) \
@@ -300,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;
@@ -481,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. */
@@ -605,13 +638,20 @@ enum address_class
/* Linked list of symbol's live ranges. */
-struct live_range
+struct range_list
{
CORE_ADDR start;
CORE_ADDR end;
- struct live_range *next;
+ 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
{
@@ -652,34 +692,24 @@ struct symbol
}
aux_value;
- /* Live range information (if present) for debugging of optimized code.
- Gcc extensions were added to stabs to encode live range information.
- The syntax for referencing (defining) symbol aliases is "#n" ("#n=")
- where n is a number. The syntax for specifying a range is "l(#<m>,#<n>)",
- where m and n are numbers.
- aliases - list of other symbols which are lexically the same symbol,
- but were optimized into different storage classes (eg. for the
- local symbol "x", one symbol contains range information where x
- is on the stack, while an alias contains the live ranges where x
- is in a register).
- range - list of instruction ranges where the symbol is live. */
- struct live_range_info
- {
- struct symbol *aliases; /* Link to other aliases for this symbol. */
- struct live_range *range; /* Linked list of live ranges. */
- } live;
+
+ /* 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)->live.aliases
-#define SYMBOL_RANGE(symbol) (symbol)->live.range
-#define SYMBOL_RANGE_START(symbol) (symbol)->live.range->start
-#define SYMBOL_RANGE_END(symbol) (symbol)->live.range->end
-#define SYMBOL_RANGE_NEXT(symbol) (symbol)->live.range->next
+#define SYMBOL_ALIASES(symbol) (symbol)->aliases
+#define SYMBOL_RANGES(symbol) (symbol)->ranges
/* A partial_symbol records the name, namespace, and address class of
symbols whose types we have not parsed yet. For functions, it also
@@ -877,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
@@ -1098,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 */
@@ -1263,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,
@@ -1341,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 *
@@ -1351,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
@@ -1371,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) */