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