summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
Diffstat (limited to 'lldb')
-rw-r--r--lldb/lldb.xcodeproj/project.pbxproj85
-rw-r--r--lldb/source/Plugins/ArchDefaultUnwindPlan/x86/ArchDefaultUnwindPlan-x86.cpp (renamed from lldb/source/Plugins/ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.cpp)0
-rw-r--r--lldb/source/Plugins/ArchDefaultUnwindPlan/x86/ArchDefaultUnwindPlan-x86.h (renamed from lldb/source/Plugins/ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.h)0
-rw-r--r--lldb/source/Plugins/ArchVolatileRegs/x86/ArchVolatileRegs-x86.cpp (renamed from lldb/source/Plugins/ArchVolatileRegs/ArchVolatileRegs-x86.cpp)0
-rw-r--r--lldb/source/Plugins/ArchVolatileRegs/x86/ArchVolatileRegs-x86.h (renamed from lldb/source/Plugins/ArchVolatileRegs/ArchVolatileRegs-x86.h)0
-rw-r--r--lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp108
-rw-r--r--lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h82
-rw-r--r--lldb/source/Plugins/UnwindAssembly/x86/UnwindAssemblyx86.cpp (renamed from lldb/source/Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.cpp)36
-rw-r--r--lldb/source/Plugins/UnwindAssembly/x86/UnwindAssemblyx86.h (renamed from lldb/source/Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.h)14
-rw-r--r--lldb/source/lldb.cpp13
10 files changed, 286 insertions, 52 deletions
diff --git a/lldb/lldb.xcodeproj/project.pbxproj b/lldb/lldb.xcodeproj/project.pbxproj
index 6403aba5a34..b628aef2765 100644
--- a/lldb/lldb.xcodeproj/project.pbxproj
+++ b/lldb/lldb.xcodeproj/project.pbxproj
@@ -362,12 +362,15 @@
2689FFFF13353DB600698AC0 /* BreakpointResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26BC7E1210F1B83100F91463 /* BreakpointResolver.cpp */; };
268F9D53123AA15200B91E9B /* SBSymbolContextList.h in Headers */ = {isa = PBXBuildFile; fileRef = 268F9D52123AA15200B91E9B /* SBSymbolContextList.h */; settings = {ATTRIBUTES = (Public, ); }; };
268F9D55123AA16600B91E9B /* SBSymbolContextList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 268F9D54123AA16600B91E9B /* SBSymbolContextList.cpp */; };
+ 2692BA15136610C100F9E14D /* UnwindAssemblyInstEmulation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2692BA13136610C100F9E14D /* UnwindAssemblyInstEmulation.cpp */; };
+ 2692BA16136610C100F9E14D /* UnwindAssemblyInstEmulation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2692BA14136610C100F9E14D /* UnwindAssemblyInstEmulation.h */; };
+ 2692BA1A136611CD00F9E14D /* UnwindAssemblyx86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2692BA18136611CD00F9E14D /* UnwindAssemblyx86.cpp */; };
+ 2692BA1B136611CD00F9E14D /* UnwindAssemblyx86.h in Headers */ = {isa = PBXBuildFile; fileRef = 2692BA19136611CD00F9E14D /* UnwindAssemblyx86.h */; };
+ 2692BA1F136614D800F9E14D /* ArchDefaultUnwindPlan-x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2692BA1D136614D000F9E14D /* ArchDefaultUnwindPlan-x86.cpp */; };
+ 2692BA231366150100F9E14D /* ArchVolatileRegs-x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2692BA21136614FC00F9E14D /* ArchVolatileRegs-x86.cpp */; };
2697A54D133A6305004E4240 /* PlatformDarwin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2697A54B133A6305004E4240 /* PlatformDarwin.cpp */; };
2697A54E133A6305004E4240 /* PlatformDarwin.h in Headers */ = {isa = PBXBuildFile; fileRef = 2697A54C133A6305004E4240 /* PlatformDarwin.h */; };
26A7A035135E6E4200FB369E /* NamedOptionValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26A7A034135E6E4200FB369E /* NamedOptionValue.cpp */; };
- 26AC3F471365F43F0065C7EF /* UnwindAssemblyProfiler-x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26AC3F451365F4390065C7EF /* UnwindAssemblyProfiler-x86.cpp */; };
- 26AC3F4B1365F4EC0065C7EF /* ArchDefaultUnwindPlan-x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26AC3F491365F4E90065C7EF /* ArchDefaultUnwindPlan-x86.cpp */; };
- 26AC3F4F1365F53B0065C7EF /* ArchVolatileRegs-x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26AC3F4D1365F5380065C7EF /* ArchVolatileRegs-x86.cpp */; };
26B1FA1413380E61002886E2 /* LLDBWrapPython.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26A4EEB511682AAC007A372A /* LLDBWrapPython.cpp */; };
26B1FCB813381071002886E2 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26F5C39010F3FA26009D5894 /* CoreFoundation.framework */; };
26B1FCB913381071002886E2 /* DebugSymbols.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 265ABF6210F42EE900531910 /* DebugSymbols.framework */; };
@@ -706,6 +709,14 @@
268DA873130095ED00C9483A /* Terminal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Terminal.cpp; sourceTree = "<group>"; };
268F9D52123AA15200B91E9B /* SBSymbolContextList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SBSymbolContextList.h; path = include/lldb/API/SBSymbolContextList.h; sourceTree = "<group>"; };
268F9D54123AA16600B91E9B /* SBSymbolContextList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBSymbolContextList.cpp; path = source/API/SBSymbolContextList.cpp; sourceTree = "<group>"; };
+ 2692BA13136610C100F9E14D /* UnwindAssemblyInstEmulation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UnwindAssemblyInstEmulation.cpp; sourceTree = "<group>"; };
+ 2692BA14136610C100F9E14D /* UnwindAssemblyInstEmulation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnwindAssemblyInstEmulation.h; sourceTree = "<group>"; };
+ 2692BA18136611CD00F9E14D /* UnwindAssemblyx86.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UnwindAssemblyx86.cpp; sourceTree = "<group>"; };
+ 2692BA19136611CD00F9E14D /* UnwindAssemblyx86.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnwindAssemblyx86.h; sourceTree = "<group>"; };
+ 2692BA1D136614D000F9E14D /* ArchDefaultUnwindPlan-x86.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "ArchDefaultUnwindPlan-x86.cpp"; sourceTree = "<group>"; };
+ 2692BA1E136614D000F9E14D /* ArchDefaultUnwindPlan-x86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ArchDefaultUnwindPlan-x86.h"; sourceTree = "<group>"; };
+ 2692BA21136614FC00F9E14D /* ArchVolatileRegs-x86.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "ArchVolatileRegs-x86.cpp"; sourceTree = "<group>"; };
+ 2692BA22136614FC00F9E14D /* ArchVolatileRegs-x86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ArchVolatileRegs-x86.h"; sourceTree = "<group>"; };
269416AD119A024800FF2715 /* CommandObjectTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CommandObjectTarget.cpp; path = source/Commands/CommandObjectTarget.cpp; sourceTree = "<group>"; };
269416AE119A024800FF2715 /* CommandObjectTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommandObjectTarget.h; path = source/Commands/CommandObjectTarget.h; sourceTree = "<group>"; };
2697A54B133A6305004E4240 /* PlatformDarwin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlatformDarwin.cpp; sourceTree = "<group>"; };
@@ -720,12 +731,6 @@
26A4EEB511682AAC007A372A /* LLDBWrapPython.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LLDBWrapPython.cpp; path = source/LLDBWrapPython.cpp; sourceTree = "<group>"; };
26A7A034135E6E4200FB369E /* NamedOptionValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NamedOptionValue.cpp; path = source/Interpreter/NamedOptionValue.cpp; sourceTree = "<group>"; };
26A7A036135E6E5300FB369E /* NamedOptionValue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = NamedOptionValue.h; path = include/lldb/Interpreter/NamedOptionValue.h; sourceTree = "<group>"; };
- 26AC3F451365F4390065C7EF /* UnwindAssemblyProfiler-x86.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "UnwindAssemblyProfiler-x86.cpp"; path = "source/Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.cpp"; sourceTree = SOURCE_ROOT; };
- 26AC3F461365F4390065C7EF /* UnwindAssemblyProfiler-x86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "UnwindAssemblyProfiler-x86.h"; path = "source/Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.h"; sourceTree = SOURCE_ROOT; };
- 26AC3F491365F4E90065C7EF /* ArchDefaultUnwindPlan-x86.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "ArchDefaultUnwindPlan-x86.cpp"; path = "ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.cpp"; sourceTree = "<group>"; };
- 26AC3F4A1365F4E90065C7EF /* ArchDefaultUnwindPlan-x86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "ArchDefaultUnwindPlan-x86.h"; path = "ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.h"; sourceTree = "<group>"; };
- 26AC3F4D1365F5380065C7EF /* ArchVolatileRegs-x86.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "ArchVolatileRegs-x86.cpp"; path = "ArchVolatileRegs/ArchVolatileRegs-x86.cpp"; sourceTree = "<group>"; };
- 26AC3F4E1365F5380065C7EF /* ArchVolatileRegs-x86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "ArchVolatileRegs-x86.h"; path = "ArchVolatileRegs/ArchVolatileRegs-x86.h"; sourceTree = "<group>"; };
26B167A41123BF5500DC7B4F /* ThreadSafeValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadSafeValue.h; path = include/lldb/Core/ThreadSafeValue.h; sourceTree = "<group>"; };
26B42C4C1187ABA50079C8C8 /* LLDB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LLDB.h; path = include/lldb/API/LLDB.h; sourceTree = "<group>"; };
26B4E26E112F35F700AB3F64 /* TimeValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimeValue.h; path = include/lldb/Host/TimeValue.h; sourceTree = "<group>"; };
@@ -1777,6 +1782,42 @@
path = Static;
sourceTree = "<group>";
};
+ 2692BA12136610C100F9E14D /* InstEmulation */ = {
+ isa = PBXGroup;
+ children = (
+ 2692BA13136610C100F9E14D /* UnwindAssemblyInstEmulation.cpp */,
+ 2692BA14136610C100F9E14D /* UnwindAssemblyInstEmulation.h */,
+ );
+ path = InstEmulation;
+ sourceTree = "<group>";
+ };
+ 2692BA17136611CD00F9E14D /* x86 */ = {
+ isa = PBXGroup;
+ children = (
+ 2692BA18136611CD00F9E14D /* UnwindAssemblyx86.cpp */,
+ 2692BA19136611CD00F9E14D /* UnwindAssemblyx86.h */,
+ );
+ path = x86;
+ sourceTree = "<group>";
+ };
+ 2692BA1C136614D000F9E14D /* x86 */ = {
+ isa = PBXGroup;
+ children = (
+ 2692BA1D136614D000F9E14D /* ArchDefaultUnwindPlan-x86.cpp */,
+ 2692BA1E136614D000F9E14D /* ArchDefaultUnwindPlan-x86.h */,
+ );
+ path = x86;
+ sourceTree = "<group>";
+ };
+ 2692BA20136614FC00F9E14D /* x86 */ = {
+ isa = PBXGroup;
+ children = (
+ 2692BA21136614FC00F9E14D /* ArchVolatileRegs-x86.cpp */,
+ 2692BA22136614FC00F9E14D /* ArchVolatileRegs-x86.h */,
+ );
+ path = x86;
+ sourceTree = "<group>";
+ };
26A3B4AB1181454800381BC2 /* BSD-Archive */ = {
isa = PBXGroup;
children = (
@@ -1789,29 +1830,26 @@
26AC3F441365F40E0065C7EF /* UnwindAssembly */ = {
isa = PBXGroup;
children = (
- 26AC3F451365F4390065C7EF /* UnwindAssemblyProfiler-x86.cpp */,
- 26AC3F461365F4390065C7EF /* UnwindAssemblyProfiler-x86.h */,
+ 2692BA12136610C100F9E14D /* InstEmulation */,
+ 2692BA17136611CD00F9E14D /* x86 */,
);
- name = UnwindAssembly;
- path = Process;
+ path = UnwindAssembly;
sourceTree = "<group>";
};
26AC3F481365F4620065C7EF /* ArchDefaultUnwindPlan */ = {
isa = PBXGroup;
children = (
- 26AC3F491365F4E90065C7EF /* ArchDefaultUnwindPlan-x86.cpp */,
- 26AC3F4A1365F4E90065C7EF /* ArchDefaultUnwindPlan-x86.h */,
+ 2692BA1C136614D000F9E14D /* x86 */,
);
- name = ArchDefaultUnwindPlan;
+ path = ArchDefaultUnwindPlan;
sourceTree = "<group>";
};
26AC3F4C1365F5260065C7EF /* ArchVolatileRegs */ = {
isa = PBXGroup;
children = (
- 26AC3F4D1365F5380065C7EF /* ArchVolatileRegs-x86.cpp */,
- 26AC3F4E1365F5380065C7EF /* ArchVolatileRegs-x86.h */,
+ 2692BA20136614FC00F9E14D /* x86 */,
);
- name = ArchVolatileRegs;
+ path = ArchVolatileRegs;
sourceTree = "<group>";
};
26B4666E11A2080F00CF6220 /* Utility */ = {
@@ -2619,6 +2657,8 @@
4CABA9DD134A8BA800539BDD /* ValueObjectMemory.h in Headers */,
4CD0BD0D134BFAB600CB44D4 /* ValueObjectDynamicValue.h in Headers */,
4C2FAE2F135E3A70001EDE44 /* SharedCluster.h in Headers */,
+ 2692BA16136610C100F9E14D /* UnwindAssemblyInstEmulation.h in Headers */,
+ 2692BA1B136611CD00F9E14D /* UnwindAssemblyx86.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3189,9 +3229,10 @@
2630BFA91365F28C0070C534 /* UnwindAssemblyProfiler.cpp in Sources */,
2630BFAF1365F3220070C534 /* ArchDefaultUnwindPlan.cpp in Sources */,
2630BFB01365F3220070C534 /* ArchVolatileRegs.cpp in Sources */,
- 26AC3F471365F43F0065C7EF /* UnwindAssemblyProfiler-x86.cpp in Sources */,
- 26AC3F4B1365F4EC0065C7EF /* ArchDefaultUnwindPlan-x86.cpp in Sources */,
- 26AC3F4F1365F53B0065C7EF /* ArchVolatileRegs-x86.cpp in Sources */,
+ 2692BA15136610C100F9E14D /* UnwindAssemblyInstEmulation.cpp in Sources */,
+ 2692BA1A136611CD00F9E14D /* UnwindAssemblyx86.cpp in Sources */,
+ 2692BA1F136614D800F9E14D /* ArchDefaultUnwindPlan-x86.cpp in Sources */,
+ 2692BA231366150100F9E14D /* ArchVolatileRegs-x86.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/lldb/source/Plugins/ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.cpp b/lldb/source/Plugins/ArchDefaultUnwindPlan/x86/ArchDefaultUnwindPlan-x86.cpp
index de8b5f8ff67..de8b5f8ff67 100644
--- a/lldb/source/Plugins/ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.cpp
+++ b/lldb/source/Plugins/ArchDefaultUnwindPlan/x86/ArchDefaultUnwindPlan-x86.cpp
diff --git a/lldb/source/Plugins/ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.h b/lldb/source/Plugins/ArchDefaultUnwindPlan/x86/ArchDefaultUnwindPlan-x86.h
index 7938ef05978..7938ef05978 100644
--- a/lldb/source/Plugins/ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.h
+++ b/lldb/source/Plugins/ArchDefaultUnwindPlan/x86/ArchDefaultUnwindPlan-x86.h
diff --git a/lldb/source/Plugins/ArchVolatileRegs/ArchVolatileRegs-x86.cpp b/lldb/source/Plugins/ArchVolatileRegs/x86/ArchVolatileRegs-x86.cpp
index 915dbf9bb7e..915dbf9bb7e 100644
--- a/lldb/source/Plugins/ArchVolatileRegs/ArchVolatileRegs-x86.cpp
+++ b/lldb/source/Plugins/ArchVolatileRegs/x86/ArchVolatileRegs-x86.cpp
diff --git a/lldb/source/Plugins/ArchVolatileRegs/ArchVolatileRegs-x86.h b/lldb/source/Plugins/ArchVolatileRegs/x86/ArchVolatileRegs-x86.h
index 70e1d202672..70e1d202672 100644
--- a/lldb/source/Plugins/ArchVolatileRegs/ArchVolatileRegs-x86.h
+++ b/lldb/source/Plugins/ArchVolatileRegs/x86/ArchVolatileRegs-x86.h
diff --git a/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp b/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp
new file mode 100644
index 00000000000..966b526d6c0
--- /dev/null
+++ b/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp
@@ -0,0 +1,108 @@
+//===-- UnwindAssemblyInstEmulation.cpp --------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "UnwindAssemblyInstEmulation.h"
+
+#include "llvm-c/EnhancedDisassembly.h"
+
+#include "lldb/Core/Address.h"
+#include "lldb/Core/Error.h"
+#include "lldb/Core/ArchSpec.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Symbol/UnwindPlan.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Target/RegisterContext.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/Target.h"
+#include "lldb/Target/UnwindAssemblyProfiler.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+
+
+//-----------------------------------------------------------------------------------------------
+// UnwindAssemblyParser_x86 method definitions
+//-----------------------------------------------------------------------------------------------
+
+bool
+UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly (AddressRange& func, Thread& thread, UnwindPlan& unwind_plan)
+{
+ return false;
+}
+
+bool
+UnwindAssemblyInstEmulation::GetFastUnwindPlan (AddressRange& func, Thread& thread, UnwindPlan &unwind_plan)
+{
+ return false;
+}
+
+bool
+UnwindAssemblyInstEmulation::FirstNonPrologueInsn (AddressRange& func, Target& target, Thread* thread, Address& first_non_prologue_insn)
+{
+ return false;
+}
+
+UnwindAssemblyProfiler *
+UnwindAssemblyInstEmulation::CreateInstance (const ArchSpec &arch)
+{
+ return NULL;
+}
+
+
+//------------------------------------------------------------------
+// PluginInterface protocol in UnwindAssemblyParser_x86
+//------------------------------------------------------------------
+
+const char *
+UnwindAssemblyInstEmulation::GetPluginName()
+{
+ return "UnwindAssemblyInstEmulation";
+}
+
+const char *
+UnwindAssemblyInstEmulation::GetShortPluginName()
+{
+ return "unwindassembly.inst-emulation";
+}
+
+
+uint32_t
+UnwindAssemblyInstEmulation::GetPluginVersion()
+{
+ return 1;
+}
+
+void
+UnwindAssemblyInstEmulation::Initialize()
+{
+ PluginManager::RegisterPlugin (GetPluginNameStatic(),
+ GetPluginDescriptionStatic(),
+ CreateInstance);
+}
+
+void
+UnwindAssemblyInstEmulation::Terminate()
+{
+ PluginManager::UnregisterPlugin (CreateInstance);
+}
+
+
+const char *
+UnwindAssemblyInstEmulation::GetPluginNameStatic()
+{
+ return "UnwindAssemblyInstEmulation";
+}
+
+const char *
+UnwindAssemblyInstEmulation::GetPluginDescriptionStatic()
+{
+ return "Instruction emulation based unwind information.";
+}
diff --git a/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h b/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h
new file mode 100644
index 00000000000..773c120a228
--- /dev/null
+++ b/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h
@@ -0,0 +1,82 @@
+//===-- UnwindAssemblyInstEmulation.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_UnwindAssemblyInstEmulation_h_
+#define liblldb_UnwindAssemblyInstEmulation_h_
+
+#include "lldb/lldb-private.h"
+#include "lldb/Target/UnwindAssemblyProfiler.h"
+#include "lldb/Target/Thread.h"
+
+class UnwindAssemblyInstEmulation : public lldb_private::UnwindAssemblyProfiler
+{
+public:
+
+ virtual
+ ~UnwindAssemblyInstEmulation ()
+ {
+ }
+
+ virtual bool
+ GetNonCallSiteUnwindPlanFromAssembly (lldb_private::AddressRange& func,
+ lldb_private::Thread& thread,
+ lldb_private::UnwindPlan& unwind_plan);
+
+ virtual bool
+ GetFastUnwindPlan (lldb_private::AddressRange& func,
+ lldb_private::Thread& thread,
+ lldb_private::UnwindPlan &unwind_plan);
+
+ // thread may be NULL in which case we only use the Target (e.g. if this is called pre-process-launch).
+ virtual bool
+ FirstNonPrologueInsn (lldb_private::AddressRange& func,
+ lldb_private::Target& target,
+ lldb_private::Thread* thread,
+ lldb_private::Address& first_non_prologue_insn);
+
+ static lldb_private::UnwindAssemblyProfiler *
+ CreateInstance (const lldb_private::ArchSpec &arch);
+
+
+ //------------------------------------------------------------------
+ // PluginInterface protocol
+ //------------------------------------------------------------------
+ static void
+ Initialize();
+
+ static void
+ Terminate();
+
+ static const char *
+ GetPluginNameStatic();
+
+ static const char *
+ GetPluginDescriptionStatic();
+
+ virtual const char *
+ GetPluginName();
+
+ virtual const char *
+ GetShortPluginName();
+
+ virtual uint32_t
+ GetPluginVersion();
+
+private:
+
+ // Call CreateInstance to get an instance of this class
+ UnwindAssemblyInstEmulation(int cpu) :
+ lldb_private::UnwindAssemblyProfiler(), m_cpu(cpu)
+ {
+ }
+
+ int m_cpu;
+};
+
+#endif // liblldb_UnwindAssemblyInstEmulation_h_
diff --git a/lldb/source/Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.cpp b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssemblyx86.cpp
index 6f6baa8ee22..b1738332264 100644
--- a/lldb/source/Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.cpp
+++ b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssemblyx86.cpp
@@ -1,4 +1,4 @@
-//===-- UnwindAssemblyProfiler-x86.cpp --------------------------*- C++ -*-===//
+//===-- UnwindAssemblyx86.cpp -----------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
-#include "UnwindAssemblyProfiler-x86.h"
+#include "UnwindAssemblyx86.h"
#include "llvm-c/EnhancedDisassembly.h"
@@ -819,34 +819,34 @@ AssemblyParse_x86::find_first_non_prologue_insn (Address &address)
//-----------------------------------------------------------------------------------------------
bool
-UnwindAssemblyProfiler_x86::GetNonCallSiteUnwindPlanFromAssembly (AddressRange& func, Thread& thread, UnwindPlan& unwind_plan)
+UnwindAssembly_x86::GetNonCallSiteUnwindPlanFromAssembly (AddressRange& func, Thread& thread, UnwindPlan& unwind_plan)
{
AssemblyParse_x86 asm_parse(thread.GetProcess().GetTarget(), &thread, m_cpu, func);
return asm_parse.get_non_call_site_unwind_plan (unwind_plan);
}
bool
-UnwindAssemblyProfiler_x86::GetFastUnwindPlan (AddressRange& func, Thread& thread, UnwindPlan &unwind_plan)
+UnwindAssembly_x86::GetFastUnwindPlan (AddressRange& func, Thread& thread, UnwindPlan &unwind_plan)
{
AssemblyParse_x86 asm_parse(thread.GetProcess().GetTarget(), &thread, m_cpu, func);
return asm_parse.get_fast_unwind_plan (func, unwind_plan);
}
bool
-UnwindAssemblyProfiler_x86::FirstNonPrologueInsn (AddressRange& func, Target& target, Thread* thread, Address& first_non_prologue_insn)
+UnwindAssembly_x86::FirstNonPrologueInsn (AddressRange& func, Target& target, Thread* thread, Address& first_non_prologue_insn)
{
AssemblyParse_x86 asm_parse(target, thread, m_cpu, func);
return asm_parse.find_first_non_prologue_insn (first_non_prologue_insn);
}
UnwindAssemblyProfiler *
-UnwindAssemblyProfiler_x86::CreateInstance (const ArchSpec &arch)
+UnwindAssembly_x86::CreateInstance (const ArchSpec &arch)
{
const llvm::Triple::ArchType cpu = arch.GetMachine ();
if (cpu == llvm::Triple::x86)
- return new UnwindAssemblyProfiler_x86 (k_i386);
+ return new UnwindAssembly_x86 (k_i386);
else if (cpu == llvm::Triple::x86_64)
- return new UnwindAssemblyProfiler_x86 (k_x86_64);
+ return new UnwindAssembly_x86 (k_x86_64);
return NULL;
}
@@ -856,26 +856,26 @@ UnwindAssemblyProfiler_x86::CreateInstance (const ArchSpec &arch)
//------------------------------------------------------------------
const char *
-UnwindAssemblyProfiler_x86::GetPluginName()
+UnwindAssembly_x86::GetPluginName()
{
- return "UnwindAssemblyProfiler_x86";
+ return "UnwindAssembly_x86";
}
const char *
-UnwindAssemblyProfiler_x86::GetShortPluginName()
+UnwindAssembly_x86::GetShortPluginName()
{
- return "unwindassemblyprofiler.x86";
+ return "unwindassembly.x86";
}
uint32_t
-UnwindAssemblyProfiler_x86::GetPluginVersion()
+UnwindAssembly_x86::GetPluginVersion()
{
return 1;
}
void
-UnwindAssemblyProfiler_x86::Initialize()
+UnwindAssembly_x86::Initialize()
{
PluginManager::RegisterPlugin (GetPluginNameStatic(),
GetPluginDescriptionStatic(),
@@ -883,20 +883,20 @@ UnwindAssemblyProfiler_x86::Initialize()
}
void
-UnwindAssemblyProfiler_x86::Terminate()
+UnwindAssembly_x86::Terminate()
{
PluginManager::UnregisterPlugin (CreateInstance);
}
const char *
-UnwindAssemblyProfiler_x86::GetPluginNameStatic()
+UnwindAssembly_x86::GetPluginNameStatic()
{
- return "UnwindAssemblyProfiler_x86";
+ return "UnwindAssembly_x86";
}
const char *
-UnwindAssemblyProfiler_x86::GetPluginDescriptionStatic()
+UnwindAssembly_x86::GetPluginDescriptionStatic()
{
return "i386 and x86_64 assembly language profiler plugin.";
}
diff --git a/lldb/source/Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.h b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssemblyx86.h
index c1572996251..3126454781d 100644
--- a/lldb/source/Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.h
+++ b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssemblyx86.h
@@ -1,4 +1,4 @@
-//===-- UnwindAssemblyProfiler-x86.h ----------------------------*- C++ -*-===//
+//===-- UnwindAssemblyx86.h -------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,8 +7,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef liblldb_UnwindAssemblyProfiler_x86_h_
-#define liblldb_UnwindAssemblyProfiler_x86_h_
+#ifndef liblldb_UnwindAssemblyx86_h_
+#define liblldb_UnwindAssemblyx86_h_
#include "lldb/lldb-private.h"
#include "lldb/Target/UnwindAssemblyProfiler.h"
@@ -16,11 +16,11 @@
namespace lldb_private {
-class UnwindAssemblyProfiler_x86 : public lldb_private::UnwindAssemblyProfiler
+class UnwindAssembly_x86 : public lldb_private::UnwindAssemblyProfiler
{
public:
- ~UnwindAssemblyProfiler_x86 () { }
+ ~UnwindAssembly_x86 () { }
virtual bool
GetNonCallSiteUnwindPlanFromAssembly (AddressRange& func, lldb_private::Thread& thread, UnwindPlan& unwind_plan);
@@ -61,7 +61,7 @@ public:
GetPluginVersion();
private:
- UnwindAssemblyProfiler_x86(int cpu) :
+ UnwindAssembly_x86(int cpu) :
lldb_private::UnwindAssemblyProfiler(), m_cpu(cpu) { } // Call CreateInstance instead.
int m_cpu;
@@ -70,4 +70,4 @@ private:
} // namespace lldb_private
-#endif // liblldb_UnwindAssemblyProfiler_x86_h_
+#endif // liblldb_UnwindAssemblyx86_h_
diff --git a/lldb/source/lldb.cpp b/lldb/source/lldb.cpp
index 8d3b1ebb6c4..0fa46d3d620 100644
--- a/lldb/source/lldb.cpp
+++ b/lldb/source/lldb.cpp
@@ -30,9 +30,10 @@
#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
#include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h"
#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h"
-#include "Plugins/UnwindAssembly/UnwindAssemblyProfiler-x86.h"
-#include "Plugins/ArchDefaultUnwindPlan/ArchDefaultUnwindPlan-x86.h"
-#include "Plugins/ArchVolatileRegs/ArchVolatileRegs-x86.h"
+#include "Plugins/UnwindAssembly/x86/UnwindAssemblyx86.h"
+#include "Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h"
+#include "Plugins/ArchDefaultUnwindPlan/x86/ArchDefaultUnwindPlan-x86.h"
+#include "Plugins/ArchVolatileRegs/x86/ArchVolatileRegs-x86.h"
#if defined (__APPLE__)
#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
@@ -82,7 +83,8 @@ lldb_private::Initialize ()
ObjectFileELF::Initialize();
SymbolFileDWARF::Initialize();
SymbolFileSymtab::Initialize();
- UnwindAssemblyProfiler_x86::Initialize();
+ UnwindAssembly_x86::Initialize();
+ UnwindAssemblyInstEmulation::Initialize();
ArchDefaultUnwindPlan_x86_64::Initialize();
ArchDefaultUnwindPlan_i386::Initialize();
ArchVolatileRegs_x86::Initialize();
@@ -150,7 +152,8 @@ lldb_private::Terminate ()
ObjectFileELF::Terminate();
SymbolFileDWARF::Terminate();
SymbolFileSymtab::Terminate();
- UnwindAssemblyProfiler_x86::Terminate();
+ UnwindAssembly_x86::Terminate();
+ UnwindAssemblyInstEmulation::Terminate();
ArchDefaultUnwindPlan_i386::Terminate();
ArchDefaultUnwindPlan_x86_64::Terminate();
ArchVolatileRegs_x86::Terminate();
OpenPOWER on IntegriCloud