aboutsummaryrefslogtreecommitdiff
path: root/gdb/psymtab.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-03-20 17:23:40 -0600
committerTom Tromey <tom@tromey.com>2021-03-20 17:23:42 -0600
commit75336a5a2aa345953d0a9de73205457b6d9e27c2 (patch)
tree73e2373cad911b81c529089a73db5b199b26ae05 /gdb/psymtab.c
parent39298a5d973d5822ed7d09230f67cc83f72a06c2 (diff)
downloadbinutils-75336a5a2aa345953d0a9de73205457b6d9e27c2.zip
binutils-75336a5a2aa345953d0a9de73205457b6d9e27c2.tar.gz
binutils-75336a5a2aa345953d0a9de73205457b6d9e27c2.tar.bz2
Move psymbol_map out of objfile
objfile::psymbol_map is used to implement a Rust feature. It is currently specific to partial symbols -- it isn't used by the DWARF indices. This patch moves it out of objfile and into psymbol_functions, adding a new method to quick_symbol_functions to handle the clearing case. This is needed because the map holds unrelocated addresses. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * quick-symbol.h (struct quick_symbol_functions) <relocated>: New method. * psymtab.h (struct psymbol_functions) <relocated>: New method. <fill_psymbol_map>: Declare method. <m_psymbol_map>: New member. * psymtab.c (psymbol_functions::fill_psymbol_map): Rename. (psymbol_functions::find_compunit_symtab_by_address): Update. * objfiles.h (reset_psymtabs): Don't clear psymbol_map. (struct objfile) <psymbol_map>: Remove. * objfiles.c (objfile_relocate1): Update.
Diffstat (limited to 'gdb/psymtab.c')
-rw-r--r--gdb/psymtab.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index c022daa..45a4db7 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1346,13 +1346,14 @@ psymbol_functions::has_symbols (struct objfile *objfile)
}
/* Helper function for psym_find_compunit_symtab_by_address that fills
- in psymbol_map for a given range of psymbols. */
+ in m_psymbol_map for a given range of psymbols. */
-static void
-psym_fill_psymbol_map (struct objfile *objfile,
- struct partial_symtab *psymtab,
- std::set<CORE_ADDR> *seen_addrs,
- const std::vector<partial_symbol *> &symbols)
+void
+psymbol_functions::fill_psymbol_map
+ (struct objfile *objfile,
+ struct partial_symtab *psymtab,
+ std::set<CORE_ADDR> *seen_addrs,
+ const std::vector<partial_symbol *> &symbols)
{
for (partial_symbol *psym : symbols)
{
@@ -1362,7 +1363,7 @@ psym_fill_psymbol_map (struct objfile *objfile,
if (seen_addrs->find (addr) == seen_addrs->end ())
{
seen_addrs->insert (addr);
- objfile->psymbol_map.emplace_back (addr, psymtab);
+ m_psymbol_map.emplace_back (addr, psymtab);
}
}
}
@@ -1375,23 +1376,23 @@ compunit_symtab *
psymbol_functions::find_compunit_symtab_by_address (struct objfile *objfile,
CORE_ADDR address)
{
- if (objfile->psymbol_map.empty ())
+ if (m_psymbol_map.empty ())
{
std::set<CORE_ADDR> seen_addrs;
for (partial_symtab *pst : require_partial_symbols (objfile, true))
{
- psym_fill_psymbol_map (objfile, pst,
- &seen_addrs,
- pst->global_psymbols);
- psym_fill_psymbol_map (objfile, pst,
- &seen_addrs,
- pst->static_psymbols);
+ fill_psymbol_map (objfile, pst,
+ &seen_addrs,
+ pst->global_psymbols);
+ fill_psymbol_map (objfile, pst,
+ &seen_addrs,
+ pst->static_psymbols);
}
- objfile->psymbol_map.shrink_to_fit ();
+ m_psymbol_map.shrink_to_fit ();
- std::sort (objfile->psymbol_map.begin (), objfile->psymbol_map.end (),
+ std::sort (m_psymbol_map.begin (), m_psymbol_map.end (),
[] (const std::pair<CORE_ADDR, partial_symtab *> &a,
const std::pair<CORE_ADDR, partial_symtab *> &b)
{
@@ -1400,14 +1401,14 @@ psymbol_functions::find_compunit_symtab_by_address (struct objfile *objfile,
}
auto iter = std::lower_bound
- (objfile->psymbol_map.begin (), objfile->psymbol_map.end (), address,
+ (m_psymbol_map.begin (), m_psymbol_map.end (), address,
[] (const std::pair<CORE_ADDR, partial_symtab *> &a,
CORE_ADDR b)
{
return a.first < b;
});
- if (iter == objfile->psymbol_map.end () || iter->first != address)
+ if (iter == m_psymbol_map.end () || iter->first != address)
return NULL;
return psymtab_to_symtab (objfile, iter->second);