1 //===-- SBModule.cpp --------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "lldb/API/SBModule.h" 11 #include "lldb/API/SBAddress.h" 12 #include "lldb/API/SBFileSpec.h" 13 #include "lldb/API/SBFileSpec.h" 14 #include "lldb/API/SBStream.h" 15 #include "lldb/Core/Module.h" 16 #include "lldb/Core/Log.h" 17 #include "lldb/Core/StreamString.h" 18 19 using namespace lldb; 20 using namespace lldb_private; 21 22 23 SBModule::SBModule () : 24 m_opaque_sp () 25 { 26 } 27 28 SBModule::SBModule (const lldb::ModuleSP& module_sp) : 29 m_opaque_sp (module_sp) 30 { 31 } 32 33 SBModule::~SBModule () 34 { 35 } 36 37 bool 38 SBModule::IsValid () const 39 { 40 return m_opaque_sp.get() != NULL; 41 } 42 43 SBFileSpec 44 SBModule::GetFileSpec () const 45 { 46 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 47 48 SBFileSpec file_spec; 49 if (m_opaque_sp) 50 file_spec.SetFileSpec(m_opaque_sp->GetFileSpec()); 51 52 if (log) 53 { 54 log->Printf ("SBModule(%p)::GetFileSpec () => SBFileSpec(%p)", 55 m_opaque_sp.get(), file_spec.get()); 56 } 57 58 return file_spec; 59 } 60 61 const uint8_t * 62 SBModule::GetUUIDBytes () const 63 { 64 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 65 66 const uint8_t *uuid_bytes = NULL; 67 if (m_opaque_sp) 68 uuid_bytes = (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 69 70 if (log) 71 { 72 if (uuid_bytes) 73 { 74 StreamString s; 75 m_opaque_sp->GetUUID().Dump (&s); 76 log->Printf ("SBModule(%p)::GetUUIDBytes () => %s", m_opaque_sp.get(), s.GetData()); 77 } 78 else 79 log->Printf ("SBModule(%p)::GetUUIDBytes () => NULL", m_opaque_sp.get()); 80 } 81 return uuid_bytes; 82 } 83 84 85 bool 86 SBModule::operator == (const SBModule &rhs) const 87 { 88 if (m_opaque_sp) 89 return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 90 return false; 91 } 92 93 bool 94 SBModule::operator != (const SBModule &rhs) const 95 { 96 if (m_opaque_sp) 97 return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 98 return false; 99 } 100 101 lldb::ModuleSP & 102 SBModule::operator *() 103 { 104 return m_opaque_sp; 105 } 106 107 lldb_private::Module * 108 SBModule::operator ->() 109 { 110 return m_opaque_sp.get(); 111 } 112 113 const lldb_private::Module * 114 SBModule::operator ->() const 115 { 116 return m_opaque_sp.get(); 117 } 118 119 lldb_private::Module * 120 SBModule::get() 121 { 122 return m_opaque_sp.get(); 123 } 124 125 const lldb_private::Module * 126 SBModule::get() const 127 { 128 return m_opaque_sp.get(); 129 } 130 131 132 void 133 SBModule::SetModule (const lldb::ModuleSP& module_sp) 134 { 135 m_opaque_sp = module_sp; 136 } 137 138 139 bool 140 SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr) 141 { 142 if (m_opaque_sp) 143 return m_opaque_sp->ResolveFileAddress (vm_addr, *addr); 144 145 addr->Clear(); 146 return false; 147 } 148 149 SBSymbolContext 150 SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 151 { 152 SBSymbolContext sb_sc; 153 if (m_opaque_sp && addr.IsValid()) 154 m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc); 155 return sb_sc; 156 } 157 158 bool 159 SBModule::GetDescription (SBStream &description) 160 { 161 if (m_opaque_sp) 162 { 163 description.ref(); 164 m_opaque_sp->GetDescription (description.get()); 165 } 166 else 167 description.Printf ("No value"); 168 169 return true; 170 } 171