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.
This commit is contained in:
parent
3b9d3ac236
commit
b22a7c6ab6
|
@ -1,3 +1,21 @@
|
|||
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.
|
||||
|
||||
2019-01-09 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* symfile.c (overlay_invalidate_all, find_pc_overlay)
|
||||
|
|
|
@ -2014,18 +2014,14 @@ dbx_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
|
|||
pst->set_text_low (pst->raw_text_high ());
|
||||
else
|
||||
{
|
||||
struct partial_symtab *p1;
|
||||
|
||||
/* If we know our own starting text address, then walk through all other
|
||||
psymtabs for this objfile, and if any didn't know their ending text
|
||||
address, set it to our starting address. Take care to not set our
|
||||
own ending address to our starting address. */
|
||||
|
||||
ALL_OBJFILE_PSYMTABS (objfile, p1)
|
||||
{
|
||||
for (partial_symtab *p1 : objfile_psymtabs (objfile))
|
||||
if (!p1->text_high_valid && p1->text_low_valid && p1 != pst)
|
||||
p1->set_text_high (pst->raw_text_low ());
|
||||
}
|
||||
}
|
||||
|
||||
/* End of kludge for patching Solaris textlow and texthigh. */
|
||||
|
|
|
@ -3681,17 +3681,17 @@ parse_partial_symbols (minimal_symbol_reader &reader,
|
|||
&& save_pst->text_low_valid
|
||||
&& !(objfile->flags & OBJF_REORDERED))
|
||||
{
|
||||
ALL_OBJFILE_PSYMTABS (objfile, pst)
|
||||
{
|
||||
if (save_pst != pst
|
||||
&& save_pst->raw_text_low () >= pst->raw_text_low ()
|
||||
&& save_pst->raw_text_low () < pst->raw_text_high ()
|
||||
&& save_pst->raw_text_high () > pst->raw_text_high ())
|
||||
{
|
||||
objfile->flags |= OBJF_REORDERED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (partial_symtab *iter : objfile_psymtabs (objfile))
|
||||
{
|
||||
if (save_pst != iter
|
||||
&& save_pst->raw_text_low () >= iter->raw_text_low ()
|
||||
&& save_pst->raw_text_low () < iter->raw_text_high ()
|
||||
&& save_pst->raw_text_high () > iter->raw_text_high ())
|
||||
{
|
||||
objfile->flags |= OBJF_REORDERED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -331,9 +331,4 @@ class psymtab_discarder
|
|||
struct partial_symtab *m_psymtab;
|
||||
};
|
||||
|
||||
/* Traverse all psymtabs in one objfile. */
|
||||
|
||||
#define ALL_OBJFILE_PSYMTABS(objfile, p) \
|
||||
for ((p) = (objfile) -> psymtabs; (p) != NULL; (p) = (p) -> next)
|
||||
|
||||
#endif /* PSYMPRIV_H */
|
||||
|
|
274
gdb/psymtab.c
274
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;
|
||||
|
||||
if (compare_filenames_for_search (pst->filename, name))
|
||||
{
|
||||
if (partial_map_expand_apply (objfile, name, real_path,
|
||||
pst, callback))
|
||||
return true;
|
||||
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;
|
||||
}
|
||||
|
||||
/* 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 (psymtab_to_fullname (pst), 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;
|
||||
}
|
||||
|
||||
/* 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 (pst->filename, name))
|
||||
{
|
||||
if (partial_map_expand_apply (objfile, name, real_path,
|
||||
pst, callback))
|
||||
return true;
|
||||
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 (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);
|
||||
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);
|
||||
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). */
|
||||
/* 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;
|
||||
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. */
|
||||
}
|
||||
}
|
||||
/* 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;
|
||||
for (partial_symtab *ps : require_partial_symbols (objfile, 1))
|
||||
{
|
||||
if (ps->readin)
|
||||
continue;
|
||||
|
||||
ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
|
||||
{
|
||||
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);
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#define PSYMTAB_H
|
||||
|
||||
#include "symfile.h"
|
||||
#include "common/next-iterator.h"
|
||||
|
||||
/* A bcache for partial symbols. */
|
||||
|
||||
|
@ -35,12 +36,25 @@ extern const struct quick_symbol_functions psym_functions;
|
|||
extern const struct quick_symbol_functions dwarf2_gdb_index_functions;
|
||||
extern const struct quick_symbol_functions dwarf2_debug_names_functions;
|
||||
|
||||
/* A range adapter that makes it possible to iterate over all
|
||||
psymtabs in one objfile. */
|
||||
|
||||
class objfile_psymtabs : public next_adapter<struct partial_symtab>
|
||||
{
|
||||
public:
|
||||
|
||||
explicit objfile_psymtabs (struct objfile *objfile)
|
||||
: next_adapter<struct partial_symtab> (objfile->psymtabs)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
/* Ensure that the partial symbols for OBJFILE have been loaded. If
|
||||
VERBOSE is non-zero, then this will print a message when symbols
|
||||
are loaded. This function always returns its argument, as a
|
||||
convenience. */
|
||||
are loaded. This function returns a range adapter suitable for
|
||||
iterating over the psymtabs of OBJFILE. */
|
||||
|
||||
extern struct objfile *require_partial_symbols (struct objfile *objfile,
|
||||
int verbose);
|
||||
extern objfile_psymtabs require_partial_symbols (struct objfile *objfile,
|
||||
int verbose);
|
||||
|
||||
#endif /* PSYMTAB_H */
|
||||
|
|
Loading…
Reference in New Issue