aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp')
-rw-r--r--contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp90
1 files changed, 57 insertions, 33 deletions
diff --git a/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp b/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp
index 0cef2a48dcb4..d9f69f57703c 100644
--- a/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp
+++ b/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp
@@ -14,7 +14,7 @@
#include "lldb/Host/HostInfo.h"
#include "lldb/Host/Socket.h"
#include "lldb/Utility/Log.h"
-#include "lldb/Utility/Reproducer.h"
+#include "lldb/Utility/ReproducerProvider.h"
#include "lldb/Utility/Timer.h"
#include "lldb/lldb-private.h"
@@ -39,6 +39,58 @@ SystemInitializerCommon::SystemInitializerCommon() {}
SystemInitializerCommon::~SystemInitializerCommon() {}
+/// Initialize the FileSystem based on the current reproducer mode.
+static llvm::Error InitializeFileSystem() {
+ auto &r = repro::Reproducer::Instance();
+ if (repro::Loader *loader = r.GetLoader()) {
+ FileSpec vfs_mapping = loader->GetFile<FileProvider::Info>();
+ if (vfs_mapping) {
+ if (llvm::Error e = FileSystem::Initialize(vfs_mapping))
+ return e;
+ } else {
+ FileSystem::Initialize();
+ }
+
+ // Set the current working directory form the reproducer.
+ llvm::Expected<std::string> working_dir =
+ repro::GetDirectoryFrom<WorkingDirectoryProvider>(loader);
+ if (!working_dir)
+ return working_dir.takeError();
+ if (std::error_code ec = FileSystem::Instance()
+ .GetVirtualFileSystem()
+ ->setCurrentWorkingDirectory(*working_dir)) {
+ return llvm::errorCodeToError(ec);
+ }
+
+ // Set the home directory from the reproducer.
+ llvm::Expected<std::string> home_dir =
+ repro::GetDirectoryFrom<HomeDirectoryProvider>(loader);
+ if (!home_dir)
+ return home_dir.takeError();
+ FileSystem::Instance().SetHomeDirectory(*home_dir);
+
+ return llvm::Error::success();
+ }
+
+ if (repro::Generator *g = r.GetGenerator()) {
+ repro::VersionProvider &vp = g->GetOrCreate<repro::VersionProvider>();
+ vp.SetVersion(lldb_private::GetVersion());
+
+ repro::FileProvider &fp = g->GetOrCreate<repro::FileProvider>();
+ FileSystem::Initialize(fp.GetFileCollector());
+
+ fp.RecordInterestingDirectory(
+ g->GetOrCreate<repro::WorkingDirectoryProvider>().GetDirectory());
+ fp.RecordInterestingDirectory(
+ g->GetOrCreate<repro::HomeDirectoryProvider>().GetDirectory());
+
+ return llvm::Error::success();
+ }
+
+ FileSystem::Initialize();
+ return llvm::Error::success();
+}
+
llvm::Error SystemInitializerCommon::Initialize() {
#if defined(_WIN32)
const char *disable_crash_dialog_var = getenv("LLDB_DISABLE_CRASH_DIALOG");
@@ -69,34 +121,8 @@ llvm::Error SystemInitializerCommon::Initialize() {
return e;
}
- auto &r = repro::Reproducer::Instance();
- if (repro::Loader *loader = r.GetLoader()) {
- FileSpec vfs_mapping = loader->GetFile<FileProvider::Info>();
- if (vfs_mapping) {
- if (llvm::Error e = FileSystem::Initialize(vfs_mapping))
- return e;
- } else {
- FileSystem::Initialize();
- }
- if (llvm::Expected<std::string> cwd =
- loader->LoadBuffer<WorkingDirectoryProvider>()) {
- llvm::StringRef working_dir = llvm::StringRef(*cwd).rtrim();
- if (std::error_code ec = FileSystem::Instance()
- .GetVirtualFileSystem()
- ->setCurrentWorkingDirectory(working_dir)) {
- return llvm::errorCodeToError(ec);
- }
- } else {
- return cwd.takeError();
- }
- } else if (repro::Generator *g = r.GetGenerator()) {
- repro::VersionProvider &vp = g->GetOrCreate<repro::VersionProvider>();
- vp.SetVersion(lldb_private::GetVersion());
- repro::FileProvider &fp = g->GetOrCreate<repro::FileProvider>();
- FileSystem::Initialize(fp.GetFileCollector());
- } else {
- FileSystem::Initialize();
- }
+ if (auto e = InitializeFileSystem())
+ return e;
Log::Initialize();
HostInfo::Initialize();
@@ -105,8 +131,7 @@ llvm::Error SystemInitializerCommon::Initialize() {
if (error)
return error;
- static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
- Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
+ LLDB_SCOPED_TIMER();
process_gdb_remote::ProcessGDBRemoteLog::Initialize();
@@ -121,8 +146,7 @@ llvm::Error SystemInitializerCommon::Initialize() {
}
void SystemInitializerCommon::Terminate() {
- static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
- Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
+ LLDB_SCOPED_TIMER();
#if defined(_WIN32)
ProcessWindowsLog::Terminate();