blob: 2ae93308186b2d8986178554abe464d791acb39a [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- 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"
Eli Friedmane5cadba2010-06-13 19:36:42 +000012#include "lldb/Core/ArchSpec.h"
Chris Lattner24943d22010-06-08 16:52:24 +000013#include "lldb/Core/Log.h"
14#include "lldb/Core/Timer.h"
15#include "lldb/Host/Host.h"
Eli Friedmane5cadba2010-06-13 19:36:42 +000016#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"
Jason Molenda3a4ea242010-09-10 07:49:16 +000025#include "Plugins/Process/Utility/UnwindAssemblyProfiler-x86.h"
26#include "Plugins/Process/Utility/ArchDefaultUnwindPlan-x86.h"
Jason Molendaea0dbca2010-09-22 07:37:07 +000027#include "Plugins/Process/Utility/ArchVolatileRegs-x86.h"
Stephen Wilsonf6f40332010-07-24 02:19:04 +000028
Eli Friedmane5cadba2010-06-13 19:36:42 +000029#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"
Jim Ingham642036f2010-09-23 02:01:19 +000033#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
34#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h"
Eli Friedmane5cadba2010-06-13 19:36:42 +000035#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
Chris Lattner24943d22010-06-08 16:52:24 +000040
Stephen Wilsonf6f40332010-07-24 02:19:04 +000041#ifdef __linux__
42#include "Plugins/Process/Linux/ProcessLinux.h"
43#endif
44
Chris Lattner24943d22010-06-08 16:52:24 +000045using 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);
Chris Lattner24943d22010-06-08 16:52:24 +000065 DisassemblerLLVM::Initialize();
Chris Lattner24943d22010-06-08 16:52:24 +000066 ObjectContainerBSDArchive::Initialize();
67 ObjectFileELF::Initialize();
Chris Lattner24943d22010-06-08 16:52:24 +000068 SymbolFileDWARF::Initialize();
69 SymbolFileDWARFDebugMap::Initialize();
70 SymbolFileSymtab::Initialize();
Jason Molenda3a4ea242010-09-10 07:49:16 +000071 UnwindAssemblyProfiler_x86::Initialize();
Jason Molendaea0dbca2010-09-22 07:37:07 +000072 ArchVolatileRegs_x86::Initialize();
Stephen Wilsonf6f40332010-07-24 02:19:04 +000073
Eli Friedmane5cadba2010-06-13 19:36:42 +000074#ifdef __APPLE__
75 ABIMacOSX_i386::Initialize();
76 ABISysV_x86_64::Initialize();
77 DynamicLoaderMacOSXDYLD::Initialize();
Jim Ingham642036f2010-09-23 02:01:19 +000078 ItaniumABILanguageRuntime::Initialize();
79 AppleObjCRuntimeV2::Initialize();
Eli Friedmane5cadba2010-06-13 19:36:42 +000080 ObjectContainerUniversalMachO::Initialize();
81 ObjectFileMachO::Initialize();
82 ProcessGDBRemote::Initialize();
Caroline Tice734b4832010-10-15 21:52:38 +000083 //ProcessMacOSX::Initialize();
Stephen Wilsonf6f40332010-07-24 02:19:04 +000084 SymbolVendorMacOSX::Initialize();
85#endif
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000086 Debugger::GetSettingsController (false);
Caroline Tice5bc8c972010-09-20 20:44:43 +000087 Target::GetSettingsController (false);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000088 Process::GetSettingsController (false);
Caroline Tice5bc8c972010-09-20 20:44:43 +000089 Thread::GetSettingsController (false);
Stephen Wilsonf6f40332010-07-24 02:19:04 +000090#ifdef __linux__
91 ProcessLinux::Initialize();
Eli Friedmane5cadba2010-06-13 19:36:42 +000092#endif
Chris Lattner24943d22010-06-08 16:52:24 +000093 }
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();
Chris Lattner24943d22010-06-08 16:52:24 +0000107 ObjectContainerBSDArchive::Terminate();
108 ObjectFileELF::Terminate();
Chris Lattner24943d22010-06-08 16:52:24 +0000109 SymbolFileDWARF::Terminate();
110 SymbolFileDWARFDebugMap::Terminate();
111 SymbolFileSymtab::Terminate();
Jason Molenda3a4ea242010-09-10 07:49:16 +0000112 UnwindAssemblyProfiler_x86::Terminate();
Jason Molendaea0dbca2010-09-22 07:37:07 +0000113 ArchVolatileRegs_x86::Terminate();
Stephen Wilsonf6f40332010-07-24 02:19:04 +0000114
Eli Friedmane5cadba2010-06-13 19:36:42 +0000115#ifdef __APPLE__
116 DynamicLoaderMacOSXDYLD::Terminate();
117 ObjectContainerUniversalMachO::Terminate();
118 ObjectFileMachO::Terminate();
119 ProcessGDBRemote::Terminate();
Caroline Tice734b4832010-10-15 21:52:38 +0000120 //ProcessMacOSX::Terminate();
Stephen Wilsonf6f40332010-07-24 02:19:04 +0000121 SymbolVendorMacOSX::Terminate();
122#endif
123
Jim Ingham20594b12010-09-08 03:14:33 +0000124 Thread::GetSettingsController (true);
Caroline Tice5bc8c972010-09-20 20:44:43 +0000125 Process::GetSettingsController (true);
126 Target::GetSettingsController (true);
127 Debugger::GetSettingsController (true);
Jim Ingham20594b12010-09-08 03:14:33 +0000128
Stephen Wilsonf6f40332010-07-24 02:19:04 +0000129#ifdef __linux__
130 ProcessLinux::Terminate();
Eli Friedmane5cadba2010-06-13 19:36:42 +0000131#endif
Chris Lattner24943d22010-06-08 16:52:24 +0000132}
133
Benjamin Kramerc4e07522010-07-07 09:33:41 +0000134extern "C" const double LLDBVersionNumber;
Chris Lattner24943d22010-06-08 16:52:24 +0000135const char *
136lldb_private::GetVersion ()
137{
Chris Lattner24943d22010-06-08 16:52:24 +0000138 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
Greg Clayton5205f0b2010-09-03 17:10:42 +0000145const char *
146lldb_private::GetVoteAsCString (lldb::Vote vote)
147{
Greg Claytonf04d6612010-09-03 22:45:01 +0000148 switch (vote)
149 {
150 case eVoteNo: return "no";
151 case eVoteNoOpinion: return "no opinion";
152 case eVoteYes: return "yes";
153 default:
154 break;
155 }
Greg Clayton5205f0b2010-09-03 17:10:42 +0000156 return "invalid";
157}
158
Greg Clayton3fed8b92010-10-08 00:21:05 +0000159
160const char *
161lldb_private::GetSectionTypeAsCString (lldb::SectionType sect_type)
162{
163 switch (sect_type)
164 {
165 case eSectionTypeInvalid: return "invalid";
166 case eSectionTypeCode: return "code";
167 case eSectionTypeContainer: return "container";
168 case eSectionTypeData: return "data";
169 case eSectionTypeDataCString: return "data-cstr";
170 case eSectionTypeDataCStringPointers: return "data-cstr-ptr";
171 case eSectionTypeDataSymbolAddress: return "data-symbol-addr";
172 case eSectionTypeData4: return "data-4-byte";
173 case eSectionTypeData8: return "data-8-byte";
174 case eSectionTypeData16: return "data-16-byte";
175 case eSectionTypeDataPointers: return "data-ptrs";
176 case eSectionTypeDebug: return "debug";
177 case eSectionTypeZeroFill: return "zero-fill";
178 case eSectionTypeDataObjCMessageRefs: return "objc-message-refs";
179 case eSectionTypeDataObjCCFStrings: return "objc-cfstrings";
180 case eSectionTypeDWARFDebugAbbrev: return "dwarf-abbrev";
181 case eSectionTypeDWARFDebugAranges: return "dwarf-aranges";
182 case eSectionTypeDWARFDebugFrame: return "dwarf-frame";
183 case eSectionTypeDWARFDebugInfo: return "dwarf-info";
184 case eSectionTypeDWARFDebugLine: return "dwarf-line";
185 case eSectionTypeDWARFDebugLoc: return "dwarf-loc";
186 case eSectionTypeDWARFDebugMacInfo: return "dwarf-macinfo";
187 case eSectionTypeDWARFDebugPubNames: return "dwarf-pubnames";
188 case eSectionTypeDWARFDebugPubTypes: return "dwarf-pubtypes";
189 case eSectionTypeDWARFDebugRanges: return "dwarf-ranges";
190 case eSectionTypeDWARFDebugStr: return "dwarf-str";
191 case eSectionTypeEHFrame: return "eh-frame";
192 case eSectionTypeOther: return "regular";
193 }
194 return "unknown";
195
196}
197