lldb.cpp revision 6e4c5ce0f697eb9899a54854a2a9004e961b0de2
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 26#ifdef __APPLE__ 27#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h" 28#include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h" 29#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h" 30#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h" 31#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h" 32#include "Plugins/Process/MacOSX-User/source/ProcessMacOSX.h" 33#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h" 34#endif 35 36#ifdef __linux__ 37#include "Plugins/Process/Linux/ProcessLinux.h" 38#endif 39 40using namespace lldb_private; 41 42 43void 44lldb_private::Initialize () 45{ 46 // Make sure we inialize only once 47 static Mutex g_inited_mutex(Mutex::eMutexTypeNormal); 48 static bool g_inited = false; 49 50 Mutex::Locker locker(g_inited_mutex); 51 if (!g_inited) 52 { 53 g_inited = true; 54 Timer::Initialize (); 55 Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); 56 57 Log::Callbacks log_callbacks = { DisableLog, EnableLog, ListLogCategories }; 58 59 Log::RegisterLogChannel ("lldb", log_callbacks); 60 DisassemblerLLVM::Initialize(); 61 ObjectContainerBSDArchive::Initialize(); 62 ObjectFileELF::Initialize(); 63 SymbolFileDWARF::Initialize(); 64 SymbolFileDWARFDebugMap::Initialize(); 65 SymbolFileSymtab::Initialize(); 66 67#ifdef __APPLE__ 68 ABIMacOSX_i386::Initialize(); 69 ABISysV_x86_64::Initialize(); 70 DynamicLoaderMacOSXDYLD::Initialize(); 71 ObjectContainerUniversalMachO::Initialize(); 72 ObjectFileMachO::Initialize(); 73 ProcessGDBRemote::Initialize(); 74 ProcessMacOSX::Initialize(); 75 SymbolVendorMacOSX::Initialize(); 76#endif 77 Debugger::GetSettingsController (false); 78 Process::GetSettingsController (false); 79 80#ifdef __linux__ 81 ProcessLinux::Initialize(); 82#endif 83 } 84} 85 86void 87lldb_private::WillTerminate() 88{ 89 Host::WillTerminate(); 90} 91 92void 93lldb_private::Terminate () 94{ 95 Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); 96 DisassemblerLLVM::Terminate(); 97 ObjectContainerBSDArchive::Terminate(); 98 ObjectFileELF::Terminate(); 99 SymbolFileDWARF::Terminate(); 100 SymbolFileDWARFDebugMap::Terminate(); 101 SymbolFileSymtab::Terminate(); 102 103#ifdef __APPLE__ 104 DynamicLoaderMacOSXDYLD::Terminate(); 105 ObjectContainerUniversalMachO::Terminate(); 106 ObjectFileMachO::Terminate(); 107 ProcessGDBRemote::Terminate(); 108 ProcessMacOSX::Terminate(); 109 SymbolVendorMacOSX::Terminate(); 110#endif 111 112 Process::GetSettingsController (true); 113 Debugger::GetSettingsController (true); 114 115#ifdef __linux__ 116 ProcessLinux::Terminate(); 117#endif 118} 119 120extern "C" const double LLDBVersionNumber; 121const char * 122lldb_private::GetVersion () 123{ 124 static char g_version_string[32]; 125 if (g_version_string[0] == '\0') 126 ::snprintf (g_version_string, sizeof(g_version_string), "LLDB-%g", LLDBVersionNumber); 127 128 return g_version_string; 129} 130 131ArchSpec & 132lldb_private::GetDefaultArchitecture () 133{ 134 static ArchSpec g_default_arch; 135 return g_default_arch; 136} 137 138 139const char * 140lldb_private::GetVoteAsCString (lldb::Vote vote) 141{ 142 switch (vote) 143 { 144 case eVoteNo: return "no"; 145 case eVoteNoOpinion: return "no opinion"; 146 case eVoteYes: return "yes"; 147 default: 148 break; 149 } 150 return "invalid"; 151} 152 153