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 
17 using namespace lldb;
18 
19 
20 SBModule::SBModule () :
21     m_opaque_sp ()
22 {
23 }
24 
25 SBModule::SBModule (const lldb::ModuleSP& module_sp) :
26     m_opaque_sp (module_sp)
27 {
28 }
29 
30 SBModule::~SBModule ()
31 {
32 }
33 
34 bool
35 SBModule::IsValid () const
36 {
37     return m_opaque_sp.get() != NULL;
38 }
39 
40 SBFileSpec
41 SBModule::GetFileSpec () const
42 {
43     SBFileSpec file_spec;
44     if (m_opaque_sp)
45         file_spec.SetFileSpec(m_opaque_sp->GetFileSpec());
46     return file_spec;
47 }
48 
49 const uint8_t *
50 SBModule::GetUUIDBytes () const
51 {
52     if (m_opaque_sp)
53         return (const uint8_t *)m_opaque_sp->GetUUID().GetBytes();
54     return NULL;
55 }
56 
57 
58 bool
59 SBModule::operator == (const SBModule &rhs) const
60 {
61     if (m_opaque_sp)
62         return m_opaque_sp.get() == rhs.m_opaque_sp.get();
63     return false;
64 }
65 
66 bool
67 SBModule::operator != (const SBModule &rhs) const
68 {
69     if (m_opaque_sp)
70         return m_opaque_sp.get() != rhs.m_opaque_sp.get();
71     return false;
72 }
73 
74 lldb::ModuleSP &
75 SBModule::operator *()
76 {
77     return m_opaque_sp;
78 }
79 
80 lldb_private::Module *
81 SBModule::operator ->()
82 {
83     return m_opaque_sp.get();
84 }
85 
86 const lldb_private::Module *
87 SBModule::operator ->() const
88 {
89     return m_opaque_sp.get();
90 }
91 
92 lldb_private::Module *
93 SBModule::get()
94 {
95     return m_opaque_sp.get();
96 }
97 
98 const lldb_private::Module *
99 SBModule::get() const
100 {
101     return m_opaque_sp.get();
102 }
103 
104 
105 void
106 SBModule::SetModule (const lldb::ModuleSP& module_sp)
107 {
108     m_opaque_sp = module_sp;
109 }
110 
111 
112 bool
113 SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr)
114 {
115     if (m_opaque_sp)
116         return m_opaque_sp->ResolveFileAddress (vm_addr, *addr);
117 
118     addr->Clear();
119     return false;
120 }
121 
122 SBSymbolContext
123 SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope)
124 {
125     SBSymbolContext sb_sc;
126     if (m_opaque_sp && addr.IsValid())
127         m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc);
128     return sb_sc;
129 }
130 
131 bool
132 SBModule::GetDescription (SBStream &description)
133 {
134     if (m_opaque_sp)
135     {
136         description.ref();
137         m_opaque_sp->Dump (description.get());
138     }
139     else
140         description.Printf ("No value");
141 
142     return true;
143 }
144