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 SBStream sstr; 55 file_spec.GetDescription (sstr); 56 log->Printf ("SBModule(%p)::GetFileSpec () => SBFileSpec(%p): %s", m_opaque_sp.get(), 57 file_spec.get(), sstr.GetData()); 58 } 59 60 return file_spec; 61 } 62 63 const uint8_t * 64 SBModule::GetUUIDBytes () const 65 { 66 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 67 68 const uint8_t *uuid_bytes = NULL; 69 if (m_opaque_sp) 70 uuid_bytes = (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 71 72 if (log) 73 { 74 if (uuid_bytes) 75 { 76 StreamString s; 77 m_opaque_sp->GetUUID().Dump (&s); 78 log->Printf ("SBModule(%p)::GetUUIDBytes () => %s", m_opaque_sp.get(), s.GetData()); 79 } 80 else 81 log->Printf ("SBModule(%p)::GetUUIDBytes () => NULL", m_opaque_sp.get()); 82 } 83 return uuid_bytes; 84 } 85 86 87 bool 88 SBModule::operator == (const SBModule &rhs) const 89 { 90 if (m_opaque_sp) 91 return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 92 return false; 93 } 94 95 bool 96 SBModule::operator != (const SBModule &rhs) const 97 { 98 if (m_opaque_sp) 99 return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 100 return false; 101 } 102 103 lldb::ModuleSP & 104 SBModule::operator *() 105 { 106 return m_opaque_sp; 107 } 108 109 lldb_private::Module * 110 SBModule::operator ->() 111 { 112 return m_opaque_sp.get(); 113 } 114 115 const lldb_private::Module * 116 SBModule::operator ->() const 117 { 118 return m_opaque_sp.get(); 119 } 120 121 lldb_private::Module * 122 SBModule::get() 123 { 124 return m_opaque_sp.get(); 125 } 126 127 const lldb_private::Module * 128 SBModule::get() const 129 { 130 return m_opaque_sp.get(); 131 } 132 133 134 void 135 SBModule::SetModule (const lldb::ModuleSP& module_sp) 136 { 137 m_opaque_sp = module_sp; 138 } 139 140 141 bool 142 SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr) 143 { 144 if (m_opaque_sp) 145 return m_opaque_sp->ResolveFileAddress (vm_addr, *addr); 146 147 addr->Clear(); 148 return false; 149 } 150 151 SBSymbolContext 152 SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 153 { 154 SBSymbolContext sb_sc; 155 if (m_opaque_sp && addr.IsValid()) 156 m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc); 157 return sb_sc; 158 } 159 160 bool 161 SBModule::GetDescription (SBStream &description) 162 { 163 if (m_opaque_sp) 164 { 165 description.ref(); 166 m_opaque_sp->GetDescription (description.get()); 167 } 168 else 169 description.Printf ("No value"); 170 171 return true; 172 } 173