[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.

llvm-svn: 375064
This commit is contained in:
Jonas Devlieghere 2019-10-17 00:24:37 +00:00
parent f567b00880
commit f80f15e38a
2 changed files with 14 additions and 3 deletions

View File

@ -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());

View File

@ -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