binutils-gdb/gdb/symfile.h
Fred Fish 2e4964adfc * defs.h (STRCMP, STREQ, STREQN): New macros.
* defs.h (demangle_and_match):  Remove prototype.
	* dwarfread.c (STREQ, STREQN):  Remove macros, replaced with STREQ
	  and STREQN defined in defs.h.
	* dwarfread.c (set_cu_language):  For completely unknown languages,
	  try to deduce the language from the filename.  Retain behavior
	  that for known languages we don't know how to handle, we use
	  language_unknown.
	* dwarfread.c (enum_type, symthesize_typedef):  Initialize language
	  and demangled name fields in symbol.
	* dwarfread.c, mipsread.c, partial-stab.h:  For all usages of
	  ADD_PSYMBOL_TO_LIST, add language and objfile parameters.
	* dwarfread.c (new_symbol):  Attempt to demangle C++ symbol names
	  and cache the results in SYMBOL_DEMANGLED_NAME for the symbol.
	* elfread.c (STREQ):  Remove macro, use STREQ defined in defs.h.
	  Replace usages throughout.
	* elfread.c (demangle.h):  Include.
	* elfread.c (record_minimal_symbol):  Remove prototype and function.
	* gdbtypes.h, symtab.h (B_SET, B_CLR, B_TST, B_TYPE, B_BYTES,
	  B_CLRALL):  Moved from symtab.h to gdbtypes.h.
	* infcmd.c (jump_command):  Remove code to demangle name and add
	  it to a cleanup list.  Now just use SYMBOL_DEMANGLED_NAME.
	* minsyms.c (demangle.h):  Include.
	* minsyms.c (lookup_minimal_symbol):  Indent comment to match code.
	* minsyms.c (install_minimal_symbols):  Attempt to demangle symbol
	  names as C++ names, and cache them in SYMBOL_DEMANGLED_NAME.
	* mipsread.c (psymtab_language):  Add static variable.
	* stabsread.c (demangle.h):  Include.
	* stabsread.c (define_symbol):  Attempt to demangle C++ symbol
	  names and cache them in the SYMBOL_DEMANGLED_NAME field.
	* stack.c (return_command):  Remove explicit demangling of name
	  and use of cleanups.  Just use SYMBOL_DEMANGLED_NAME.
	* symfile.c (demangle.h):  Include.
	* symfile.c (add_psymbol_to_list, add_psymbol_addr_to_list):  Fix
	  to match macros in symfile.h and allow them to be compiled
	  if INLINE_ADD_PSYMBOL is not true.
	* symfile.h (INLINE_ADD_PSYMBOL):  Default to true if not set.
	* symfile.h (ADD_PSYMBOL_*):  Add language and objfile parameters.
	  Add code to demangle and cache C++ symbol names.  Use macro form
	  if INLINE_ADD_PSYMBOL is true, otherwise use C function form.
	* symmisc.c (add_psymbol_to_list, add_psymbol_addr_to_list):
	  Remove, also defined in symfile.c, which we already fixed.
	* symtab.c (expensive_mangler):  Remove prototype and function.
	* symtab.c (find_methods):  Remove physnames parameter and fix
	  prototype to match.
	* symtab.c (completion_list_add_symbol):  Name changed to
	  completion_list_add_name.
	* symtab.c (COMPLETION_LIST_ADD_SYMBOL):  New macro, adds both
	  the normal symbol name and the cached C++ demangled name.
	* symtab.c (lookup_demangled_partial_symbol,
	  lookup_demangled_block_symbol):  Remove prototypes and functions.
	* symtab.c (lookup_symbol):  Remove use of expensive_mangler,
	  use lookup_block_symbol instead of lookup_demangled_block_symbol.
	  Remove code to try demangling names and matching them.
	* symtab.c (lookup_partial_symbol, lookup_block_symbol):
	  Fix to try matching the cached demangled name if no match is
	  found using the regular symbol name.
	* symtab.c (find_methods):  Remove unused physnames array.
	* symtab.c (name_match, NAME_MATCH):  Remove function and macro,
	  replaced with SYMBOL_MATCHES_REGEXP from symtab.h.
	* symtab.c (completion_list_add_symbol):  Rewrite to use cached
	  C++ demangled symbol names.
	* symtab.h:  Much reformatting of structures and such to add
	  whitespace to make them more readable, and make them more
	  consistent with other gdb structure definitions.
	* symtab.h (general_symbol_info): New struct containing fields
	  common to all symbols.
	* symtab.h (SYMBOL_LANGUAGE, SYMBOL_DEMANGLED_NAME,
	  SYMBOL_SOURCE_NAME, SYMBOL_LINKAGE_NAME, SYMBOL_MATCHES_NAME,
	  SYMBOL_MATCHES_REGEXP, MSYMBOL_INFO, MSYMBOL_TYPE):  New macros.
	* symtab. (struct minimal_symbol, struct partial_symbol, struct
	  symbol): Use general_symbol_info struct.
	* utils.c (demangle_and_match):  Remove, no longer used.
	* valops.c (demangle.h):  Include.
	* xcoffexec.c (eq):  Remove macro, replace usages with STREQ.
	* blockframe.c, breakpoint.c, c-exp.y, c-valprint.c, dbxread.c,
	  infcmd.c, m2-exp.y, minsyms.c, objfiles.h, solib.c, stack.c,
	  symmisc.c, symtab.c, valops.c:  Replace references to minimal
	  symbol fields with appropriate macros.
	* breakpoint.c, buildsym.c, c-exp.y, c-typeprint.c, c-valprint.c,
	  coffread.c, command.c, convex-tdep.c, cp-valprint.c, dbxread.c,
	  demangle.c, elfread.c, energize.c, environ.c, exec.c,
	  gdbtypes.c, i960-tdep.c, infrun.c, infrun-hacked.c, language.c,
	  main.c, minsyms.c, mipsread.c, partial-stab.h, remote-es1800.c,
	  remote-nindy.c, remote-udi.c, rs6000-tdep.c, solib.c, source.c,
	  sparc-pinsn.c, stabsread.c, standalone.c, state.c, stuff.c,
	  symfile.c, symmisc.c, symtab.c, symtab.h, tm-sysv4.h,
	  tm-ultra3.h, values.c, xcoffexec.c, xcoffread.c:  Replace strcmp
	  and strncmp usages with STREQ, STREQN, or STRCMP as appropriate.
	* breakpoint.c, buildsym.c, c-typeprint.c, expprint.c, findvar.c,
	  mipsread.c, printcmd.c, source.c, stabsread.c, stack.c,
	  symmisc.c, tm-29k.h, valops.c, values.c:  Replace SYMBOL_NAME
	  references with SYMBOL_SOURCE_NAME or SYMBOL_LINKAGE_NAME as
	  appropriate.
	* buildsym.c (start_subfile, patch_subfile_names):  Default the
	  source language to what can be deduced from the filename.
	* buildsym.c (end_symtab):  Update the source language in the
	  allocated symtab to match what we have been using.
	* buildsym.h (struct subfile):  Add a language field.
	* c-typeprint.c (c_print_type):  Remove code to do explicit
	  demangling.
	* dbxread.c (psymtab_language):  Add static variable.
	* dbxread.c (start_psymtab):  Initialize psymtab_language using
	  deduce_language_from_filename.
