lldb.cpp revision 8280cbe80c79bc206335831dd732e0f9fb69c519
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 ArchDefaultUnwindPlan_x86::Initialize(); 73 ArchVolatileRegs_x86::Initialize(); 74 75#ifdef __APPLE__ 76 ABIMacOSX_i386::Initialize(); 77 ABISysV_x86_64::Initialize(); 78 DynamicLoaderMacOSXDYLD::Initialize(); 79 ItaniumABILanguageRuntime::Initialize(); 80 AppleObjCRuntimeV2::Initialize(); 81 ObjectContainerUniversalMachO::Initialize(); 82 ObjectFileMachO::Initialize(); 83 ProcessGDBRemote::Initialize(); 84 //ProcessMacOSX::Initialize(); 85 SymbolVendorMacOSX::Initialize(); 86#endif 87 Debugger::GetSettingsController (false); 88 Target::GetSettingsController (false); 89 Process::GetSettingsController (false); 90 Thread::GetSettingsController (false); 91#ifdef __linux__ 92 ProcessLinux::Initialize(); 93#endif 94 } 95} 96 97void 98lldb_private::WillTerminate() 99{ 100 Host::WillTerminate(); 101} 102 103void 104lldb_private::Terminate () 105{ 106 Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); 107 DisassemblerLLVM::Terminate(); 108 ObjectContainerBSDArchive::Terminate(); 109 ObjectFileELF::Terminate(); 110 SymbolFileDWARF::Terminate(); 111 SymbolFileDWARFDebugMap::Terminate(); 112 SymbolFileSymtab::Terminate(); 113 UnwindAssemblyProfiler_x86::Terminate(); 114 ArchDefaultUnwindPlan_x86::Terminate(); 115 ArchVolatileRegs_x86::Terminate(); 116 117#ifdef __APPLE__ 118 DynamicLoaderMacOSXDYLD::Terminate(); 119 ObjectContainerUniversalMachO::Terminate(); 120 ObjectFileMachO::Terminate(); 121 ProcessGDBRemote::Terminate(); 122 //ProcessMacOSX::Terminate(); 123 SymbolVendorMacOSX::Terminate(); 124#endif 125 126 Thread::GetSettingsController (true); 127 Process::GetSettingsController (true); 128 Target::GetSettingsController (true); 129 Debugger::GetSettingsController (true); 130 131#ifdef __linux__ 132 ProcessLinux::Terminate(); 133#endif 134} 135 136extern "C" const double LLDBVersionNumber; 137const char * 138lldb_private::GetVersion () 139{ 140 static char g_version_string[32]; 141 if (g_version_string[0] == '\0') 142 ::snprintf (g_version_string, sizeof(g_version_string), "LLDB-%g", LLDBVersionNumber); 143 144 return g_version_string; 145} 146 147const char * 148lldb_private::GetVoteAsCString (lldb::Vote vote) 149{ 150 switch (vote) 151 { 152 case eVoteNo: return "no"; 153 case eVoteNoOpinion: return "no opinion"; 154 case eVoteYes: return "yes"; 155 default: 156 break; 157 } 158 return "invalid"; 159} 160 161 162const char * 163lldb_private::GetSectionTypeAsCString (lldb::SectionType sect_type) 164{ 165 switch (sect_type) 166 { 167 case eSectionTypeInvalid: return "invalid"; 168 case eSectionTypeCode: return "code"; 169 case eSectionTypeContainer: return "container"; 170 case eSectionTypeData: return "data"; 171 case eSectionTypeDataCString: return "data-cstr"; 172 case eSectionTypeDataCStringPointers: return "data-cstr-ptr"; 173 case eSectionTypeDataSymbolAddress: return "data-symbol-addr"; 174 case eSectionTypeData4: return "data-4-byte"; 175 case eSectionTypeData8: return "data-8-byte"; 176 case eSectionTypeData16: return "data-16-byte"; 177 case eSectionTypeDataPointers: return "data-ptrs"; 178 case eSectionTypeDebug: return "debug"; 179 case eSectionTypeZeroFill: return "zero-fill"; 180 case eSectionTypeDataObjCMessageRefs: return "objc-message-refs"; 181 case eSectionTypeDataObjCCFStrings: return "objc-cfstrings"; 182 case eSectionTypeDWARFDebugAbbrev: return "dwarf-abbrev"; 183 case eSectionTypeDWARFDebugAranges: return "dwarf-aranges"; 184 case eSectionTypeDWARFDebugFrame: return "dwarf-frame"; 185 case eSectionTypeDWARFDebugInfo: return "dwarf-info"; 186 case eSectionTypeDWARFDebugLine: return "dwarf-line"; 187 case eSectionTypeDWARFDebugLoc: return "dwarf-loc"; 188 case eSectionTypeDWARFDebugMacInfo: return "dwarf-macinfo"; 189 case eSectionTypeDWARFDebugPubNames: return "dwarf-pubnames"; 190 case eSectionTypeDWARFDebugPubTypes: return "dwarf-pubtypes"; 191 case eSectionTypeDWARFDebugRanges: return "dwarf-ranges"; 192 case eSectionTypeDWARFDebugStr: return "dwarf-str"; 193 case eSectionTypeEHFrame: return "eh-frame"; 194 case eSectionTypeOther: return "regular"; 195 } 196 return "unknown"; 197 198} 199 200