summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/Disassembler.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/Core/Disassembler.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/Core/Disassembler.cpp')
-rw-r--r--lldb/source/Core/Disassembler.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/lldb/source/Core/Disassembler.cpp b/lldb/source/Core/Disassembler.cpp
index e2de734d5d7..2318cf5783d 100644
--- a/lldb/source/Core/Disassembler.cpp
+++ b/lldb/source/Core/Disassembler.cpp
@@ -489,6 +489,39 @@ Instruction::GetAddressClass ()
return m_address_class;
}
+bool
+Instruction::DumpEmulation (const ArchSpec &arch)
+{
+ std::auto_ptr<EmulateInstruction> insn_emulator_ap (EmulateInstruction::FindPlugin (arch, NULL));
+ if (insn_emulator_ap.get())
+ {
+ insn_emulator_ap->SetInstruction (GetOpcode(), GetAddress());
+ return insn_emulator_ap->EvaluateInstruction ();
+ }
+
+ return false;
+}
+
+bool
+Instruction::Emulate (const ArchSpec &arch,
+ void *baton,
+ EmulateInstruction::ReadMemory read_mem_callback,
+ EmulateInstruction::WriteMemory write_mem_callback,
+ EmulateInstruction::ReadRegister read_reg_callback,
+ EmulateInstruction::WriteRegister write_reg_callback)
+{
+ std::auto_ptr<EmulateInstruction> insn_emulator_ap (EmulateInstruction::FindPlugin (arch, NULL));
+ if (insn_emulator_ap.get())
+ {
+ insn_emulator_ap->SetBaton (baton);
+ insn_emulator_ap->SetCallbacks (read_mem_callback, write_mem_callback, read_reg_callback, write_reg_callback);
+ insn_emulator_ap->SetInstruction (GetOpcode(), GetAddress());
+ return insn_emulator_ap->EvaluateInstruction ();
+ }
+
+ return false;
+}
+
InstructionList::InstructionList() :
m_instructions()
{
OpenPOWER on IntegriCloud