diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2024-05-30 14:53:53 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2024-06-07 23:09:03 -0400 |
commit | 9ad8c5832d0092e1c02069b1189ec0ff59089957 (patch) | |
tree | fedbd77064a2a4522f6cb6d15e40d7399ba07875 | |
parent | 9102a6c15c756c55e77c0fa7deecfc58fa8a361e (diff) | |
download | gdb-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.c | 5 | ||||
-rw-r--r-- | gdb/exec.c | 12 | ||||
-rw-r--r-- | gdb/inferior.c | 8 | ||||
-rw-r--r-- | gdb/mi/mi-main.c | 7 | ||||
-rw-r--r-- | gdb/progspace.c | 14 | ||||
-rw-r--r-- | gdb/progspace.h | 16 | ||||
-rw-r--r-- | gdb/python/py-progspace.c | 2 |
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; @@ -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 (); |