/* Partial symbol tables.
- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+ Copyright (C) 2009-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "source.h"
#include "addrmap.h"
#include "gdbtypes.h"
-#include "bcache.h"
#include "ui-out.h"
#include "command.h"
-#include "readline/readline.h"
+#include "readline/tilde.h"
#include "gdb_regex.h"
#include "dictionary.h"
#include "language.h"
#include <algorithm>
#include <set>
-struct psymbol_bcache
-{
- struct bcache *bcache;
-};
-
-static struct partial_symbol *match_partial_symbol (struct objfile *,
- struct partial_symtab *,
- int,
- const char *, domain_enum,
- symbol_name_match_type,
- symbol_compare_ftype *);
-
static struct partial_symbol *lookup_partial_symbol (struct objfile *,
struct partial_symtab *,
const char *, int,
\f
-psymtab_storage::psymtab_storage (struct objfile *objfile)
- : psymbol_cache (psymbol_bcache_init ()),
- m_obstack (&objfile->objfile_obstack)
+static unsigned long psymbol_hash (const void *addr, int length);
+static int psymbol_compare (const void *addr1, const void *addr2, int length);
+
+psymtab_storage::psymtab_storage ()
+ : psymbol_cache (psymbol_hash, psymbol_compare)
{
}
psymtab_storage::~psymtab_storage ()
{
- psymbol_bcache_free (psymbol_cache);
+}
+
+/* See psymtab.h. */
+
+struct partial_symtab *
+psymtab_storage::allocate_psymtab ()
+{
+ struct partial_symtab *psymtab;
+
+ if (free_psymtabs != nullptr)
+ {
+ psymtab = free_psymtabs;
+ free_psymtabs = psymtab->next;
+ }
+ else
+ psymtab = XOBNEW (obstack (), struct partial_symtab);
+
+ memset (psymtab, 0, sizeof (struct partial_symtab));
+
+ psymtab->next = psymtabs;
+ psymtabs = psymtab;
+
+ return psymtab;
}
\f
/* See psymtab.h. */
-objfile_psymtabs
-require_partial_symbols (struct objfile *objfile, int verbose)
+psymtab_storage::partial_symtab_range
+require_partial_symbols (struct objfile *objfile, bool verbose)
{
if ((objfile->flags & OBJF_PSYMTABS_READ) == 0)
{
}
}
- return objfile_psymtabs (objfile);
+ return objfile->psymtabs ();
}
/* Helper function for psym_map_symtabs_matching_filename that
{
const char *name_basename = lbasename (name);
- for (partial_symtab *pst : require_partial_symbols (objfile, 1))
+ for (partial_symtab *pst : require_partial_symbols (objfile, true))
{
/* We can skip shared psymtabs here, because any file name will be
attached to the unshared psymtab. */
struct obj_section *section,
struct bound_minimal_symbol msymbol)
{
- CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets,
- SECT_OFF_TEXT (objfile));
-
- /* Try just the PSYMTABS_ADDRMAP mapping first as it has better granularity
- than the later used TEXTLOW/TEXTHIGH one. */
-
- if (objfile->partial_symtabs->psymtabs_addrmap != NULL)
+ /* Try just the PSYMTABS_ADDRMAP mapping first as it has better
+ granularity than the later used TEXTLOW/TEXTHIGH one. However, we need
+ to take care as the PSYMTABS_ADDRMAP can hold things other than partial
+ symtabs in some cases.
+
+ This function should only be called for objfiles that are using partial
+ symtabs, not for objfiles that are using indexes (.gdb_index or
+ .debug_names), however 'maintenance print psymbols' calls this function
+ directly for all objfiles. If we assume that PSYMTABS_ADDRMAP contains
+ partial symtabs then we will end up returning a pointer to an object
+ that is not a partial_symtab, which doesn't end well. */
+
+ if (objfile->partial_symtabs->psymtabs != NULL
+ && objfile->partial_symtabs->psymtabs_addrmap != NULL)
{
+ CORE_ADDR baseaddr = objfile->section_offsets[SECT_OFF_TEXT (objfile)];
+
struct partial_symtab *pst
= ((struct partial_symtab *)
addrmap_find (objfile->partial_symtabs->psymtabs_addrmap,
its CUs may be missing in PSYMTABS_ADDRMAP as they may be varying
debug info type in single OBJFILE. */
- for (partial_symtab *pst : require_partial_symbols (objfile, 1))
+ for (partial_symtab *pst : require_partial_symbols (objfile, true))
if (!pst->psymtabs_addrmap_supported
&& pc >= pst->text_low (objfile) && pc < pst->text_high (objfile))
{
static struct compunit_symtab *
psym_lookup_symbol (struct objfile *objfile,
- int block_index, const char *name,
+ block_enum block_index, const char *name,
const domain_enum domain)
{
const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
- for (partial_symtab *ps : require_partial_symbols (objfile, 1))
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
{
if (!ps->readin && lookup_partial_symbol (objfile, ps, name,
psymtab_index, domain))
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);
+ const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
sym = block_find_symbol (block, name, domain,
block_find_non_opaque_type_preferred,
psymbol_name_matches (partial_symbol *psym,
const lookup_name_info &lookup_name)
{
- const language_defn *lang = language_def (psym->language);
+ const language_defn *lang = language_def (psym->ginfo.language ());
symbol_name_matcher_ftype *name_match
= get_symbol_name_matcher (lang, lookup_name);
- return name_match (symbol_search_name (psym), lookup_name, NULL);
+ return name_match (psym->ginfo.search_name (), lookup_name, NULL);
}
/* Look in PST for a symbol in DOMAIN whose name matches NAME. Search
static struct partial_symbol *
match_partial_symbol (struct objfile *objfile,
struct partial_symtab *pst, int global,
- const char *name, domain_enum domain,
- symbol_name_match_type match_type,
+ const lookup_name_info &name, domain_enum domain,
symbol_compare_ftype *ordered_compare)
{
struct partial_symbol **start, **psym;
if (length == 0)
return NULL;
- lookup_name_info lookup_name (name, match_type);
-
start = (global ?
&objfile->partial_symtabs->global_psymbols[pst->globals_offset] :
&objfile->partial_symtabs->static_psymbols[pst->statics_offset]);
center = bottom + (top - bottom) / 2;
gdb_assert (center < top);
- enum language lang = (*center)->language;
+ enum language lang = (*center)->ginfo.language ();
const char *lang_ln
- = lookup_name.language_lookup_name (lang).c_str ();
+ = name.language_lookup_name (lang).c_str ();
- if (ordered_compare (symbol_search_name (*center), lang_ln) >= 0)
+ if (ordered_compare ((*center)->ginfo.search_name (),
+ lang_ln) >= 0)
top = center;
else
bottom = center + 1;
gdb_assert (top == bottom);
while (top <= real_top
- && psymbol_name_matches (*top, lookup_name))
+ && psymbol_name_matches (*top, name))
{
- if (symbol_matches_domain ((*top)->language,
+ if (symbol_matches_domain ((*top)->ginfo.language (),
(*top)->domain, domain))
return *top;
top++;
{
for (psym = start; psym < start + length; psym++)
{
- if (symbol_matches_domain ((*psym)->language,
+ if (symbol_matches_domain ((*psym)->ginfo.language (),
(*psym)->domain, domain)
- && psymbol_name_matches (*psym, lookup_name))
+ && psymbol_name_matches (*psym, name))
return *psym;
}
}
break;
}
- return gdb::unique_xmalloc_ptr<char> (xstrdup (name));
+ return make_unique_xstrdup (name);
}
/* Look, in partial_symtab PST, for symbol whose natural name is NAME.
if (!(center < top))
internal_error (__FILE__, __LINE__,
_("failed internal consistency check"));
- if (strcmp_iw_ordered (symbol_search_name (*center),
+ if (strcmp_iw_ordered ((*center)->ginfo.search_name (),
search_name.get ()) >= 0)
{
top = center;
/* For `case_sensitivity == case_sensitive_off' strcmp_iw_ordered will
search more exactly than what matches SYMBOL_MATCHES_SEARCH_NAME. */
- while (top >= start && symbol_matches_search_name (*top, lookup_name))
+ while (top >= start && symbol_matches_search_name (&(*top)->ginfo,
+ lookup_name))
top--;
/* Fixup to have a symbol which matches SYMBOL_MATCHES_SEARCH_NAME. */
top++;
- while (top <= real_top && symbol_matches_search_name (*top, lookup_name))
+ while (top <= real_top && symbol_matches_search_name (&(*top)->ginfo,
+ lookup_name))
{
- if (symbol_matches_domain ((*top)->language,
+ if (symbol_matches_domain ((*top)->ginfo.language (),
(*top)->domain, domain))
return *top;
top++;
{
for (psym = start; psym < start + length; psym++)
{
- if (symbol_matches_domain ((*psym)->language,
+ if (symbol_matches_domain ((*psym)->ginfo.language (),
(*psym)->domain, domain)
- && symbol_matches_search_name (*psym, lookup_name))
+ && symbol_matches_search_name (&(*psym)->ginfo, lookup_name))
return *psym;
}
}
{
struct partial_symtab *cs_pst = NULL;
- for (partial_symtab *ps : require_partial_symbols (ofp, 1))
+ for (partial_symtab *ps : require_partial_symbols (ofp, true))
{
const char *name = ps->filename;
int len = strlen (name);
static void
psym_forget_cached_source_info (struct objfile *objfile)
{
- for (partial_symtab *pst : require_partial_symbols (objfile, 1))
+ for (partial_symtab *pst : require_partial_symbols (objfile, true))
{
if (pst->fullname != NULL)
{
while (count-- > 0)
{
QUIT;
- fprintf_filtered (outfile, " `%s'", (*p)->name);
- if (symbol_demangled_name (*p) != NULL)
+ fprintf_filtered (outfile, " `%s'", (*p)->ginfo.linkage_name ());
+ if ((*p)->ginfo.demangled_name () != NULL)
{
- fprintf_filtered (outfile, " `%s'", symbol_demangled_name (*p));
+ fprintf_filtered (outfile, " `%s'",
+ (*p)->ginfo.demangled_name ());
}
fputs_filtered (", ", outfile);
switch ((*p)->domain)
case STRUCT_DOMAIN:
fputs_filtered ("struct domain, ", outfile);
break;
+ case MODULE_DOMAIN:
+ fputs_filtered ("module domain, ", outfile);
+ break;
case LABEL_DOMAIN:
fputs_filtered ("label domain, ", outfile);
break;
+ case COMMON_BLOCK_DOMAIN:
+ fputs_filtered ("common block domain, ", outfile);
+ break;
default:
fputs_filtered ("<invalid domain>, ", outfile);
break;
int i;
i = 0;
- for (partial_symtab *ps : require_partial_symbols (objfile, 1))
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
{
if (ps->readin == 0)
i++;
psym_expand_symtabs_for_function (struct objfile *objfile,
const char *func_name)
{
- for (partial_symtab *ps : require_partial_symbols (objfile, 1))
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
{
if (ps->readin)
continue;
static void
psym_expand_all_symtabs (struct objfile *objfile)
{
- for (partial_symtab *psymtab : require_partial_symbols (objfile, 1))
+ for (partial_symtab *psymtab : require_partial_symbols (objfile, true))
psymtab_to_symtab (objfile, psymtab);
}
psym_expand_symtabs_with_fullname (struct objfile *objfile,
const char *fullname)
{
- for (partial_symtab *p : require_partial_symbols (objfile, 1))
+ for (partial_symtab *p : require_partial_symbols (objfile, true))
{
/* Anonymous psymtabs don't have a name of a source file. */
if (p->anonymous)
symbol_filename_ftype *fun, void *data,
int need_fullname)
{
- for (partial_symtab *ps : require_partial_symbols (objfile, 1))
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
{
const char *fullname;
return ps->fullname;
}
-/* For all symbols, s, in BLOCK that are in DOMAIN and match NAME
- according to the function MATCH, call CALLBACK(BLOCK, s, DATA).
- BLOCK is assumed to come from OBJFILE. Returns 1 iff CALLBACK
- ever returns non-zero, and otherwise returns 0. */
-
-static int
-map_block (const char *name, domain_enum domain, struct objfile *objfile,
- struct block *block,
- int (*callback) (struct block *, struct symbol *, void *),
- void *data, symbol_name_match_type match)
-{
- struct block_iterator iter;
- struct symbol *sym;
-
- lookup_name_info lookup_name (name, match);
-
- for (sym = block_iter_match_first (block, lookup_name, &iter);
- sym != NULL;
- sym = block_iter_match_next (lookup_name, &iter))
- {
- if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
- SYMBOL_DOMAIN (sym), domain))
- {
- if (callback (block, sym, data))
- return 1;
- }
- }
-
- return 0;
-}
-
/* Psymtab version of map_matching_symbols. See its definition in
the definition of quick_symbol_functions in symfile.h. */
static void
-psym_map_matching_symbols (struct objfile *objfile,
- const char *name, domain_enum domain,
- int global,
- int (*callback) (struct block *,
- struct symbol *, void *),
- void *data,
- symbol_name_match_type match,
- symbol_compare_ftype *ordered_compare)
+psym_map_matching_symbols
+ (struct objfile *objfile,
+ const lookup_name_info &name, domain_enum domain,
+ int global,
+ gdb::function_view<symbol_found_callback_ftype> callback,
+ symbol_compare_ftype *ordered_compare)
{
const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
- for (partial_symtab *ps : require_partial_symbols (objfile, 1))
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
{
QUIT;
if (ps->readin
- || match_partial_symbol (objfile, ps, global, name, domain, match,
+ || match_partial_symbol (objfile, ps, global, name, domain,
ordered_compare))
{
struct compunit_symtab *cust = psymtab_to_symtab (objfile, ps);
- struct block *block;
+ const struct block *block;
if (cust == NULL)
continue;
block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), block_kind);
- if (map_block (name, domain, objfile, block,
- callback, data, match))
- return;
- if (callback (block, NULL, data))
+ if (!iterate_over_symbols_terminated (block, name,
+ domain, callback))
return;
}
}
QUIT;
if ((domain == ALL_DOMAIN
+ || (domain == MODULES_DOMAIN
+ && (*psym)->domain == MODULE_DOMAIN)
|| (domain == VARIABLES_DOMAIN
&& (*psym)->aclass != LOC_TYPEDEF
&& (*psym)->aclass != LOC_BLOCK)
|| (domain == TYPES_DOMAIN
&& (*psym)->aclass == LOC_TYPEDEF))
&& psymbol_name_matches (*psym, lookup_name)
- && (sym_matcher == NULL || sym_matcher (symbol_search_name (*psym))))
+ && (sym_matcher == NULL
+ || sym_matcher ((*psym)->ginfo.search_name ())))
{
/* Found a match, so notify our caller. */
result = PST_SEARCHED_AND_FOUND;
lookup_name_info lookup_name = lookup_name_in.make_ignore_params ();
/* Clear the search flags. */
- for (partial_symtab *ps : require_partial_symbols (objfile, 1))
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
ps->searched_flag = PST_NOT_SEARCHED;
- for (partial_symtab *ps : objfile_psymtabs (objfile))
+ for (partial_symtab *ps : objfile->psymtabs ())
{
QUIT;
{
std::set<CORE_ADDR> seen_addrs;
- for (partial_symtab *pst : require_partial_symbols (objfile, 1))
+ for (partial_symtab *pst : require_partial_symbols (objfile, true))
{
psym_fill_psymbol_map (objfile, pst,
&seen_addrs,
std::sort (begin, end, [] (partial_symbol *s1, partial_symbol *s2)
{
- return strcmp_iw_ordered (symbol_search_name (s1),
- symbol_search_name (s2)) < 0;
+ return strcmp_iw_ordered (s1->ginfo.search_name (),
+ s2->ginfo.search_name ()) < 0;
});
}
{
unsigned long h = 0;
struct partial_symbol *psymbol = (struct partial_symbol *) addr;
- unsigned int lang = psymbol->language;
+ unsigned int lang = psymbol->ginfo.language ();
unsigned int domain = psymbol->domain;
unsigned int theclass = psymbol->aclass;
- h = hash_continue (&psymbol->value, sizeof (psymbol->value), h);
- h = hash_continue (&lang, sizeof (unsigned int), h);
- h = hash_continue (&domain, sizeof (unsigned int), h);
- h = hash_continue (&theclass, sizeof (unsigned int), h);
- /* Note that psymbol names are interned via symbol_set_names, so
+ h = fast_hash (&psymbol->ginfo.value, sizeof (psymbol->ginfo.value), h);
+ h = fast_hash (&lang, sizeof (unsigned int), h);
+ h = fast_hash (&domain, sizeof (unsigned int), h);
+ h = fast_hash (&theclass, sizeof (unsigned int), h);
+ /* Note that psymbol names are interned via compute_and_set_names, so
there's no need to hash the contents of the name here. */
- h = hash_continue (&psymbol->name,
- sizeof (psymbol->name), h);
+ h = fast_hash (&psymbol->ginfo.m_name, sizeof (psymbol->ginfo.m_name), h);
return h;
}
struct partial_symbol *sym1 = (struct partial_symbol *) addr1;
struct partial_symbol *sym2 = (struct partial_symbol *) addr2;
- return (memcmp (&sym1->value, &sym2->value,
- sizeof (sym1->value)) == 0
- && sym1->language == sym2->language
+ return (memcmp (&sym1->ginfo.value, &sym2->ginfo.value,
+ sizeof (sym1->ginfo.value)) == 0
+ && sym1->ginfo.language () == sym2->ginfo.language ()
&& sym1->domain == sym2->domain
&& sym1->aclass == sym2->aclass
/* Note that psymbol names are interned via
- symbol_set_names, so there's no need to compare the
+ compute_and_set_names, so there's no need to compare the
contents of the name here. */
- && sym1->name == sym2->name);
-}
-
-/* Initialize a partial symbol bcache. */
-
-struct psymbol_bcache *
-psymbol_bcache_init (void)
-{
- struct psymbol_bcache *bcache = XCNEW (struct psymbol_bcache);
-
- bcache->bcache = bcache_xmalloc (psymbol_hash, psymbol_compare);
- return bcache;
-}
-
-/* Free a partial symbol bcache. */
-
-void
-psymbol_bcache_free (struct psymbol_bcache *bcache)
-{
- if (bcache == NULL)
- return;
-
- bcache_xfree (bcache->bcache);
- xfree (bcache);
-}
-
-/* Return the internal bcache of the psymbol_bcache BCACHE. */
-
-struct bcache *
-psymbol_bcache_get_bcache (struct psymbol_bcache *bcache)
-{
- return bcache->bcache;
-}
-
-/* Find a copy of the SYM in BCACHE. If BCACHE has never seen this
- symbol before, add a copy to BCACHE. In either case, return a pointer
- to BCACHE's copy of the symbol. If optional ADDED is not NULL, return
- 1 in case of new entry or 0 if returning an old entry. */
-
-static struct partial_symbol *
-psymbol_bcache_full (struct partial_symbol *sym,
- struct psymbol_bcache *bcache,
- int *added)
-{
- return ((struct partial_symbol *)
- bcache_full (sym, sizeof (struct partial_symbol), bcache->bcache,
- added));
+ && sym1->ginfo.linkage_name () == sym2->ginfo.linkage_name ());
}
/* Helper function, initialises partial symbol structure and stashes
different domain (or address) is possible and correct. */
static struct partial_symbol *
-add_psymbol_to_bcache (const char *name, int namelength, int copy_name,
+add_psymbol_to_bcache (gdb::string_view name, bool copy_name,
domain_enum domain,
enum address_class theclass,
short section,
int *added)
{
struct partial_symbol psymbol;
+ memset (&psymbol, 0, sizeof (psymbol));
psymbol.set_unrelocated_address (coreaddr);
- psymbol.section = section;
+ psymbol.ginfo.section = section;
psymbol.domain = domain;
psymbol.aclass = theclass;
-
- memset (&psymbol.language_specific, 0, sizeof (psymbol.language_specific));
- psymbol.ada_mangled = 0;
- symbol_set_language (&psymbol, language,
- objfile->partial_symtabs->obstack ());
- symbol_set_names (&psymbol, name, namelength, copy_name, objfile->per_bfd);
+ psymbol.ginfo.set_language (language, objfile->partial_symtabs->obstack ());
+ psymbol.ginfo.compute_and_set_names (name, copy_name, objfile->per_bfd);
/* Stash the partial symbol away in the cache. */
- return psymbol_bcache_full (&psymbol,
- objfile->partial_symtabs->psymbol_cache,
- added);
+ return ((struct partial_symbol *)
+ objfile->partial_symtabs->psymbol_cache.insert
+ (&psymbol, sizeof (struct partial_symbol), added));
}
/* Helper function, adds partial symbol to the given partial symbol list. */
OBJSTAT (objfile, n_psyms++);
}
-/* Add a symbol with a long value to a psymtab.
- Since one arg is a struct, we pass in a ptr and deref it (sigh).
- The only value we need to store for psyms is an address.
- For all other psyms pass zero for COREADDR.
- Return the partial symbol that has been added. */
+/* See psympriv.h. */
void
-add_psymbol_to_list (const char *name, int namelength, int copy_name,
+add_psymbol_to_list (gdb::string_view name, bool copy_name,
domain_enum domain,
enum address_class theclass,
short section,
int added;
/* Stash the partial symbol away in the cache. */
- psym = add_psymbol_to_bcache (name, namelength, copy_name, domain, theclass,
+ psym = add_psymbol_to_bcache (name, copy_name, domain, theclass,
section, coreaddr, language, objfile, &added);
/* Do not duplicate global partial symbols. */
struct partial_symtab *
allocate_psymtab (const char *filename, struct objfile *objfile)
{
- struct partial_symtab *psymtab;
+ struct partial_symtab *psymtab
+ = objfile->partial_symtabs->allocate_psymtab ();
- if (objfile->partial_symtabs->free_psymtabs)
- {
- psymtab = objfile->partial_symtabs->free_psymtabs;
- objfile->partial_symtabs->free_psymtabs = psymtab->next;
- }
- else
- psymtab = XOBNEW (objfile->partial_symtabs->obstack (), partial_symtab);
-
- memset (psymtab, 0, sizeof (struct partial_symtab));
psymtab->filename
- = (const char *) bcache (filename, strlen (filename) + 1,
- objfile->per_bfd->filename_cache);
+ = ((const char *) objfile->per_bfd->filename_cache.insert
+ (filename, strlen (filename) + 1));
psymtab->compunit_symtab = NULL;
- /* Prepend it to the psymtab list for the objfile it belongs to.
- Psymtabs are searched in most recent inserted -> least recent
- inserted order. */
-
- psymtab->next = objfile->partial_symtabs->psymtabs;
- objfile->partial_symtabs->psymtabs = psymtab;
-
if (symtab_create_debug)
{
/* Be a bit clever with debugging messages, and don't print objfile
}
found = 0;
- for (objfile *objfile : all_objfiles (current_program_space))
+ for (objfile *objfile : current_program_space->objfiles ())
{
int printed_objfile_header = 0;
int print_for_objfile = 1;
}
else
{
- for (partial_symtab *ps : require_partial_symbols (objfile, 1))
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
{
int print_for_source = 0;
re_comp (regexp);
ALL_PSPACES (pspace)
- for (objfile *objfile : all_objfiles (pspace))
+ for (objfile *objfile : pspace->objfiles ())
{
struct gdbarch *gdbarch = get_objfile_arch (objfile);
actually find a symtab whose name matches. */
int printed_objfile_start = 0;
- for (partial_symtab *psymtab : require_partial_symbols (objfile, 1))
+ for (partial_symtab *psymtab : require_partial_symbols (objfile, true))
{
QUIT;
struct symbol *sym;
struct compunit_symtab *cust = NULL;
const struct blockvector *bv;
- struct block *b;
+ const struct block *b;
int length;
- for (objfile *objfile : all_objfiles (current_program_space))
- for (partial_symtab *ps : require_partial_symbols (objfile, 1))
+ for (objfile *objfile : current_program_space->objfiles ())
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
{
struct gdbarch *gdbarch = get_objfile_arch (objfile);
length = ps->n_static_syms;
while (length--)
{
- sym = block_lookup_symbol (b, symbol_search_name (*psym),
+ sym = block_lookup_symbol (b, (*psym)->ginfo.search_name (),
symbol_name_match_type::SEARCH_NAME,
(*psym)->domain);
if (!sym)
{
printf_filtered ("Static symbol `");
- puts_filtered ((*psym)->name);
+ puts_filtered ((*psym)->ginfo.linkage_name ());
printf_filtered ("' only found in ");
puts_filtered (ps->filename);
printf_filtered (" psymtab\n");
length = ps->n_global_syms;
while (length--)
{
- sym = block_lookup_symbol (b, symbol_search_name (*psym),
+ sym = block_lookup_symbol (b, (*psym)->ginfo.search_name (),
symbol_name_match_type::SEARCH_NAME,
(*psym)->domain);
if (!sym)
{
printf_filtered ("Global symbol `");
- puts_filtered ((*psym)->name);
+ puts_filtered ((*psym)->ginfo.linkage_name ());
printf_filtered ("' only found in ");
puts_filtered (ps->filename);
printf_filtered (" psymtab\n");