SBInstruction.cpp revision 1b584ebc1de8b50fe375cffb5fb33ad13be10046
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 * 72d9b4425303fd48210ab104ca6573c869083a8480Greg ClaytonSBInstruction::GetMnemonic(SBTarget target) 7323b8abbe214c252028f6e09f79169529c846409dGreg Clayton{ 7423b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (m_opaque_sp) 7523b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 7623b8abbe214c252028f6e09f79169529c846409dGreg Clayton Mutex::Locker api_locker; 7723b8abbe214c252028f6e09f79169529c846409dGreg Clayton ExecutionContext exe_ctx; 78334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton TargetSP target_sp (target.GetSP()); 79334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton if (target_sp) 8023b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 811b584ebc1de8b50fe375cffb5fb33ad13be10046Jim Ingham api_locker.Lock (target_sp->GetAPIMutex()); 82334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton target_sp->CalculateExecutionContext (exe_ctx); 83334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton exe_ctx.SetProcessSP(target_sp->GetProcessSP()); 8423b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 85d9b4425303fd48210ab104ca6573c869083a8480Greg Clayton return m_opaque_sp->GetMnemonic(exe_ctx.GetBestExecutionContextScope()); 8623b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 8723b8abbe214c252028f6e09f79169529c846409dGreg Clayton return NULL; 8823b8abbe214c252028f6e09f79169529c846409dGreg Clayton} 8923b8abbe214c252028f6e09f79169529c846409dGreg Clayton 9023b8abbe214c252028f6e09f79169529c846409dGreg Claytonconst char * 91d9b4425303fd48210ab104ca6573c869083a8480Greg ClaytonSBInstruction::GetOperands(SBTarget target) 9223b8abbe214c252028f6e09f79169529c846409dGreg Clayton{ 9323b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (m_opaque_sp) 9423b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 9523b8abbe214c252028f6e09f79169529c846409dGreg Clayton Mutex::Locker api_locker; 9623b8abbe214c252028f6e09f79169529c846409dGreg Clayton ExecutionContext exe_ctx; 97334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton TargetSP target_sp (target.GetSP()); 98334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton if (target_sp) 9923b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 1001b584ebc1de8b50fe375cffb5fb33ad13be10046Jim Ingham api_locker.Lock (target_sp->GetAPIMutex()); 101334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton target_sp->CalculateExecutionContext (exe_ctx); 102334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton exe_ctx.SetProcessSP(target_sp->GetProcessSP()); 10323b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 104d9b4425303fd48210ab104ca6573c869083a8480Greg Clayton return m_opaque_sp->GetOperands(exe_ctx.GetBestExecutionContextScope()); 10523b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 10623b8abbe214c252028f6e09f79169529c846409dGreg Clayton return NULL; 10723b8abbe214c252028f6e09f79169529c846409dGreg Clayton} 10823b8abbe214c252028f6e09f79169529c846409dGreg Clayton 10923b8abbe214c252028f6e09f79169529c846409dGreg Claytonconst char * 11023b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBInstruction::GetComment(SBTarget target) 11123b8abbe214c252028f6e09f79169529c846409dGreg Clayton{ 11223b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (m_opaque_sp) 11323b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 11423b8abbe214c252028f6e09f79169529c846409dGreg Clayton Mutex::Locker api_locker; 11523b8abbe214c252028f6e09f79169529c846409dGreg Clayton ExecutionContext exe_ctx; 116334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton TargetSP target_sp (target.GetSP()); 117334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton if (target_sp) 11823b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 1191b584ebc1de8b50fe375cffb5fb33ad13be10046Jim Ingham api_locker.Lock (target_sp->GetAPIMutex()); 120334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton target_sp->CalculateExecutionContext (exe_ctx); 121334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton exe_ctx.SetProcessSP(target_sp->GetProcessSP()); 12223b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 12323b8abbe214c252028f6e09f79169529c846409dGreg Clayton return m_opaque_sp->GetComment(exe_ctx.GetBestExecutionContextScope()); 12423b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 12523b8abbe214c252028f6e09f79169529c846409dGreg Clayton return NULL; 12623b8abbe214c252028f6e09f79169529c846409dGreg Clayton} 12723b8abbe214c252028f6e09f79169529c846409dGreg Clayton 1285c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonsize_t 1295c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::GetByteSize () 1305c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 1315c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp) 132149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton return m_opaque_sp->GetOpcode().GetByteSize(); 1335c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return 0; 1345c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13623b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBData 13723b8abbe214c252028f6e09f79169529c846409dGreg ClaytonSBInstruction::GetData (SBTarget target) 13823b8abbe214c252028f6e09f79169529c846409dGreg Clayton{ 13923b8abbe214c252028f6e09f79169529c846409dGreg Clayton lldb::SBData sb_data; 14023b8abbe214c252028f6e09f79169529c846409dGreg Clayton if (m_opaque_sp) 14123b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 14250561699a9a14c716d1099ae1d38be2f31534b67Greg Clayton DataExtractorSP data_extractor_sp (new DataExtractor()); 14350561699a9a14c716d1099ae1d38be2f31534b67Greg Clayton if (m_opaque_sp->GetOpcode().GetData (*data_extractor_sp)) 14423b8abbe214c252028f6e09f79169529c846409dGreg Clayton { 14523b8abbe214c252028f6e09f79169529c846409dGreg Clayton sb_data.SetOpaque (data_extractor_sp); 14623b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 14723b8abbe214c252028f6e09f79169529c846409dGreg Clayton } 14823b8abbe214c252028f6e09f79169529c846409dGreg Clayton return sb_data; 14923b8abbe214c252028f6e09f79169529c846409dGreg Clayton} 15023b8abbe214c252028f6e09f79169529c846409dGreg Clayton 15123b8abbe214c252028f6e09f79169529c846409dGreg Clayton 15223b8abbe214c252028f6e09f79169529c846409dGreg Clayton 1535c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonbool 1545c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::DoesBranch () 1555c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 1565c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp) 1575c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return m_opaque_sp->DoesBranch (); 1585c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return false; 1595c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1615c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonvoid 1625c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::SetOpaque (const lldb::InstructionSP &inst_sp) 1635c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 1645c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton m_opaque_sp = inst_sp; 1655c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1675c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonbool 1685c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::GetDescription (lldb::SBStream &s) 1695c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{ 1705c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp) 1715c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton { 1725c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton // Use the "ref()" instead of the "get()" accessor in case the SBStream 1735c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton // didn't have a stream already created, one will get created... 174889fbd0581c24523642e0a04d659cc8f3dcdb4edGreg Clayton m_opaque_sp->Dump (&s.ref(), 0, true, false, NULL, false); 1755c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return true; 1765c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton } 1775c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton return false; 1785c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton} 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInstruction::Print (FILE *out) 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (out == NULL) 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return; 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1865c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton if (m_opaque_sp) 1875c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton { 1885892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton StreamFile out_stream (out, false); 189889fbd0581c24523642e0a04d659cc8f3dcdb4edGreg Clayton m_opaque_sp->Dump (&out_stream, 0, true, false, NULL, false); 1905c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton } 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 192af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 193af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Ticebool 194888a7334344778d1a4edbd58b5852ae4d53ffed9Greg ClaytonSBInstruction::EmulateWithFrame (lldb::SBFrame &frame, uint32_t evaluate_options) 195af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice{ 196334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton if (m_opaque_sp) 197af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice { 198334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton lldb::StackFrameSP frame_sp (frame.GetFrameSP()); 199334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton 200334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton if (frame_sp) 201334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton { 202334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton lldb_private::ExecutionContext exe_ctx; 203334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton frame_sp->CalculateExecutionContext (exe_ctx); 204334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton lldb_private::Target *target = exe_ctx.GetTargetPtr(); 205334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton lldb_private::ArchSpec arch = target->GetArchitecture(); 206334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton 207334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton return m_opaque_sp->Emulate (arch, 208334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton evaluate_options, 209334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton (void *) frame_sp.get(), 210334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton &lldb_private::EmulateInstruction::ReadMemoryFrame, 211334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton &lldb_private::EmulateInstruction::WriteMemoryFrame, 212334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton &lldb_private::EmulateInstruction::ReadRegisterFrame, 213334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton &lldb_private::EmulateInstruction::WriteRegisterFrame); 214334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton } 215af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice } 216af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice return false; 217af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice} 218af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 219af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Ticebool 220af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline TiceSBInstruction::DumpEmulation (const char *triple) 221af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice{ 222af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice if (m_opaque_sp && triple) 223af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice { 224f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton lldb_private::ArchSpec arch (triple, NULL); 225af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 2260fe5a535b87841a5c422f4a79d55c21bf07b50caCaroline Tice return m_opaque_sp->DumpEmulation (arch); 2270fe5a535b87841a5c422f4a79d55c21bf07b50caCaroline Tice 228af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice } 229af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice return false; 230af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice} 231af59180d46b42665dba3ea581fc501bb9fcb1fb7Caroline Tice 2326b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Ticebool 2336b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline TiceSBInstruction::TestEmulation (lldb::SBStream &output_stream, const char *test_file) 2346b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Tice{ 2356b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Tice if (!m_opaque_sp.get()) 2366b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Tice m_opaque_sp.reset (new PseudoInstruction()); 2376b8d3b5e7f0507aca2ee1c0937d7ec80fa2a9c5bCaroline Tice 23809008d035b798ccae9fc5208567aaf4a01a28b23Johnny Chen return m_opaque_sp->TestEmulation (output_stream.get(), test_file); 23909008d035b798ccae9fc5208567aaf4a01a28b23Johnny Chen} 2407fb143064009e34dbb7a602924e9807375f72a46Greg Clayton 2417fb143064009e34dbb7a602924e9807375f72a46Greg Claytonlldb::AddressClass 2427fb143064009e34dbb7a602924e9807375f72a46Greg ClaytonSBInstruction::GetAddressClass () 2437fb143064009e34dbb7a602924e9807375f72a46Greg Clayton{ 2447fb143064009e34dbb7a602924e9807375f72a46Greg Clayton if (m_opaque_sp.get()) 2457fb143064009e34dbb7a602924e9807375f72a46Greg Clayton return m_opaque_sp->GetAddressClass(); 2467fb143064009e34dbb7a602924e9807375f72a46Greg Clayton return eAddressClassInvalid; 2477fb143064009e34dbb7a602924e9807375f72a46Greg Clayton} 248