diff options
author | Caroline Tice <ctice@apple.com> | 2011-04-05 23:22:54 +0000 |
---|---|---|
committer | Caroline Tice <ctice@apple.com> | 2011-04-05 23:22:54 +0000 |
commit | 7c9dd3ce3c70301ed46f7eb1345a96cfd1fa37b0 (patch) | |
tree | 8025ab15ecf1ac7ce3cf56e0531c4acf55b69b0b /lldb/source/Core/Disassembler.cpp | |
parent | ce6b047a1005bc1befa851b6ee68c5bf73386360 (diff) | |
download | bcm5719-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.cpp | 33 |
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() { |