X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsymfile.h;h=fe79f79a04829e012b2970e65e2e94a646c12df2;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=85f8e7c1558e349fb7c37bc12e6c0988736ae000;hpb=18a8505e38fc2de4b0730b6e13cbd23db5984de9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/symfile.h b/gdb/symfile.h index 85f8e7c155..fe79f79a04 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -80,26 +80,32 @@ typedef std::vector section_addr_info; 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 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 segment_info; }; +using symfile_segment_data_up = std::unique_ptr; + /* Callback for quick_symbol_functions->map_symbol_filenames. */ typedef void (symbol_filename_ftype) (const char *filename, @@ -183,6 +189,17 @@ struct quick_symbol_functions 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". */ @@ -242,11 +259,14 @@ struct quick_symbol_functions 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. @@ -254,7 +274,7 @@ struct quick_symbol_functions void (*expand_symtabs_matching) (struct objfile *objfile, gdb::function_view file_matcher, - const lookup_name_info &lookup_name, + const lookup_name_info *lookup_name, gdb::function_view symbol_matcher, gdb::function_view expansion_notify, enum search_domain kind); @@ -346,7 +366,7 @@ struct sym_fns 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 @@ -387,7 +407,7 @@ extern void default_symfile_offsets (struct objfile *objfile, /* 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. */ @@ -516,8 +536,7 @@ extern int symfile_map_offsets_to_segments (bfd *, 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 increment_reading_symtab (void);