|
|
|
|
@@ -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);
|
|
|
|
|
|
|
|
|
|
|