SBInstruction.cpp revision 50561699a9a14c716d1099ae1d38be2f31534b67
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- SBInstruction.cpp ---------------------------------------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)//===----------------------------------------------------------------------===// 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "lldb/API/SBInstruction.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "lldb/API/SBAddress.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "lldb/API/SBFrame.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "lldb/API/SBInstruction.h" 155e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "lldb/API/SBStream.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "lldb/API/SBTarget.h" 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "lldb/Core/ArchSpec.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "lldb/Core/DataBufferHeap.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/Disassembler.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "lldb/Core/EmulateInstruction.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "lldb/Core/StreamFile.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "lldb/Target/ExecutionContext.h" 24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "lldb/Target/StackFrame.h" 25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "lldb/Target/Target.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using namespace lldb; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using namespace lldb_private; 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)SBInstruction::SBInstruction () 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles){ 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SBInstruction::SBInstruction (const lldb::InstructionSP& inst_sp) : 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) m_opaque_sp (inst_sp) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 37a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SBInstruction::SBInstruction(const SBInstruction &rhs) : 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) m_opaque_sp (rhs.m_opaque_sp) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const SBInstruction & 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SBInstruction::operator = (const SBInstruction &rhs) 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles){ 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this != &rhs) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_opaque_sp = rhs.m_opaque_sp; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *this; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SBInstruction::~SBInstruction () 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SBInstruction::IsValid() 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (m_opaque_sp.get() != NULL); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SBAddress 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SBInstruction::GetAddress() 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SBAddress sb_addr; 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (m_opaque_sp && m_opaque_sp->GetAddress().IsValid()) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sb_addr.SetAddress(&m_opaque_sp->GetAddress()); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return sb_addr; 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char * 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SBInstruction::GetMnemonic(SBTarget target) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (m_opaque_sp) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Mutex::Locker api_locker; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExecutionContext exe_ctx; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TargetSP target_sp (target.GetSP()); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (target_sp) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 81a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch api_locker.Lock (target_sp->GetAPIMutex().GetMutex()); 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) target_sp->CalculateExecutionContext (exe_ctx); 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) exe_ctx.SetProcessSP(target_sp->GetProcessSP()); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return m_opaque_sp->GetMnemonic(exe_ctx.GetBestExecutionContextScope()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char * 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SBInstruction::GetOperands(SBTarget target) 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (m_opaque_sp) 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Mutex::Locker api_locker; 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExecutionContext exe_ctx; 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TargetSP target_sp (target.GetSP()); 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (target_sp) 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 100a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch api_locker.Lock (target_sp->GetAPIMutex().GetMutex()); 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) target_sp->CalculateExecutionContext (exe_ctx); 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) exe_ctx.SetProcessSP(target_sp->GetProcessSP()); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return m_opaque_sp->GetOperands(exe_ctx.GetBestExecutionContextScope()); 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char * 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SBInstruction::GetComment(SBTarget target) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (m_opaque_sp) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Mutex::Locker api_locker; 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExecutionContext exe_ctx; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TargetSP target_sp (target.GetSP()); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (target_sp) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) api_locker.Lock (target_sp->GetAPIMutex().GetMutex()); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) target_sp->CalculateExecutionContext (exe_ctx); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) exe_ctx.SetProcessSP(target_sp->GetProcessSP()); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return m_opaque_sp->GetComment(exe_ctx.GetBestExecutionContextScope()); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)size_t 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SBInstruction::GetByteSize () 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (m_opaque_sp) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return m_opaque_sp->GetOpcode().GetByteSize(); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return 0; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SBData 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SBInstruction::GetData (SBTarget target) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::SBData sb_data; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (m_opaque_sp) 141a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) { 142a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DataExtractorSP data_extractor_sp (new DataExtractor()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (m_opaque_sp->GetOpcode().GetData (*data_extractor_sp)) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_data.SetOpaque (data_extractor_sp); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 147a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch } 148a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch return sb_data; 149a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 150a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SBInstruction::DoesBranch () 155d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles){ 156d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (m_opaque_sp) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return m_opaque_sp->DoesBranch (); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 160d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)SBInstruction::SetOpaque (const lldb::InstructionSP &inst_sp) 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) m_opaque_sp = inst_sp; 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SBInstruction::GetDescription (lldb::SBStream &s) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (m_opaque_sp) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use the "ref()" instead of the "get()" accessor in case the SBStream 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // didn't have a stream already created, one will get created... 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) m_opaque_sp->Dump (&s.ref(), 0, true, false, NULL, false); 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 180a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void 181a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)SBInstruction::Print (FILE *out) 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (out == NULL) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (m_opaque_sp) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StreamFile out_stream (out, false); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) m_opaque_sp->Dump (&out_stream, 0, true, false, NULL, false); 190d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SBInstruction::EmulateWithFrame (lldb::SBFrame &frame, uint32_t evaluate_options) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (m_opaque_sp) 197d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) lldb::StackFrameSP frame_sp (frame.GetFrameSP()); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (frame_sp) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) lldb_private::ExecutionContext exe_ctx; 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) frame_sp->CalculateExecutionContext (exe_ctx); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) lldb_private::Target *target = exe_ctx.GetTargetPtr(); 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) lldb_private::ArchSpec arch = target->GetArchitecture(); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return m_opaque_sp->Emulate (arch, 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) evaluate_options, 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) (void *) frame_sp.get(), 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &lldb_private::EmulateInstruction::ReadMemoryFrame, 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &lldb_private::EmulateInstruction::WriteMemoryFrame, 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &lldb_private::EmulateInstruction::ReadRegisterFrame, 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &lldb_private::EmulateInstruction::WriteRegisterFrame); 214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SBInstruction::DumpEmulation (const char *triple) 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (m_opaque_sp && triple) 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) lldb_private::ArchSpec arch (triple, NULL); 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return m_opaque_sp->DumpEmulation (arch); 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SBInstruction::TestEmulation (lldb::SBStream &output_stream, const char *test_file) 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!m_opaque_sp.get()) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) m_opaque_sp.reset (new PseudoInstruction()); 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return m_opaque_sp->TestEmulation (output_stream.get(), test_file); 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)