/* Symbol table definitions for GDB.
- Copyright 1986, 89, 91, 92, 93, 94, 95, 96, 1998
+ Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+ 1997, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
This file is part of GDB.
#include "obstack.h"
#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
+#define obstack_chunk_free xfree
#include "bcache.h"
/* Don't do this; it means that if some .o's are compiled with GNU C
#define SYMBOL_INIT_DEMANGLED_NAME(symbol,obstack) \
do { \
char *demangled = NULL; \
+ if (SYMBOL_LANGUAGE (symbol) == language_unknown) \
+ SYMBOL_LANGUAGE (symbol) = language_auto; \
if (SYMBOL_LANGUAGE (symbol) == language_cplus \
|| SYMBOL_LANGUAGE (symbol) == language_auto) \
{ \
SYMBOL_LANGUAGE (symbol) = language_cplus; \
SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = \
obsavestring (demangled, strlen (demangled), (obstack)); \
- free (demangled); \
+ xfree (demangled); \
} \
else \
{ \
SYMBOL_LANGUAGE (symbol) = language_java; \
SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = \
obsavestring (demangled, strlen (demangled), (obstack)); \
- free (demangled); \
+ xfree (demangled); \
} \
else \
{ \
SYMBOL_LANGUAGE (symbol) = language_chill; \
SYMBOL_CHILL_DEMANGLED_NAME (symbol) = \
obsavestring (demangled, strlen (demangled), (obstack)); \
- free (demangled); \
+ xfree (demangled); \
} \
else \
{ \
SYMBOL_CHILL_DEMANGLED_NAME (symbol) = NULL; \
} \
} \
- if (SYMBOL_LANGUAGE (symbol) == language_auto) \
- { \
- SYMBOL_LANGUAGE (symbol) = language_unknown; \
- } \
} while (0)
/* Macro that returns the demangled name for a symbol based on the language
\f
/* Source-file information. This describes the relation between source files,
- ine numbers and addresses in the program text. */
+ line numbers and addresses in the program text. */
struct sourcevector
{
CORE_ADDR offsets[1]; /* As many as needed. */
};
-#define ANOFFSET(secoff, whichone) (secoff->offsets[whichone])
+#define ANOFFSET(secoff, whichone) \
+ ((whichone == -1) \
+ ? (internal_error (__FILE__, __LINE__, "Section index is uninitialized"), -1) \
+ : secoff->offsets[whichone])
/* The maximum possible size of a section_offsets table. */
#define VTBL_FNADDR_OFFSET 2
-/* Macro that yields non-zero value iff NAME is the prefix for C++ operator
- names. If you leave out the parenthesis here you will lose!
- Currently 'o' 'p' CPLUS_MARKER is used for both the symbol in the
- symbol-file and the names in gdb's symbol table.
- Note that this macro is g++ specific (FIXME). */
-
-#define OPNAME_PREFIX_P(NAME) \
- ((NAME)[0] == 'o' && (NAME)[1] == 'p' && is_cplus_marker ((NAME)[2]))
-
-/* Macro that yields non-zero value iff NAME is the prefix for C++ vtbl
- names. Note that this macro is g++ specific (FIXME).
- '_vt$' is the old cfront-style vtables; '_VT$' is the new
- style, using thunks (where '$' is really CPLUS_MARKER). */
-
-#define VTBL_PREFIX_P(NAME) \
- ((NAME)[0] == '_' \
- && (((NAME)[1] == 'V' && (NAME)[2] == 'T') \
- || ((NAME)[1] == 'v' && (NAME)[2] == 't')) \
- && is_cplus_marker ((NAME)[3]))
-
-/* Macro that yields non-zero value iff NAME is the prefix for C++ destructor
- names. Note that this macro is g++ specific (FIXME). */
-
-#define DESTRUCTOR_PREFIX_P(NAME) \
- ((NAME)[0] == '_' && is_cplus_marker ((NAME)[1]) && (NAME)[2] == '_')
-\f
-
/* External variables and functions for the objects described above. */
/* This symtab variable specifies the current file for printing source lines */
/* lookup a symbol table by source file name */
-extern struct symtab *lookup_symtab (char *);
+extern struct symtab *lookup_symtab (const char *);
/* lookup a symbol by name (optional block, optional symtab) */
/* lookup partial symbol table by filename */
-extern struct partial_symtab *lookup_partial_symtab (char *);
+extern struct partial_symtab *lookup_partial_symtab (const char *);
/* lookup partial symbol table by address */
extern struct symtabs_and_lines decode_line_spec_1 (char *, int);
-extern struct symtabs_and_lines
-decode_line_1 (char **, int, struct symtab *, int, char ***);
-
/* Symmisc.c */
void maintenance_print_symbols (char *, int);
extern char **make_symbol_completion_list (char *, char *);
+extern char **make_file_symbol_completion_list (char *, char *, char *);
+
extern struct symbol **make_symbol_overload_list (struct symbol *);
+extern char **make_source_files_completion_list (char *, char *);
+
/* symtab.c */
extern struct partial_symtab *find_main_psymtab (void);
+extern struct symtab *find_line_symtab (struct symtab *, int, int *, int *);
+
+extern struct symtab_and_line find_function_start_sal (struct symbol *sym, int);
+
/* blockframe.c */
extern struct blockvector *blockvector_for_pc (CORE_ADDR, int *);
extern struct symbol *fixup_symbol_section (struct symbol *,
struct objfile *);
+extern struct partial_symbol *fixup_psymbol_section (struct partial_symbol
+ *psym,
+ struct objfile *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! */
+ Callers must free the search list using free_search_symbols! */
struct symbol_search
{
/* The block in which the match was found. Could be, for example,
extern void free_search_symbols (struct symbol_search *);
extern struct cleanup *make_cleanup_free_search_symbols (struct symbol_search *);
+/* The name of the ``main'' function.
+ FIXME: cagney/2001-03-20: Can't make main_name() const since some
+ of the calling code currently assumes that the string isn't
+ const. */
+extern void set_main_name (const char *name);
+extern /*const*/ char *main_name (void);
+
#endif /* !defined(SYMTAB_H) */