blob: f5dbcf9905a3daec2e94053fd42b79cac38900e0 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- 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"
Greg Clayton466f6c42010-09-10 18:31:35 +000011#include "lldb/API/SBAddress.h"
12#include "lldb/API/SBFileSpec.h"
Chris Lattner24943d22010-06-08 16:52:24 +000013#include "lldb/API/SBFileSpec.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000014#include "lldb/API/SBStream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000015#include "lldb/Core/Module.h"
Caroline Tice7826c882010-10-26 03:11:13 +000016#include "lldb/Core/Log.h"
17#include "lldb/Core/STreamString.h"
Chris Lattner24943d22010-06-08 16:52:24 +000018
19using namespace lldb;
Caroline Tice7826c882010-10-26 03:11:13 +000020using namespace lldb_private;
Chris Lattner24943d22010-06-08 16:52:24 +000021
22
23SBModule::SBModule () :
Greg Clayton63094e02010-06-23 01:19:29 +000024 m_opaque_sp ()
Chris Lattner24943d22010-06-08 16:52:24 +000025{
26}
27
28SBModule::SBModule (const lldb::ModuleSP& module_sp) :
Greg Clayton63094e02010-06-23 01:19:29 +000029 m_opaque_sp (module_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000030{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000031 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000032
33 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000034 log->Printf ("SBModule::SBModule (module_sp=%p) => this.sp = %p", module_sp.get(), m_opaque_sp.get());
Chris Lattner24943d22010-06-08 16:52:24 +000035}
36
37SBModule::~SBModule ()
38{
39}
40
41bool
42SBModule::IsValid () const
43{
Greg Clayton63094e02010-06-23 01:19:29 +000044 return m_opaque_sp.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000045}
46
47SBFileSpec
48SBModule::GetFileSpec () const
49{
Caroline Tice7826c882010-10-26 03:11:13 +000050 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
51
Caroline Tice61ba7ec2010-10-26 23:49:36 +000052 //if (log)
53 // log->Printf ("SBModule::GetFileSpec ()");
Caroline Tice7826c882010-10-26 03:11:13 +000054
Chris Lattner24943d22010-06-08 16:52:24 +000055 SBFileSpec file_spec;
Greg Clayton63094e02010-06-23 01:19:29 +000056 if (m_opaque_sp)
57 file_spec.SetFileSpec(m_opaque_sp->GetFileSpec());
Caroline Tice7826c882010-10-26 03:11:13 +000058
59 if (log)
60 {
61 SBStream sstr;
62 file_spec.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +000063 log->Printf ("SBModule::GetFileSpec (this.sp=%p) => SBFileSpec : this.ap = %p, 's'", m_opaque_sp.get(),
64 file_spec.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000065 }
66
Chris Lattner24943d22010-06-08 16:52:24 +000067 return file_spec;
68}
69
70const uint8_t *
71SBModule::GetUUIDBytes () const
72{
Caroline Tice7826c882010-10-26 03:11:13 +000073 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
74
Caroline Tice61ba7ec2010-10-26 23:49:36 +000075 //if (log)
76 // log->Printf ("SBModule::GetUUIDBytes ()");
Caroline Tice7826c882010-10-26 03:11:13 +000077
Greg Clayton63094e02010-06-23 01:19:29 +000078 if (m_opaque_sp)
Caroline Tice7826c882010-10-26 03:11:13 +000079 {
80 if (log)
81 {
82 StreamString sstr;
83 m_opaque_sp->GetUUID().Dump (&sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +000084 log->Printf ("SBModule::GetUUIDBytes (this.sp=%p) => '%s'", m_opaque_sp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000085 }
Greg Clayton63094e02010-06-23 01:19:29 +000086 return (const uint8_t *)m_opaque_sp->GetUUID().GetBytes();
Caroline Tice7826c882010-10-26 03:11:13 +000087 }
88
89 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000090 log->Printf ("SBModule::GetUUIDBytes (this.sp=%p) => NULL", m_opaque_sp.get());
Chris Lattner24943d22010-06-08 16:52:24 +000091 return NULL;
92}
93
94
95bool
96SBModule::operator == (const SBModule &rhs) const
97{
Greg Clayton63094e02010-06-23 01:19:29 +000098 if (m_opaque_sp)
99 return m_opaque_sp.get() == rhs.m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000100 return false;
101}
102
103bool
104SBModule::operator != (const SBModule &rhs) const
105{
Greg Clayton63094e02010-06-23 01:19:29 +0000106 if (m_opaque_sp)
107 return m_opaque_sp.get() != rhs.m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000108 return false;
109}
110
111lldb::ModuleSP &
112SBModule::operator *()
113{
Greg Clayton63094e02010-06-23 01:19:29 +0000114 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000115}
116
117lldb_private::Module *
118SBModule::operator ->()
119{
Greg Clayton63094e02010-06-23 01:19:29 +0000120 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000121}
122
123const lldb_private::Module *
124SBModule::operator ->() const
125{
Greg Clayton63094e02010-06-23 01:19:29 +0000126 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000127}
128
129lldb_private::Module *
130SBModule::get()
131{
Greg Clayton63094e02010-06-23 01:19:29 +0000132 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000133}
134
135const lldb_private::Module *
136SBModule::get() const
137{
Greg Clayton63094e02010-06-23 01:19:29 +0000138 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000139}
140
141
142void
143SBModule::SetModule (const lldb::ModuleSP& module_sp)
144{
Greg Clayton63094e02010-06-23 01:19:29 +0000145 m_opaque_sp = module_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000146}
147
Greg Clayton466f6c42010-09-10 18:31:35 +0000148
149bool
150SBModule::ResolveFileAddress (lldb::addr_t vm_addr, SBAddress& addr)
151{
152 if (m_opaque_sp)
153 return m_opaque_sp->ResolveFileAddress (vm_addr, *addr);
154
155 addr->Clear();
156 return false;
157}
158
159SBSymbolContext
160SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope)
161{
162 SBSymbolContext sb_sc;
163 if (m_opaque_sp && addr.IsValid())
164 m_opaque_sp->ResolveSymbolContextForAddress (*addr, resolve_scope, *sb_sc);
165 return sb_sc;
166}
167
Caroline Tice98f930f2010-09-20 05:20:02 +0000168bool
169SBModule::GetDescription (SBStream &description)
170{
171 if (m_opaque_sp)
172 {
Caroline Ticee49ec182010-09-22 23:01:29 +0000173 description.ref();
Caroline Tice7826c882010-10-26 03:11:13 +0000174 m_opaque_sp->GetDescription (description.get());
Caroline Tice98f930f2010-09-20 05:20:02 +0000175 }
176 else
177 description.Printf ("No value");
178
179 return true;
180}