lldb.cpp revision c3c4661c6a7527580e605dbb69bef7634971fe13
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/PluginManager.h" 15#include "lldb/Core/Timer.h" 16#include "lldb/Host/Host.h" 17#include "lldb/Host/Mutex.h" 18#include "lldb/Interpreter/ScriptInterpreter.h" 19#include "lldb/Target/Target.h" 20#include "lldb/Target/Thread.h" 21 22#include "Plugins/Disassembler/llvm/DisassemblerLLVM.h" 23#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h" 24#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h" 25#include "Plugins/ObjectFile/ELF/ObjectFileELF.h" 26#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h" 27#include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h" 28#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h" 29#include "Plugins/Process/Utility/UnwindAssemblyProfiler-x86.h" 30#include "Plugins/Process/Utility/ArchDefaultUnwindPlan-x86.h" 31#include "Plugins/Process/Utility/ArchVolatileRegs-x86.h" 32 33#ifdef __APPLE__ 34#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h" 35#include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h" 36#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h" 37#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h" 38#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h" 39#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h" 40#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h" 41#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h" 42#include "Plugins/Process/MacOSX-User/source/ProcessMacOSX.h" 43#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h" 44#endif 45 46#ifdef __linux__ 47#include "Plugins/Process/Linux/ProcessLinux.h" 48#include "Plugins/DynamicLoader/Linux-DYLD/DynamicLoaderLinuxDYLD.h" 49#endif 50 51using namespace lldb; 52using namespace lldb_private; 53 54 55void 56lldb_private::Initialize () 57{ 58 // Make sure we inialize only once 59 static Mutex g_inited_mutex(Mutex::eMutexTypeRecursive); 60 static bool g_inited = false; 61 62 Mutex::Locker locker(g_inited_mutex); 63 if (!g_inited) 64 { 65 g_inited = true; 66 Log::Initialize(); 67 Timer::Initialize (); 68 Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); 69 70 Target::Initialize (); 71 Process::Initialize (); 72 Thread::Initialize (); 73 DisassemblerLLVM::Initialize(); 74 ObjectContainerBSDArchive::Initialize(); 75 ObjectFileELF::Initialize(); 76 SymbolFileDWARF::Initialize(); 77 SymbolFileSymtab::Initialize(); 78 UnwindAssemblyProfiler_x86::Initialize(); 79 ArchDefaultUnwindPlan_x86_64::Initialize(); 80 ArchDefaultUnwindPlan_i386::Initialize(); 81 ArchVolatileRegs_x86::Initialize(); 82 ScriptInterpreter::Initialize (); 83 84#ifdef __APPLE__ 85 ABIMacOSX_i386::Initialize(); 86 ABISysV_x86_64::Initialize(); 87 DynamicLoaderMacOSXDYLD::Initialize(); 88 SymbolFileDWARFDebugMap::Initialize(); 89 ItaniumABILanguageRuntime::Initialize(); 90 AppleObjCRuntimeV2::Initialize(); 91 AppleObjCRuntimeV1::Initialize(); 92 ObjectContainerUniversalMachO::Initialize(); 93 ObjectFileMachO::Initialize(); 94 ProcessGDBRemote::Initialize(); 95 //ProcessMacOSX::Initialize(); 96 SymbolVendorMacOSX::Initialize(); 97#endif 98#ifdef __linux__ 99 ProcessLinux::Initialize(); 100 DynamicLoaderLinuxDYLD::Initialize(); 101#endif 102 // Scan for any system or user LLDB plug-ins 103 PluginManager::Initialize(); 104 } 105} 106 107void 108lldb_private::WillTerminate() 109{ 110 Host::WillTerminate(); 111} 112 113void 114lldb_private::Terminate () 115{ 116 Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); 117 118 // Terminate and unload and loaded system or user LLDB plug-ins 119 PluginManager::Terminate(); 120 121 DisassemblerLLVM::Terminate(); 122 ObjectContainerBSDArchive::Terminate(); 123 ObjectFileELF::Terminate(); 124 SymbolFileDWARF::Terminate(); 125 SymbolFileSymtab::Terminate(); 126 UnwindAssemblyProfiler_x86::Terminate(); 127 ArchDefaultUnwindPlan_i386::Terminate(); 128 ArchDefaultUnwindPlan_x86_64::Terminate(); 129 ArchVolatileRegs_x86::Terminate(); 130 ScriptInterpreter::Terminate (); 131 132#ifdef __APPLE__ 133 DynamicLoaderMacOSXDYLD::Terminate(); 134 SymbolFileDWARFDebugMap::Terminate(); 135 ItaniumABILanguageRuntime::Terminate(); 136 AppleObjCRuntimeV2::Terminate(); 137 AppleObjCRuntimeV1::Terminate(); 138 ObjectContainerUniversalMachO::Terminate(); 139 ObjectFileMachO::Terminate(); 140 ProcessGDBRemote::Terminate(); 141 //ProcessMacOSX::Terminate(); 142 SymbolVendorMacOSX::Terminate(); 143#endif 144 145 Thread::Terminate (); 146 Process::Terminate (); 147 Target::Terminate (); 148 149#ifdef __linux__ 150 ProcessLinux::Terminate(); 151 DynamicLoaderLinuxDYLD::Terminate(); 152#endif 153 154 Log::Terminate(); 155} 156 157extern "C" const double LLDBVersionNumber; 158const char * 159lldb_private::GetVersion () 160{ 161 static char g_version_string[32]; 162 if (g_version_string[0] == '\0') 163 ::snprintf (g_version_string, sizeof(g_version_string), "LLDB-%g", LLDBVersionNumber); 164 165 return g_version_string; 166} 167 168const char * 169lldb_private::GetVoteAsCString (lldb::Vote vote) 170{ 171 switch (vote) 172 { 173 case eVoteNo: return "no"; 174 case eVoteNoOpinion: return "no opinion"; 175 case eVoteYes: return "yes"; 176 default: 177 break; 178 } 179 return "invalid"; 180} 181 182 183const char * 184lldb_private::GetSectionTypeAsCString (lldb::SectionType sect_type) 185{ 186 switch (sect_type) 187 { 188 case eSectionTypeInvalid: return "invalid"; 189 case eSectionTypeCode: return "code"; 190 case eSectionTypeContainer: return "container"; 191 case eSectionTypeData: return "data"; 192 case eSectionTypeDataCString: return "data-cstr"; 193 case eSectionTypeDataCStringPointers: return "data-cstr-ptr"; 194 case eSectionTypeDataSymbolAddress: return "data-symbol-addr"; 195 case eSectionTypeData4: return "data-4-byte"; 196 case eSectionTypeData8: return "data-8-byte"; 197 case eSectionTypeData16: return "data-16-byte"; 198 case eSectionTypeDataPointers: return "data-ptrs"; 199 case eSectionTypeDebug: return "debug"; 200 case eSectionTypeZeroFill: return "zero-fill"; 201 case eSectionTypeDataObjCMessageRefs: return "objc-message-refs"; 202 case eSectionTypeDataObjCCFStrings: return "objc-cfstrings"; 203 case eSectionTypeDWARFDebugAbbrev: return "dwarf-abbrev"; 204 case eSectionTypeDWARFDebugAranges: return "dwarf-aranges"; 205 case eSectionTypeDWARFDebugFrame: return "dwarf-frame"; 206 case eSectionTypeDWARFDebugInfo: return "dwarf-info"; 207 case eSectionTypeDWARFDebugLine: return "dwarf-line"; 208 case eSectionTypeDWARFDebugLoc: return "dwarf-loc"; 209 case eSectionTypeDWARFDebugMacInfo: return "dwarf-macinfo"; 210 case eSectionTypeDWARFDebugPubNames: return "dwarf-pubnames"; 211 case eSectionTypeDWARFDebugPubTypes: return "dwarf-pubtypes"; 212 case eSectionTypeDWARFDebugRanges: return "dwarf-ranges"; 213 case eSectionTypeDWARFDebugStr: return "dwarf-str"; 214 case eSectionTypeEHFrame: return "eh-frame"; 215 case eSectionTypeOther: return "regular"; 216 } 217 return "unknown"; 218 219} 220 221