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