[Lldb-commits] [lldb] r114620 - in /lldb/trunk: include/lldb/ include/lldb/Core/ include/lldb/Target/ lldb.xcodeproj/ source/ source/Core/ source/Plugins/LanguageRuntime/ source/Plugins/LanguageRuntime/CPlusPlus/ source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ source/Plugins/LanguageRuntime/ObjC/ source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/ source/Target/
Jim Ingham
jingham at apple.com
Wed Sep 22 19:01:19 PDT 2010
Author: jingham
Date: Wed Sep 22 21:01:19 2010
New Revision: 114620
URL: http://llvm.org/viewvc/llvm-project?rev=114620&view=rev
Log:
Committing the skeleton of Language runtime plugin classes.
Added:
lldb/trunk/include/lldb/Target/CPPLanguageRuntime.h
lldb/trunk/include/lldb/Target/LanguageRuntime.h
lldb/trunk/include/lldb/Target/ObjCLanguageRuntime.h
lldb/trunk/source/Plugins/LanguageRuntime/
lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/
lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/
lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h
lldb/trunk/source/Plugins/LanguageRuntime/ObjC/
lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/
lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp
lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h
lldb/trunk/source/Target/CPPLanguageRuntime.cpp
lldb/trunk/source/Target/LanguageRuntime.cpp
lldb/trunk/source/Target/ObjCLanguageRuntime.cpp
Modified:
lldb/trunk/include/lldb/Core/PluginManager.h
lldb/trunk/include/lldb/Core/ValueObject.h
lldb/trunk/include/lldb/Target/Process.h
lldb/trunk/include/lldb/lldb-forward-rtti.h
lldb/trunk/include/lldb/lldb-forward.h
lldb/trunk/include/lldb/lldb-private-interfaces.h
lldb/trunk/lldb.xcodeproj/project.pbxproj
lldb/trunk/source/Core/PluginManager.cpp
lldb/trunk/source/Core/ValueObject.cpp
lldb/trunk/source/Target/Process.cpp
lldb/trunk/source/lldb.cpp
Modified: lldb/trunk/include/lldb/Core/PluginManager.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/PluginManager.h?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/PluginManager.h (original)
+++ lldb/trunk/include/lldb/Core/PluginManager.h Wed Sep 22 21:01:19 2010
@@ -73,6 +73,24 @@
//------------------------------------------------------------------
+ // LanguageRuntime
+ //------------------------------------------------------------------
+ static bool
+ RegisterPlugin (const char *name,
+ const char *description,
+ LanguageRuntimeCreateInstance create_callback);
+
+ static bool
+ UnregisterPlugin (LanguageRuntimeCreateInstance create_callback);
+
+ static LanguageRuntimeCreateInstance
+ GetLanguageRuntimeCreateCallbackAtIndex (uint32_t idx);
+
+ static LanguageRuntimeCreateInstance
+ GetLanguageRuntimeCreateCallbackForPluginName (const char *name);
+
+
+ //------------------------------------------------------------------
// ObjectFile
//------------------------------------------------------------------
static bool
Modified: lldb/trunk/include/lldb/Core/ValueObject.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ValueObject.h (original)
+++ lldb/trunk/include/lldb/Core/ValueObject.h Wed Sep 22 21:01:19 2010
@@ -175,6 +175,15 @@
lldb::ValueObjectSP
GetSyntheticArrayMemberFromPointer (int32_t index, bool can_create);
+
+ lldb::ValueObjectSP
+ GetDynamicValue ()
+ {
+ return m_dynamic_value_sp;
+ }
+
+ bool
+ SetDynamicValue ();
protected:
//------------------------------------------------------------------
@@ -198,6 +207,7 @@
// in that the summary is consed up by us, the object_desc_string is builtin.
std::vector<lldb::ValueObjectSP> m_children;
std::map<ConstString, lldb::ValueObjectSP> m_synthetic_children;
+ lldb::ValueObjectSP m_dynamic_value_sp;
bool m_value_is_valid:1,
m_value_did_change:1,
m_children_count_valid:1,
Added: lldb/trunk/include/lldb/Target/CPPLanguageRuntime.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/CPPLanguageRuntime.h?rev=114620&view=auto
==============================================================================
--- lldb/trunk/include/lldb/Target/CPPLanguageRuntime.h (added)
+++ lldb/trunk/include/lldb/Target/CPPLanguageRuntime.h Wed Sep 22 21:01:19 2010
@@ -0,0 +1,50 @@
+//===-- CPPLanguageRuntime.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_CPPLanguageRuntime_h_
+#define liblldb_CPPLanguageRuntime_h_
+
+// C Includes
+// C++ Includes
+// Other libraries and framework includes
+// Project includes
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/lldb-private.h"
+#include "lldb/Target/LanguageRuntime.h"
+
+namespace lldb_private {
+
+class CPPLanguageRuntime :
+ public LanguageRuntime
+{
+public:
+ virtual
+ ~CPPLanguageRuntime();
+
+ virtual lldb::LanguageType
+ GetLanguageType () const
+ {
+ return lldb::eLanguageTypeC_plus_plus;
+ }
+
+ virtual bool
+ IsVTableName (const char *name) = 0;
+
+protected:
+ //------------------------------------------------------------------
+ // Classes that inherit from CPPLanguageRuntime can see and modify these
+ //------------------------------------------------------------------
+ CPPLanguageRuntime(Process *process);
+private:
+ DISALLOW_COPY_AND_ASSIGN (CPPLanguageRuntime);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_CPPLanguageRuntime_h_
Added: lldb/trunk/include/lldb/Target/LanguageRuntime.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/LanguageRuntime.h?rev=114620&view=auto
==============================================================================
--- lldb/trunk/include/lldb/Target/LanguageRuntime.h (added)
+++ lldb/trunk/include/lldb/Target/LanguageRuntime.h Wed Sep 22 21:01:19 2010
@@ -0,0 +1,47 @@
+//===-- LanguageRuntime.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_LanguageRuntime_h_
+#define liblldb_LanguageRuntime_h_
+
+// C Includes
+// C++ Includes
+// Other libraries and framework includes
+// Project includes
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class LanguageRuntime :
+ public PluginInterface
+{
+public:
+ virtual
+ ~LanguageRuntime();
+
+ static LanguageRuntime*
+ FindPlugin (Process *process, lldb::LanguageType language);
+
+ virtual lldb::LanguageType
+ GetLanguageType () const = 0;
+
+protected:
+ //------------------------------------------------------------------
+ // Classes that inherit from LanguageRuntime can see and modify these
+ //------------------------------------------------------------------
+ LanguageRuntime(Process *process);
+private:
+ Process *m_process_ptr;
+ DISALLOW_COPY_AND_ASSIGN (LanguageRuntime);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_LanguageRuntime_h_
Added: lldb/trunk/include/lldb/Target/ObjCLanguageRuntime.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ObjCLanguageRuntime.h?rev=114620&view=auto
==============================================================================
--- lldb/trunk/include/lldb/Target/ObjCLanguageRuntime.h (added)
+++ lldb/trunk/include/lldb/Target/ObjCLanguageRuntime.h Wed Sep 22 21:01:19 2010
@@ -0,0 +1,47 @@
+//===-- ObjCLanguageRuntime.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_ObjCLanguageRuntime_h_
+#define liblldb_ObjCLanguageRuntime_h_
+
+// C Includes
+// C++ Includes
+// Other libraries and framework includes
+// Project includes
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/lldb-private.h"
+#include "lldb/Target/LanguageRuntime.h"
+
+namespace lldb_private {
+
+class ObjCLanguageRuntime :
+ public LanguageRuntime
+{
+public:
+ virtual
+ ~ObjCLanguageRuntime();
+
+ virtual lldb::LanguageType
+ GetLanguageType () const
+ {
+ return lldb::eLanguageTypeObjC;
+ }
+
+protected:
+ //------------------------------------------------------------------
+ // Classes that inherit from ObjCLanguageRuntime can see and modify these
+ //------------------------------------------------------------------
+ ObjCLanguageRuntime(Process *process);
+private:
+ DISALLOW_COPY_AND_ASSIGN (ObjCLanguageRuntime);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_ObjCLanguageRuntime_h_
Modified: lldb/trunk/include/lldb/Target/Process.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Process.h?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/Process.h (original)
+++ lldb/trunk/include/lldb/Target/Process.h Wed Sep 22 21:01:19 2010
@@ -1548,6 +1548,15 @@
virtual DynamicLoader *
GetDynamicLoader ();
+
+ virtual LanguageRuntime *
+ GetLanguageRuntime (lldb::LanguageType language);
+
+ virtual CPPLanguageRuntime *
+ GetCPPLanguageRuntime ();
+
+ virtual ObjCLanguageRuntime *
+ GetObjCLanguageRuntime ();
bool
IsRunning () const;
@@ -1616,6 +1625,9 @@
ConstString m_target_triple;
lldb::ABISP m_abi_sp;
ObjCObjectPrinter m_objc_object_printer;
+
+ typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP> LanguageRuntimeCollection;
+ LanguageRuntimeCollection m_language_runtimes;
size_t
RemoveBreakpointOpcodesFromBuffer (lldb::addr_t addr, size_t size, uint8_t *buf) const;
Modified: lldb/trunk/include/lldb/lldb-forward-rtti.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-forward-rtti.h?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/include/lldb/lldb-forward-rtti.h (original)
+++ lldb/trunk/include/lldb/lldb-forward-rtti.h Wed Sep 22 21:01:19 2010
@@ -40,6 +40,7 @@
typedef SharedPtr<lldb_private::InlineFunctionInfo>::Type InlineFunctionInfoSP;
typedef SharedPtr<lldb_private::InputReader>::Type InputReaderSP;
typedef SharedPtr<lldb_private::InstanceSettings>::Type InstanceSettingsSP;
+ typedef SharedPtr<lldb_private::LanguageRuntime>::Type LanguageRuntimeSP;
typedef SharedPtr<lldb_private::LineTable>::Type LineTableSP;
typedef SharedPtr<lldb_private::Listener>::Type ListenerSP;
typedef SharedPtr<lldb_private::Log>::Type LogSP;
Modified: lldb/trunk/include/lldb/lldb-forward.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-forward.h?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/include/lldb/lldb-forward.h (original)
+++ lldb/trunk/include/lldb/lldb-forward.h Wed Sep 22 21:01:19 2010
@@ -39,6 +39,7 @@
class BreakpointSite;
class BreakpointSiteList;
class Broadcaster;
+class CPPLanguageRuntime;
class ClangASTContext;
class ClangExpression;
class ClangExpressionDeclMap;
@@ -76,6 +77,7 @@
class InlineFunctionInfo;
class InputReader;
class InstanceSettings;
+class LanguageRuntime;
class LineTable;
class Listener;
class Log;
@@ -84,6 +86,7 @@
class Module;
class ModuleList;
class Mutex;
+class ObjCLanguageRuntime;
class ObjCObjectPrinter;
class ObjectContainer;
class ObjectFile;
Modified: lldb/trunk/include/lldb/lldb-private-interfaces.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-private-interfaces.h?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/include/lldb/lldb-private-interfaces.h (original)
+++ lldb/trunk/include/lldb/lldb-private-interfaces.h Wed Sep 22 21:01:19 2010
@@ -22,6 +22,7 @@
typedef ObjectContainer* (*ObjectContainerCreateInstance) (Module* module, lldb::DataBufferSP& dataSP, const FileSpec *file, lldb::addr_t offset, lldb::addr_t length);
typedef ObjectFile* (*ObjectFileCreateInstance) (Module* module, lldb::DataBufferSP& dataSP, const FileSpec* file, lldb::addr_t offset, lldb::addr_t length);
typedef LogChannel* (*LogChannelCreateInstance) ();
+ typedef LanguageRuntime *(*LanguageRuntimeCreateInstance) (Process *process, lldb::LanguageType language);
typedef Process* (*ProcessCreateInstance) (Target &target, Listener &listener);
typedef SymbolFile* (*SymbolFileCreateInstance) (ObjectFile* obj_file);
typedef SymbolVendor* (*SymbolVendorCreateInstance) (Module *module); // Module can be NULL for default system symbol vendor
Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/lldb.xcodeproj/project.pbxproj Wed Sep 22 21:01:19 2010
@@ -351,10 +351,20 @@
49FB515E121481B000DF8983 /* DWARFExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26BC7ED810F1B86700F91463 /* DWARFExpression.cpp */; };
4C08CDE811C81EF8001610A8 /* ThreadSpec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C08CDE711C81EF8001610A8 /* ThreadSpec.cpp */; };
4C08CDEC11C81F1E001610A8 /* ThreadSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C08CDEB11C81F1E001610A8 /* ThreadSpec.h */; };
+ 4C139EA5124A8B03000BFF8D /* AppleObjCRuntimeV2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C139EA3124A8B03000BFF8D /* AppleObjCRuntimeV2.cpp */; };
+ 4C139EA6124A8B03000BFF8D /* AppleObjCRuntimeV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C139EA4124A8B03000BFF8D /* AppleObjCRuntimeV2.h */; };
4C5DBBC811E3FEC60035160F /* CommandObjectCommands.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C5DBBC611E3FEC60035160F /* CommandObjectCommands.cpp */; };
4C5DBBC911E3FEC60035160F /* CommandObjectCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C5DBBC711E3FEC60035160F /* CommandObjectCommands.h */; };
4C74CB6312288704006A8171 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C74CB6212288704006A8171 /* Carbon.framework */; };
4CA9637B11B6E99A00780E28 /* CommandObjectApropos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9637911B6E99A00780E28 /* CommandObjectApropos.cpp */; };
+ 4CB4430B12491DDA00C13DC2 /* LanguageRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CB4430912491DDA00C13DC2 /* LanguageRuntime.h */; };
+ 4CB4430C12491DDA00C13DC2 /* LanguageRuntime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CB4430A12491DDA00C13DC2 /* LanguageRuntime.cpp */; };
+ 4CB4436B124944B000C13DC2 /* ItaniumABILanguageRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CB44369124944B000C13DC2 /* ItaniumABILanguageRuntime.h */; };
+ 4CB4436C124944B000C13DC2 /* ItaniumABILanguageRuntime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CB4436A124944B000C13DC2 /* ItaniumABILanguageRuntime.cpp */; };
+ 4CB443BD1249920C00C13DC2 /* CPPLanguageRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CB443BB1249920C00C13DC2 /* CPPLanguageRuntime.h */; };
+ 4CB443BE1249920C00C13DC2 /* CPPLanguageRuntime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CB443BC1249920C00C13DC2 /* CPPLanguageRuntime.cpp */; };
+ 4CB443F312499B5000C13DC2 /* ObjCLanguageRuntime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CB443F212499B5000C13DC2 /* ObjCLanguageRuntime.cpp */; };
+ 4CB443F712499B6E00C13DC2 /* ObjCLanguageRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CB443F612499B6E00C13DC2 /* ObjCLanguageRuntime.h */; };
69A01E211236C5D400C660B5 /* Condition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69A01E1B1236C5D400C660B5 /* Condition.cpp */; };
69A01E221236C5D400C660B5 /* Host.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69A01E1C1236C5D400C660B5 /* Host.cpp */; };
69A01E241236C5D400C660B5 /* Mutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69A01E1E1236C5D400C660B5 /* Mutex.cpp */; };
@@ -961,6 +971,8 @@
4C08CDEB11C81F1E001610A8 /* ThreadSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadSpec.h; path = include/lldb/Target/ThreadSpec.h; sourceTree = "<group>"; };
4C09CB73116BD98B00C7A725 /* CommandCompletions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommandCompletions.h; path = include/lldb/Interpreter/CommandCompletions.h; sourceTree = "<group>"; };
4C09CB74116BD98B00C7A725 /* CommandCompletions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CommandCompletions.cpp; path = source/Commands/CommandCompletions.cpp; sourceTree = "<group>"; };
+ 4C139EA3124A8B03000BFF8D /* AppleObjCRuntimeV2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AppleObjCRuntimeV2.cpp; path = LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp; sourceTree = "<group>"; };
+ 4C139EA4124A8B03000BFF8D /* AppleObjCRuntimeV2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppleObjCRuntimeV2.h; path = LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h; sourceTree = "<group>"; };
4C43DEF9110641F300E55CBF /* ThreadPlanShouldStopHere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadPlanShouldStopHere.h; path = include/lldb/Target/ThreadPlanShouldStopHere.h; sourceTree = "<group>"; };
4C43DEFA110641F300E55CBF /* ThreadPlanShouldStopHere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadPlanShouldStopHere.cpp; path = source/Target/ThreadPlanShouldStopHere.cpp; sourceTree = "<group>"; };
4C43DF8511069BFD00E55CBF /* ThreadPlanStepInRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadPlanStepInRange.h; path = include/lldb/Target/ThreadPlanStepInRange.h; sourceTree = "<group>"; };
@@ -982,6 +994,14 @@
4CA9637A11B6E99A00780E28 /* CommandObjectApropos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommandObjectApropos.h; path = source/Commands/CommandObjectApropos.h; sourceTree = "<group>"; };
4CAFCE001101216B00CA63DB /* ThreadPlanRunToAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadPlanRunToAddress.h; path = include/lldb/Target/ThreadPlanRunToAddress.h; sourceTree = "<group>"; };
4CAFCE031101218900CA63DB /* ThreadPlanRunToAddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadPlanRunToAddress.cpp; path = source/Target/ThreadPlanRunToAddress.cpp; sourceTree = "<group>"; };
+ 4CB4430912491DDA00C13DC2 /* LanguageRuntime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LanguageRuntime.h; path = include/lldb/Target/LanguageRuntime.h; sourceTree = "<group>"; };
+ 4CB4430A12491DDA00C13DC2 /* LanguageRuntime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LanguageRuntime.cpp; path = source/Target/LanguageRuntime.cpp; sourceTree = "<group>"; };
+ 4CB44369124944B000C13DC2 /* ItaniumABILanguageRuntime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ItaniumABILanguageRuntime.h; path = LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h; sourceTree = "<group>"; };
+ 4CB4436A124944B000C13DC2 /* ItaniumABILanguageRuntime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ItaniumABILanguageRuntime.cpp; path = LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp; sourceTree = "<group>"; };
+ 4CB443BB1249920C00C13DC2 /* CPPLanguageRuntime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPPLanguageRuntime.h; path = include/lldb/Target/CPPLanguageRuntime.h; sourceTree = "<group>"; };
+ 4CB443BC1249920C00C13DC2 /* CPPLanguageRuntime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPPLanguageRuntime.cpp; path = source/Target/CPPLanguageRuntime.cpp; sourceTree = "<group>"; };
+ 4CB443F212499B5000C13DC2 /* ObjCLanguageRuntime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ObjCLanguageRuntime.cpp; path = source/Target/ObjCLanguageRuntime.cpp; sourceTree = "<group>"; };
+ 4CB443F612499B6E00C13DC2 /* ObjCLanguageRuntime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ObjCLanguageRuntime.h; path = include/lldb/Target/ObjCLanguageRuntime.h; sourceTree = "<group>"; };
4CEDAED311754F5E00E875A6 /* ThreadPlanStepUntil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadPlanStepUntil.h; path = include/lldb/Target/ThreadPlanStepUntil.h; sourceTree = "<group>"; };
4CEE62FA1145F2130064CF93 /* ProcessGDBRemote.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ProcessGDBRemote.cpp; path = "source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp"; sourceTree = "<group>"; };
4CEE62FB1145F2130064CF93 /* ProcessGDBRemote.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProcessGDBRemote.h; path = "source/Plugins/Process/gdb-remote/ProcessGDBRemote.h"; sourceTree = "<group>"; };
@@ -1180,6 +1200,7 @@
493C63D711891A8000914D5E /* ABI */,
260C897210F57C5600BB2B04 /* Disassembler */,
260C897810F57C5600BB2B04 /* DynamicLoader */,
+ 4CB443651249446F00C13DC2 /* LanguageRuntime */,
260C897E10F57C5600BB2B04 /* ObjectContainer */,
260C898210F57C5600BB2B04 /* ObjectFile */,
260C898A10F57C5600BB2B04 /* Process */,
@@ -1982,10 +2003,16 @@
children = (
497E7B331188ED300065CCA1 /* ABI.h */,
497E7B9D1188F6690065CCA1 /* ABI.cpp */,
+ 4CB443BB1249920C00C13DC2 /* CPPLanguageRuntime.h */,
+ 4CB443BC1249920C00C13DC2 /* CPPLanguageRuntime.cpp */,
26BC7DF110F1B81A00F91463 /* DynamicLoader.h */,
26BC7DF210F1B81A00F91463 /* ExecutionContext.h */,
26BC7F3510F1B90C00F91463 /* ExecutionContext.cpp */,
26DAFD9711529BC7005A394E /* ExecutionContextScope.h */,
+ 4CB4430912491DDA00C13DC2 /* LanguageRuntime.h */,
+ 4CB4430A12491DDA00C13DC2 /* LanguageRuntime.cpp */,
+ 4CB443F612499B6E00C13DC2 /* ObjCLanguageRuntime.h */,
+ 4CB443F212499B5000C13DC2 /* ObjCLanguageRuntime.cpp */,
49BF48E011ADF37D008863BD /* ObjCObjectPrinter.h */,
49BF48DC11ADF356008863BD /* ObjCObjectPrinter.cpp */,
495BBACF119A0DE700418BEA /* PathMappingList.h */,
@@ -2142,6 +2169,49 @@
name = "MacOSX-i386";
sourceTree = "<group>";
};
+ 4C139EA0124A8AC7000BFF8D /* CPlusPlus */ = {
+ isa = PBXGroup;
+ children = (
+ 4CB443661249448300C13DC2 /* ItaniumABI */,
+ );
+ name = CPlusPlus;
+ sourceTree = "<group>";
+ };
+ 4C139EA1124A8AD5000BFF8D /* ObjC */ = {
+ isa = PBXGroup;
+ children = (
+ 4C139EA2124A8AE5000BFF8D /* AppleRuntimeV2 */,
+ );
+ name = ObjC;
+ sourceTree = "<group>";
+ };
+ 4C139EA2124A8AE5000BFF8D /* AppleRuntimeV2 */ = {
+ isa = PBXGroup;
+ children = (
+ 4C139EA3124A8B03000BFF8D /* AppleObjCRuntimeV2.cpp */,
+ 4C139EA4124A8B03000BFF8D /* AppleObjCRuntimeV2.h */,
+ );
+ name = AppleRuntimeV2;
+ sourceTree = "<group>";
+ };
+ 4CB443651249446F00C13DC2 /* LanguageRuntime */ = {
+ isa = PBXGroup;
+ children = (
+ 4C139EA0124A8AC7000BFF8D /* CPlusPlus */,
+ 4C139EA1124A8AD5000BFF8D /* ObjC */,
+ );
+ name = LanguageRuntime;
+ sourceTree = "<group>";
+ };
+ 4CB443661249448300C13DC2 /* ItaniumABI */ = {
+ isa = PBXGroup;
+ children = (
+ 4CB44369124944B000C13DC2 /* ItaniumABILanguageRuntime.h */,
+ 4CB4436A124944B000C13DC2 /* ItaniumABILanguageRuntime.cpp */,
+ );
+ name = ItaniumABI;
+ sourceTree = "<group>";
+ };
4CEE62F71145F1C70064CF93 /* GDB Remote */ = {
isa = PBXGroup;
children = (
@@ -2302,7 +2372,12 @@
2618D7901240115500F2B8FE /* SectionLoadList.h in Headers */,
2618D959124056C700F2B8FE /* NameToDIE.h in Headers */,
26C72C94124322890068DC16 /* SBStream.h in Headers */,
+ 4CB4430B12491DDA00C13DC2 /* LanguageRuntime.h in Headers */,
+ 4CB4436B124944B000C13DC2 /* ItaniumABILanguageRuntime.h in Headers */,
+ 4CB443BD1249920C00C13DC2 /* CPPLanguageRuntime.h in Headers */,
+ 4CB443F712499B6E00C13DC2 /* ObjCLanguageRuntime.h in Headers */,
96A6D9CA1249D98800250B38 /* ArchVolatileRegs-x86.h in Headers */,
+ 4C139EA6124A8B03000BFF8D /* AppleObjCRuntimeV2.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2767,8 +2842,13 @@
2618D7921240116900F2B8FE /* SectionLoadList.cpp in Sources */,
2618D9EB12406FE600F2B8FE /* NameToDIE.cpp in Sources */,
26C72C961243229A0068DC16 /* SBStream.cpp in Sources */,
+ 4CB4430C12491DDA00C13DC2 /* LanguageRuntime.cpp in Sources */,
+ 4CB4436C124944B000C13DC2 /* ItaniumABILanguageRuntime.cpp in Sources */,
+ 4CB443BE1249920C00C13DC2 /* CPPLanguageRuntime.cpp in Sources */,
+ 4CB443F312499B5000C13DC2 /* ObjCLanguageRuntime.cpp in Sources */,
96A6D9C61249D96F00250B38 /* ArchVolatileRegs.cpp in Sources */,
96A6D9C91249D98800250B38 /* ArchVolatileRegs-x86.cpp in Sources */,
+ 4C139EA5124A8B03000BFF8D /* AppleObjCRuntimeV2.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Modified: lldb/trunk/source/Core/PluginManager.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/PluginManager.cpp?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/source/Core/PluginManager.cpp (original)
+++ lldb/trunk/source/Core/PluginManager.cpp Wed Sep 22 21:01:19 2010
@@ -392,8 +392,128 @@
}
+#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
Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Wed Sep 22 21:01:19 2010
@@ -823,3 +823,17 @@
}
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;
+}
Added: lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp?rev=114620&view=auto
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp (added)
+++ lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp Wed Sep 22 21:01:19 2010
@@ -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;
+}
Added: lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h?rev=114620&view=auto
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h (added)
+++ lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h Wed Sep 22 21:01:19 2010
@@ -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_
Added: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp?rev=114620&view=auto
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp (added)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.cpp Wed Sep 22 21:01:19 2010
@@ -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;
+}
Added: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h?rev=114620&view=auto
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h (added)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntimeV2/AppleObjCRuntimeV2.h Wed Sep 22 21:01:19 2010
@@ -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_
Added: lldb/trunk/source/Target/CPPLanguageRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/CPPLanguageRuntime.cpp?rev=114620&view=auto
==============================================================================
--- lldb/trunk/source/Target/CPPLanguageRuntime.cpp (added)
+++ lldb/trunk/source/Target/CPPLanguageRuntime.cpp Wed Sep 22 21:01:19 2010
@@ -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
Added: lldb/trunk/source/Target/LanguageRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/LanguageRuntime.cpp?rev=114620&view=auto
==============================================================================
--- lldb/trunk/source/Target/LanguageRuntime.cpp (added)
+++ lldb/trunk/source/Target/LanguageRuntime.cpp Wed Sep 22 21:01:19 2010
@@ -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()
+{
+}
Added: lldb/trunk/source/Target/ObjCLanguageRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ObjCLanguageRuntime.cpp?rev=114620&view=auto
==============================================================================
--- lldb/trunk/source/Target/ObjCLanguageRuntime.cpp (added)
+++ lldb/trunk/source/Target/ObjCLanguageRuntime.cpp Wed Sep 22 21:01:19 2010
@@ -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
Modified: lldb/trunk/source/Target/Process.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/source/Target/Process.cpp (original)
+++ lldb/trunk/source/Target/Process.cpp Wed Sep 22 21:01:19 2010
@@ -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 @@
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()
{
Modified: lldb/trunk/source/lldb.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/lldb.cpp?rev=114620&r1=114619&r2=114620&view=diff
==============================================================================
--- lldb/trunk/source/lldb.cpp (original)
+++ lldb/trunk/source/lldb.cpp Wed Sep 22 21:01:19 2010
@@ -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 @@
ABIMacOSX_i386::Initialize();
ABISysV_x86_64::Initialize();
DynamicLoaderMacOSXDYLD::Initialize();
+ ItaniumABILanguageRuntime::Initialize();
+ AppleObjCRuntimeV2::Initialize();
ObjectContainerUniversalMachO::Initialize();
ObjectFileMachO::Initialize();
ProcessGDBRemote::Initialize();
More information about the lldb-commits
mailing list