[1/3] Pass current directory to gdb_abspath

Message ID 20240929-pr-31716-capture-openp-v1-1-ee6bd616d3bf@tromey.com
State New
Headers
Series Capture some globals for background DWARF reading |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Build passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm success Test passed
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 success Test passed

Commit Message

Tom Tromey Sept. 29, 2024, 6:52 p.m. UTC
  Currently, gdb_abspath uses the current_directory global.  However,
background threads need to capture this global to avoid races with the
user using "cd".

This patch changes this function to accept a cwd parameter, in
prepration for this.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31716
---
 gdbsupport/pathstuff.cc |  6 +++---
 gdbsupport/pathstuff.h  | 18 +++++++++---------
 2 files changed, 12 insertions(+), 12 deletions(-)
  

Patch

diff --git a/gdbsupport/pathstuff.cc b/gdbsupport/pathstuff.cc
index 029e3c9a89001688877ea041d414acd41927e349..faed79b2cfb1d63c7051245e9018c0c2be7e083f 100644
--- a/gdbsupport/pathstuff.cc
+++ b/gdbsupport/pathstuff.cc
@@ -124,17 +124,17 @@  gdb_realpath_keepfile (const char *filename)
 /* See gdbsupport/pathstuff.h.  */
 
 std::string
-gdb_abspath (const char *path)
+gdb_abspath (const char *path, const char *cwd)
 {
   gdb_assert (path != NULL && path[0] != '\0');
 
   if (path[0] == '~')
     return gdb_tilde_expand (path);
 
-  if (IS_ABSOLUTE_PATH (path) || current_directory == NULL)
+  if (IS_ABSOLUTE_PATH (path) || cwd == NULL)
     return path;
 
-  return path_join (current_directory, path);
+  return path_join (cwd, path);
 }
 
 /* See gdbsupport/pathstuff.h.  */
diff --git a/gdbsupport/pathstuff.h b/gdbsupport/pathstuff.h
index 22170bbabf2016a7d2118c2dd8c74c4d4a176b6a..15c7872aa9ab10e7f995d267b007011692ce8fbd 100644
--- a/gdbsupport/pathstuff.h
+++ b/gdbsupport/pathstuff.h
@@ -30,6 +30,9 @@ 
 
 /* Path utilities.  */
 
+/* String containing the current directory (what getwd would return).  */
+extern char *current_directory;
+
 /* Return the real path of FILENAME, expanding all the symbolic links.
 
    Contrary to "gdb_abspath", this function does not use
@@ -47,14 +50,14 @@  extern std::string gdb_realpath_keepfile (const char *filename);
    PATH cannot be NULL or the empty string.
    This does not resolve symlinks however, use gdb_realpath for that.
 
-   Contrary to "gdb_realpath", this function uses CURRENT_DIRECTORY
-   for the path expansion.  This may lead to scenarios the current
-   working directory (CWD) is different than CURRENT_DIRECTORY.
+   Contrary to "gdb_realpath", this function uses CWD for the path
+   expansion.  This may lead to scenarios the current working
+   directory is different than CWD.
 
-   If CURRENT_DIRECTORY is NULL, this function returns a copy of
-   PATH.  */
+   If CWD is NULL, this function returns a copy of PATH.  */
 
-extern std::string gdb_abspath (const char *path);
+extern std::string gdb_abspath (const char *path,
+				const char *cwd = current_directory);
 
 /* Overload of gdb_abspath which takes std::string.  */
 
@@ -177,7 +180,4 @@  extern const char *get_shell ();
 
 extern gdb::char_vector make_temp_filename (const std::string &f);
 
-/* String containing the current directory (what getwd would return).  */
-extern char *current_directory;
-
 #endif /* COMMON_PATHSTUFF_H */