summaryrefslogtreecommitdiffstats
path: root/lldb/source/API/SBInstruction.cpp
diff options
context:
space:
mode:
authorCaroline Tice <ctice@apple.com>2011-04-05 23:22:54 +0000
committerCaroline Tice <ctice@apple.com>2011-04-05 23:22:54 +0000
commit7c9dd3ce3c70301ed46f7eb1345a96cfd1fa37b0 (patch)
tree8025ab15ecf1ac7ce3cf56e0531c4acf55b69b0b /lldb/source/API/SBInstruction.cpp
parentce6b047a1005bc1befa851b6ee68c5bf73386360 (diff)
downloadbcm5719-llvm-7c9dd3ce3c70301ed46f7eb1345a96cfd1fa37b0.tar.gz
bcm5719-llvm-7c9dd3ce3c70301ed46f7eb1345a96cfd1fa37b0.zip
Add Emulate and DumpEmulation to Instruction class.
Move InstructionLLVM out of DisassemblerLLVM class. Add instruction emulation function calls to SBInstruction and SBInstructionList APIs. llvm-svn: 128956
Diffstat (limited to 'lldb/source/API/SBInstruction.cpp')
-rw-r--r--lldb/source/API/SBInstruction.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/lldb/source/API/SBInstruction.cpp b/lldb/source/API/SBInstruction.cpp
index 75683f600e8..ce90bbb4fb7 100644
--- a/lldb/source/API/SBInstruction.cpp
+++ b/lldb/source/API/SBInstruction.cpp
@@ -10,11 +10,18 @@
#include "lldb/API/SBInstruction.h"
#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBFrame.h"
#include "lldb/API/SBInstruction.h"
#include "lldb/API/SBStream.h"
+#include "lldb/API/SBTarget.h"
+#include "lldb/Core/ArchSpec.h"
#include "lldb/Core/Disassembler.h"
+#include "lldb/Core/EmulateInstruction.h"
#include "lldb/Core/StreamFile.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Target/StackFrame.h"
+#include "lldb/Target/Target.h"
using namespace lldb;
using namespace lldb_private;
@@ -107,3 +114,41 @@ SBInstruction::Print (FILE *out)
m_opaque_sp->Dump (&out_stream, 0, true, false, NULL, false);
}
}
+
+bool
+SBInstruction::EmulateWithFrame (lldb::SBFrame &frame)
+{
+ if (m_opaque_sp && frame.get())
+ {
+ lldb_private::ExecutionContext exe_ctx;
+ frame->CalculateExecutionContext (exe_ctx);
+ lldb_private::Target *target = exe_ctx.target;
+ lldb_private::ArchSpec arch = target->GetArchitecture();
+
+ return m_opaque_sp->Emulate (arch,
+ (void *) frame.get(),
+ &lldb_private::EmulateInstruction::ReadMemoryFrame,
+ &lldb_private::EmulateInstruction::WriteMemoryFrame,
+ &lldb_private::EmulateInstruction::ReadRegisterFrame,
+ &lldb_private::EmulateInstruction::WriteRegisterFrame);
+ }
+ return false;
+}
+
+bool
+SBInstruction::DumpEmulation (const char *triple)
+{
+ if (m_opaque_sp && triple)
+ {
+ lldb_private::ArchSpec arch (triple);
+
+ return m_opaque_sp->Emulate (arch,
+ NULL,
+ &lldb_private::EmulateInstruction::ReadMemoryDefault,
+ &lldb_private::EmulateInstruction::WriteMemoryDefault,
+ &lldb_private::EmulateInstruction::ReadRegisterDefault,
+ &lldb_private::EmulateInstruction::WriteRegisterDefault);
+ }
+ return false;
+}
+
OpenPOWER on IntegriCloud