/* Definitions for reading symbol files into GDB.
Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009, 2010
+ 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This file is part of GDB.
struct obstack;
struct block;
+/* Comparison function for symbol look ups. */
+
+typedef int (symbol_compare_ftype) (const char *string1,
+ const char *string2);
+
/* Partial symbols are stored in the psymbol_cache and pointers to
them are kept in a dynamically grown array that is obtained from
malloc and grown as necessary via realloc. Each objfile typically
/* The number of sections for which address information is
available. */
size_t num_sections;
- /* Sections whose names are file format dependent. */
+ /* Sections whose names are file format dependent. */
struct other_sections
{
CORE_ADDR addr;
int kind, const char *name,
domain_enum domain);
+ /* This is called to expand symbol tables before looking up a
+ symbol. A backend can choose to implement this and then have its
+ `lookup_symbol' hook always return NULL, or the reverse. (It
+ doesn't make sense to implement both.) The arguments are as for
+ `lookup_symbol'. */
+ void (*pre_expand_symtabs_matching) (struct objfile *objfile,
+ int kind, const char *name,
+ domain_enum domain);
+
/* Print statistics about any indices loaded for OBJFILE. The
statistics should be printed to gdb_stdout. This is used for
"maint print statistics". */
void (*expand_all_symtabs) (struct objfile *objfile);
/* Read all symbol tables associated with OBJFILE which have the
- file name FILENAME. */
+ file name FILENAME.
+ This is for the purposes of examining code only, e.g., expand_line_sal.
+ The routine may ignore debug info that is known to not be useful with
+ code, e.g., DW_TAG_type_unit for dwarf debug info. */
void (*expand_symtabs_with_filename) (struct objfile *objfile,
const char *filename);
/* Return the file name of the file holding the symbol in OBJFILE
named NAME. If no such symbol exists in OBJFILE, return NULL. */
- char *(*find_symbol_file) (struct objfile *objfile, const char *name);
-
- /* This method is specific to Ada. It walks the partial symbol
- tables of OBJFILE looking for a name match. WILD_MATCH and
- IS_NAME_SUFFIX are predicate functions that the implementation
- may call to check for a match.
-
- This function is completely ad hoc and new implementations should
- refer to the psymtab implementation to see what to do. */
- void (*map_ada_symtabs) (struct objfile *objfile,
- int (*wild_match) (const char *, int, const char *),
- int (*is_name_suffix) (const char *),
- void (*callback) (struct objfile *,
- struct symtab *, void *),
- const char *name, int global,
- domain_enum namespace, int wild,
- void *data);
+ const char *(*find_symbol_file) (struct objfile *objfile, const char *name);
+
+ /* Find global or static symbols in all tables that are in NAMESPACE
+ and for which MATCH (symbol name, NAME) == 0, passing each to
+ CALLBACK, reading in partial symbol symbol tables as needed. Look
+ through global symbols if GLOBAL and otherwise static symbols.
+ Passes NAME, NAMESPACE, and DATA to CALLBACK with each symbol
+ found. After each block is processed, passes NULL to CALLBACK.
+ MATCH must be weaker than strcmp_iw in the sense that
+ strcmp_iw(x,y) == 0 --> MATCH(x,y) == 0. ORDERED_COMPARE, if
+ non-null, must be an ordering relation compatible with strcmp_iw
+ in the sense that
+ strcmp(x,y) == 0 --> ORDERED_COMPARE(x,y) == 0
+ and
+ strcmp(x,y) <= 0 --> ORDERED_COMPARE(x,y) <= 0
+ (allowing strcmp(x,y) < 0 while ORDERED_COMPARE(x, y) == 0).
+ CALLBACK returns 0 to indicate that the scan should continue, or
+ non-zero to indicate that the scan should be terminated. */
+
+ void (*map_matching_symbols) (const char *name, domain_enum namespace,
+ struct objfile *, int global,
+ int (*callback) (struct block *,
+ struct symbol *, void *),
+ void *data,
+ symbol_compare_ftype *match,
+ symbol_compare_ftype *ordered_compare);
/* Expand all symbol tables in OBJFILE matching some criteria.
void (*fun) (const char *, void *),
void *data);
- /* Call a callback for every file defined in OBJFILE. FUN is the
- callback. It is passed the file's name, the file's full name,
- and the DATA passed to this function. */
+ /* Call a callback for every file defined in OBJFILE whose symtab is
+ not already read in. FUN is the callback. It is passed the file's name,
+ the file's full name, and the DATA passed to this function. */
void (*map_symbol_filenames) (struct objfile *objfile,
void (*fun) (const char *, const char *,
void *),
/* The "quick" (aka partial) symbol functions for this symbol
reader. */
const struct quick_symbol_functions *qf;
-
- /* 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 struct section_addr_info *
- build_section_addr_info_from_objfile (const struct objfile *objfile);
+ build_section_addr_info_from_objfile (const struct objfile *objfile);
extern void relative_addr_info_to_section_offsets
(struct section_offsets *section_offsets, int num_sections,
extern bfd_byte *default_symfile_relocate (struct objfile *objfile,
asection *sectp, bfd_byte *buf);
-extern void extend_psymbol_list (struct psymbol_allocation_list *,
- struct objfile *);
-
-/* Add any kind of symbol to a psymbol_allocation_list. */
+extern struct symtab *allocate_symtab (const char *, struct objfile *);
-/* #include "demangle.h" */
-
-extern const
-struct partial_symbol *add_psymbol_to_list (char *, int, int, domain_enum,
- enum address_class,
- struct psymbol_allocation_list *,
- long, CORE_ADDR,
- enum language, struct objfile *);
-
-extern void init_psymbol_list (struct objfile *, int);
-
-extern struct symtab *allocate_symtab (char *, struct objfile *);
-
-extern void add_symtab_fns (struct sym_fns *);
+extern void add_symtab_fns (const struct sym_fns *);
/* This enum encodes bit-flags passed as ADD_FLAGS parameter to
syms_from_objfile, symbol_file_add, etc. */
extern void free_section_addr_info (struct section_addr_info *);
-extern struct partial_symtab *start_psymtab_common (struct objfile *,
- struct section_offsets *,
- const char *, CORE_ADDR,
- struct partial_symbol **,
- struct partial_symbol **);
-
/* 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 (const char *, int, struct obstack *);
-/* Concatenate strings S1, S2 and S3; return the new string. Space is
- found in the OBSTACKP */
+/* Concatenate NULL terminated variable argument list of `const char
+ *' strings; return the new string. Space is found in the OBSTACKP.
+ Argument list must be terminated by a sentinel expression `(char *)
+ NULL'. */
-extern char *obconcat (struct obstack *obstackp, const char *, const char *,
- const char *);
+extern char *obconcat (struct obstack *obstackp, ...) ATTRIBUTE_SENTINEL;
/* Variables */
extern void set_initial_language (void);
-extern struct partial_symtab *allocate_psymtab (const char *,
- struct objfile *);
-
-extern void discard_psymtab (struct partial_symtab *);
-
extern void find_lowest_section (bfd *, asection *, void *);
extern bfd *symfile_bfd_open (char *);
extern int dwarf2_has_info (struct objfile *);
+extern int dwarf2_initialize_objfile (struct objfile *);
extern void dwarf2_build_psymtabs (struct objfile *);
extern void dwarf2_build_frame_info (struct objfile *);