diff options
author | Tom Tromey <tom@tromey.com> | 2018-11-24 14:22:25 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-01-09 18:28:15 -0700 |
commit | b22a7c6ab6173fe4fa1352e14d00a234bbf50346 (patch) | |
tree | db8a06cfd47bf49629796ab9f06fc4a1947ef2e3 /gdb/psymtab.c | |
parent | 3b9d3ac236dcc418619785e0660fc0063e6489b8 (diff) | |
download | binutils-gdb-b22a7c6ab6173fe4fa1352e14d00a234bbf50346.tar.gz |
Remove ALL_OBJFILE_PSYMTABS
This removes the ALL_OBJFILE_PSYMTABS macro, replacing its uses with
ranged for loops.
gdb/ChangeLog
2019-01-09 Tom Tromey <tom@tromey.com>
* dbxread.c (dbx_end_psymtab): Use objfile_psymtabs.
* mdebugread.c (parse_partial_symbols): Use objfile_psymtabs.
* psymtab.c (ALL_OBJFILE_PSYMTABS_REQUIRED): Remove.
(psym_map_symtabs_matching_filename, find_pc_sect_psymtab)
(psym_lookup_symbol, psym_find_last_source_symtab)
(psym_forget_cached_source_info, psym_print_stats)
(psym_expand_symtabs_for_function, psym_expand_all_symtabs)
(psym_expand_symtabs_with_fullname, psym_map_symbol_filenames)
(psym_map_matching_symbols, psym_expand_symtabs_matching)
(psym_find_compunit_symtab_by_address)
(maintenance_print_psymbols, maintenance_info_psymtabs)
(maintenance_check_psymtabs): Use ranged for.
* psymtab.h (class objfile_psymtabs): New.
(require_partial_symbols): Return objfile_psymtabs.
* psympriv.h (ALL_OBJFILE_PSYMTABS): Remove.
Diffstat (limited to 'gdb/psymtab.c')
-rw-r--r-- | gdb/psymtab.c | 278 |
1 files changed, 120 insertions, 158 deletions
diff --git a/gdb/psymtab.c b/gdb/psymtab.c index cd1f5036f4b..d5bd5b1b2db 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -19,8 +19,8 @@ #include "defs.h" #include "symtab.h" -#include "psympriv.h" #include "objfiles.h" +#include "psympriv.h" #include "block.h" #include "filenames.h" #include "source.h" @@ -65,10 +65,9 @@ static struct partial_symbol *find_pc_sect_psymbol (struct objfile *, static struct compunit_symtab *psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst); -/* Ensure that the partial symbols for OBJFILE have been loaded. This - function always returns its argument, as a convenience. */ +/* See psymtab.h. */ -struct objfile * +objfile_psymtabs require_partial_symbols (struct objfile *objfile, int verbose) { if ((objfile->flags & OBJF_PSYMTABS_READ) == 0) @@ -93,21 +92,9 @@ require_partial_symbols (struct objfile *objfile, int verbose) } } - return objfile; + return objfile_psymtabs (objfile); } -/* Traverse all psymtabs in one objfile, requiring that the psymtabs - be read in. */ - -#define ALL_OBJFILE_PSYMTABS_REQUIRED(objfile, p) \ - for ((p) = require_partial_symbols (objfile, 1)->psymtabs; \ - (p) != NULL; \ - (p) = (p)->next) - -/* We want to make sure this file always requires psymtabs. */ - -#undef ALL_OBJFILE_PSYMTABS - /* Helper function for psym_map_symtabs_matching_filename that expands the symtabs and calls the iterator. */ @@ -146,57 +133,56 @@ psym_map_symtabs_matching_filename const char *real_path, gdb::function_view<bool (symtab *)> callback) { - struct partial_symtab *pst; const char *name_basename = lbasename (name); - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst) - { - /* We can skip shared psymtabs here, because any file name will be - attached to the unshared psymtab. */ - if (pst->user != NULL) - continue; - - /* Anonymous psymtabs don't have a file name. */ - if (pst->anonymous) - continue; + for (partial_symtab *pst : require_partial_symbols (objfile, 1)) + { + /* We can skip shared psymtabs here, because any file name will be + attached to the unshared psymtab. */ + if (pst->user != NULL) + continue; - if (compare_filenames_for_search (pst->filename, name)) - { - if (partial_map_expand_apply (objfile, name, real_path, - pst, callback)) - return true; + /* Anonymous psymtabs don't have a file name. */ + if (pst->anonymous) continue; - } - /* Before we invoke realpath, which can get expensive when many - files are involved, do a quick comparison of the basenames. */ - if (! basenames_may_differ - && FILENAME_CMP (name_basename, lbasename (pst->filename)) != 0) - continue; + if (compare_filenames_for_search (pst->filename, name)) + { + if (partial_map_expand_apply (objfile, name, real_path, + pst, callback)) + return true; + continue; + } - if (compare_filenames_for_search (psymtab_to_fullname (pst), name)) - { - if (partial_map_expand_apply (objfile, name, real_path, - pst, callback)) - return true; + /* Before we invoke realpath, which can get expensive when many + files are involved, do a quick comparison of the basenames. */ + if (! basenames_may_differ + && FILENAME_CMP (name_basename, lbasename (pst->filename)) != 0) continue; - } - /* If the user gave us an absolute path, try to find the file in - this symtab and use its absolute path. */ - if (real_path != NULL) - { - gdb_assert (IS_ABSOLUTE_PATH (real_path)); - gdb_assert (IS_ABSOLUTE_PATH (name)); - if (filename_cmp (psymtab_to_fullname (pst), real_path) == 0) - { - if (partial_map_expand_apply (objfile, name, real_path, - pst, callback)) - return true; - continue; - } - } - } + if (compare_filenames_for_search (psymtab_to_fullname (pst), name)) + { + if (partial_map_expand_apply (objfile, name, real_path, + pst, callback)) + return true; + continue; + } + + /* If the user gave us an absolute path, try to find the file in + this symtab and use its absolute path. */ + if (real_path != NULL) + { + gdb_assert (IS_ABSOLUTE_PATH (real_path)); + gdb_assert (IS_ABSOLUTE_PATH (name)); + if (filename_cmp (psymtab_to_fullname (pst), real_path) == 0) + { + if (partial_map_expand_apply (objfile, name, real_path, + pst, callback)) + return true; + continue; + } + } + } return false; } @@ -289,7 +275,6 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc, struct obj_section *section, struct bound_minimal_symbol msymbol) { - struct partial_symtab *pst; CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); @@ -298,8 +283,9 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc, if (objfile->psymtabs_addrmap != NULL) { - pst = ((struct partial_symtab *) - addrmap_find (objfile->psymtabs_addrmap, pc - baseaddr)); + struct partial_symtab *pst + = ((struct partial_symtab *) + addrmap_find (objfile->psymtabs_addrmap, pc - baseaddr)); if (pst != NULL) { /* FIXME: addrmaps currently do not handle overlayed sections, @@ -341,7 +327,7 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc, its CUs may be missing in PSYMTABS_ADDRMAP as they may be varying debug info type in single OBJFILE. */ - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst) + for (partial_symtab *pst : require_partial_symbols (objfile, 1)) if (!pst->psymtabs_addrmap_supported && pc >= pst->text_low (objfile) && pc < pst->text_high (objfile)) { @@ -458,43 +444,42 @@ psym_lookup_symbol (struct objfile *objfile, int block_index, const char *name, const domain_enum domain) { - struct partial_symtab *ps; const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0); struct compunit_symtab *stab_best = NULL; lookup_name_info lookup_name (name, symbol_name_match_type::FULL); - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) - { - if (!ps->readin && lookup_partial_symbol (objfile, ps, name, - psymtab_index, domain)) - { - struct symbol *sym, *with_opaque = NULL; - struct compunit_symtab *stab = psymtab_to_symtab (objfile, ps); - /* Note: While psymtab_to_symtab can return NULL if the partial symtab - is empty, we can assume it won't here because lookup_partial_symbol - succeeded. */ - const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab); - struct block *block = BLOCKVECTOR_BLOCK (bv, block_index); - - sym = block_find_symbol (block, name, domain, - block_find_non_opaque_type_preferred, - &with_opaque); - - /* Some caution must be observed with overloaded functions - and methods, since the index will not contain any overload - information (but NAME might contain it). */ - - if (sym != NULL - && SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name)) - return stab; - if (with_opaque != NULL - && SYMBOL_MATCHES_SEARCH_NAME (with_opaque, lookup_name)) - stab_best = stab; - - /* Keep looking through other psymtabs. */ - } - } + for (partial_symtab *ps : require_partial_symbols (objfile, 1)) + { + if (!ps->readin && lookup_partial_symbol (objfile, ps, name, + psymtab_index, domain)) + { + struct symbol *sym, *with_opaque = NULL; + struct compunit_symtab *stab = psymtab_to_symtab (objfile, ps); + /* Note: While psymtab_to_symtab can return NULL if the + partial symtab is empty, we can assume it won't here + because lookup_partial_symbol succeeded. */ + const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab); + struct block *block = BLOCKVECTOR_BLOCK (bv, block_index); + + sym = block_find_symbol (block, name, domain, + block_find_non_opaque_type_preferred, + &with_opaque); + + /* Some caution must be observed with overloaded functions + and methods, since the index will not contain any overload + information (but NAME might contain it). */ + + if (sym != NULL + && SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name)) + return stab; + if (with_opaque != NULL + && SYMBOL_MATCHES_SEARCH_NAME (with_opaque, lookup_name)) + stab_best = stab; + + /* Keep looking through other psymtabs. */ + } + } return stab_best; } @@ -752,10 +737,9 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) static struct symtab * psym_find_last_source_symtab (struct objfile *ofp) { - struct partial_symtab *ps; struct partial_symtab *cs_pst = NULL; - ALL_OBJFILE_PSYMTABS_REQUIRED (ofp, ps) + for (partial_symtab *ps : require_partial_symbols (ofp, 1)) { const char *name = ps->filename; int len = strlen (name); @@ -791,9 +775,7 @@ psym_find_last_source_symtab (struct objfile *ofp) static void psym_forget_cached_source_info (struct objfile *objfile) { - struct partial_symtab *pst; - - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst) + for (partial_symtab *pst : require_partial_symbols (objfile, 1)) { if (pst->fullname != NULL) { @@ -973,10 +955,9 @@ static void psym_print_stats (struct objfile *objfile) { int i; - struct partial_symtab *ps; i = 0; - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) + for (partial_symtab *ps : require_partial_symbols (objfile, 1)) { if (ps->readin == 0) i++; @@ -1016,19 +997,17 @@ static void psym_expand_symtabs_for_function (struct objfile *objfile, const char *func_name) { - struct partial_symtab *ps; - - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) - { - if (ps->readin) - continue; + for (partial_symtab *ps : require_partial_symbols (objfile, 1)) + { + if (ps->readin) + continue; - if ((lookup_partial_symbol (objfile, ps, func_name, 1, VAR_DOMAIN) - != NULL) - || (lookup_partial_symbol (objfile, ps, func_name, 0, VAR_DOMAIN) - != NULL)) - psymtab_to_symtab (objfile, ps); - } + if ((lookup_partial_symbol (objfile, ps, func_name, 1, VAR_DOMAIN) + != NULL) + || (lookup_partial_symbol (objfile, ps, func_name, 0, VAR_DOMAIN) + != NULL)) + psymtab_to_symtab (objfile, ps); + } } /* Psymtab version of expand_all_symtabs. See its definition in @@ -1037,12 +1016,8 @@ psym_expand_symtabs_for_function (struct objfile *objfile, static void psym_expand_all_symtabs (struct objfile *objfile) { - struct partial_symtab *psymtab; - - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, psymtab) - { - psymtab_to_symtab (objfile, psymtab); - } + for (partial_symtab *psymtab : require_partial_symbols (objfile, 1)) + psymtab_to_symtab (objfile, psymtab); } /* Psymtab version of expand_symtabs_with_fullname. See its definition in @@ -1052,9 +1027,7 @@ static void psym_expand_symtabs_with_fullname (struct objfile *objfile, const char *fullname) { - struct partial_symtab *p; - - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, p) + for (partial_symtab *p : require_partial_symbols (objfile, 1)) { /* Anonymous psymtabs don't have a name of a source file. */ if (p->anonymous) @@ -1077,9 +1050,7 @@ psym_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun, void *data, int need_fullname) { - struct partial_symtab *ps; - - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) + for (partial_symtab *ps : require_partial_symbols (objfile, 1)) { const char *fullname; @@ -1192,9 +1163,8 @@ psym_map_matching_symbols (struct objfile *objfile, symbol_compare_ftype *ordered_compare) { const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK; - struct partial_symtab *ps; - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) + for (partial_symtab *ps : require_partial_symbols (objfile, 1)) { QUIT; if (ps->readin @@ -1317,17 +1287,13 @@ psym_expand_symtabs_matching gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, enum search_domain domain) { - struct partial_symtab *ps; - lookup_name_info lookup_name = lookup_name_in.make_ignore_params (); /* Clear the search flags. */ - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) - { - ps->searched_flag = PST_NOT_SEARCHED; - } + for (partial_symtab *ps : require_partial_symbols (objfile, 1)) + ps->searched_flag = PST_NOT_SEARCHED; - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) + for (partial_symtab *ps : objfile_psymtabs (objfile)) { QUIT; @@ -1416,23 +1382,21 @@ psym_find_compunit_symtab_by_address (struct objfile *objfile, { if (objfile->psymbol_map.empty ()) { - struct partial_symtab *pst; - std::set<CORE_ADDR> seen_addrs; - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst) - { - psym_fill_psymbol_map (objfile, pst, - &seen_addrs, - objfile->global_psymbols, - pst->globals_offset, - pst->n_global_syms); - psym_fill_psymbol_map (objfile, pst, - &seen_addrs, - objfile->static_psymbols, - pst->statics_offset, - pst->n_static_syms); - } + for (partial_symtab *pst : require_partial_symbols (objfile, 1)) + { + psym_fill_psymbol_map (objfile, pst, + &seen_addrs, + objfile->global_psymbols, + pst->globals_offset, + pst->n_global_syms); + psym_fill_psymbol_map (objfile, pst, + &seen_addrs, + objfile->static_psymbols, + pst->statics_offset, + pst->n_static_syms); + } objfile->psymbol_map.shrink_to_fit (); @@ -1868,7 +1832,6 @@ maintenance_print_psymbols (const char *args, int from_tty) { struct ui_file *outfile = gdb_stdout; char *address_arg = NULL, *source_arg = NULL, *objfile_arg = NULL; - struct partial_symtab *ps; int i, outfile_idx, found; CORE_ADDR pc = 0; struct obj_section *section = NULL; @@ -1956,7 +1919,8 @@ maintenance_print_psymbols (const char *args, int from_tty) /* We don't assume each pc has a unique objfile (this is for debugging). */ - ps = find_pc_sect_psymtab (objfile, pc, section, msymbol); + struct partial_symtab *ps = find_pc_sect_psymtab (objfile, pc, + section, msymbol); if (ps != NULL) { if (!printed_objfile_header) @@ -1972,7 +1936,7 @@ maintenance_print_psymbols (const char *args, int from_tty) } else { - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) + for (partial_symtab *ps : require_partial_symbols (objfile, 1)) { int print_for_source = 0; @@ -2032,13 +1996,12 @@ maintenance_info_psymtabs (const char *regexp, int from_tty) for (objfile *objfile : all_objfiles (pspace)) { struct gdbarch *gdbarch = get_objfile_arch (objfile); - struct partial_symtab *psymtab; /* We don't want to print anything for this objfile until we actually find a symtab whose name matches. */ int printed_objfile_start = 0; - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, psymtab) + for (partial_symtab *psymtab : require_partial_symbols (objfile, 1)) { QUIT; @@ -2139,13 +2102,12 @@ maintenance_check_psymtabs (const char *ignore, int from_tty) { struct symbol *sym; struct compunit_symtab *cust = NULL; - struct partial_symtab *ps; const struct blockvector *bv; struct block *b; int length; for (objfile *objfile : all_objfiles (current_program_space)) - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) + for (partial_symtab *ps : require_partial_symbols (objfile, 1)) { struct gdbarch *gdbarch = get_objfile_arch (objfile); |