+2021-02-24 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * exec.c (exec_target::close): Call new clear_target_sections
+ function.
+ (program_space::add_target_sections): Update name of member
+ variable.
+ (program_space::add_target_sections): Update name of member
+ variable.
+ (program_space::remove_target_sections): Likewise.
+ (exec_one_fork): Use new target_sections member function.
+ (exec_target::get_section_table): Likewise.
+ (exec_target::files_info): Likewise.
+ (set_section_command): Likewise.
+ (exec_set_section_address): Likewise.
+ (exec_target::has_memory): Use new target_sections member
+ function.
+ * progspace.h (program_space::clear_target_sections): New member
+ function.
+ (program_space::target_sections): Rename member variable to
+ m_target_sections, replace with a new member function.
+ (program_space::m_target_sections): New member variable.
+ * solib-dsbt.c (scan_dyntag): Use new member function.
+ * solib-svr4.c (scan_dyntag): Likewise.
+
2021-02-24 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb/bfd-target.c (class target_bfd) <get_section_table>: Make
{
for (struct program_space *ss : program_spaces)
{
- ss->target_sections.clear ();
+ ss->clear_target_sections ();
ss->exec_close ();
}
}
{
for (const target_section &s : sections)
{
- target_sections.push_back (s);
- target_sections.back ().owner = owner;
+ m_target_sections.push_back (s);
+ m_target_sections.back ().owner = owner;
}
scoped_restore_current_pspace_and_thread restore_pspace_thread;
if (bfd_section_size (osect->the_bfd_section) == 0)
continue;
- target_sections.emplace_back (obj_section_addr (osect),
- obj_section_endaddr (osect),
- osect->the_bfd_section, (void *) objfile);
+ m_target_sections.emplace_back (obj_section_addr (osect),
+ obj_section_endaddr (osect),
+ osect->the_bfd_section, (void *) objfile);
}
}
{
gdb_assert (owner != NULL);
- auto it = std::remove_if (target_sections.begin (),
- target_sections.end (),
+ auto it = std::remove_if (m_target_sections.begin (),
+ m_target_sections.end (),
[&] (target_section §)
{
return sect.owner == owner;
});
- target_sections.erase (it, target_sections.end ());
+ m_target_sections.erase (it, m_target_sections.end ());
/* If we don't have any more sections to read memory from,
remove the file_stratum target from the stack of each
inferior sharing the program space. */
- if (target_sections.empty ())
+ if (m_target_sections.empty ())
{
scoped_restore_current_pspace_and_thread restore_pspace_thread;
void
exec_on_vfork ()
{
- if (!current_program_space->target_sections.empty ())
+ if (!current_program_space->target_sections ().empty ())
push_target (&exec_ops);
}
const target_section_table *
exec_target::get_section_table ()
{
- return ¤t_program_space->target_sections;
+ return ¤t_program_space->target_sections ();
}
enum target_xfer_status
exec_target::files_info ()
{
if (current_program_space->exec_bfd ())
- print_section_info (¤t_program_space->target_sections,
+ print_section_info (¤t_program_space->target_sections (),
current_program_space->exec_bfd ());
else
puts_filtered (_("\t<no file loaded>\n"));
/* Parse out new virtual address. */
secaddr = parse_and_eval_address (args);
- for (target_section &p : current_program_space->target_sections)
+ for (target_section &p : current_program_space->target_sections ())
{
if (!strncmp (secname, bfd_section_name (p.the_bfd_section), seclen)
&& bfd_section_name (p.the_bfd_section)[seclen] == '\0')
void
exec_set_section_address (const char *filename, int index, CORE_ADDR address)
{
- for (target_section &p : current_program_space->target_sections)
+ for (target_section &p : current_program_space->target_sections ())
{
if (filename_cmp (filename,
bfd_get_filename (p.the_bfd_section->owner)) == 0
{
/* We can provide memory if we have any file/target sections to read
from. */
- return !current_program_space->target_sections.empty ();
+ return !current_program_space->target_sections ().empty ();
}
gdb::unique_xmalloc_ptr<char>
sections. They are given OBJFILE as the "owner". */
void add_target_sections (struct objfile *objfile);
+ /* Clear all target sections from M_TARGET_SECTIONS table. */
+ void clear_target_sections ()
+ {
+ m_target_sections.clear ();
+ }
+
+ /* Return a reference to the M_TARGET_SECTIONS table. */
+ target_section_table &target_sections ()
+ {
+ return m_target_sections;
+ }
+
/* Unique ID number. */
int num = 0;
/* All known objfiles are kept in a linked list. */
std::list<std::shared_ptr<objfile>> objfiles_list;
- /* The set of target sections matching the sections mapped into
- this program space. Managed by both exec_ops and solib.c. */
- target_section_table target_sections;
-
/* List of shared objects mapped into this space. Managed by
solib.c. */
struct so_list *so_list = NULL;
/* Per pspace data-pointers required by other GDB modules. */
REGISTRY_FIELDS {};
+
+private:
+ /* The set of target sections matching the sections mapped into
+ this program space. Managed by both exec_ops and solib.c. */
+ target_section_table m_target_sections;
};
/* An address space. It is used for comparing if