diff options
Diffstat (limited to 'contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp')
-rw-r--r-- | contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp | 90 |
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(); |