aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2024-05-30 14:53:53 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2024-06-07 23:09:03 -0400
commit9ad8c5832d0092e1c02069b1189ec0ff59089957 (patch)
treefedbd77064a2a4522f6cb6d15e40d7399ba07875
parent9102a6c15c756c55e77c0fa7deecfc58fa8a361e (diff)
downloadgdb-9ad8c5832d0092e1c02069b1189ec0ff59089957.zip
gdb-9ad8c5832d0092e1c02069b1189ec0ff59089957.tar.gz
gdb-9ad8c5832d0092e1c02069b1189ec0ff59089957.tar.bz2
gdb: make progspace::exec_filename private, add getter / setter
Just like the title says... I think this makes things a bit clearer, for instance where the exec filename is set. It also makes the read call sites a bit nicer, avoiding the `.get ()`. Change-Id: If8b58ae8f6270c8a34b868f6ca06128c6671ea3c Approved-By: Tom Tromey <tom@tromey.com>
-rw-r--r--gdb/corefile.c5
-rw-r--r--gdb/exec.c12
-rw-r--r--gdb/inferior.c8
-rw-r--r--gdb/mi/mi-main.c7
-rw-r--r--gdb/progspace.c14
-rw-r--r--gdb/progspace.h16
-rw-r--r--gdb/python/py-progspace.c2
7 files changed, 35 insertions, 29 deletions
diff --git a/gdb/corefile.c b/gdb/corefile.c
index 044c084..3ae3fc7 100644
--- a/gdb/corefile.c
+++ b/gdb/corefile.c
@@ -81,8 +81,9 @@ validate_files (void)
const char *
get_exec_file (int err)
{
- if (current_program_space->exec_filename != nullptr)
- return current_program_space->exec_filename.get ();
+ if (current_program_space->exec_filename () != nullptr)
+ return current_program_space->exec_filename ();
+
if (!err)
return NULL;
diff --git a/gdb/exec.c b/gdb/exec.c
index 8891526..4fe4d3b 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -456,15 +456,15 @@ exec_file_attach (const char *filename, int from_tty)
/* gdb_realpath_keepfile resolves symlinks on the local
filesystem and so cannot be used for "target:" files. */
- gdb_assert (current_program_space->exec_filename == nullptr);
+ gdb_assert (current_program_space->exec_filename () == nullptr);
if (load_via_target)
- current_program_space->exec_filename
- = (make_unique_xstrdup
+ current_program_space->set_exec_filename
+ (make_unique_xstrdup
(bfd_get_filename (current_program_space->exec_bfd ())));
else
- current_program_space->exec_filename
- = make_unique_xstrdup (gdb_realpath_keepfile
- (scratch_pathname).c_str ());
+ current_program_space->set_exec_filename
+ (make_unique_xstrdup (gdb_realpath_keepfile
+ (scratch_pathname).c_str ()));
if (!bfd_check_format_matches (current_program_space->exec_bfd (),
bfd_object, &matching))
diff --git a/gdb/inferior.c b/gdb/inferior.c
index 0522cb5..6a19767 100644
--- a/gdb/inferior.c
+++ b/gdb/inferior.c
@@ -519,7 +519,7 @@ void
print_selected_inferior (struct ui_out *uiout)
{
struct inferior *inf = current_inferior ();
- const char *filename = inf->pspace->exec_filename.get ();
+ const char *filename = inf->pspace->exec_filename ();
if (filename == NULL)
filename = _("<noexec>");
@@ -613,8 +613,8 @@ print_inferior (struct ui_out *uiout, const char *requested_inferiors)
std::string conn = uiout_field_connection (inf->process_target ());
uiout->field_string ("connection-id", conn);
- if (inf->pspace->exec_filename != nullptr)
- uiout->field_string ("exec", inf->pspace->exec_filename.get (),
+ if (inf->pspace->exec_filename () != nullptr)
+ uiout->field_string ("exec", inf->pspace->exec_filename (),
file_name_style.style ());
else
uiout->field_skip ("exec");
@@ -750,7 +750,7 @@ inferior_command (const char *args, int from_tty)
{
inf = current_inferior ();
gdb_assert (inf != nullptr);
- const char *filename = inf->pspace->exec_filename.get ();
+ const char *filename = inf->pspace->exec_filename ();
if (filename == nullptr)
filename = _("<noexec>");
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index a758b68..5bcb5f7 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -651,11 +651,8 @@ print_one_inferior (struct inferior *inferior, bool recurse,
if (inferior->pid != 0)
uiout->field_signed ("pid", inferior->pid);
- if (inferior->pspace->exec_filename != nullptr)
- {
- uiout->field_string ("executable",
- inferior->pspace->exec_filename.get ());
- }
+ if (inferior->pspace->exec_filename () != nullptr)
+ uiout->field_string ("executable", inferior->pspace->exec_filename ());
if (inferior->pid != 0)
{
diff --git a/gdb/progspace.c b/gdb/progspace.c
index 5be514d..d5b5ef2 100644
--- a/gdb/progspace.c
+++ b/gdb/progspace.c
@@ -209,7 +209,7 @@ program_space::exec_close ()
remove_target_sections (saved_ebfd);
- exec_filename.reset (nullptr);
+ m_exec_filename.reset ();
}
}
@@ -223,8 +223,8 @@ clone_program_space (struct program_space *dest, struct program_space *src)
set_current_program_space (dest);
- if (src->exec_filename != NULL)
- exec_file_attach (src->exec_filename.get (), 0);
+ if (src->exec_filename () != nullptr)
+ exec_file_attach (src->exec_filename (), 0);
if (src->symfile_object_file != NULL)
symbol_file_add_main (objfile_name (src->symfile_object_file),
@@ -277,8 +277,8 @@ print_program_space (struct ui_out *uiout, int requested)
if (requested != -1 && pspace->num != requested)
continue;
- if (pspace->exec_filename != nullptr)
- longest_exec_name = std::max (strlen (pspace->exec_filename.get ()),
+ if (pspace->exec_filename () != nullptr)
+ longest_exec_name = std::max (strlen (pspace->exec_filename ()),
longest_exec_name);
++count;
@@ -310,8 +310,8 @@ print_program_space (struct ui_out *uiout, int requested)
uiout->field_signed ("id", pspace->num);
- if (pspace->exec_filename != nullptr)
- uiout->field_string ("exec", pspace->exec_filename.get (),
+ if (pspace->exec_filename () != nullptr)
+ uiout->field_string ("exec", pspace->exec_filename (),
file_name_style.style ());
else
uiout->field_skip ("exec");
diff --git a/gdb/progspace.h b/gdb/progspace.h
index bc24ef9..82c0a74 100644
--- a/gdb/progspace.h
+++ b/gdb/progspace.h
@@ -292,6 +292,15 @@ struct program_space
intrusive_list<solib> &solibs ()
{ return so_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
+ iff `exec_bfd ()` is not nullptr. */
+ const char *exec_filename () const
+ { return m_exec_filename.get (); }
+
+ void set_exec_filename (gdb::unique_xmalloc_ptr<char> filename)
+ { m_exec_filename = std::move (filename); }
+
/* Close and clear exec_bfd. If we end up with no target sections
to read memory from, this unpushes the exec_ops target. */
void exec_close ();
@@ -352,10 +361,6 @@ struct program_space
gdb_bfd_ref_ptr ebfd;
/* The last-modified time, from when the exec was brought in. */
long ebfd_mtime = 0;
- /* Similar to bfd_get_filename (exec_bfd) but in original form given
- by user, without symbolic links and pathname resolved. It is not
- NULL iff EBFD is not NULL. */
- gdb::unique_xmalloc_ptr<char> exec_filename;
/* Binary file diddling handle for the core file. */
gdb_bfd_ref_ptr cbfd;
@@ -414,6 +419,9 @@ private:
/* 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;
+
+ /* See `exec_filename`. */
+ gdb::unique_xmalloc_ptr<char> m_exec_filename;
};
/* The list of all program spaces. There's always at least one. */
diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c
index a5b22ce..5bc0015 100644
--- a/gdb/python/py-progspace.c
+++ b/gdb/python/py-progspace.c
@@ -148,7 +148,7 @@ pspy_get_exec_file (PyObject *self, void *closure)
PSPY_REQUIRE_VALID (obj);
- const char *filename = obj->pspace->exec_filename.get ();
+ const char *filename = obj->pspace->exec_filename ();
if (filename != nullptr)
return host_string_to_python_string (filename).release ();