summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-10-17 00:24:37 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2019-10-17 00:24:37 +0000
commitbf46b76187e24b544599b9362888c3b5de8e6343 (patch)
tree9e35873c75d63632b02ac044e65a9ebb0b94aed4
parent528b1b64310b327876b516113b237a62f9e90728 (diff)
[Reproducer] Set the working directory in the VFS
Now that the VFS knows how to deal with virtual working directories, we can set the current working directory to the one we recorded during reproducer capture. This ensures that relative paths are resolved correctly during replay. git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@375064 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--source/Initialization/SystemInitializerCommon.cpp7
-rw-r--r--test/Shell/Reproducer/TestWorkingDir.test10
2 files changed, 14 insertions, 3 deletions
diff --git a/source/Initialization/SystemInitializerCommon.cpp b/source/Initialization/SystemInitializerCommon.cpp
index e17dc65f6..5b8bd8926 100644
--- a/source/Initialization/SystemInitializerCommon.cpp
+++ b/source/Initialization/SystemInitializerCommon.cpp
@@ -78,6 +78,13 @@ llvm::Error SystemInitializerCommon::Initialize() {
} else {
FileSystem::Initialize();
}
+ if (llvm::Expected<std::string> cwd =
+ loader->LoadBuffer<WorkingDirectoryProvider>()) {
+ FileSystem::Instance().GetVirtualFileSystem()->setCurrentWorkingDirectory(
+ *cwd);
+ } else {
+ return cwd.takeError();
+ }
} else if (repro::Generator *g = r.GetGenerator()) {
repro::VersionProvider &vp = g->GetOrCreate<repro::VersionProvider>();
vp.SetVersion(lldb_private::GetVersion());
diff --git a/test/Shell/Reproducer/TestWorkingDir.test b/test/Shell/Reproducer/TestWorkingDir.test
index cef57e865..c2f012447 100644
--- a/test/Shell/Reproducer/TestWorkingDir.test
+++ b/test/Shell/Reproducer/TestWorkingDir.test
@@ -1,13 +1,17 @@
-# This tests relative capture paths.
+# This tests that the reproducer can deal with relative files. We create a
+# binary in a subdirectory and pass its relative path to LLDB. The subdirectory
+# is removed before replay so that it only exists in the reproducer's VFS.
# RUN: echo "CHECK: %t" > %t.check
# RUN: rm -rf %t.repro
# RUN: mkdir -p %t.repro
# RUN: mkdir -p %t
+# RUN: mkdir -p %t/binary
# RUN: cd %t
-# RUN: %clang %S/Inputs/simple.c -g -o %t/reproducer.out
-# RUN: %lldb -x -b -s %S/Inputs/WorkingDir.in --capture --capture-path %t.repro %t/reproducer.out
+# RUN: %clang %S/Inputs/simple.c -g -o binary/reproducer.out
+# RUN: %lldb -x -b -s %S/Inputs/WorkingDir.in --capture --capture-path %t.repro binary/reproducer.out
+# RUN: rm -rf %t/binary
# RUN: cat %t.repro/cwd.txt | FileCheck %t.check
# RUN: %lldb --replay %t.repro | FileCheck %t.check