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 { 54ceb6b139SCaroline Tice SBStream sstr; 55ceb6b139SCaroline Tice file_spec.GetDescription (sstr); 56*4838131bSGreg Clayton log->Printf ("SBModule(%p)::GetFileSpec () => SBFileSpec(%p): %s", m_opaque_sp.get(), 57750cd175SCaroline Tice file_spec.get(), sstr.GetData()); 58ceb6b139SCaroline Tice } 59ceb6b139SCaroline Tice 6030fdc8d8SChris Lattner return file_spec; 6130fdc8d8SChris Lattner } 6230fdc8d8SChris Lattner 6330fdc8d8SChris Lattner const uint8_t * 6430fdc8d8SChris Lattner SBModule::GetUUIDBytes () const 6530fdc8d8SChris Lattner { 66ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 67ceb6b139SCaroline Tice 68*4838131bSGreg Clayton const uint8_t *uuid_bytes = NULL; 696611103cSGreg Clayton if (m_opaque_sp) 70*4838131bSGreg Clayton uuid_bytes = (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 71ceb6b139SCaroline Tice 72ceb6b139SCaroline Tice if (log) 73*4838131bSGreg Clayton { 74*4838131bSGreg Clayton if (uuid_bytes) 75*4838131bSGreg Clayton { 76*4838131bSGreg Clayton StreamString s; 77*4838131bSGreg Clayton m_opaque_sp->GetUUID().Dump (&s); 78*4838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => %s", m_opaque_sp.get(), s.GetData()); 79*4838131bSGreg Clayton } 80*4838131bSGreg Clayton else 81*4838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => NULL", m_opaque_sp.get()); 82*4838131bSGreg Clayton } 83*4838131bSGreg Clayton return uuid_bytes; 8430fdc8d8SChris Lattner } 8530fdc8d8SChris Lattner 8630fdc8d8SChris Lattner 8730fdc8d8SChris Lattner bool 8830fdc8d8SChris Lattner SBModule::operator == (const SBModule &rhs) const 8930fdc8d8SChris Lattner { 906611103cSGreg Clayton if (m_opaque_sp) 916611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 9230fdc8d8SChris Lattner return false; 9330fdc8d8SChris Lattner } 9430fdc8d8SChris Lattner 9530fdc8d8SChris Lattner bool 9630fdc8d8SChris Lattner SBModule::operator != (const SBModule &rhs) const 9730fdc8d8SChris Lattner { 986611103cSGreg Clayton if (m_opaque_sp) 996611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 10030fdc8d8SChris Lattner return false; 10130fdc8d8SChris Lattner } 10230fdc8d8SChris Lattner 10330fdc8d8SChris Lattner lldb::ModuleSP & 10430fdc8d8SChris Lattner SBModule::operator *() 10530fdc8d8SChris Lattner { 1066611103cSGreg Clayton return m_opaque_sp; 10730fdc8d8SChris Lattner } 10830fdc8d8SChris Lattner 10930fdc8d8SChris Lattner lldb_private::Module * 11030fdc8d8SChris Lattner SBModule::operator ->() 11130fdc8d8SChris Lattner { 1126611103cSGreg Clayton return m_opaque_sp.get(); 11330fdc8d8SChris Lattner } 11430fdc8d8SChris Lattner 11530fdc8d8SChris Lattner const lldb_private::Module * 11630fdc8d8SChris Lattner SBModule::operator ->() const 11730fdc8d8SChris Lattner { 1186611103cSGreg Clayton return m_opaque_sp.get(); 11930fdc8d8SChris Lattner } 12030fdc8d8SChris Lattner 12130fdc8d8SChris Lattner lldb_private::Module * 12230fdc8d8SChris Lattner SBModule::get() 12330fdc8d8SChris Lattner { 1246611103cSGreg Clayton return m_opaque_sp.get(); 12530fdc8d8SChris Lattner } 12630fdc8d8SChris Lattner 12730fdc8d8SChris Lattner const lldb_private::Module * 12830fdc8d8SChris Lattner SBModule::get() const 12930fdc8d8SChris Lattner { 1306611103cSGreg Clayton return m_opaque_sp.get(); 13130fdc8d8SChris Lattner } 13230fdc8d8SChris Lattner 13330fdc8d8SChris Lattner 13430fdc8d8SChris Lattner void 13530fdc8d8SChris Lattner SBModule::SetModule (const lldb::ModuleSP& module_sp) 13630fdc8d8SChris Lattner { 1376611103cSGreg Clayton m_opaque_sp = module_sp; 13830fdc8d8SChris Lattner } 13930fdc8d8SChris Lattner 14009960031SGreg Clayton 14109960031SGreg Clayton bool 14209960031SGreg Clayton SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr) 14309960031SGreg Clayton { 14409960031SGreg Clayton if (m_opaque_sp) 14509960031SGreg Clayton return m_opaque_sp->ResolveFileAddress (vm_addr, *addr); 14609960031SGreg Clayton 14709960031SGreg Clayton addr->Clear(); 14809960031SGreg Clayton return false; 14909960031SGreg Clayton } 15009960031SGreg Clayton 15109960031SGreg Clayton SBSymbolContext 15209960031SGreg Clayton SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 15309960031SGreg Clayton { 15409960031SGreg Clayton SBSymbolContext sb_sc; 15509960031SGreg Clayton if (m_opaque_sp && addr.IsValid()) 15609960031SGreg Clayton m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc); 15709960031SGreg Clayton return sb_sc; 15809960031SGreg Clayton } 15909960031SGreg Clayton 160dde9cff3SCaroline Tice bool 161dde9cff3SCaroline Tice SBModule::GetDescription (SBStream &description) 162dde9cff3SCaroline Tice { 163dde9cff3SCaroline Tice if (m_opaque_sp) 164dde9cff3SCaroline Tice { 165dac97f31SCaroline Tice description.ref(); 166ceb6b139SCaroline Tice m_opaque_sp->GetDescription (description.get()); 167dde9cff3SCaroline Tice } 168dde9cff3SCaroline Tice else 169dde9cff3SCaroline Tice description.Printf ("No value"); 170dde9cff3SCaroline Tice 171dde9cff3SCaroline Tice return true; 172dde9cff3SCaroline Tice } 173