each BFD section belongs to. */
struct symfile_segment_data
{
- /* How many segments are present in this file. If there are
- two, the text segment is the first one and the data segment
- is the second one. */
- int num_segments;
+ struct segment
+ {
+ segment (CORE_ADDR base, CORE_ADDR size)
+ : base (base), size (size)
+ {}
- /* If NUM_SEGMENTS is greater than zero, the original base address
- of each segment. */
- CORE_ADDR *segment_bases;
+ /* The original base address the segment. */
+ CORE_ADDR base;
- /* If NUM_SEGMENTS is greater than zero, the memory size of each
- segment. */
- CORE_ADDR *segment_sizes;
+ /* The memory size of the segment. */
+ CORE_ADDR size;
+ };
- /* If NUM_SEGMENTS is greater than zero, this is an array of entries
- recording which segment contains each BFD section.
- SEGMENT_INFO[I] is S+1 if the I'th BFD section belongs to segment
+ /* The segments present in this file. If there are
+ two, the text segment is the first one and the data segment
+ is the second one. */
+ std::vector<segment> segments;
+
+ /* This is an array of entries recording which segment contains each BFD
+ section. SEGMENT_INFO[I] is S+1 if the I'th BFD section belongs to segment
S, or zero if it is not in any segment. */
- int *segment_info;
+ std::vector<int> segment_info;
};
+using symfile_segment_data_up = std::unique_ptr<symfile_segment_data>;
+
/* Callback for quick_symbol_functions->map_symbol_filenames. */
typedef void (symbol_filename_ftype) (const char *filename,
const char *name,
domain_enum domain);
+ /* Check to see if the global symbol is defined in a "partial" symbol table
+ of OBJFILE. NAME is the name of the symbol to look for. DOMAIN
+ indicates what sort of symbol to search for.
+
+ If found, sets *symbol_found_p to true and returns the symbol language.
+ defined, or NULL if no such symbol table exists. */
+ enum language (*lookup_global_symbol_language) (struct objfile *objfile,
+ const char *name,
+ domain_enum domain,
+ bool *symbol_found_p);
+
/* Print statistics about any indices loaded for OBJFILE. The
statistics should be printed to gdb_stdout. This is used for
"maint print statistics". */
names (the passed file name is already only the lbasename'd
part).
- Otherwise, if KIND does not match, this symbol is skipped.
+ If the file is not skipped, and SYMBOL_MATCHER and LOOKUP_NAME are NULL,
+ the symbol table is expanded.
- 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, individual symbols are considered.
+
+ If KIND does not match, the symbol is skipped.
+
+ If the symbol name does not match LOOKUP_NAME, the symbol is skipped.
If SYMBOL_MATCHER returns false, then the symbol is skipped.
void (*expand_symtabs_matching)
(struct objfile *objfile,
gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
- const lookup_name_info &lookup_name,
+ 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);
the segments of ABFD. Each segment is a unit of the file
which may be relocated independently. */
- struct symfile_segment_data *(*sym_segments) (bfd *abfd);
+ symfile_segment_data_up (*sym_segments) (bfd *abfd);
/* This function should read the linetable from the objfile when
the line table cannot be read while processing the debugging
/* The default version of sym_fns.sym_segments for readers that don't
do anything special. */
-extern struct symfile_segment_data *default_symfile_segments (bfd *abfd);
+extern symfile_segment_data_up default_symfile_segments (bfd *abfd);
/* The default version of sym_fns.sym_relocate for readers that don't
do anything special. */
const struct symfile_segment_data *,
section_offsets &,
int, const CORE_ADDR *);
-struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
-void free_symfile_segment_data (struct symfile_segment_data *data);
+symfile_segment_data_up get_symfile_segment_data (bfd *abfd);
extern scoped_restore_tmpl<int> increment_reading_symtab (void);