This patch extends the FileSystem class with a bunch of functions that are currently implemented as methods of the FileSpec class. These methods will be removed in future commits and replaced by calls to the file system. The new functions are operated in terms of the virtual file system which was recently moved from clang into LLVM so it could be reused in lldb. Because the VFS is stateful, we turned the FileSystem class into a singleton. Differential revision: https://reviews.llvm.org/D53532 llvm-svn: 345783
113 lines
3.7 KiB
C++
113 lines
3.7 KiB
C++
//===-- SystemInitializerCommon.cpp -----------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Initialization/SystemInitializerCommon.h"
|
|
|
|
#include "Plugins/Instruction/ARM/EmulateInstructionARM.h"
|
|
#include "Plugins/Instruction/MIPS/EmulateInstructionMIPS.h"
|
|
#include "Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h"
|
|
#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h"
|
|
#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
|
|
#include "Plugins/Process/gdb-remote/ProcessGDBRemoteLog.h"
|
|
#include "lldb/Host/FileSystem.h"
|
|
#include "lldb/Host/Host.h"
|
|
#include "lldb/Host/HostInfo.h"
|
|
#include "lldb/Utility/Log.h"
|
|
#include "lldb/Utility/Timer.h"
|
|
|
|
#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
|
|
#include "Plugins/Process/POSIX/ProcessPOSIXLog.h"
|
|
#endif
|
|
|
|
#if defined(_MSC_VER)
|
|
#include "Plugins/Process/Windows/Common/ProcessWindowsLog.h"
|
|
#include "lldb/Host/windows/windows.h"
|
|
#endif
|
|
|
|
#include "llvm/Support/TargetSelect.h"
|
|
|
|
#include <string>
|
|
|
|
using namespace lldb_private;
|
|
|
|
SystemInitializerCommon::SystemInitializerCommon() {}
|
|
|
|
SystemInitializerCommon::~SystemInitializerCommon() {}
|
|
|
|
void SystemInitializerCommon::Initialize() {
|
|
#if defined(_MSC_VER)
|
|
const char *disable_crash_dialog_var = getenv("LLDB_DISABLE_CRASH_DIALOG");
|
|
if (disable_crash_dialog_var &&
|
|
llvm::StringRef(disable_crash_dialog_var).equals_lower("true")) {
|
|
// This will prevent Windows from displaying a dialog box requiring user
|
|
// interaction when
|
|
// LLDB crashes. This is mostly useful when automating LLDB, for example
|
|
// via the test
|
|
// suite, so that a crash in LLDB does not prevent completion of the test
|
|
// suite.
|
|
::SetErrorMode(GetErrorMode() | SEM_FAILCRITICALERRORS |
|
|
SEM_NOGPFAULTERRORBOX);
|
|
|
|
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
|
|
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
|
|
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
|
|
_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
|
|
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
|
|
_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
|
|
}
|
|
#endif
|
|
|
|
FileSystem::Initialize();
|
|
Log::Initialize();
|
|
HostInfo::Initialize();
|
|
static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
|
|
Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
|
|
|
|
process_gdb_remote::ProcessGDBRemoteLog::Initialize();
|
|
|
|
// Initialize plug-ins
|
|
ObjectContainerBSDArchive::Initialize();
|
|
|
|
EmulateInstructionARM::Initialize();
|
|
EmulateInstructionMIPS::Initialize();
|
|
EmulateInstructionMIPS64::Initialize();
|
|
|
|
//----------------------------------------------------------------------
|
|
// Apple/Darwin hosted plugins
|
|
//----------------------------------------------------------------------
|
|
ObjectContainerUniversalMachO::Initialize();
|
|
|
|
#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
|
|
ProcessPOSIXLog::Initialize();
|
|
#endif
|
|
#if defined(_MSC_VER)
|
|
ProcessWindowsLog::Initialize();
|
|
#endif
|
|
}
|
|
|
|
void SystemInitializerCommon::Terminate() {
|
|
static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
|
|
Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
|
|
ObjectContainerBSDArchive::Terminate();
|
|
|
|
EmulateInstructionARM::Terminate();
|
|
EmulateInstructionMIPS::Terminate();
|
|
EmulateInstructionMIPS64::Terminate();
|
|
|
|
ObjectContainerUniversalMachO::Terminate();
|
|
|
|
#if defined(_MSC_VER)
|
|
ProcessWindowsLog::Terminate();
|
|
#endif
|
|
|
|
HostInfo::Terminate();
|
|
Log::DisableAllLogChannels();
|
|
FileSystem::Terminate();
|
|
}
|