lldb.cpp revision 642036f22366d47ea8e6f8498bedb92b88f7f79f
1//===-- lldb.cpp ------------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/lldb-private.h" 11#include "lldb/lldb-private-log.h" 12#include "lldb/Core/ArchSpec.h" 13#include "lldb/Core/Log.h" 14#include "lldb/Core/Timer.h" 15#include "lldb/Host/Host.h" 16#include "lldb/Host/Mutex.h" 17 18#include "Plugins/Disassembler/llvm/DisassemblerLLVM.h" 19#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h" 20#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h" 21#include "Plugins/ObjectFile/ELF/ObjectFileELF.h" 22#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h" 23#include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h" 24#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h" 25#include "Plugins/Process/Utility/UnwindAssemblyProfiler-x86.h" 26#include "Plugins/Process/Utility/ArchDefaultUnwindPlan-x86.h" 27#include "Plugins/Process/Utility/ArchVolatileRegs-x86.h" 28 29#ifdef __APPLE__ 30#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h" 31#include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h" 32#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h" 33#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h" 34#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h" 35#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h" 36#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h" 37#include "Plugins/Process/MacOSX-User/source/ProcessMacOSX.h" 38#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h" 39#endif 40 41#ifdef __linux__ 42#include "Plugins/Process/Linux/ProcessLinux.h" 43#endif 44 45using namespace lldb_private; 46 47 48void 49lldb_private::Initialize () 50{ 51 // Make sure we inialize only once 52 static Mutex g_inited_mutex(Mutex::eMutexTypeNormal); 53 static bool g_inited = false; 54 55 Mutex::Locker locker(g_inited_mutex); 56 if (!g_inited) 57 { 58 g_inited = true; 59 Timer::Initialize (); 60 Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); 61 62 Log::Callbacks log_callbacks = { DisableLog, EnableLog, ListLogCategories }; 63 64 Log::RegisterLogChannel ("lldb", log_callbacks); 65 DisassemblerLLVM::Initialize(); 66 ObjectContainerBSDArchive::Initialize(); 67 ObjectFileELF::Initialize(); 68 SymbolFileDWARF::Initialize(); 69 SymbolFileDWARFDebugMap::Initialize(); 70 SymbolFileSymtab::Initialize(); 71 UnwindAssemblyProfiler_x86::Initialize(); 72 ArchVolatileRegs_x86::Initialize(); 73 74#ifdef __APPLE__ 75 ABIMacOSX_i386::Initialize(); 76 ABISysV_x86_64::Initialize(); 77 DynamicLoaderMacOSXDYLD::Initialize(); 78 ItaniumABILanguageRuntime::Initialize(); 79 AppleObjCRuntimeV2::Initialize(); 80 ObjectContainerUniversalMachO::Initialize(); 81 ObjectFileMachO::Initialize(); 82 ProcessGDBRemote::Initialize(); 83 ProcessMacOSX::Initialize(); 84 SymbolVendorMacOSX::Initialize(); 85#endif 86 Debugger::GetSettingsController (false); 87 Target::GetSettingsController (false); 88 Process::GetSettingsController (false); 89 Thread::GetSettingsController (false); 90#ifdef __linux__ 91 ProcessLinux::Initialize(); 92#endif 93 } 94} 95 96void 97lldb_private::WillTerminate() 98{ 99 Host::WillTerminate(); 100} 101 102void 103lldb_private::Terminate () 104{ 105 Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); 106 DisassemblerLLVM::Terminate(); 107 ObjectContainerBSDArchive::Terminate(); 108 ObjectFileELF::Terminate(); 109 SymbolFileDWARF::Terminate(); 110 SymbolFileDWARFDebugMap::Terminate(); 111 SymbolFileSymtab::Terminate(); 112 UnwindAssemblyProfiler_x86::Terminate(); 113 ArchVolatileRegs_x86::Terminate(); 114 115#ifdef __APPLE__ 116 DynamicLoaderMacOSXDYLD::Terminate(); 117 ObjectContainerUniversalMachO::Terminate(); 118 ObjectFileMachO::Terminate(); 119 ProcessGDBRemote::Terminate(); 120 ProcessMacOSX::Terminate(); 121 SymbolVendorMacOSX::Terminate(); 122#endif 123 124 Thread::GetSettingsController (true); 125 Process::GetSettingsController (true); 126 Target::GetSettingsController (true); 127 Debugger::GetSettingsController (true); 128 129#ifdef __linux__ 130 ProcessLinux::Terminate(); 131#endif 132} 133 134extern "C" const double LLDBVersionNumber; 135const char * 136lldb_private::GetVersion () 137{ 138 static char g_version_string[32]; 139 if (g_version_string[0] == '\0') 140 ::snprintf (g_version_string, sizeof(g_version_string), "LLDB-%g", LLDBVersionNumber); 141 142 return g_version_string; 143} 144 145const char * 146lldb_private::GetVoteAsCString (lldb::Vote vote) 147{ 148 switch (vote) 149 { 150 case eVoteNo: return "no"; 151 case eVoteNoOpinion: return "no opinion"; 152 case eVoteYes: return "yes"; 153 default: 154 break; 155 } 156 return "invalid"; 157} 158 159