diff options
author | Jim Ingham <jingham@apple.com> | 2010-09-23 02:01:19 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2010-09-23 02:01:19 +0000 |
commit | 2277701c7b826544fb39b5684c4da8c6d590adf2 (patch) | |
tree | 6a53cdfe3086b89fb331c53fa98ae9d24efb12a4 /lldb/source | |
parent | 19964dbe3bb05aedc65952c7299e4c610ee01579 (diff) | |
download | bcm5719-llvm-2277701c7b826544fb39b5684c4da8c6d590adf2.tar.gz bcm5719-llvm-2277701c7b826544fb39b5684c4da8c6d590adf2.zip |
Committing the skeleton of Language runtime plugin classes.
llvm-svn: 114620
Diffstat (limited to 'lldb/source')
-rw-r--r-- | lldb/source/Core/PluginManager.cpp | 120 | ||||
-rw-r--r-- | lldb/source/Core/ValueObject.cpp | 14 | ||||
-rw-r--r-- | lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp | 111 | ||||
-rw-r--r-- | lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h | 72 | ||||
-rw-r--r-- | lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp | 98 | ||||
-rw-r--r-- | lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h | 70 | ||||
-rw-r--r-- | lldb/source/Target/CPPLanguageRuntime.cpp | 27 | ||||
-rw-r--r-- | lldb/source/Target/LanguageRuntime.cpp | 47 | ||||
-rw-r--r-- | lldb/source/Target/ObjCLanguageRuntime.cpp | 27 | ||||
-rw-r--r-- | lldb/source/Target/Process.cpp | 38 | ||||
-rw-r--r-- | lldb/source/lldb.cpp | 4 |
11 files changed, 628 insertions, 0 deletions
diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp index 0207c4b4d45..e68bafea838 100644 --- a/lldb/source/Core/PluginManager.cpp +++ b/lldb/source/Core/PluginManager.cpp @@ -392,8 +392,128 @@ PluginManager::GetDynamicLoaderCreateCallbackForPluginName (const char *name) } +#pragma mark LanguageRuntime +struct LanguageRuntimeInstance +{ + LanguageRuntimeInstance() : + name(), + description(), + create_callback(NULL) + { + } + + std::string name; + std::string description; + LanguageRuntimeCreateInstance create_callback; +}; + +typedef std::vector<LanguageRuntimeInstance> LanguageRuntimeInstances; + +static bool +AccessLanguageRuntimeInstances (PluginAction action, LanguageRuntimeInstance &instance, uint32_t index) +{ + static LanguageRuntimeInstances g_plugin_instances; + + switch (action) + { + case ePluginRegisterInstance: + if (instance.create_callback) + { + g_plugin_instances.push_back (instance); + return true; + } + break; + + case ePluginUnregisterInstance: + if (instance.create_callback) + { + LanguageRuntimeInstances::iterator pos, end = g_plugin_instances.end(); + for (pos = g_plugin_instances.begin(); pos != end; ++ pos) + { + if (pos->create_callback == instance.create_callback) + { + g_plugin_instances.erase(pos); + return true; + } + } + } + break; + + case ePluginGetInstanceAtIndex: + if (index < g_plugin_instances.size()) + { + instance = g_plugin_instances[index]; + return true; + } + break; + + default: + break; + } + return false; +} + + +bool +PluginManager::RegisterPlugin + ( + const char *name, + const char *description, + LanguageRuntimeCreateInstance create_callback + ) +{ + if (create_callback) + { + LanguageRuntimeInstance instance; + assert (name && name[0]); + instance.name = name; + if (description && description[0]) + instance.description = description; + instance.create_callback = create_callback; + return AccessLanguageRuntimeInstances (ePluginRegisterInstance, instance, 0); + } + return false; +} + +bool +PluginManager::UnregisterPlugin (LanguageRuntimeCreateInstance create_callback) +{ + if (create_callback) + { + LanguageRuntimeInstance instance; + instance.create_callback = create_callback; + return AccessLanguageRuntimeInstances (ePluginUnregisterInstance, instance, 0); + } + return false; +} + +LanguageRuntimeCreateInstance +PluginManager::GetLanguageRuntimeCreateCallbackAtIndex (uint32_t idx) +{ + LanguageRuntimeInstance instance; + if (AccessLanguageRuntimeInstances (ePluginGetInstanceAtIndex, instance, idx)) + return instance.create_callback; + return NULL; +} + +LanguageRuntimeCreateInstance +PluginManager::GetLanguageRuntimeCreateCallbackForPluginName (const char *name) +{ + if (name && name[0]) + { + LanguageRuntimeInstance instance; + std::string ss_name(name); + for (uint32_t idx = 0; AccessLanguageRuntimeInstances (ePluginGetInstanceAtIndex, instance, idx); ++idx) + { + if (instance.name == ss_name) + return instance.create_callback; + } + } + return NULL; +} + #pragma mark ObjectFile struct ObjectFileInstance diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index 5d866bc9b9a..a030ee5975c 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -823,3 +823,17 @@ ValueObject::GetSyntheticArrayMemberFromPointer (int32_t index, bool can_create) } return synthetic_child_sp; } + +bool +ValueObject::SetDynamicValue () +{ + if (!IsPointerOrReferenceType()) + return false; + + // Check that the runtime class is correct for determining the most specific class. + // If it is a C++ class, see if it is dynamic: + //if (!decl->isDynamicClass()) + // return false; + + return true; +} diff --git a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp new file mode 100644 index 00000000000..ee54e319a6b --- /dev/null +++ b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp @@ -0,0 +1,111 @@ +//===-- ItaniumABILanguageRuntime.cpp --------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "ItaniumABILanguageRuntime.h" + +#include "lldb/Core/ConstString.h" +#include "lldb/Core/Error.h" +#include "lldb/Core/Module.h" +#include "lldb/Core/PluginManager.h" +#include "lldb/Core/Scalar.h" +#include "lldb/Symbol/ClangASTContext.h" +#include "lldb/Target/Process.h" +#include "lldb/Target/RegisterContext.h" +#include "lldb/Target/Target.h" +#include "lldb/Target/Thread.h" + +#include <vector> + +using namespace lldb; +using namespace lldb_private; + +static const char *pluginName = "ItaniumABILanguageRuntime"; +static const char *pluginDesc = "Itanium ABI for the C++ language"; +static const char *pluginShort = "language.itanium"; + +//------------------------------------------------------------------ +// Static Functions +//------------------------------------------------------------------ +lldb_private::LanguageRuntime * +ItaniumABILanguageRuntime::CreateInstance (Process *process, lldb::LanguageType language) +{ + // FIXME: We have to check the process and make sure we actually know that this process supports + // the Itanium ABI. + if (language == eLanguageTypeC_plus_plus) + return new ItaniumABILanguageRuntime (process); + else + return NULL; +} + +void +ItaniumABILanguageRuntime::Initialize() +{ + PluginManager::RegisterPlugin (pluginName, + pluginDesc, + CreateInstance); +} + +void +ItaniumABILanguageRuntime::Terminate() +{ + PluginManager::UnregisterPlugin (CreateInstance); +} + +//------------------------------------------------------------------ +// PluginInterface protocol +//------------------------------------------------------------------ +const char * +ItaniumABILanguageRuntime::GetPluginName() +{ + return pluginName; +} + +const char * +ItaniumABILanguageRuntime::GetShortPluginName() +{ + return pluginShort; +} + +uint32_t +ItaniumABILanguageRuntime::GetPluginVersion() +{ + return 1; +} + +void +ItaniumABILanguageRuntime::GetPluginCommandHelp (const char *command, Stream *strm) +{ +} + +Error +ItaniumABILanguageRuntime::ExecutePluginCommand (Args &command, Stream *strm) +{ + Error error; + error.SetErrorString("No plug-in command are currently supported."); + return error; +} + +Log * +ItaniumABILanguageRuntime::EnablePluginLogging (Stream *strm, Args &command) +{ + return NULL; +} + +bool +ItaniumABILanguageRuntime::IsVTableName (const char *name) +{ + if (name == NULL) + return false; + + // Can we maybe ask Clang about this? + if (strstr (name, "_vptr$") == name) + return true; + else + return false; +} diff --git a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h new file mode 100644 index 00000000000..4ae6a89bad8 --- /dev/null +++ b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h @@ -0,0 +1,72 @@ +//===-- ItaniumABILanguageRuntime.h ----------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef liblldb_ItaniumABILanguageRuntime_h_ +#define liblldb_ItaniumABILanguageRuntime_h_ + +// C Includes +// C++ Includes +// Other libraries and framework includes +// Project includes +#include "lldb/lldb-private.h" +#include "lldb/Target/LanguageRuntime.h" +#include "lldb/Target/CPPLanguageRuntime.h" +#include "lldb/Core/Value.h" + +namespace lldb_private { + + class ItaniumABILanguageRuntime : + public lldb_private::CPPLanguageRuntime + { + public: + ~ItaniumABILanguageRuntime() { } + + virtual bool + IsVTableName (const char *name); + + //------------------------------------------------------------------ + // Static Functions + //------------------------------------------------------------------ + static void + Initialize(); + + static void + Terminate(); + + static lldb_private::LanguageRuntime * + CreateInstance (Process *process, lldb::LanguageType language); + + //------------------------------------------------------------------ + // PluginInterface protocol + //------------------------------------------------------------------ + virtual const char * + GetPluginName(); + + virtual const char * + GetShortPluginName(); + + virtual uint32_t + GetPluginVersion(); + + virtual void + GetPluginCommandHelp (const char *command, lldb_private::Stream *strm); + + virtual lldb_private::Error + ExecutePluginCommand (lldb_private::Args &command, lldb_private::Stream *strm); + + virtual lldb_private::Log * + EnablePluginLogging (lldb_private::Stream *strm, lldb_private::Args &command); + protected: + private: + ItaniumABILanguageRuntime(Process *process) : lldb_private::CPPLanguageRuntime(process) { } // Call CreateInstance instead. + }; + +} // namespace lldb_private + +#endif // liblldb_ItaniumABILanguageRuntime_h_ diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp new file mode 100644 index 00000000000..655e72ed6c7 --- /dev/null +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp @@ -0,0 +1,98 @@ +//===-- AppleObjCRuntimeV2.cpp --------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "AppleObjCRuntimeV2.h" + +#include "lldb/Core/ConstString.h" +#include "lldb/Core/Error.h" +#include "lldb/Core/Module.h" +#include "lldb/Core/PluginManager.h" +#include "lldb/Core/Scalar.h" +#include "lldb/Symbol/ClangASTContext.h" +#include "lldb/Target/Process.h" +#include "lldb/Target/RegisterContext.h" +#include "lldb/Target/Target.h" +#include "lldb/Target/Thread.h" + +#include <vector> + +using namespace lldb; +using namespace lldb_private; + +static const char *pluginName = "AppleObjCRuntimeV2"; +static const char *pluginDesc = "Apple Objective C Language Runtime - Version 2"; +static const char *pluginShort = "language.apple.objc.v2"; + +//------------------------------------------------------------------ +// Static Functions +//------------------------------------------------------------------ +lldb_private::LanguageRuntime * +AppleObjCRuntimeV2::CreateInstance (Process *process, lldb::LanguageType language) +{ + // FIXME: This should be a MacOS or iOS process, and we need to look for the OBJC section to make + // sure we aren't using the V1 runtime. + if (language == eLanguageTypeObjC) + return new AppleObjCRuntimeV2 (process); + else + return NULL; +} + +void +AppleObjCRuntimeV2::Initialize() +{ + PluginManager::RegisterPlugin (pluginName, + pluginDesc, + CreateInstance); +} + +void +AppleObjCRuntimeV2::Terminate() +{ + PluginManager::UnregisterPlugin (CreateInstance); +} + +//------------------------------------------------------------------ +// PluginInterface protocol +//------------------------------------------------------------------ +const char * +AppleObjCRuntimeV2::GetPluginName() +{ + return pluginName; +} + +const char * +AppleObjCRuntimeV2::GetShortPluginName() +{ + return pluginShort; +} + +uint32_t +AppleObjCRuntimeV2::GetPluginVersion() +{ + return 1; +} + +void +AppleObjCRuntimeV2::GetPluginCommandHelp (const char *command, Stream *strm) +{ +} + +Error +AppleObjCRuntimeV2::ExecutePluginCommand (Args &command, Stream *strm) +{ + Error error; + error.SetErrorString("No plug-in command are currently supported."); + return error; +} + +Log * +AppleObjCRuntimeV2::EnablePluginLogging (Stream *strm, Args &command) +{ + return NULL; +} diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h new file mode 100644 index 00000000000..9c447b82f8d --- /dev/null +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h @@ -0,0 +1,70 @@ +//===-- AppleObjCRuntimeV2.h ----------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef liblldb_AppleObjCRuntimeV2_h_ +#define liblldb_AppleObjCRuntimeV2_h_ + +// C Includes +// C++ Includes +// Other libraries and framework includes +// Project includes +#include "lldb/lldb-private.h" +#include "lldb/Target/LanguageRuntime.h" +#include "lldb/Target/ObjCLanguageRuntime.h" +#include "lldb/Core/Value.h" + +namespace lldb_private { + + class AppleObjCRuntimeV2 : + public lldb_private::ObjCLanguageRuntime + { + public: + ~AppleObjCRuntimeV2() { } + + + //------------------------------------------------------------------ + // Static Functions + //------------------------------------------------------------------ + static void + Initialize(); + + static void + Terminate(); + + static lldb_private::LanguageRuntime * + CreateInstance (Process *process, lldb::LanguageType language); + + //------------------------------------------------------------------ + // PluginInterface protocol + //------------------------------------------------------------------ + virtual const char * + GetPluginName(); + + virtual const char * + GetShortPluginName(); + + virtual uint32_t + GetPluginVersion(); + + virtual void + GetPluginCommandHelp (const char *command, lldb_private::Stream *strm); + + virtual lldb_private::Error + ExecutePluginCommand (lldb_private::Args &command, lldb_private::Stream *strm); + + virtual lldb_private::Log * + EnablePluginLogging (lldb_private::Stream *strm, lldb_private::Args &command); + protected: + private: + AppleObjCRuntimeV2(Process *process) : lldb_private::ObjCLanguageRuntime(process) { } // Call CreateInstance instead. + }; + +} // namespace lldb_private + +#endif // liblldb_AppleObjCRuntimeV2_h_ diff --git a/lldb/source/Target/CPPLanguageRuntime.cpp b/lldb/source/Target/CPPLanguageRuntime.cpp new file mode 100644 index 00000000000..3e825bb2c3a --- /dev/null +++ b/lldb/source/Target/CPPLanguageRuntime.cpp @@ -0,0 +1,27 @@ +//===-- CPPLanguageRuntime.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/Target/CPPLanguageRuntime.h" +#include "lldb/Core/PluginManager.h" + +using namespace lldb; +using namespace lldb_private; + +//---------------------------------------------------------------------- +// Destructor +//---------------------------------------------------------------------- +CPPLanguageRuntime::~CPPLanguageRuntime() +{ +} + +CPPLanguageRuntime::CPPLanguageRuntime (Process *process) : + LanguageRuntime (process) +{ + +}
\ No newline at end of file diff --git a/lldb/source/Target/LanguageRuntime.cpp b/lldb/source/Target/LanguageRuntime.cpp new file mode 100644 index 00000000000..00c35f80633 --- /dev/null +++ b/lldb/source/Target/LanguageRuntime.cpp @@ -0,0 +1,47 @@ +//===-- LanguageRuntime.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/Target/LanguageRuntime.h" +#include "lldb/Core/PluginManager.h" + +using namespace lldb; +using namespace lldb_private; + +LanguageRuntime* +LanguageRuntime::FindPlugin (Process *process, lldb::LanguageType language) +{ + std::auto_ptr<LanguageRuntime> language_runtime_ap; + LanguageRuntimeCreateInstance create_callback; + + for (uint32_t idx = 0; + (create_callback = PluginManager::GetLanguageRuntimeCreateCallbackAtIndex(idx)) != NULL; + ++idx) + { + language_runtime_ap.reset (create_callback(process, language)); + + if (language_runtime_ap.get()) + return language_runtime_ap.release(); + } + + return NULL; +} + +//---------------------------------------------------------------------- +// Constructor +//---------------------------------------------------------------------- +LanguageRuntime::LanguageRuntime(Process *process) +{ +} + +//---------------------------------------------------------------------- +// Destructor +//---------------------------------------------------------------------- +LanguageRuntime::~LanguageRuntime() +{ +} diff --git a/lldb/source/Target/ObjCLanguageRuntime.cpp b/lldb/source/Target/ObjCLanguageRuntime.cpp new file mode 100644 index 00000000000..ab7e7e55a90 --- /dev/null +++ b/lldb/source/Target/ObjCLanguageRuntime.cpp @@ -0,0 +1,27 @@ +//===-- CPPLanguageRuntime.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/Target/ObjCLanguageRuntime.h" +#include "lldb/Core/PluginManager.h" + +using namespace lldb; +using namespace lldb_private; + +//---------------------------------------------------------------------- +// Destructor +//---------------------------------------------------------------------- +ObjCLanguageRuntime::~ObjCLanguageRuntime() +{ +} + +ObjCLanguageRuntime::ObjCLanguageRuntime (Process *process) : + LanguageRuntime (process) +{ + +}
\ No newline at end of file diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 6c264051742..a12377792d0 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -21,6 +21,9 @@ #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Host/Host.h" #include "lldb/Target/ABI.h" +#include "lldb/Target/LanguageRuntime.h" +#include "lldb/Target/CPPLanguageRuntime.h" +#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/RegisterContext.h" #include "lldb/Target/StopInfo.h" #include "lldb/Target/Target.h" @@ -460,6 +463,41 @@ Process::GetABI() return m_abi_sp.get(); } +LanguageRuntime * +Process::GetLanguageRuntime(lldb::LanguageType language) +{ + LanguageRuntimeCollection::iterator pos; + pos = m_language_runtimes.find (language); + if (pos == m_language_runtimes.end()) + { + lldb::LanguageRuntimeSP runtime(LanguageRuntime::FindPlugin(this, language)); + + m_language_runtimes[language] + = runtime; + return runtime.get(); + } + else + return (*pos).second.get(); +} + +CPPLanguageRuntime * +Process::GetCPPLanguageRuntime () +{ + LanguageRuntime *runtime = GetLanguageRuntime(eLanguageTypeC_plus_plus); + if (runtime != NULL && runtime->GetLanguageType() == eLanguageTypeC_plus_plus) + return static_cast<CPPLanguageRuntime *> (runtime); + return NULL; +} + +ObjCLanguageRuntime * +Process::GetObjCLanguageRuntime () +{ + LanguageRuntime *runtime = GetLanguageRuntime(eLanguageTypeObjC); + if (runtime != NULL && runtime->GetLanguageType() == eLanguageTypeObjC) + return static_cast<ObjCLanguageRuntime *> (runtime); + return NULL; +} + BreakpointSiteList & Process::GetBreakpointSiteList() { diff --git a/lldb/source/lldb.cpp b/lldb/source/lldb.cpp index ca6ed724df4..fdc649b1f92 100644 --- a/lldb/source/lldb.cpp +++ b/lldb/source/lldb.cpp @@ -30,6 +30,8 @@ #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" @@ -73,6 +75,8 @@ lldb_private::Initialize () ABIMacOSX_i386::Initialize(); ABISysV_x86_64::Initialize(); DynamicLoaderMacOSXDYLD::Initialize(); + ItaniumABILanguageRuntime::Initialize(); + AppleObjCRuntimeV2::Initialize(); ObjectContainerUniversalMachO::Initialize(); ObjectFileMachO::Initialize(); ProcessGDBRemote::Initialize(); |