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 { 31*750cd175SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 32ceb6b139SCaroline Tice 33ceb6b139SCaroline Tice if (log) 34*750cd175SCaroline Tice log->Printf ("SBModule::SBModule (module_sp=%p) => this.sp = %p", module_sp.get(), m_opaque_sp.get()); 3530fdc8d8SChris Lattner } 3630fdc8d8SChris Lattner 3730fdc8d8SChris Lattner SBModule::~SBModule () 3830fdc8d8SChris Lattner { 3930fdc8d8SChris Lattner } 4030fdc8d8SChris Lattner 4130fdc8d8SChris Lattner bool 4230fdc8d8SChris Lattner SBModule::IsValid () const 4330fdc8d8SChris Lattner { 446611103cSGreg Clayton return m_opaque_sp.get() != NULL; 4530fdc8d8SChris Lattner } 4630fdc8d8SChris Lattner 4730fdc8d8SChris Lattner SBFileSpec 4830fdc8d8SChris Lattner SBModule::GetFileSpec () const 4930fdc8d8SChris Lattner { 50ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 51ceb6b139SCaroline Tice 52*750cd175SCaroline Tice //if (log) 53*750cd175SCaroline Tice // log->Printf ("SBModule::GetFileSpec ()"); 54ceb6b139SCaroline Tice 5530fdc8d8SChris Lattner SBFileSpec file_spec; 566611103cSGreg Clayton if (m_opaque_sp) 576611103cSGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetFileSpec()); 58ceb6b139SCaroline Tice 59ceb6b139SCaroline Tice if (log) 60ceb6b139SCaroline Tice { 61ceb6b139SCaroline Tice SBStream sstr; 62ceb6b139SCaroline Tice file_spec.GetDescription (sstr); 63*750cd175SCaroline Tice log->Printf ("SBModule::GetFileSpec (this.sp=%p) => SBFileSpec : this.ap = %p, 's'", m_opaque_sp.get(), 64*750cd175SCaroline Tice file_spec.get(), sstr.GetData()); 65ceb6b139SCaroline Tice } 66ceb6b139SCaroline Tice 6730fdc8d8SChris Lattner return file_spec; 6830fdc8d8SChris Lattner } 6930fdc8d8SChris Lattner 7030fdc8d8SChris Lattner const uint8_t * 7130fdc8d8SChris Lattner SBModule::GetUUIDBytes () const 7230fdc8d8SChris Lattner { 73ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 74ceb6b139SCaroline Tice 75*750cd175SCaroline Tice //if (log) 76*750cd175SCaroline Tice // log->Printf ("SBModule::GetUUIDBytes ()"); 77ceb6b139SCaroline Tice 786611103cSGreg Clayton if (m_opaque_sp) 79ceb6b139SCaroline Tice { 80ceb6b139SCaroline Tice if (log) 81ceb6b139SCaroline Tice { 82ceb6b139SCaroline Tice StreamString sstr; 83ceb6b139SCaroline Tice m_opaque_sp->GetUUID().Dump (&sstr); 84*750cd175SCaroline Tice log->Printf ("SBModule::GetUUIDBytes (this.sp=%p) => '%s'", m_opaque_sp.get(), sstr.GetData()); 85ceb6b139SCaroline Tice } 866611103cSGreg Clayton return (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 87ceb6b139SCaroline Tice } 88ceb6b139SCaroline Tice 89ceb6b139SCaroline Tice if (log) 90*750cd175SCaroline Tice log->Printf ("SBModule::GetUUIDBytes (this.sp=%p) => NULL", m_opaque_sp.get()); 9130fdc8d8SChris Lattner return NULL; 9230fdc8d8SChris Lattner } 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 bool 10430fdc8d8SChris Lattner SBModule::operator != (const SBModule &rhs) const 10530fdc8d8SChris Lattner { 1066611103cSGreg Clayton if (m_opaque_sp) 1076611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 10830fdc8d8SChris Lattner return false; 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11130fdc8d8SChris Lattner lldb::ModuleSP & 11230fdc8d8SChris Lattner SBModule::operator *() 11330fdc8d8SChris Lattner { 1146611103cSGreg Clayton return m_opaque_sp; 11530fdc8d8SChris Lattner } 11630fdc8d8SChris Lattner 11730fdc8d8SChris Lattner lldb_private::Module * 11830fdc8d8SChris Lattner SBModule::operator ->() 11930fdc8d8SChris Lattner { 1206611103cSGreg Clayton return m_opaque_sp.get(); 12130fdc8d8SChris Lattner } 12230fdc8d8SChris Lattner 12330fdc8d8SChris Lattner const lldb_private::Module * 12430fdc8d8SChris Lattner SBModule::operator ->() const 12530fdc8d8SChris Lattner { 1266611103cSGreg Clayton return m_opaque_sp.get(); 12730fdc8d8SChris Lattner } 12830fdc8d8SChris Lattner 12930fdc8d8SChris Lattner lldb_private::Module * 13030fdc8d8SChris Lattner SBModule::get() 13130fdc8d8SChris Lattner { 1326611103cSGreg Clayton return m_opaque_sp.get(); 13330fdc8d8SChris Lattner } 13430fdc8d8SChris Lattner 13530fdc8d8SChris Lattner const lldb_private::Module * 13630fdc8d8SChris Lattner SBModule::get() const 13730fdc8d8SChris Lattner { 1386611103cSGreg Clayton return m_opaque_sp.get(); 13930fdc8d8SChris Lattner } 14030fdc8d8SChris Lattner 14130fdc8d8SChris Lattner 14230fdc8d8SChris Lattner void 14330fdc8d8SChris Lattner SBModule::SetModule (const lldb::ModuleSP& module_sp) 14430fdc8d8SChris Lattner { 1456611103cSGreg Clayton m_opaque_sp = module_sp; 14630fdc8d8SChris Lattner } 14730fdc8d8SChris Lattner 14809960031SGreg Clayton 14909960031SGreg Clayton bool 15009960031SGreg Clayton SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr) 15109960031SGreg Clayton { 15209960031SGreg Clayton if (m_opaque_sp) 15309960031SGreg Clayton return m_opaque_sp->ResolveFileAddress (vm_addr, *addr); 15409960031SGreg Clayton 15509960031SGreg Clayton addr->Clear(); 15609960031SGreg Clayton return false; 15709960031SGreg Clayton } 15809960031SGreg Clayton 15909960031SGreg Clayton SBSymbolContext 16009960031SGreg Clayton SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 16109960031SGreg Clayton { 16209960031SGreg Clayton SBSymbolContext sb_sc; 16309960031SGreg Clayton if (m_opaque_sp && addr.IsValid()) 16409960031SGreg Clayton m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc); 16509960031SGreg Clayton return sb_sc; 16609960031SGreg Clayton } 16709960031SGreg Clayton 168dde9cff3SCaroline Tice bool 169dde9cff3SCaroline Tice SBModule::GetDescription (SBStream &description) 170dde9cff3SCaroline Tice { 171dde9cff3SCaroline Tice if (m_opaque_sp) 172dde9cff3SCaroline Tice { 173dac97f31SCaroline Tice description.ref(); 174ceb6b139SCaroline Tice m_opaque_sp->GetDescription (description.get()); 175dde9cff3SCaroline Tice } 176dde9cff3SCaroline Tice else 177dde9cff3SCaroline Tice description.Printf ("No value"); 178dde9cff3SCaroline Tice 179dde9cff3SCaroline Tice return true; 180dde9cff3SCaroline Tice } 181