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