diff options
Diffstat (limited to 'gdb/objfiles.c')
-rw-r--r-- | gdb/objfiles.c | 112 |
1 files changed, 24 insertions, 88 deletions
diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 0e076fe..d25d1a0 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -1,6 +1,6 @@ /* GDB routines for manipulating objfiles. - Copyright (C) 1992-2024 Free Software Foundation, Inc. + Copyright (C) 1992-2025 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -34,7 +34,6 @@ #include <sys/stat.h> #include <fcntl.h> #include "gdbsupport/gdb_obstack.h" -#include "hashtab.h" #include "breakpoint.h" #include "block.h" @@ -153,39 +152,6 @@ set_objfile_main_name (struct objfile *objfile, objfile->per_bfd->language_of_main = lang; } -/* Helper structure to map blocks to static link properties in hash tables. */ - -struct static_link_htab_entry -{ - const struct block *block; - const struct dynamic_prop *static_link; -}; - -/* Return a hash code for struct static_link_htab_entry *P. */ - -static hashval_t -static_link_htab_entry_hash (const void *p) -{ - const struct static_link_htab_entry *e - = (const struct static_link_htab_entry *) p; - - return htab_hash_pointer (e->block); -} - -/* Return whether P1 an P2 (pointers to struct static_link_htab_entry) are - mappings for the same block. */ - -static int -static_link_htab_entry_eq (const void *p1, const void *p2) -{ - const struct static_link_htab_entry *e1 - = (const struct static_link_htab_entry *) p1; - const struct static_link_htab_entry *e2 - = (const struct static_link_htab_entry *) p2; - - return e1->block == e2->block; -} - /* Register STATIC_LINK as the static link for BLOCK, which is part of OBJFILE. Must not be called more than once for each BLOCK. */ @@ -194,25 +160,10 @@ objfile_register_static_link (struct objfile *objfile, const struct block *block, const struct dynamic_prop *static_link) { - void **slot; - struct static_link_htab_entry lookup_entry; - struct static_link_htab_entry *entry; - - if (objfile->static_links == NULL) - objfile->static_links.reset (htab_create_alloc - (1, &static_link_htab_entry_hash, static_link_htab_entry_eq, NULL, - xcalloc, xfree)); - - /* Create a slot for the mapping, make sure it's the first mapping for this - block and then create the mapping itself. */ - lookup_entry.block = block; - slot = htab_find_slot (objfile->static_links.get (), &lookup_entry, INSERT); - gdb_assert (*slot == NULL); - - entry = XOBNEW (&objfile->objfile_obstack, static_link_htab_entry); - entry->block = block; - entry->static_link = static_link; - *slot = (void *) entry; + /* Enter the mapping and make sure it's the first mapping for this + block. */ + bool inserted = objfile->static_links.emplace (block, static_link).second; + gdb_assert (inserted); } /* Look for a static link for BLOCK, which is part of OBJFILE. Return NULL if @@ -222,19 +173,11 @@ const struct dynamic_prop * objfile_lookup_static_link (struct objfile *objfile, const struct block *block) { - struct static_link_htab_entry *entry; - struct static_link_htab_entry lookup_entry; - - if (objfile->static_links == NULL) - return NULL; - lookup_entry.block = block; - entry = ((struct static_link_htab_entry *) - htab_find (objfile->static_links.get (), &lookup_entry)); - if (entry == NULL) - return NULL; - - gdb_assert (entry->block == block); - return entry->static_link; + if (auto iter = objfile->static_links.find (block); + iter != objfile->static_links.end ()) + return iter->second; + + return nullptr; } @@ -337,7 +280,7 @@ objfile::objfile (gdb_bfd_ref_ptr bfd_, program_space *pspace, if (obfd != nullptr) { - mtime = bfd_get_mtime (obfd.get ()); + mtime = gdb_bfd_get_mtime (obfd.get ()); /* Build section table. */ build_objfile_section_table (this); @@ -445,16 +388,14 @@ objfile * objfile::make (gdb_bfd_ref_ptr bfd_, program_space *pspace, const char *name_, objfile_flags flags_, objfile *parent) { - objfile *result - = new objfile (std::move (bfd_), current_program_space, name_, flags_); + objfile *result = new objfile (std::move (bfd_), pspace, name_, flags_); if (parent != nullptr) add_separate_debug_objfile (result, parent); - current_program_space->add_objfile (std::unique_ptr<objfile> (result), - parent); + pspace->add_objfile (std::unique_ptr<objfile> (result), parent); /* Rebuild section map next time we need it. */ - get_objfile_pspace_data (current_program_space)->new_objfiles_available = 1; + get_objfile_pspace_data (pspace)->new_objfiles_available = 1; return result; } @@ -560,17 +501,12 @@ objfile::~objfile () /* Check to see if the current_source_symtab belongs to this objfile, and if so, call clear_current_source_symtab_and_line. */ - - { - symtab_and_line cursal - = get_current_source_symtab_and_line (this->pspace ()); - - if (cursal.symtab && cursal.symtab->compunit ()->objfile () == this) - clear_current_source_symtab_and_line (this->pspace ()); - } + clear_current_source_symtab_and_line (this); /* Rebuild section map next time we need it. */ - get_objfile_pspace_data (m_pspace)->section_map_dirty = 1; + auto info = objfiles_pspace_data.get (pspace ()); + if (info != nullptr) + info->section_map_dirty = 1; } @@ -737,18 +673,18 @@ objfile_rebase (struct objfile *objfile, CORE_ADDR slide) /* See objfiles.h. */ bool -objfile_has_full_symbols (objfile *objfile) +objfile::has_full_symbols () { - return objfile->compunit_symtabs != nullptr; + return this->compunit_symtabs != nullptr; } /* See objfiles.h. */ bool -objfile_has_symbols (objfile *objfile) +objfile::has_symbols () { - for (::objfile *o : objfile->separate_debug_objfiles ()) - if (o->has_partial_symbols () || objfile_has_full_symbols (o)) + for (::objfile *o : this->separate_debug_objfiles ()) + if (o->has_partial_symbols () || o->has_full_symbols ()) return true; return false; @@ -772,7 +708,7 @@ bool have_full_symbols (program_space *pspace) { for (objfile *ofp : pspace->objfiles ()) - if (objfile_has_full_symbols (ofp)) + if (ofp->has_full_symbols ()) return true; return false; |