| //===-- lldb.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/lldb-private.h" |
| #include "lldb/lldb-private-log.h" |
| #include "lldb/Core/ArchSpec.h" |
| #include "lldb/Core/Log.h" |
| #include "lldb/Core/Timer.h" |
| #include "lldb/Host/Host.h" |
| #include "lldb/Host/Mutex.h" |
| |
| #include "Plugins/Disassembler/llvm/DisassemblerLLVM.h" |
| #include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h" |
| #include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h" |
| #include "Plugins/ObjectFile/ELF/ObjectFileELF.h" |
| #include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h" |
| #include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h" |
| #include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h" |
| #include "Plugins/Process/Utility/UnwindAssemblyProfiler-x86.h" |
| #include "Plugins/Process/Utility/ArchDefaultUnwindPlan-x86.h" |
| #include "Plugins/Process/Utility/ArchVolatileRegs-x86.h" |
| |
| #ifdef __APPLE__ |
| #include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h" |
| #include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h" |
| #include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h" |
| #include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h" |
| #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h" |
| #include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h" |
| #include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h" |
| #include "Plugins/Process/MacOSX-User/source/ProcessMacOSX.h" |
| #include "Plugins/Process/gdb-remote/ProcessGDBRemote.h" |
| #endif |
| |
| #ifdef __linux__ |
| #include "Plugins/Process/Linux/ProcessLinux.h" |
| #endif |
| |
| using namespace lldb_private; |
| |
| |
| void |
| lldb_private::Initialize () |
| { |
| // Make sure we inialize only once |
| static Mutex g_inited_mutex(Mutex::eMutexTypeNormal); |
| static bool g_inited = false; |
| |
| Mutex::Locker locker(g_inited_mutex); |
| if (!g_inited) |
| { |
| g_inited = true; |
| Timer::Initialize (); |
| Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); |
| |
| Log::Callbacks log_callbacks = { DisableLog, EnableLog, ListLogCategories }; |
| |
| Log::RegisterLogChannel ("lldb", log_callbacks); |
| DisassemblerLLVM::Initialize(); |
| ObjectContainerBSDArchive::Initialize(); |
| ObjectFileELF::Initialize(); |
| SymbolFileDWARF::Initialize(); |
| SymbolFileDWARFDebugMap::Initialize(); |
| SymbolFileSymtab::Initialize(); |
| UnwindAssemblyProfiler_x86::Initialize(); |
| ArchDefaultUnwindPlan_x86::Initialize(); |
| ArchVolatileRegs_x86::Initialize(); |
| |
| #ifdef __APPLE__ |
| ABIMacOSX_i386::Initialize(); |
| ABISysV_x86_64::Initialize(); |
| DynamicLoaderMacOSXDYLD::Initialize(); |
| ItaniumABILanguageRuntime::Initialize(); |
| AppleObjCRuntimeV2::Initialize(); |
| ObjectContainerUniversalMachO::Initialize(); |
| ObjectFileMachO::Initialize(); |
| ProcessGDBRemote::Initialize(); |
| //ProcessMacOSX::Initialize(); |
| SymbolVendorMacOSX::Initialize(); |
| #endif |
| Debugger::GetSettingsController (false); |
| Target::GetSettingsController (false); |
| Process::GetSettingsController (false); |
| Thread::GetSettingsController (false); |
| #ifdef __linux__ |
| ProcessLinux::Initialize(); |
| #endif |
| } |
| } |
| |
| void |
| lldb_private::WillTerminate() |
| { |
| Host::WillTerminate(); |
| } |
| |
| void |
| lldb_private::Terminate () |
| { |
| Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); |
| DisassemblerLLVM::Terminate(); |
| ObjectContainerBSDArchive::Terminate(); |
| ObjectFileELF::Terminate(); |
| SymbolFileDWARF::Terminate(); |
| SymbolFileDWARFDebugMap::Terminate(); |
| SymbolFileSymtab::Terminate(); |
| UnwindAssemblyProfiler_x86::Terminate(); |
| ArchDefaultUnwindPlan_x86::Terminate(); |
| ArchVolatileRegs_x86::Terminate(); |
| |
| #ifdef __APPLE__ |
| DynamicLoaderMacOSXDYLD::Terminate(); |
| ObjectContainerUniversalMachO::Terminate(); |
| ObjectFileMachO::Terminate(); |
| ProcessGDBRemote::Terminate(); |
| //ProcessMacOSX::Terminate(); |
| SymbolVendorMacOSX::Terminate(); |
| #endif |
| |
| Thread::GetSettingsController (true); |
| Process::GetSettingsController (true); |
| Target::GetSettingsController (true); |
| Debugger::GetSettingsController (true); |
| |
| #ifdef __linux__ |
| ProcessLinux::Terminate(); |
| #endif |
| } |
| |
| extern "C" const double LLDBVersionNumber; |
| const char * |
| lldb_private::GetVersion () |
| { |
| static char g_version_string[32]; |
| if (g_version_string[0] == '\0') |
| ::snprintf (g_version_string, sizeof(g_version_string), "LLDB-%g", LLDBVersionNumber); |
| |
| return g_version_string; |
| } |
| |
| const char * |
| lldb_private::GetVoteAsCString (lldb::Vote vote) |
| { |
| switch (vote) |
| { |
| case eVoteNo: return "no"; |
| case eVoteNoOpinion: return "no opinion"; |
| case eVoteYes: return "yes"; |
| default: |
| break; |
| } |
| return "invalid"; |
| } |
| |
| |
| const char * |
| lldb_private::GetSectionTypeAsCString (lldb::SectionType sect_type) |
| { |
| switch (sect_type) |
| { |
| case eSectionTypeInvalid: return "invalid"; |
| case eSectionTypeCode: return "code"; |
| case eSectionTypeContainer: return "container"; |
| case eSectionTypeData: return "data"; |
| case eSectionTypeDataCString: return "data-cstr"; |
| case eSectionTypeDataCStringPointers: return "data-cstr-ptr"; |
| case eSectionTypeDataSymbolAddress: return "data-symbol-addr"; |
| case eSectionTypeData4: return "data-4-byte"; |
| case eSectionTypeData8: return "data-8-byte"; |
| case eSectionTypeData16: return "data-16-byte"; |
| case eSectionTypeDataPointers: return "data-ptrs"; |
| case eSectionTypeDebug: return "debug"; |
| case eSectionTypeZeroFill: return "zero-fill"; |
| case eSectionTypeDataObjCMessageRefs: return "objc-message-refs"; |
| case eSectionTypeDataObjCCFStrings: return "objc-cfstrings"; |
| case eSectionTypeDWARFDebugAbbrev: return "dwarf-abbrev"; |
| case eSectionTypeDWARFDebugAranges: return "dwarf-aranges"; |
| case eSectionTypeDWARFDebugFrame: return "dwarf-frame"; |
| case eSectionTypeDWARFDebugInfo: return "dwarf-info"; |
| case eSectionTypeDWARFDebugLine: return "dwarf-line"; |
| case eSectionTypeDWARFDebugLoc: return "dwarf-loc"; |
| case eSectionTypeDWARFDebugMacInfo: return "dwarf-macinfo"; |
| case eSectionTypeDWARFDebugPubNames: return "dwarf-pubnames"; |
| case eSectionTypeDWARFDebugPubTypes: return "dwarf-pubtypes"; |
| case eSectionTypeDWARFDebugRanges: return "dwarf-ranges"; |
| case eSectionTypeDWARFDebugStr: return "dwarf-str"; |
| case eSectionTypeEHFrame: return "eh-frame"; |
| case eSectionTypeOther: return "regular"; |
| } |
| return "unknown"; |
| |
| } |
| |