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:
parent
7ad0a42e88
commit
4ac91b6bb8
2 changed files with 24 additions and 21 deletions
35
gdb/solib.c
35
gdb/solib.c
|
@ -623,39 +623,32 @@ solib_map_sections (so_list &so)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free symbol-file related contents of SO and reset for possible reloading
|
/* See solist.h. */
|
||||||
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
|
void
|
||||||
objfile associated with SO that needs to be removed, the caller is
|
so_list::clear ()
|
||||||
responsible for taking care of that. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
clear_so (so_list &so)
|
|
||||||
{
|
{
|
||||||
const target_so_ops *ops = gdbarch_so_ops (current_inferior ()->arch ());
|
const target_so_ops *ops = gdbarch_so_ops (current_inferior ()->arch ());
|
||||||
|
|
||||||
delete so.sections;
|
delete this->sections;
|
||||||
so.sections = NULL;
|
this->sections = nullptr;
|
||||||
|
|
||||||
gdb_bfd_unref (so.abfd);
|
gdb_bfd_unref (this->abfd);
|
||||||
so.abfd = NULL;
|
this->abfd = nullptr;
|
||||||
|
|
||||||
/* Our caller closed the objfile, possibly via objfile_purge_solibs. */
|
/* Our caller closed the objfile, possibly via objfile_purge_solibs. */
|
||||||
so.symbols_loaded = 0;
|
this->symbols_loaded = 0;
|
||||||
so.objfile = NULL;
|
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
|
/* Restore the target-supplied file name. SO_NAME may be the path
|
||||||
of the symbol file. */
|
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. */
|
/* Do the same for target-specific data. */
|
||||||
if (ops->clear_so != NULL)
|
if (ops->clear_so != NULL)
|
||||||
ops->clear_so (so);
|
ops->clear_so (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
lm_info::~lm_info () = default;
|
lm_info::~lm_info () = default;
|
||||||
|
@ -674,7 +667,7 @@ lm_info::~lm_info () = default;
|
||||||
void
|
void
|
||||||
free_so (so_list &so)
|
free_so (so_list &so)
|
||||||
{
|
{
|
||||||
clear_so (so);
|
so.clear ();
|
||||||
delete &so;
|
delete &so;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1358,7 +1351,7 @@ reload_shared_libraries_1 (int from_tty)
|
||||||
&& !solib_used (so))
|
&& !solib_used (so))
|
||||||
so->objfile->unlink ();
|
so->objfile->unlink ();
|
||||||
current_program_space->remove_target_sections (so);
|
current_program_space->remove_target_sections (so);
|
||||||
clear_so (*so);
|
so->clear ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If this shared library is now associated with a new symbol
|
/* If this shared library is now associated with a new symbol
|
||||||
|
|
10
gdb/solist.h
10
gdb/solist.h
|
@ -38,6 +38,16 @@ using lm_info_up = std::unique_ptr<lm_info>;
|
||||||
|
|
||||||
struct so_list
|
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
|
/* The following fields of the structure come directly from the
|
||||||
dynamic linker's tables in the inferior, and are initialized by
|
dynamic linker's tables in the inferior, and are initialized by
|
||||||
current_sos. */
|
current_sos. */
|
||||||
|
|
Loading…
Add table
Reference in a new issue