SBInstruction.cpp revision 23b8abbe214c252028f6e09f79169529c846409d
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBInstruction.cpp ---------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBInstruction.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 125c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton#include "lldb/API/SBAddress.h" 13af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice#include "lldb/API/SBFrame.h" 145c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton#include "lldb/API/SBInstruction.h" 155c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton#include "lldb/API/SBStream.h" 16af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice#include "lldb/API/SBTarget.h" 175c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton 18af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice#include "lldb/Core/ArchSpec.h" 1923b8abbe214c252028f6e09f79169529c846409dGreg Clayton#include "lldb/Core/DataBufferHeap.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Disassembler.h" 21af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice#include "lldb/Core/EmulateInstruction.h" 225c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton#include "lldb/Core/StreamFile.h" 23af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice#include "lldb/Target/ExecutionContext.h" 24af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice#include "lldb/Target/StackFrame.h" 25af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice#include "lldb/Target/Target.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInstruction::SBInstruction () 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 345c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::SBInstruction (const lldb::InstructionSP& inst_sp) : 355c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton m_opaque_sp (inst_sp) 365c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 375c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 385c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton 39538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBInstruction::SBInstruction(const SBInstruction &rhs) : 40538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp (rhs.m_opaque_sp) 41538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 42538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 43538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 44538eb82a89a68dbc57251915080bd5152b333978Greg Claytonconst SBInstruction & 45538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBInstruction::operator = (const SBInstruction &rhs) 46538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 47538eb82a89a68dbc57251915080bd5152b333978Greg Clayton if (this != &rhs) 48538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_sp = rhs.m_opaque_sp; 49538eb82a89a68dbc57251915080bd5152b333978Greg Clayton return *this; 50538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 51538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInstruction::~SBInstruction () 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 565c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonbool 575c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::IsValid() 585c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 595c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return (m_opaque_sp.get() != NULL); 605c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 615c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton 625c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBAddress 635c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::GetAddress() 645c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 655c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton SBAddress sb_addr; 665c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp && m_opaque_sp->GetAddress().IsValid()) 675c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton sb_addr.SetAddress(&m_opaque_sp->GetAddress()); 685c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return sb_addr; 695c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 705c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton 7123b8abbe214c252028f6e09f79169529c846409dGreg Claytonconst char * 7223b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBInstruction::GetOpcodeName(SBTarget target) 7323b8abbe214c252028f6e09f79169529c846409dGreg Clayton{ 7423b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (m_opaque_sp) 7523b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 7623b8abbe214c252028f6e09f79169529c846409dGreg Clayton Mutex::Locker api_locker; 7723b8abbe214c252028f6e09f79169529c846409dGreg Clayton ExecutionContext exe_ctx; 7823b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (target.IsValid()) 7923b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 8023b8abbe214c252028f6e09f79169529c846409dGreg Clayton api_locker.Reset (target->GetAPIMutex().GetMutex()); 8123b8abbe214c252028f6e09f79169529c846409dGreg Clayton target->CalculateExecutionContext (exe_ctx); 8223b8abbe214c252028f6e09f79169529c846409dGreg Clayton exe_ctx.SetProcessSP(target->GetProcessSP()); 8323b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 8423b8abbe214c252028f6e09f79169529c846409dGreg Clayton return m_opaque_sp->GetOpcodeName(exe_ctx.GetBestExecutionContextScope()); 8523b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 8623b8abbe214c252028f6e09f79169529c846409dGreg Clayton return NULL; 8723b8abbe214c252028f6e09f79169529c846409dGreg Clayton} 8823b8abbe214c252028f6e09f79169529c846409dGreg Clayton 8923b8abbe214c252028f6e09f79169529c846409dGreg Claytonconst char * 9023b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBInstruction::GetMnemonics(SBTarget target) 9123b8abbe214c252028f6e09f79169529c846409dGreg Clayton{ 9223b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (m_opaque_sp) 9323b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 9423b8abbe214c252028f6e09f79169529c846409dGreg Clayton Mutex::Locker api_locker; 9523b8abbe214c252028f6e09f79169529c846409dGreg Clayton ExecutionContext exe_ctx; 9623b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (target.IsValid()) 9723b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 9823b8abbe214c252028f6e09f79169529c846409dGreg Clayton api_locker.Reset (target->GetAPIMutex().GetMutex()); 9923b8abbe214c252028f6e09f79169529c846409dGreg Clayton target->CalculateExecutionContext (exe_ctx); 10023b8abbe214c252028f6e09f79169529c846409dGreg Clayton exe_ctx.SetProcessSP(target->GetProcessSP()); 10123b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 10223b8abbe214c252028f6e09f79169529c846409dGreg Clayton return m_opaque_sp->GetMnemonics(exe_ctx.GetBestExecutionContextScope()); 10323b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 10423b8abbe214c252028f6e09f79169529c846409dGreg Clayton return NULL; 10523b8abbe214c252028f6e09f79169529c846409dGreg Clayton} 10623b8abbe214c252028f6e09f79169529c846409dGreg Clayton 10723b8abbe214c252028f6e09f79169529c846409dGreg Claytonconst char * 10823b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBInstruction::GetComment(SBTarget target) 10923b8abbe214c252028f6e09f79169529c846409dGreg Clayton{ 11023b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (m_opaque_sp) 11123b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 11223b8abbe214c252028f6e09f79169529c846409dGreg Clayton Mutex::Locker api_locker; 11323b8abbe214c252028f6e09f79169529c846409dGreg Clayton ExecutionContext exe_ctx; 11423b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (target.IsValid()) 11523b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 11623b8abbe214c252028f6e09f79169529c846409dGreg Clayton api_locker.Reset (target->GetAPIMutex().GetMutex()); 11723b8abbe214c252028f6e09f79169529c846409dGreg Clayton target->CalculateExecutionContext (exe_ctx); 11823b8abbe214c252028f6e09f79169529c846409dGreg Clayton exe_ctx.SetProcessSP(target->GetProcessSP()); 11923b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 12023b8abbe214c252028f6e09f79169529c846409dGreg Clayton return m_opaque_sp->GetComment(exe_ctx.GetBestExecutionContextScope()); 12123b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 12223b8abbe214c252028f6e09f79169529c846409dGreg Clayton return NULL; 12323b8abbe214c252028f6e09f79169529c846409dGreg Clayton} 12423b8abbe214c252028f6e09f79169529c846409dGreg Clayton 1255c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonsize_t 1265c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::GetByteSize () 1275c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 1285c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp) 129149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton return m_opaque_sp->GetOpcode().GetByteSize(); 1305c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return 0; 1315c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13323b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBData 13423b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBInstruction::GetData (SBTarget target) 13523b8abbe214c252028f6e09f79169529c846409dGreg Clayton{ 13623b8abbe214c252028f6e09f79169529c846409dGreg Clayton lldb::SBData sb_data; 13723b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (m_opaque_sp) 13823b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 13923b8abbe214c252028f6e09f79169529c846409dGreg Clayton const Opcode &opcode = m_opaque_sp->GetOpcode(); 14023b8abbe214c252028f6e09f79169529c846409dGreg Clayton const void *opcode_data = opcode.GetOpcodeBytes(); 14123b8abbe214c252028f6e09f79169529c846409dGreg Clayton const uint32_t opcode_data_size = opcode.GetByteSize(); 14223b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (opcode_data && opcode_data_size > 0) 14323b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 14423b8abbe214c252028f6e09f79169529c846409dGreg Clayton ByteOrder data_byte_order = opcode.GetDataByteOrder(); 14523b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (data_byte_order == eByteOrderInvalid) 14623b8abbe214c252028f6e09f79169529c846409dGreg Clayton data_byte_order = target->GetArchitecture().GetByteOrder(); 14723b8abbe214c252028f6e09f79169529c846409dGreg Clayton DataBufferSP data_buffer_sp (new DataBufferHeap (opcode_data, opcode_data_size)); 14823b8abbe214c252028f6e09f79169529c846409dGreg Clayton DataExtractorSP data_extractor_sp (new DataExtractor (data_buffer_sp, 14923b8abbe214c252028f6e09f79169529c846409dGreg Clayton data_byte_order, 15023b8abbe214c252028f6e09f79169529c846409dGreg Clayton target.IsValid() ? target->GetArchitecture().GetAddressByteSize() : sizeof(void*))); 15123b8abbe214c252028f6e09f79169529c846409dGreg Clayton sb_data.SetOpaque (data_extractor_sp); 15223b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 15323b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 15423b8abbe214c252028f6e09f79169529c846409dGreg Clayton return sb_data; 15523b8abbe214c252028f6e09f79169529c846409dGreg Clayton} 15623b8abbe214c252028f6e09f79169529c846409dGreg Clayton 15723b8abbe214c252028f6e09f79169529c846409dGreg Clayton 15823b8abbe214c252028f6e09f79169529c846409dGreg Clayton 1595c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonbool 1605c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::DoesBranch () 1615c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 1625c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp) 1635c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return m_opaque_sp->DoesBranch (); 1645c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return false; 1655c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1675c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonvoid 1685c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::SetOpaque (const lldb::InstructionSP &inst_sp) 1695c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 1705c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton m_opaque_sp = inst_sp; 1715c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1735c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonbool 1745c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::GetDescription (lldb::SBStream &s) 1755c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 1765c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp) 1775c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton { 1785c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton // Use the "ref()" instead of the "get()" accessor in case the SBStream 1795c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton // didn't have a stream already created, one will get created... 180889fbd0581c24523642e0a04d659cc8f3dcdb4edGreg Clayton m_opaque_sp->Dump (&s.ref(), 0, true, false, NULL, false); 1815c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return true; 1825c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton } 1835c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return false; 1845c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInstruction::Print (FILE *out) 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (out == NULL) 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return; 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1925c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp) 1935c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton { 1945892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton StreamFile out_stream (out, false); 195889fbd0581c24523642e0a04d659cc8f3dcdb4edGreg Clayton m_opaque_sp->Dump (&out_stream, 0, true, false, NULL, false); 1965c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton } 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 198af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 199af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Ticebool 200888a7334344778d1a4edbd58b5852ae4d53ffed9Greg ClaytonSBInstruction::EmulateWithFrame (lldb::SBFrame &frame, uint32_t evaluate_options) 201af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice{ 202af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice if (m_opaque_sp && frame.get()) 203af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice { 204af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice lldb_private::ExecutionContext exe_ctx; 205af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice frame->CalculateExecutionContext (exe_ctx); 206567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton lldb_private::Target *target = exe_ctx.GetTargetPtr(); 207af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice lldb_private::ArchSpec arch = target->GetArchitecture(); 208af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 209af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice return m_opaque_sp->Emulate (arch, 210888a7334344778d1a4edbd58b5852ae4d53ffed9Greg Clayton evaluate_options, 211af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice (void *) frame.get(), 212af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice &lldb_private::EmulateInstruction::ReadMemoryFrame, 213af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice &lldb_private::EmulateInstruction::WriteMemoryFrame, 214af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice &lldb_private::EmulateInstruction::ReadRegisterFrame, 215af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice &lldb_private::EmulateInstruction::WriteRegisterFrame); 216af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice } 217af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice return false; 218af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice} 219af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 220af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Ticebool 221af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline TiceSBInstruction::DumpEmulation (const char *triple) 222af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice{ 223af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice if (m_opaque_sp && triple) 224af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice { 225f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton lldb_private::ArchSpec arch (triple, NULL); 226af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 2270fe5a535b87841a5c422f4a79d55c21bf07b50caCaroline Tice return m_opaque_sp->DumpEmulation (arch); 2280fe5a535b87841a5c422f4a79d55c21bf07b50caCaroline Tice 229af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice } 230af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice return false; 231af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice} 232af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 2336b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Ticebool 2346b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline TiceSBInstruction::TestEmulation (lldb::SBStream &output_stream, const char *test_file) 2356b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Tice{ 2366b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Tice if (!m_opaque_sp.get()) 2376b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Tice m_opaque_sp.reset (new PseudoInstruction()); 2386b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Tice 23909008d035b798ccae9fc5208567aaf4a01a28b23Johnny Chen return m_opaque_sp->TestEmulation (output_stream.get(), test_file); 24009008d035b798ccae9fc5208567aaf4a01a28b23Johnny Chen} 241