gdb: make clear_so a method of struct so_list

... just because it seems to make sense to do so.

Change-Id: Ie283c92d9b90c54e3deee96a43c6a942d8b5910b
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
This commit is contained in:
Simon Marchi 2023-10-02 16:31:04 -04:00
parent 7ad0a42e88
commit 4ac91b6bb8
2 changed files with 24 additions and 21 deletions

View file

@ -623,39 +623,32 @@ solib_map_sections (so_list &so)
return 1;
}
/* Free symbol-file related contents of SO and reset for possible reloading
of SO. If we have opened a BFD for SO, close it. If we have placed SO's
sections in some target's section table, the caller is responsible for
removing them.
/* See solist.h. */
This function doesn't mess with objfiles at all. If there is an
objfile associated with SO that needs to be removed, the caller is
responsible for taking care of that. */
static void
clear_so (so_list &so)
void
so_list::clear ()
{
const target_so_ops *ops = gdbarch_so_ops (current_inferior ()->arch ());
delete so.sections;
so.sections = NULL;
delete this->sections;
this->sections = nullptr;
gdb_bfd_unref (so.abfd);
so.abfd = NULL;
gdb_bfd_unref (this->abfd);
this->abfd = nullptr;
/* Our caller closed the objfile, possibly via objfile_purge_solibs. */
so.symbols_loaded = 0;
so.objfile = NULL;
this->symbols_loaded = 0;
this->objfile = nullptr;
so.addr_low = so.addr_high = 0;
this->addr_low = this->addr_high = 0;
/* Restore the target-supplied file name. SO_NAME may be the path
of the symbol file. */
strcpy (so.so_name, so.so_original_name);
strcpy (this->so_name, this->so_original_name);
/* Do the same for target-specific data. */
if (ops->clear_so != NULL)
ops->clear_so (so);
ops->clear_so (*this);
}
lm_info::~lm_info () = default;
@ -674,7 +667,7 @@ lm_info::~lm_info () = default;
void
free_so (so_list &so)
{
clear_so (so);
so.clear ();
delete &so;
}
@ -1358,7 +1351,7 @@ reload_shared_libraries_1 (int from_tty)
&& !solib_used (so))
so->objfile->unlink ();
current_program_space->remove_target_sections (so);
clear_so (*so);
so->clear ();
}
/* If this shared library is now associated with a new symbol

View file

@ -38,6 +38,16 @@ using lm_info_up = std::unique_ptr<lm_info>;
struct so_list
{
/* Free symbol-file related contents of SO and reset for possible reloading
of SO. If we have opened a BFD for SO, close it. If we have placed SO's
sections in some target's section table, the caller is responsible for
removing them.
This function doesn't mess with objfiles at all. If there is an
objfile associated with SO that needs to be removed, the caller is
responsible for taking care of that. */
void clear () ;
/* The following fields of the structure come directly from the
dynamic linker's tables in the inferior, and are initialized by
current_sos. */