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" 1738adbbb8SGreg Clayton #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 33efabb123SGreg Clayton SBModule::SBModule(const SBModule &rhs) : 34efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 35efabb123SGreg Clayton { 36efabb123SGreg Clayton } 37efabb123SGreg Clayton 38efabb123SGreg Clayton const SBModule & 39efabb123SGreg Clayton SBModule::operator = (const SBModule &rhs) 40efabb123SGreg Clayton { 41efabb123SGreg Clayton if (this != &rhs) 42efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 43efabb123SGreg Clayton return *this; 44efabb123SGreg Clayton } 45efabb123SGreg Clayton 4630fdc8d8SChris Lattner SBModule::~SBModule () 4730fdc8d8SChris Lattner { 4830fdc8d8SChris Lattner } 4930fdc8d8SChris Lattner 5030fdc8d8SChris Lattner bool 5130fdc8d8SChris Lattner SBModule::IsValid () const 5230fdc8d8SChris Lattner { 536611103cSGreg Clayton return m_opaque_sp.get() != NULL; 5430fdc8d8SChris Lattner } 5530fdc8d8SChris Lattner 5630fdc8d8SChris Lattner SBFileSpec 5730fdc8d8SChris Lattner SBModule::GetFileSpec () const 5830fdc8d8SChris Lattner { 592d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 60ceb6b139SCaroline Tice 6130fdc8d8SChris Lattner SBFileSpec file_spec; 626611103cSGreg Clayton if (m_opaque_sp) 636611103cSGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetFileSpec()); 64ceb6b139SCaroline Tice 65ceb6b139SCaroline Tice if (log) 66ceb6b139SCaroline Tice { 67cfd1acedSGreg Clayton log->Printf ("SBModule(%p)::GetFileSpec () => SBFileSpec(%p)", 68cfd1acedSGreg Clayton m_opaque_sp.get(), file_spec.get()); 69ceb6b139SCaroline Tice } 70ceb6b139SCaroline Tice 7130fdc8d8SChris Lattner return file_spec; 7230fdc8d8SChris Lattner } 7330fdc8d8SChris Lattner 7430fdc8d8SChris Lattner const uint8_t * 7530fdc8d8SChris Lattner SBModule::GetUUIDBytes () const 7630fdc8d8SChris Lattner { 772d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 78ceb6b139SCaroline Tice 794838131bSGreg Clayton const uint8_t *uuid_bytes = NULL; 806611103cSGreg Clayton if (m_opaque_sp) 814838131bSGreg Clayton uuid_bytes = (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 82ceb6b139SCaroline Tice 83ceb6b139SCaroline Tice if (log) 844838131bSGreg Clayton { 854838131bSGreg Clayton if (uuid_bytes) 864838131bSGreg Clayton { 874838131bSGreg Clayton StreamString s; 884838131bSGreg Clayton m_opaque_sp->GetUUID().Dump (&s); 894838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => %s", m_opaque_sp.get(), s.GetData()); 904838131bSGreg Clayton } 914838131bSGreg Clayton else 924838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => NULL", m_opaque_sp.get()); 934838131bSGreg Clayton } 944838131bSGreg Clayton return uuid_bytes; 9530fdc8d8SChris Lattner } 9630fdc8d8SChris Lattner 9730fdc8d8SChris Lattner 9830fdc8d8SChris Lattner bool 9930fdc8d8SChris Lattner SBModule::operator == (const SBModule &rhs) const 10030fdc8d8SChris Lattner { 1016611103cSGreg Clayton if (m_opaque_sp) 1026611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 10330fdc8d8SChris Lattner return false; 10430fdc8d8SChris Lattner } 10530fdc8d8SChris Lattner 10630fdc8d8SChris Lattner bool 10730fdc8d8SChris Lattner SBModule::operator != (const SBModule &rhs) const 10830fdc8d8SChris Lattner { 1096611103cSGreg Clayton if (m_opaque_sp) 1106611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 11130fdc8d8SChris Lattner return false; 11230fdc8d8SChris Lattner } 11330fdc8d8SChris Lattner 11430fdc8d8SChris Lattner lldb::ModuleSP & 11530fdc8d8SChris Lattner SBModule::operator *() 11630fdc8d8SChris Lattner { 1176611103cSGreg Clayton return m_opaque_sp; 11830fdc8d8SChris Lattner } 11930fdc8d8SChris Lattner 12030fdc8d8SChris Lattner lldb_private::Module * 12130fdc8d8SChris Lattner SBModule::operator ->() 12230fdc8d8SChris Lattner { 1236611103cSGreg Clayton return m_opaque_sp.get(); 12430fdc8d8SChris Lattner } 12530fdc8d8SChris Lattner 12630fdc8d8SChris Lattner const lldb_private::Module * 12730fdc8d8SChris Lattner SBModule::operator ->() const 12830fdc8d8SChris Lattner { 1296611103cSGreg Clayton return m_opaque_sp.get(); 13030fdc8d8SChris Lattner } 13130fdc8d8SChris Lattner 13230fdc8d8SChris Lattner lldb_private::Module * 13330fdc8d8SChris Lattner SBModule::get() 13430fdc8d8SChris Lattner { 1356611103cSGreg Clayton return m_opaque_sp.get(); 13630fdc8d8SChris Lattner } 13730fdc8d8SChris Lattner 13830fdc8d8SChris Lattner const lldb_private::Module * 13930fdc8d8SChris Lattner SBModule::get() const 14030fdc8d8SChris Lattner { 1416611103cSGreg Clayton return m_opaque_sp.get(); 14230fdc8d8SChris Lattner } 14330fdc8d8SChris Lattner 14430fdc8d8SChris Lattner 14530fdc8d8SChris Lattner void 14630fdc8d8SChris Lattner SBModule::SetModule (const lldb::ModuleSP& module_sp) 14730fdc8d8SChris Lattner { 1486611103cSGreg Clayton m_opaque_sp = module_sp; 14930fdc8d8SChris Lattner } 15030fdc8d8SChris Lattner 15109960031SGreg Clayton 15209960031SGreg Clayton bool 15309960031SGreg Clayton SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr) 15409960031SGreg Clayton { 15509960031SGreg Clayton if (m_opaque_sp) 15609960031SGreg Clayton return m_opaque_sp->ResolveFileAddress (vm_addr, *addr); 15709960031SGreg Clayton 15809960031SGreg Clayton addr->Clear(); 15909960031SGreg Clayton return false; 16009960031SGreg Clayton } 16109960031SGreg Clayton 16209960031SGreg Clayton SBSymbolContext 16309960031SGreg Clayton SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 16409960031SGreg Clayton { 16509960031SGreg Clayton SBSymbolContext sb_sc; 16609960031SGreg Clayton if (m_opaque_sp && addr.IsValid()) 16709960031SGreg Clayton m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc); 16809960031SGreg Clayton return sb_sc; 16909960031SGreg Clayton } 17009960031SGreg Clayton 171dde9cff3SCaroline Tice bool 172dde9cff3SCaroline Tice SBModule::GetDescription (SBStream &description) 173dde9cff3SCaroline Tice { 174dde9cff3SCaroline Tice if (m_opaque_sp) 175dde9cff3SCaroline Tice { 176dac97f31SCaroline Tice description.ref(); 177ceb6b139SCaroline Tice m_opaque_sp->GetDescription (description.get()); 178dde9cff3SCaroline Tice } 179dde9cff3SCaroline Tice else 180dde9cff3SCaroline Tice description.Printf ("No value"); 181dde9cff3SCaroline Tice 182dde9cff3SCaroline Tice return true; 183dde9cff3SCaroline Tice } 184*bbdabce2SGreg Clayton 185*bbdabce2SGreg Clayton size_t 186*bbdabce2SGreg Clayton SBModule::GetNumSymbols () 187*bbdabce2SGreg Clayton { 188*bbdabce2SGreg Clayton if (m_opaque_sp) 189*bbdabce2SGreg Clayton { 190*bbdabce2SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 191*bbdabce2SGreg Clayton if (obj_file) 192*bbdabce2SGreg Clayton { 193*bbdabce2SGreg Clayton Symtab *symtab = obj_file->GetSymtab(); 194*bbdabce2SGreg Clayton if (symtab) 195*bbdabce2SGreg Clayton return symtab->GetNumSymbols(); 196*bbdabce2SGreg Clayton } 197*bbdabce2SGreg Clayton } 198*bbdabce2SGreg Clayton return 0; 199*bbdabce2SGreg Clayton } 200*bbdabce2SGreg Clayton 201*bbdabce2SGreg Clayton SBSymbol 202*bbdabce2SGreg Clayton SBModule::GetSymbolAtIndex (size_t idx) 203*bbdabce2SGreg Clayton { 204*bbdabce2SGreg Clayton SBSymbol sb_symbol; 205*bbdabce2SGreg Clayton if (m_opaque_sp) 206*bbdabce2SGreg Clayton { 207*bbdabce2SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 208*bbdabce2SGreg Clayton if (obj_file) 209*bbdabce2SGreg Clayton { 210*bbdabce2SGreg Clayton Symtab *symtab = obj_file->GetSymtab(); 211*bbdabce2SGreg Clayton if (symtab) 212*bbdabce2SGreg Clayton sb_symbol.SetSymbol(symtab->SymbolAtIndex (idx)); 213*bbdabce2SGreg Clayton } 214*bbdabce2SGreg Clayton } 215*bbdabce2SGreg Clayton return sb_symbol; 216*bbdabce2SGreg Clayton } 217