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" 14dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 1530fdc8d8SChris Lattner #include "lldb/Core/Module.h" 16ceb6b139SCaroline Tice #include "lldb/Core/Log.h" 17ceb6b139SCaroline Tice #include "lldb/Core/STreamString.h" 1830fdc8d8SChris Lattner 1930fdc8d8SChris Lattner using namespace lldb; 20ceb6b139SCaroline Tice using namespace lldb_private; 2130fdc8d8SChris Lattner 2230fdc8d8SChris Lattner 2330fdc8d8SChris Lattner SBModule::SBModule () : 246611103cSGreg Clayton m_opaque_sp () 2530fdc8d8SChris Lattner { 2630fdc8d8SChris Lattner } 2730fdc8d8SChris Lattner 2830fdc8d8SChris Lattner SBModule::SBModule (const lldb::ModuleSP& module_sp) : 296611103cSGreg Clayton m_opaque_sp (module_sp) 3030fdc8d8SChris Lattner { 3130fdc8d8SChris Lattner } 3230fdc8d8SChris Lattner 3330fdc8d8SChris Lattner SBModule::~SBModule () 3430fdc8d8SChris Lattner { 3530fdc8d8SChris Lattner } 3630fdc8d8SChris Lattner 3730fdc8d8SChris Lattner bool 3830fdc8d8SChris Lattner SBModule::IsValid () const 3930fdc8d8SChris Lattner { 406611103cSGreg Clayton return m_opaque_sp.get() != NULL; 4130fdc8d8SChris Lattner } 4230fdc8d8SChris Lattner 4330fdc8d8SChris Lattner SBFileSpec 4430fdc8d8SChris Lattner SBModule::GetFileSpec () const 4530fdc8d8SChris Lattner { 46ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 47ceb6b139SCaroline Tice 4830fdc8d8SChris Lattner SBFileSpec file_spec; 496611103cSGreg Clayton if (m_opaque_sp) 506611103cSGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetFileSpec()); 51ceb6b139SCaroline Tice 52ceb6b139SCaroline Tice if (log) 53ceb6b139SCaroline Tice { 54*cfd1acedSGreg Clayton log->Printf ("SBModule(%p)::GetFileSpec () => SBFileSpec(%p)", 55*cfd1acedSGreg Clayton m_opaque_sp.get(), file_spec.get()); 56ceb6b139SCaroline Tice } 57ceb6b139SCaroline Tice 5830fdc8d8SChris Lattner return file_spec; 5930fdc8d8SChris Lattner } 6030fdc8d8SChris Lattner 6130fdc8d8SChris Lattner const uint8_t * 6230fdc8d8SChris Lattner SBModule::GetUUIDBytes () const 6330fdc8d8SChris Lattner { 64ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 65ceb6b139SCaroline Tice 664838131bSGreg Clayton const uint8_t *uuid_bytes = NULL; 676611103cSGreg Clayton if (m_opaque_sp) 684838131bSGreg Clayton uuid_bytes = (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 69ceb6b139SCaroline Tice 70ceb6b139SCaroline Tice if (log) 714838131bSGreg Clayton { 724838131bSGreg Clayton if (uuid_bytes) 734838131bSGreg Clayton { 744838131bSGreg Clayton StreamString s; 754838131bSGreg Clayton m_opaque_sp->GetUUID().Dump (&s); 764838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => %s", m_opaque_sp.get(), s.GetData()); 774838131bSGreg Clayton } 784838131bSGreg Clayton else 794838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => NULL", m_opaque_sp.get()); 804838131bSGreg Clayton } 814838131bSGreg Clayton return uuid_bytes; 8230fdc8d8SChris Lattner } 8330fdc8d8SChris Lattner 8430fdc8d8SChris Lattner 8530fdc8d8SChris Lattner bool 8630fdc8d8SChris Lattner SBModule::operator == (const SBModule &rhs) const 8730fdc8d8SChris Lattner { 886611103cSGreg Clayton if (m_opaque_sp) 896611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 9030fdc8d8SChris Lattner return false; 9130fdc8d8SChris Lattner } 9230fdc8d8SChris Lattner 9330fdc8d8SChris Lattner bool 9430fdc8d8SChris Lattner SBModule::operator != (const SBModule &rhs) const 9530fdc8d8SChris Lattner { 966611103cSGreg Clayton if (m_opaque_sp) 976611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 9830fdc8d8SChris Lattner return false; 9930fdc8d8SChris Lattner } 10030fdc8d8SChris Lattner 10130fdc8d8SChris Lattner lldb::ModuleSP & 10230fdc8d8SChris Lattner SBModule::operator *() 10330fdc8d8SChris Lattner { 1046611103cSGreg Clayton return m_opaque_sp; 10530fdc8d8SChris Lattner } 10630fdc8d8SChris Lattner 10730fdc8d8SChris Lattner lldb_private::Module * 10830fdc8d8SChris Lattner SBModule::operator ->() 10930fdc8d8SChris Lattner { 1106611103cSGreg Clayton return m_opaque_sp.get(); 11130fdc8d8SChris Lattner } 11230fdc8d8SChris Lattner 11330fdc8d8SChris Lattner const lldb_private::Module * 11430fdc8d8SChris Lattner SBModule::operator ->() const 11530fdc8d8SChris Lattner { 1166611103cSGreg Clayton return m_opaque_sp.get(); 11730fdc8d8SChris Lattner } 11830fdc8d8SChris Lattner 11930fdc8d8SChris Lattner lldb_private::Module * 12030fdc8d8SChris Lattner SBModule::get() 12130fdc8d8SChris Lattner { 1226611103cSGreg Clayton return m_opaque_sp.get(); 12330fdc8d8SChris Lattner } 12430fdc8d8SChris Lattner 12530fdc8d8SChris Lattner const lldb_private::Module * 12630fdc8d8SChris Lattner SBModule::get() const 12730fdc8d8SChris Lattner { 1286611103cSGreg Clayton return m_opaque_sp.get(); 12930fdc8d8SChris Lattner } 13030fdc8d8SChris Lattner 13130fdc8d8SChris Lattner 13230fdc8d8SChris Lattner void 13330fdc8d8SChris Lattner SBModule::SetModule (const lldb::ModuleSP& module_sp) 13430fdc8d8SChris Lattner { 1356611103cSGreg Clayton m_opaque_sp = module_sp; 13630fdc8d8SChris Lattner } 13730fdc8d8SChris Lattner 13809960031SGreg Clayton 13909960031SGreg Clayton bool 14009960031SGreg Clayton SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr) 14109960031SGreg Clayton { 14209960031SGreg Clayton if (m_opaque_sp) 14309960031SGreg Clayton return m_opaque_sp->ResolveFileAddress (vm_addr, *addr); 14409960031SGreg Clayton 14509960031SGreg Clayton addr->Clear(); 14609960031SGreg Clayton return false; 14709960031SGreg Clayton } 14809960031SGreg Clayton 14909960031SGreg Clayton SBSymbolContext 15009960031SGreg Clayton SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 15109960031SGreg Clayton { 15209960031SGreg Clayton SBSymbolContext sb_sc; 15309960031SGreg Clayton if (m_opaque_sp && addr.IsValid()) 15409960031SGreg Clayton m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc); 15509960031SGreg Clayton return sb_sc; 15609960031SGreg Clayton } 15709960031SGreg Clayton 158dde9cff3SCaroline Tice bool 159dde9cff3SCaroline Tice SBModule::GetDescription (SBStream &description) 160dde9cff3SCaroline Tice { 161dde9cff3SCaroline Tice if (m_opaque_sp) 162dde9cff3SCaroline Tice { 163dac97f31SCaroline Tice description.ref(); 164ceb6b139SCaroline Tice m_opaque_sp->GetDescription (description.get()); 165dde9cff3SCaroline Tice } 166dde9cff3SCaroline Tice else 167dde9cff3SCaroline Tice description.Printf ("No value"); 168dde9cff3SCaroline Tice 169dde9cff3SCaroline Tice return true; 170dde9cff3SCaroline Tice } 171