1992-12-23 06:34:57 +00:00

251 lines
8.2 KiB
C

/* Definitions for reading symbol files into GDB.
Copyright (C) 1990, 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#if !defined (SYMFILE_H)
#define SYMFILE_H
/* This file requires that you first include "bfd.h". */
struct psymbol_allocation_list {
struct partial_symbol *list;
struct partial_symbol *next;
int size;
};
/* Structure to keep track of symbol reading functions for various
object file types. */
struct sym_fns {
/* is the name, or name prefix, of the BFD "target type" that this
set of functions handles. E.g. "a.out" or "sunOs" or "coff" or "elf". */
char *sym_name;
/* counts how many bytes of sym_name should be checked against the
BFD target type of the file being read. If an exact match is
desired, specify the number of characters in sym_name plus 1 for the
NUL. If a prefix match is desired, specify the number of characters in
sym_name. */
int sym_namelen;
/* Initializes anything that is global to the entire symbol table. It is
called during symbol_file_add, when we begin debugging an entirely new
program. */
void (*sym_new_init) PARAMS ((struct objfile *));
/* Reads any initial information from a symbol file, and initializes the
struct sym_fns SF in preparation for sym_read(). It is called every
time we read a symbol file for any reason. */
void (*sym_init) PARAMS ((struct objfile *));
/* sym_read (objfile, addr, mainline)
Reads a symbol file into a psymtab (or possibly a symtab).
OBJFILE is the objfile struct for the file we are reading.
SECTION_OFFSETS
are the offset between the file's specified section addresses and
their true addresses in memory.
MAINLINE is 1 if this is the
main symbol table being read, and 0 if a secondary
symbol file (e.g. shared library or dynamically loaded file)
is being read. */
void (*sym_read) PARAMS ((struct objfile *, struct section_offsets *, int));
/* Called when we are finished with an objfile. Should do all cleanup
that is specific to the object file format for the particular objfile. */
void (*sym_finish) PARAMS ((struct objfile *));
/* This function produces a file-dependent section_offsets structure,
allocated in the objfile's storage, and based on the parameter.
The parameter is currently a CORE_ADDR (FIXME!) for backward compatibility
with the higher levels of GDB. It should probably be changed to
a string, where NULL means the default, and others are parsed in a file
dependent way. The result of this function is handed in to sym_read. */
struct section_offsets *(*sym_offsets) PARAMS ((struct objfile *, CORE_ADDR));
/* Finds the next struct sym_fns. They are allocated and initialized
in whatever module implements the functions pointed to; an
initializer calls add_symtab_fns to add them to the global chain. */
struct sym_fns *next;
};
extern void
extend_psymbol_list PARAMS ((struct psymbol_allocation_list *,
struct objfile *));
/* Add any kind of symbol to a psymbol_allocation_list. */
#ifndef INLINE_ADD_PSYMBOL
#define INLINE_ADD_PSYMBOL 1
#endif
#if !INLINE_ADD_PSYMBOL
/* Since one arg is a struct, we have to pass in a ptr and deref it (sigh) */
#define ADD_PSYMBOL_TO_LIST(name, namelength, namespace, class, list, value, language, objfile) \
add_psymbol_to_list (name, namelength, namespace, class, &list, value, language, objfile)
#define ADD_PSYMBOL_ADDR_TO_LIST(name, namelength, namespace, class, list, value, language, objfile) \
add_psymbol_addr_to_list (name, namelength, namespace, class, &list, value, language, objfile)
#else /* !INLINE_ADD_PSYMBOL */
#include "demangle.h"
#define ADD_PSYMBOL_VT_TO_LIST(NAME,NAMELENGTH,NAMESPACE,CLASS,LIST,VALUE,VT,LANGUAGE, OBJFILE) \
do { \
register struct partial_symbol *psym; \
register char *demangled_name; \
if ((LIST).next >= (LIST).list + (LIST).size) \
extend_psymbol_list (&(LIST),(OBJFILE)); \
psym = (LIST).next++; \
SYMBOL_NAME (psym) = \
(char *) obstack_alloc (&objfile->psymbol_obstack, \
(NAMELENGTH) + 1); \
memcpy (SYMBOL_NAME (psym), (NAME), (NAMELENGTH)); \
SYMBOL_NAME (psym)[(NAMELENGTH)] = '\0'; \
SYMBOL_NAMESPACE (psym) = (NAMESPACE); \
PSYMBOL_CLASS (psym) = (CLASS); \
VT (psym) = (VALUE); \
SYMBOL_LANGUAGE (psym) = (LANGUAGE); \
if ((LANGUAGE) == language_cplus) \
{ \
demangled_name = \
cplus_demangle (SYMBOL_NAME (psym), DMGL_PARAMS | DMGL_ANSI); \
if (demangled_name == NULL) \
{ \
SYMBOL_DEMANGLED_NAME (psym) = NULL; \
} \
else \
{ \
SYMBOL_DEMANGLED_NAME (psym) = \
obsavestring (demangled_name, strlen (demangled_name), \
&objfile->psymbol_obstack); \
free (demangled_name); \
} \
} \
} while (0);
/* Add a symbol with an integer value to a psymtab. */
#define ADD_PSYMBOL_TO_LIST(name, namelength, namespace, class, list, value, language, objfile) \
ADD_PSYMBOL_VT_TO_LIST (name, namelength, namespace, class, list, value, SYMBOL_VALUE, language, objfile)
/* Add a symbol with a CORE_ADDR value to a psymtab. */
#define ADD_PSYMBOL_ADDR_TO_LIST(name, namelength, namespace, class, list, value, language, objfile)\
ADD_PSYMBOL_VT_TO_LIST (name, namelength, namespace, class, list, value, SYMBOL_VALUE_ADDRESS, language, objfile)
#endif /* INLINE_ADD_PSYMBOL */
/* Functions */
extern void
sort_pst_symbols PARAMS ((struct partial_symtab *));
extern struct symtab *
allocate_symtab PARAMS ((char *, struct objfile *));
extern int
free_named_symtabs PARAMS ((char *));
extern void
fill_in_vptr_fieldno PARAMS ((struct type *));
extern void
add_symtab_fns PARAMS ((struct sym_fns *));
extern void
init_entry_point_info PARAMS ((struct objfile *));
extern void
syms_from_objfile PARAMS ((struct objfile *, CORE_ADDR, int, int));
extern void
new_symfile_objfile PARAMS ((struct objfile *, int, int));
extern struct partial_symtab *
start_psymtab_common PARAMS ((struct objfile *, struct section_offsets *,
char *, CORE_ADDR,
struct partial_symbol *,
struct partial_symbol *));
/* Sorting your symbols for fast lookup or alphabetical printing. */
extern void
sort_block_syms PARAMS ((struct block *));
extern void
sort_symtab_syms PARAMS ((struct symtab *));
extern void
sort_all_symtab_syms PARAMS ((void));
/* Make a copy of the string at PTR with SIZE characters in the symbol obstack
(and add a null character at the end in the copy).
Returns the address of the copy. */
extern char *
obsavestring PARAMS ((char *, int, struct obstack *));
/* Concatenate strings S1, S2 and S3; return the new string.
Space is found in the symbol_obstack. */
extern char *
obconcat PARAMS ((struct obstack *obstackp, const char *, const char *,
const char *));
/* Variables */
/* From symfile.c */
extern struct partial_symtab *
allocate_psymtab PARAMS ((char *, struct objfile *));
/* From dwarfread.c */
extern void
dwarf_build_psymtabs PARAMS ((struct objfile *, struct section_offsets *, int,
file_ptr, unsigned int, file_ptr, unsigned int));
/* From dbxread.c */
extern void
elfstab_build_psymtabs PARAMS ((struct objfile *objfile,
struct section_offsets *section_offsets,
int mainline,
file_ptr staboff, unsigned int stabsize,
file_ptr stabstroffset, unsigned int stabstrsize));
/* From demangle.c */
extern void
set_demangling_style PARAMS ((char *));
#endif /* !defined(SYMFILE_H) */