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