130fdc8d8SChris Lattner //===-- SBModule.cpp --------------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 1030fdc8d8SChris Lattner #include "lldb/API/SBModule.h" 1109960031SGreg Clayton #include "lldb/API/SBAddress.h" 1209960031SGreg Clayton #include "lldb/API/SBFileSpec.h" 1330fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h" 14*dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 1530fdc8d8SChris Lattner #include "lldb/Core/Module.h" 1630fdc8d8SChris Lattner 1730fdc8d8SChris Lattner using namespace lldb; 1830fdc8d8SChris Lattner 1930fdc8d8SChris Lattner 2030fdc8d8SChris Lattner SBModule::SBModule () : 216611103cSGreg Clayton m_opaque_sp () 2230fdc8d8SChris Lattner { 2330fdc8d8SChris Lattner } 2430fdc8d8SChris Lattner 2530fdc8d8SChris Lattner SBModule::SBModule (const lldb::ModuleSP& module_sp) : 266611103cSGreg Clayton m_opaque_sp (module_sp) 2730fdc8d8SChris Lattner { 2830fdc8d8SChris Lattner } 2930fdc8d8SChris Lattner 3030fdc8d8SChris Lattner SBModule::~SBModule () 3130fdc8d8SChris Lattner { 3230fdc8d8SChris Lattner } 3330fdc8d8SChris Lattner 3430fdc8d8SChris Lattner bool 3530fdc8d8SChris Lattner SBModule::IsValid () const 3630fdc8d8SChris Lattner { 376611103cSGreg Clayton return m_opaque_sp.get() != NULL; 3830fdc8d8SChris Lattner } 3930fdc8d8SChris Lattner 4030fdc8d8SChris Lattner SBFileSpec 4130fdc8d8SChris Lattner SBModule::GetFileSpec () const 4230fdc8d8SChris Lattner { 4330fdc8d8SChris Lattner SBFileSpec file_spec; 446611103cSGreg Clayton if (m_opaque_sp) 456611103cSGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetFileSpec()); 4630fdc8d8SChris Lattner return file_spec; 4730fdc8d8SChris Lattner } 4830fdc8d8SChris Lattner 4930fdc8d8SChris Lattner const uint8_t * 5030fdc8d8SChris Lattner SBModule::GetUUIDBytes () const 5130fdc8d8SChris Lattner { 526611103cSGreg Clayton if (m_opaque_sp) 536611103cSGreg Clayton return (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 5430fdc8d8SChris Lattner return NULL; 5530fdc8d8SChris Lattner } 5630fdc8d8SChris Lattner 5730fdc8d8SChris Lattner 5830fdc8d8SChris Lattner bool 5930fdc8d8SChris Lattner SBModule::operator == (const SBModule &rhs) const 6030fdc8d8SChris Lattner { 616611103cSGreg Clayton if (m_opaque_sp) 626611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 6330fdc8d8SChris Lattner return false; 6430fdc8d8SChris Lattner } 6530fdc8d8SChris Lattner 6630fdc8d8SChris Lattner bool 6730fdc8d8SChris Lattner SBModule::operator != (const SBModule &rhs) const 6830fdc8d8SChris Lattner { 696611103cSGreg Clayton if (m_opaque_sp) 706611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 7130fdc8d8SChris Lattner return false; 7230fdc8d8SChris Lattner } 7330fdc8d8SChris Lattner 7430fdc8d8SChris Lattner lldb::ModuleSP & 7530fdc8d8SChris Lattner SBModule::operator *() 7630fdc8d8SChris Lattner { 776611103cSGreg Clayton return m_opaque_sp; 7830fdc8d8SChris Lattner } 7930fdc8d8SChris Lattner 8030fdc8d8SChris Lattner lldb_private::Module * 8130fdc8d8SChris Lattner SBModule::operator ->() 8230fdc8d8SChris Lattner { 836611103cSGreg Clayton return m_opaque_sp.get(); 8430fdc8d8SChris Lattner } 8530fdc8d8SChris Lattner 8630fdc8d8SChris Lattner const lldb_private::Module * 8730fdc8d8SChris Lattner SBModule::operator ->() const 8830fdc8d8SChris Lattner { 896611103cSGreg Clayton return m_opaque_sp.get(); 9030fdc8d8SChris Lattner } 9130fdc8d8SChris Lattner 9230fdc8d8SChris Lattner lldb_private::Module * 9330fdc8d8SChris Lattner SBModule::get() 9430fdc8d8SChris Lattner { 956611103cSGreg Clayton return m_opaque_sp.get(); 9630fdc8d8SChris Lattner } 9730fdc8d8SChris Lattner 9830fdc8d8SChris Lattner const lldb_private::Module * 9930fdc8d8SChris Lattner SBModule::get() const 10030fdc8d8SChris Lattner { 1016611103cSGreg Clayton return m_opaque_sp.get(); 10230fdc8d8SChris Lattner } 10330fdc8d8SChris Lattner 10430fdc8d8SChris Lattner 10530fdc8d8SChris Lattner void 10630fdc8d8SChris Lattner SBModule::SetModule (const lldb::ModuleSP& module_sp) 10730fdc8d8SChris Lattner { 1086611103cSGreg Clayton m_opaque_sp = module_sp; 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11109960031SGreg Clayton 11209960031SGreg Clayton bool 11309960031SGreg Clayton SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr) 11409960031SGreg Clayton { 11509960031SGreg Clayton if (m_opaque_sp) 11609960031SGreg Clayton return m_opaque_sp->ResolveFileAddress (vm_addr, *addr); 11709960031SGreg Clayton 11809960031SGreg Clayton addr->Clear(); 11909960031SGreg Clayton return false; 12009960031SGreg Clayton } 12109960031SGreg Clayton 12209960031SGreg Clayton SBSymbolContext 12309960031SGreg Clayton SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 12409960031SGreg Clayton { 12509960031SGreg Clayton SBSymbolContext sb_sc; 12609960031SGreg Clayton if (m_opaque_sp && addr.IsValid()) 12709960031SGreg Clayton m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc); 12809960031SGreg Clayton return sb_sc; 12909960031SGreg Clayton } 13009960031SGreg Clayton 131*dde9cff3SCaroline Tice bool 132*dde9cff3SCaroline Tice SBModule::GetDescription (SBStream &description) 133*dde9cff3SCaroline Tice { 134*dde9cff3SCaroline Tice if (m_opaque_sp) 135*dde9cff3SCaroline Tice { 136*dde9cff3SCaroline Tice m_opaque_sp->Dump (description.get()); 137*dde9cff3SCaroline Tice } 138*dde9cff3SCaroline Tice else 139*dde9cff3SCaroline Tice description.Printf ("No value"); 140*dde9cff3SCaroline Tice 141*dde9cff3SCaroline Tice return true; 142*dde9cff3SCaroline Tice } 143*dde9cff3SCaroline Tice 144*dde9cff3SCaroline Tice PyObject * 145*dde9cff3SCaroline Tice SBModule::__repr__ () 146*dde9cff3SCaroline Tice { 147*dde9cff3SCaroline Tice SBStream description; 148*dde9cff3SCaroline Tice description.ref(); 149*dde9cff3SCaroline Tice GetDescription (description); 150*dde9cff3SCaroline Tice return PyString_FromString (description.GetData()); 151*dde9cff3SCaroline Tice } 152