SBInstruction.cpp revision 149731c0b267e5b6cd7192cbfac0c7f457ae5cfc
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"
135c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton#include "lldb/API/SBInstruction.h"
145c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton#include "lldb/API/SBStream.h"
155c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Disassembler.h"
175c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton#include "lldb/Core/StreamFile.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInstruction::SBInstruction ()
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
265c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::SBInstruction (const lldb::InstructionSP& inst_sp) :
275c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    m_opaque_sp (inst_sp)
285c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{
295c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton}
305c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton
31538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBInstruction::SBInstruction(const SBInstruction &rhs) :
32538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    m_opaque_sp (rhs.m_opaque_sp)
33538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{
34538eb82a89a68dbc57251915080bd5152b333978Greg Clayton}
35538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
36538eb82a89a68dbc57251915080bd5152b333978Greg Claytonconst SBInstruction &
37538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBInstruction::operator = (const SBInstruction &rhs)
38538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{
39538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    if (this != &rhs)
40538eb82a89a68dbc57251915080bd5152b333978Greg Clayton        m_opaque_sp = rhs.m_opaque_sp;
41538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    return *this;
42538eb82a89a68dbc57251915080bd5152b333978Greg Clayton}
43538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInstruction::~SBInstruction ()
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
485c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonbool
495c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::IsValid()
505c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{
515c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    return (m_opaque_sp.get() != NULL);
525c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton}
535c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton
545c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBAddress
555c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::GetAddress()
565c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{
575c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    SBAddress sb_addr;
585c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    if (m_opaque_sp && m_opaque_sp->GetAddress().IsValid())
595c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        sb_addr.SetAddress(&m_opaque_sp->GetAddress());
605c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    return sb_addr;
615c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton}
625c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton
635c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonsize_t
645c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::GetByteSize ()
655c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{
665c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    if (m_opaque_sp)
67149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton        return m_opaque_sp->GetOpcode().GetByteSize();
685c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    return 0;
695c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton}
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
715c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonbool
725c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::DoesBranch ()
735c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{
745c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    if (m_opaque_sp)
755c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        return m_opaque_sp->DoesBranch ();
765c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    return false;
775c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton}
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
795c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonvoid
805c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::SetOpaque (const lldb::InstructionSP &inst_sp)
815c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{
825c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    m_opaque_sp = inst_sp;
835c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton}
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
855c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Claytonbool
865c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg ClaytonSBInstruction::GetDescription (lldb::SBStream &s)
875c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton{
885c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    if (m_opaque_sp)
895c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    {
905c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        // Use the "ref()" instead of the "get()" accessor in case the SBStream
915c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        // didn't have a stream already created, one will get created...
92149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton        m_opaque_sp->Dump (&s.ref(), true, false, NULL, false);
935c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        return true;
945c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    }
955c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    return false;
965c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton}
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBInstruction::Print (FILE *out)
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (out == NULL)
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return;
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1045c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    if (m_opaque_sp)
1055c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    {
1065892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton        StreamFile out_stream (out, false);
107149731c0b267e5b6cd7192cbfac0c7f457ae5cfcGreg Clayton        m_opaque_sp->Dump (&out_stream, true, false, NULL, false);
1085c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    }
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
110