diff options
Diffstat (limited to 'gdb/progspace.h')
-rw-r--r-- | gdb/progspace.h | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/gdb/progspace.h b/gdb/progspace.h index 7de970b..a761e62 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -1,6 +1,6 @@ /* Program and address space management, for GDB, the GNU debugger. - Copyright (C) 2009-2024 Free Software Foundation, Inc. + Copyright (C) 2009-2025 Free Software Foundation, Inc. This file is part of GDB. @@ -21,12 +21,13 @@ #ifndef GDB_PROGSPACE_H #define GDB_PROGSPACE_H +#include "solib.h" #include "target.h" #include "gdb_bfd.h" #include "registry.h" -#include "solist.h" #include "gdbsupport/safe-iterator.h" #include "gdbsupport/intrusive_list.h" +#include "gdbsupport/owning_intrusive_list.h" #include "gdbsupport/refcounted-object.h" #include "gdbsupport/gdb_ref_ptr.h" #include <vector> @@ -231,9 +232,30 @@ struct program_space is outside all objfiles in this progspace. */ struct objfile *objfile_for_address (CORE_ADDR address); - /* Return the list of all the solibs in this program space. */ + /* Set this program space's solib provider. + + The solib provider must be unset prior to calling this method. */ + void set_solib_ops (solib_ops_up ops) + { + gdb_assert (m_solib_ops == nullptr); + m_solib_ops = std::move (ops); + }; + + /* Unset and free this program space's solib provider. */ + void unset_solib_ops () + { m_solib_ops = nullptr; } + + /* Unset and return this program space's solib provider. */ + solib_ops_up release_solib_ops () + { return std::move (m_solib_ops); } + + /* Get this program space's solib provider. */ + const struct solib_ops *solib_ops () const + { return m_solib_ops.get (); } + + /* Return the list of all the solibs in this program space. */ owning_intrusive_list<solib> &solibs () - { return so_list; } + { return m_solib_list; } /* Similar to `bfd_get_filename (exec_bfd ())` but in original form given by user, without symbolic links and pathname resolved. It is not nullptr @@ -337,10 +359,6 @@ struct program_space (e.g. the argument to the "symbol-file" or "file" command). */ struct objfile *symfile_object_file = NULL; - /* List of shared objects mapped into this space. Managed by - solib.c. */ - owning_intrusive_list<solib> so_list; - /* Number of calls to solib_add. */ unsigned int solib_add_generation = 0; @@ -359,6 +377,13 @@ private: /* All known objfiles are kept in a linked list. */ owning_intrusive_list<objfile> m_objfiles_list; + /* solib_ops implementation used to provide solibs in this program space. */ + solib_ops_up m_solib_ops; + + /* List of shared objects mapped into this space. Managed by + solib.c. */ + owning_intrusive_list<solib> m_solib_list; + /* The set of target sections matching the sections mapped into this program space. Managed by both exec_ops and solib.c. */ std::vector<target_section> m_target_sections; |