/* Definitions for reading symbol files into GDB.
- Copyright (C) 1990-2016 Free Software Foundation, Inc.
+ Copyright (C) 1990-2017 Free Software Foundation, Inc.
This file is part of GDB.
#include "probe.h"
#include "symfile-add-flags.h"
#include "objfile-flags.h"
+#include "gdb_bfd.h"
+#include "common/function-view.h"
/* Opaque declarations. */
struct target_section;
struct obj_section;
struct obstack;
struct block;
-struct probe;
struct value;
struct frame_info;
struct agent_expr;
struct axs_value;
+class probe;
/* 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
- has two of these, one for global symbols and one for static
- symbols. Although this adds a level of indirection for storing or
- accessing the partial symbols, it allows us to throw away duplicate
- psymbols and set all pointers to the single saved instance. */
-
-struct psymbol_allocation_list
-{
-
- /* Pointer to beginning of dynamically allocated array of pointers
- to partial symbols. The array is dynamically expanded as
- necessary to accommodate more pointers. */
-
- struct partial_symbol **list;
-
- /* Pointer to next available slot in which to store a pointer to a
- partial symbol. */
-
- struct partial_symbol **next;
-
- /* Number of allocated pointer slots in current dynamic array (not
- the number of bytes of storage). The "next" pointer will always
- point somewhere between list[0] and list[size], and when at
- list[size] the array will be expanded on the next attempt to
- store a pointer. */
-
- int size;
-};
-
struct other_sections
{
CORE_ADDR addr;
/* Callback for quick_symbol_functions->expand_symtabs_matching
to match a file name. */
-typedef int (expand_symtabs_file_matcher_ftype) (const char *filename,
- void *data, int basenames);
+typedef bool (expand_symtabs_file_matcher_ftype) (const char *filename,
+ bool basenames);
/* Callback for quick_symbol_functions->expand_symtabs_matching
to match a symbol name. */
-typedef int (expand_symtabs_symbol_matcher_ftype) (const char *name,
- void *data);
+typedef bool (expand_symtabs_symbol_matcher_ftype) (const char *name);
/* Callback for quick_symbol_functions->expand_symtabs_matching
to be called after a symtab has been expanded. */
-typedef void (expand_symtabs_exp_notify_ftype) \
- (struct compunit_symtab *symtab, void *data);
+typedef void (expand_symtabs_exp_notify_ftype) (compunit_symtab *symtab);
/* The "quick" symbol functions exist so that symbol readers can
avoiding an initial read of all the symbols. For example, symbol
If a match is found, the "partial" symbol table is expanded.
Then, this calls iterate_over_some_symtabs (or equivalent) over
- all newly-created symbol tables, passing CALLBACK and DATA to it.
+ all newly-created symbol tables, passing CALLBACK to it.
The result of this call is returned. */
- int (*map_symtabs_matching_filename) (struct objfile *objfile,
- const char *name,
- const char *real_path,
- int (*callback) (struct symtab *,
- void *),
- void *data);
+ bool (*map_symtabs_matching_filename)
+ (struct objfile *objfile, const char *name, const char *real_path,
+ gdb::function_view<bool (symtab *)> callback);
/* Check to see if the symbol is defined in a "partial" symbol table
of OBJFILE. BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
int (*callback) (struct block *,
struct symbol *, void *),
void *data,
- symbol_compare_ftype *match,
+ symbol_name_match_type match,
symbol_compare_ftype *ordered_compare);
/* Expand all symbol tables in OBJFILE matching some criteria.
FILE_MATCHER is called for each file in OBJFILE. The file name
- and the DATA argument are passed to it. If it returns zero, this
- file is skipped. If FILE_MATCHER is NULL such file is not skipped.
- If BASENAMES is non-zero the function should consider only base name of
- DATA (passed file name is already only the lbasename part).
-
- Otherwise, if KIND does not match this symbol is skipped.
+ is passed to it. If the matcher returns false, the file is
+ skipped. If FILE_MATCHER is NULL the file is not skipped. If
+ BASENAMES is true the matcher should consider only file base
+ names (the passed file name is already only the lbasename'd
+ part).
- If even KIND matches, then SYMBOL_MATCHER is called for each symbol
- defined in the file. The symbol "search" name and DATA are passed
- to SYMBOL_MATCHER.
+ Otherwise, if KIND does not match, this symbol is skipped.
- If SYMBOL_MATCHER returns zero, then this symbol is skipped.
+ If even KIND matches, SYMBOL_MATCHER is called for each symbol
+ defined in the file. The symbol "search" name is passed to
+ SYMBOL_MATCHER.
- Otherwise, this symbol's symbol table is expanded.
+ If SYMBOL_MATCHER returns false, then the symbol is skipped.
- DATA is user data that is passed unmodified to the callback
- functions. */
+ Otherwise, the symbol's symbol table is expanded. */
void (*expand_symtabs_matching)
(struct objfile *objfile,
- expand_symtabs_file_matcher_ftype *file_matcher,
- expand_symtabs_symbol_matcher_ftype *symbol_matcher,
- expand_symtabs_exp_notify_ftype *expansion_notify,
- enum search_domain kind,
- void *data);
+ gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+ const lookup_name_info &lookup_name,
+ gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+ gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+ enum search_domain kind);
/* Return the comp unit from OBJFILE that contains PC and
SECTION. Return NULL if there is no such compunit. This
(struct objfile *objfile, struct bound_minimal_symbol msymbol,
CORE_ADDR pc, struct obj_section *section, int warn_if_readin);
+ /* Return the comp unit from OBJFILE that contains a symbol at
+ ADDRESS. Return NULL if there is no such comp unit. Unlike
+ find_pc_sect_compunit_symtab, any sort of symbol (not just text
+ symbols) can be considered, and only exact address matches are
+ considered. This pointer may be NULL. */
+ struct compunit_symtab *(*find_compunit_symtab_by_address)
+ (struct objfile *objfile, CORE_ADDR address);
+
/* 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
FILENAME, the file's FULLNAME (if need_fullname is non-zero), and
struct sym_probe_fns
{
- /* If non-NULL, return an array of probe objects.
-
- The returned value does not have to be freed and it has lifetime of the
- OBJFILE. */
- VEC (probe_p) *(*sym_get_probes) (struct objfile *);
+ /* If non-NULL, return a reference to vector of probe objects. */
+ const std::vector<probe *> &(*sym_get_probes) (struct objfile *);
};
/* Structure to keep track of symbol reading functions for various
extern void find_lowest_section (bfd *, asection *, void *);
-extern bfd *symfile_bfd_open (const char *);
+extern gdb_bfd_ref_ptr symfile_bfd_open (const char *);
-extern int get_section_index (struct objfile *, char *);
+extern int get_section_index (struct objfile *, const char *);
extern int print_symbol_loading_p (int from_tty, int mainline, int full);
struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
void free_symfile_segment_data (struct symfile_segment_data *data);
-extern struct cleanup *increment_reading_symtab (void);
+extern scoped_restore_tmpl<int> increment_reading_symtab (void);
-void expand_symtabs_matching (expand_symtabs_file_matcher_ftype *,
- expand_symtabs_symbol_matcher_ftype *,
- expand_symtabs_exp_notify_ftype *,
- enum search_domain kind, void *data);
+void expand_symtabs_matching
+ (gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+ const lookup_name_info &lookup_name,
+ gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
+ gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+ enum search_domain kind);
void map_symbol_filenames (symbol_filename_ftype *fun, void *data,
int need_fullname);
struct dwarf2_section_names abbrev;
struct dwarf2_section_names line;
struct dwarf2_section_names loc;
+ struct dwarf2_section_names loclists;
struct dwarf2_section_names macinfo;
struct dwarf2_section_names macro;
struct dwarf2_section_names str;
+ struct dwarf2_section_names line_str;
struct dwarf2_section_names ranges;
+ struct dwarf2_section_names rnglists;
struct dwarf2_section_names types;
struct dwarf2_section_names addr;
struct dwarf2_section_names frame;
struct dwarf2_section_names eh_frame;
struct dwarf2_section_names gdb_index;
+ struct dwarf2_section_names debug_names;
+ struct dwarf2_section_names debug_aranges;
/* This field has no meaning, but exists solely to catch changes to
this structure which are not reflected in some instance. */
int sentinel;
asection **, const gdb_byte **,
bfd_size_type *);
-extern int dwarf2_initialize_objfile (struct objfile *);
+/* A DWARF names index variant. */
+enum class dw_index_kind
+{
+ /* GDB's own .gdb_index format. */
+ GDB_INDEX,
+
+ /* DWARF5 .debug_names. */
+ DEBUG_NAMES,
+};
+
+/* Initialize for reading DWARF for OBJFILE. Return false if this
+ file will use psymtabs, or true if using an index, in which case
+ *INDEX_KIND is set to the index variant in use. */
+extern bool dwarf2_initialize_objfile (struct objfile *objfile,
+ dw_index_kind *index_kind);
+
extern void dwarf2_build_psymtabs (struct objfile *);
extern void dwarf2_build_frame_info (struct objfile *);
/* From minidebug.c. */
-extern bfd *find_separate_debug_file_in_section (struct objfile *);
+extern gdb_bfd_ref_ptr find_separate_debug_file_in_section (struct objfile *);
+
+/* True if we are printing debug output about separate debug info files. */
+
+extern int separate_debug_file_debug;
#endif /* !defined(SYMFILE_H) */