180814287SRaphael Isemann //===-- SBModule.cpp ------------------------------------------------------===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
930fdc8d8SChris Lattner #include "lldb/API/SBModule.h"
10baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
1109960031SGreg Clayton #include "lldb/API/SBAddress.h"
1209960031SGreg Clayton #include "lldb/API/SBFileSpec.h"
13226cce25SGreg Clayton #include "lldb/API/SBModuleSpec.h"
14c9660546SGreg Clayton #include "lldb/API/SBProcess.h"
15dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
16fe356d35SGreg Clayton #include "lldb/API/SBSymbolContextList.h"
17b9c1b51eSKate Stone #include "lldb/Core/Module.h"
181f746071SGreg Clayton #include "lldb/Core/Section.h"
19dea8cb4fSGreg Clayton #include "lldb/Core/ValueObjectList.h"
20dea8cb4fSGreg Clayton #include "lldb/Core/ValueObjectVariable.h"
211f746071SGreg Clayton #include "lldb/Symbol/ObjectFile.h"
22ae088e52SGreg Clayton #include "lldb/Symbol/SymbolFile.h"
231f746071SGreg Clayton #include "lldb/Symbol/Symtab.h"
2456939cb3SGreg Clayton #include "lldb/Symbol/TypeSystem.h"
25dea8cb4fSGreg Clayton #include "lldb/Symbol/VariableList.h"
26dea8cb4fSGreg Clayton #include "lldb/Target/Target.h"
27bf9a7730SZachary Turner #include "lldb/Utility/StreamString.h"
2830fdc8d8SChris Lattner 
2930fdc8d8SChris Lattner using namespace lldb;
30ceb6b139SCaroline Tice using namespace lldb_private;
3130fdc8d8SChris Lattner 
32baf5664fSJonas Devlieghere SBModule::SBModule() : m_opaque_sp() {
33baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBModule);
34baf5664fSJonas Devlieghere }
3530fdc8d8SChris Lattner 
36b9c1b51eSKate Stone SBModule::SBModule(const lldb::ModuleSP &module_sp) : m_opaque_sp(module_sp) {}
3730fdc8d8SChris Lattner 
38b9c1b51eSKate Stone SBModule::SBModule(const SBModuleSpec &module_spec) : m_opaque_sp() {
39baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBModule, (const lldb::SBModuleSpec &), module_spec);
40baf5664fSJonas Devlieghere 
41226cce25SGreg Clayton   ModuleSP module_sp;
42248a1305SKonrad Kleine   Status error = ModuleList::GetSharedModule(
43248a1305SKonrad Kleine       *module_spec.m_opaque_up, module_sp, nullptr, nullptr, nullptr);
44226cce25SGreg Clayton   if (module_sp)
45226cce25SGreg Clayton     SetSP(module_sp);
46226cce25SGreg Clayton }
47226cce25SGreg Clayton 
48baf5664fSJonas Devlieghere SBModule::SBModule(const SBModule &rhs) : m_opaque_sp(rhs.m_opaque_sp) {
49baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBModule, (const lldb::SBModule &), rhs);
50baf5664fSJonas Devlieghere }
51efabb123SGreg Clayton 
52b9c1b51eSKate Stone SBModule::SBModule(lldb::SBProcess &process, lldb::addr_t header_addr)
53b9c1b51eSKate Stone     : m_opaque_sp() {
54baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBModule, (lldb::SBProcess &, lldb::addr_t), process,
55baf5664fSJonas Devlieghere                           header_addr);
56baf5664fSJonas Devlieghere 
57c9660546SGreg Clayton   ProcessSP process_sp(process.GetSP());
58b9c1b51eSKate Stone   if (process_sp) {
5939f7ee86SGreg Clayton     m_opaque_sp = process_sp->ReadModuleFromMemory(FileSpec(), header_addr);
60b9c1b51eSKate Stone     if (m_opaque_sp) {
6139f7ee86SGreg Clayton       Target &target = process_sp->GetTarget();
6239f7ee86SGreg Clayton       bool changed = false;
63751caf65SGreg Clayton       m_opaque_sp->SetLoadAddress(target, 0, true, changed);
6439f7ee86SGreg Clayton       target.GetImages().Append(m_opaque_sp);
6539f7ee86SGreg Clayton     }
66c859e2d5SGreg Clayton   }
67c9660546SGreg Clayton }
68c9660546SGreg Clayton 
69b9c1b51eSKate Stone const SBModule &SBModule::operator=(const SBModule &rhs) {
70baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const lldb::SBModule &,
71baf5664fSJonas Devlieghere                      SBModule, operator=,(const lldb::SBModule &), rhs);
72baf5664fSJonas Devlieghere 
73efabb123SGreg Clayton   if (this != &rhs)
74efabb123SGreg Clayton     m_opaque_sp = rhs.m_opaque_sp;
75306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
76efabb123SGreg Clayton }
77efabb123SGreg Clayton 
78866b7a65SJonas Devlieghere SBModule::~SBModule() = default;
7930fdc8d8SChris Lattner 
80baf5664fSJonas Devlieghere bool SBModule::IsValid() const {
81baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBModule, IsValid);
827f5237bcSPavel Labath   return this->operator bool();
837f5237bcSPavel Labath }
847f5237bcSPavel Labath SBModule::operator bool() const {
857f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBModule, operator bool);
8630fdc8d8SChris Lattner 
87248a1305SKonrad Kleine   return m_opaque_sp.get() != nullptr;
88baf5664fSJonas Devlieghere }
89baf5664fSJonas Devlieghere 
90baf5664fSJonas Devlieghere void SBModule::Clear() {
91baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBModule, Clear);
92baf5664fSJonas Devlieghere 
93baf5664fSJonas Devlieghere   m_opaque_sp.reset();
94baf5664fSJonas Devlieghere }
955d3bca4eSJim Ingham 
96b9c1b51eSKate Stone SBFileSpec SBModule::GetFileSpec() const {
97baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule, GetFileSpec);
98baf5664fSJonas Devlieghere 
9930fdc8d8SChris Lattner   SBFileSpec file_spec;
100c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
101c2ff9318SGreg Clayton   if (module_sp)
102c2ff9318SGreg Clayton     file_spec.SetFileSpec(module_sp->GetFileSpec());
103ceb6b139SCaroline Tice 
104baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(file_spec);
10530fdc8d8SChris Lattner }
10630fdc8d8SChris Lattner 
107b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetPlatformFileSpec() const {
108baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule,
109baf5664fSJonas Devlieghere                                    GetPlatformFileSpec);
110baf5664fSJonas Devlieghere 
1112289fa48SGreg Clayton 
1122289fa48SGreg Clayton   SBFileSpec file_spec;
113c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
114c2ff9318SGreg Clayton   if (module_sp)
115c2ff9318SGreg Clayton     file_spec.SetFileSpec(module_sp->GetPlatformFileSpec());
1162289fa48SGreg Clayton 
117baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(file_spec);
1182289fa48SGreg Clayton }
1192289fa48SGreg Clayton 
120b9c1b51eSKate Stone bool SBModule::SetPlatformFileSpec(const lldb::SBFileSpec &platform_file) {
121baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBModule, SetPlatformFileSpec,
122baf5664fSJonas Devlieghere                      (const lldb::SBFileSpec &), platform_file);
123baf5664fSJonas Devlieghere 
1242289fa48SGreg Clayton   bool result = false;
1252289fa48SGreg Clayton 
126c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
127b9c1b51eSKate Stone   if (module_sp) {
128c2ff9318SGreg Clayton     module_sp->SetPlatformFileSpec(*platform_file);
1292289fa48SGreg Clayton     result = true;
1302289fa48SGreg Clayton   }
1312289fa48SGreg Clayton 
1322289fa48SGreg Clayton   return result;
1332289fa48SGreg Clayton }
1342289fa48SGreg Clayton 
135b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetRemoteInstallFileSpec() {
136baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBFileSpec, SBModule,
137baf5664fSJonas Devlieghere                              GetRemoteInstallFileSpec);
138baf5664fSJonas Devlieghere 
139fbb76349SGreg Clayton   SBFileSpec sb_file_spec;
140fbb76349SGreg Clayton   ModuleSP module_sp(GetSP());
141fbb76349SGreg Clayton   if (module_sp)
142fbb76349SGreg Clayton     sb_file_spec.SetFileSpec(module_sp->GetRemoteInstallFileSpec());
143baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_file_spec);
144fbb76349SGreg Clayton }
145fbb76349SGreg Clayton 
146b9c1b51eSKate Stone bool SBModule::SetRemoteInstallFileSpec(lldb::SBFileSpec &file) {
147baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBModule, SetRemoteInstallFileSpec,
148baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &), file);
149baf5664fSJonas Devlieghere 
150fbb76349SGreg Clayton   ModuleSP module_sp(GetSP());
151b9c1b51eSKate Stone   if (module_sp) {
152fbb76349SGreg Clayton     module_sp->SetRemoteInstallFileSpec(file.ref());
153fbb76349SGreg Clayton     return true;
154fbb76349SGreg Clayton   }
155fbb76349SGreg Clayton   return false;
156fbb76349SGreg Clayton }
1572289fa48SGreg Clayton 
158b9c1b51eSKate Stone const uint8_t *SBModule::GetUUIDBytes() const {
159baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const uint8_t *, SBModule, GetUUIDBytes);
160baf5664fSJonas Devlieghere 
161248a1305SKonrad Kleine   const uint8_t *uuid_bytes = nullptr;
162c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
163c2ff9318SGreg Clayton   if (module_sp)
164470b286eSPavel Labath     uuid_bytes = module_sp->GetUUID().GetBytes().data();
165ceb6b139SCaroline Tice 
1664838131bSGreg Clayton   return uuid_bytes;
16730fdc8d8SChris Lattner }
16830fdc8d8SChris Lattner 
169b9c1b51eSKate Stone const char *SBModule::GetUUIDString() const {
170baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBModule, GetUUIDString);
171baf5664fSJonas Devlieghere 
172248a1305SKonrad Kleine   const char *uuid_cstr = nullptr;
173c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
174b9c1b51eSKate Stone   if (module_sp) {
17505097246SAdrian Prantl     // We are going to return a "const char *" value through the public API, so
17605097246SAdrian Prantl     // we need to constify it so it gets added permanently the string pool and
17705097246SAdrian Prantl     // then we don't need to worry about the lifetime of the string as it will
17805097246SAdrian Prantl     // never go away once it has been put into the ConstString string pool
179f1be855aSGreg Clayton     uuid_cstr = ConstString(module_sp->GetUUID().GetAsString()).GetCString();
180f1be855aSGreg Clayton   }
181f1be855aSGreg Clayton 
182b9c1b51eSKate Stone   if (uuid_cstr && uuid_cstr[0]) {
183f1be855aSGreg Clayton     return uuid_cstr;
184c16b4af0SJason Molenda   }
185df2963edSJohnny Chen 
186248a1305SKonrad Kleine   return nullptr;
187df2963edSJohnny Chen }
188df2963edSJohnny Chen 
189b9c1b51eSKate Stone bool SBModule::operator==(const SBModule &rhs) const {
190baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBModule, operator==,(const lldb::SBModule &),
191baf5664fSJonas Devlieghere                            rhs);
192baf5664fSJonas Devlieghere 
1936611103cSGreg Clayton   if (m_opaque_sp)
1946611103cSGreg Clayton     return m_opaque_sp.get() == rhs.m_opaque_sp.get();
19530fdc8d8SChris Lattner   return false;
19630fdc8d8SChris Lattner }
19730fdc8d8SChris Lattner 
198b9c1b51eSKate Stone bool SBModule::operator!=(const SBModule &rhs) const {
199baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBModule, operator!=,(const lldb::SBModule &),
200baf5664fSJonas Devlieghere                            rhs);
201baf5664fSJonas Devlieghere 
2026611103cSGreg Clayton   if (m_opaque_sp)
2036611103cSGreg Clayton     return m_opaque_sp.get() != rhs.m_opaque_sp.get();
20430fdc8d8SChris Lattner   return false;
20530fdc8d8SChris Lattner }
20630fdc8d8SChris Lattner 
207b9c1b51eSKate Stone ModuleSP SBModule::GetSP() const { return m_opaque_sp; }
20830fdc8d8SChris Lattner 
209b9c1b51eSKate Stone void SBModule::SetSP(const ModuleSP &module_sp) { m_opaque_sp = module_sp; }
21030fdc8d8SChris Lattner 
211b9c1b51eSKate Stone SBAddress SBModule::ResolveFileAddress(lldb::addr_t vm_addr) {
212baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBAddress, SBModule, ResolveFileAddress,
213baf5664fSJonas Devlieghere                      (lldb::addr_t), vm_addr);
214baf5664fSJonas Devlieghere 
215cac9c5f9SGreg Clayton   lldb::SBAddress sb_addr;
216c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
217b9c1b51eSKate Stone   if (module_sp) {
218cac9c5f9SGreg Clayton     Address addr;
219c2ff9318SGreg Clayton     if (module_sp->ResolveFileAddress(vm_addr, addr))
220cac9c5f9SGreg Clayton       sb_addr.ref() = addr;
221cac9c5f9SGreg Clayton   }
222baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_addr);
22309960031SGreg Clayton }
22409960031SGreg Clayton 
22509960031SGreg Clayton SBSymbolContext
226b9c1b51eSKate Stone SBModule::ResolveSymbolContextForAddress(const SBAddress &addr,
227b9c1b51eSKate Stone                                          uint32_t resolve_scope) {
228baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSymbolContext, SBModule,
229baf5664fSJonas Devlieghere                      ResolveSymbolContextForAddress,
230baf5664fSJonas Devlieghere                      (const lldb::SBAddress &, uint32_t), addr, resolve_scope);
231baf5664fSJonas Devlieghere 
23209960031SGreg Clayton   SBSymbolContext sb_sc;
233c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
234991e4453SZachary Turner   SymbolContextItem scope = static_cast<SymbolContextItem>(resolve_scope);
235c2ff9318SGreg Clayton   if (module_sp && addr.IsValid())
236991e4453SZachary Turner     module_sp->ResolveSymbolContextForAddress(addr.ref(), scope, *sb_sc);
237baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_sc);
23809960031SGreg Clayton }
23909960031SGreg Clayton 
240b9c1b51eSKate Stone bool SBModule::GetDescription(SBStream &description) {
241baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBModule, GetDescription, (lldb::SBStream &),
242baf5664fSJonas Devlieghere                      description);
243baf5664fSJonas Devlieghere 
244da7bc7d0SGreg Clayton   Stream &strm = description.ref();
245da7bc7d0SGreg Clayton 
246c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
247b9c1b51eSKate Stone   if (module_sp) {
248c4c464f8SRaphael Isemann     module_sp->GetDescription(strm.AsRawOstream());
249b9c1b51eSKate Stone   } else
250da7bc7d0SGreg Clayton     strm.PutCString("No value");
251dde9cff3SCaroline Tice 
252dde9cff3SCaroline Tice   return true;
253dde9cff3SCaroline Tice }
254bbdabce2SGreg Clayton 
255b9c1b51eSKate Stone uint32_t SBModule::GetNumCompileUnits() {
256baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBModule, GetNumCompileUnits);
257baf5664fSJonas Devlieghere 
258873a7a4bSJohnny Chen   ModuleSP module_sp(GetSP());
259b9c1b51eSKate Stone   if (module_sp) {
260873a7a4bSJohnny Chen     return module_sp->GetNumCompileUnits();
261873a7a4bSJohnny Chen   }
262873a7a4bSJohnny Chen   return 0;
263873a7a4bSJohnny Chen }
264873a7a4bSJohnny Chen 
265b9c1b51eSKate Stone SBCompileUnit SBModule::GetCompileUnitAtIndex(uint32_t index) {
266baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBCompileUnit, SBModule, GetCompileUnitAtIndex,
267baf5664fSJonas Devlieghere                      (uint32_t), index);
268baf5664fSJonas Devlieghere 
269873a7a4bSJohnny Chen   SBCompileUnit sb_cu;
270873a7a4bSJohnny Chen   ModuleSP module_sp(GetSP());
271b9c1b51eSKate Stone   if (module_sp) {
272873a7a4bSJohnny Chen     CompUnitSP cu_sp = module_sp->GetCompileUnitAtIndex(index);
273873a7a4bSJohnny Chen     sb_cu.reset(cu_sp.get());
274873a7a4bSJohnny Chen   }
275baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_cu);
276873a7a4bSJohnny Chen }
277873a7a4bSJohnny Chen 
278baf5664fSJonas Devlieghere SBSymbolContextList SBModule::FindCompileUnits(const SBFileSpec &sb_file_spec) {
279baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindCompileUnits,
280baf5664fSJonas Devlieghere                      (const lldb::SBFileSpec &), sb_file_spec);
281baf5664fSJonas Devlieghere 
282da0c081fSAlexander Polyakov   SBSymbolContextList sb_sc_list;
283da0c081fSAlexander Polyakov   const ModuleSP module_sp(GetSP());
284da0c081fSAlexander Polyakov   if (sb_file_spec.IsValid() && module_sp) {
2851ad655e2SAdrian Prantl     module_sp->FindCompileUnits(*sb_file_spec, *sb_sc_list);
286da0c081fSAlexander Polyakov   }
287baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_sc_list);
288da0c081fSAlexander Polyakov }
289da0c081fSAlexander Polyakov 
290b9c1b51eSKate Stone static Symtab *GetUnifiedSymbolTable(const lldb::ModuleSP &module_sp) {
291d5d47a35SPavel Labath   if (module_sp)
292d5d47a35SPavel Labath     return module_sp->GetSymtab();
293248a1305SKonrad Kleine   return nullptr;
294a7499c98SMichael Sartain }
295a7499c98SMichael Sartain 
296b9c1b51eSKate Stone size_t SBModule::GetNumSymbols() {
297baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(size_t, SBModule, GetNumSymbols);
298baf5664fSJonas Devlieghere 
299c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
300d5d47a35SPavel Labath   if (Symtab *symtab = GetUnifiedSymbolTable(module_sp))
301bbdabce2SGreg Clayton     return symtab->GetNumSymbols();
302bbdabce2SGreg Clayton   return 0;
303bbdabce2SGreg Clayton }
304bbdabce2SGreg Clayton 
305b9c1b51eSKate Stone SBSymbol SBModule::GetSymbolAtIndex(size_t idx) {
306baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSymbol, SBModule, GetSymbolAtIndex, (size_t), idx);
307baf5664fSJonas Devlieghere 
308bbdabce2SGreg Clayton   SBSymbol sb_symbol;
309c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
310a7499c98SMichael Sartain   Symtab *symtab = GetUnifiedSymbolTable(module_sp);
311bbdabce2SGreg Clayton   if (symtab)
312bbdabce2SGreg Clayton     sb_symbol.SetSymbol(symtab->SymbolAtIndex(idx));
313baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_symbol);
314bbdabce2SGreg Clayton }
315fe356d35SGreg Clayton 
316b9c1b51eSKate Stone lldb::SBSymbol SBModule::FindSymbol(const char *name,
317b9c1b51eSKate Stone                                     lldb::SymbolType symbol_type) {
318baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSymbol, SBModule, FindSymbol,
319baf5664fSJonas Devlieghere                      (const char *, lldb::SymbolType), name, symbol_type);
320baf5664fSJonas Devlieghere 
321e14e1925SGreg Clayton   SBSymbol sb_symbol;
322b9c1b51eSKate Stone   if (name && name[0]) {
323e14e1925SGreg Clayton     ModuleSP module_sp(GetSP());
324a7499c98SMichael Sartain     Symtab *symtab = GetUnifiedSymbolTable(module_sp);
325e14e1925SGreg Clayton     if (symtab)
326b9c1b51eSKate Stone       sb_symbol.SetSymbol(symtab->FindFirstSymbolWithNameAndType(
327b9c1b51eSKate Stone           ConstString(name), symbol_type, Symtab::eDebugAny,
328b9c1b51eSKate Stone           Symtab::eVisibilityAny));
329e14e1925SGreg Clayton   }
330baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_symbol);
331e14e1925SGreg Clayton }
332e14e1925SGreg Clayton 
333b9c1b51eSKate Stone lldb::SBSymbolContextList SBModule::FindSymbols(const char *name,
334b9c1b51eSKate Stone                                                 lldb::SymbolType symbol_type) {
335baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindSymbols,
336baf5664fSJonas Devlieghere                      (const char *, lldb::SymbolType), name, symbol_type);
337baf5664fSJonas Devlieghere 
338e14e1925SGreg Clayton   SBSymbolContextList sb_sc_list;
339b9c1b51eSKate Stone   if (name && name[0]) {
340e14e1925SGreg Clayton     ModuleSP module_sp(GetSP());
341a7499c98SMichael Sartain     Symtab *symtab = GetUnifiedSymbolTable(module_sp);
342b9c1b51eSKate Stone     if (symtab) {
343e14e1925SGreg Clayton       std::vector<uint32_t> matching_symbol_indexes;
3441ad655e2SAdrian Prantl       symtab->FindAllSymbolsWithNameAndType(ConstString(name), symbol_type,
3451ad655e2SAdrian Prantl                                             matching_symbol_indexes);
3461ad655e2SAdrian Prantl       const size_t num_matches = matching_symbol_indexes.size();
347b9c1b51eSKate Stone       if (num_matches) {
348e14e1925SGreg Clayton         SymbolContext sc;
349e14e1925SGreg Clayton         sc.module_sp = module_sp;
350e14e1925SGreg Clayton         SymbolContextList &sc_list = *sb_sc_list;
351b9c1b51eSKate Stone         for (size_t i = 0; i < num_matches; ++i) {
352e14e1925SGreg Clayton           sc.symbol = symtab->SymbolAtIndex(matching_symbol_indexes[i]);
353e14e1925SGreg Clayton           if (sc.symbol)
354e14e1925SGreg Clayton             sc_list.Append(sc);
355e14e1925SGreg Clayton         }
356e14e1925SGreg Clayton       }
357e14e1925SGreg Clayton     }
358e14e1925SGreg Clayton   }
359baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_sc_list);
360e14e1925SGreg Clayton }
361e14e1925SGreg Clayton 
362b9c1b51eSKate Stone size_t SBModule::GetNumSections() {
363baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(size_t, SBModule, GetNumSections);
364baf5664fSJonas Devlieghere 
365c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
366b9c1b51eSKate Stone   if (module_sp) {
367a7499c98SMichael Sartain     // Give the symbol vendor a chance to add to the unified section list.
368465eae36SPavel Labath     module_sp->GetSymbolFile();
3693046e668SGreg Clayton     SectionList *section_list = module_sp->GetSectionList();
370cac9c5f9SGreg Clayton     if (section_list)
371cac9c5f9SGreg Clayton       return section_list->GetSize();
372cac9c5f9SGreg Clayton   }
373cac9c5f9SGreg Clayton   return 0;
374cac9c5f9SGreg Clayton }
375cac9c5f9SGreg Clayton 
376b9c1b51eSKate Stone SBSection SBModule::GetSectionAtIndex(size_t idx) {
377baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSection, SBModule, GetSectionAtIndex, (size_t),
378baf5664fSJonas Devlieghere                      idx);
379baf5664fSJonas Devlieghere 
380cac9c5f9SGreg Clayton   SBSection sb_section;
381c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
382b9c1b51eSKate Stone   if (module_sp) {
383a7499c98SMichael Sartain     // Give the symbol vendor a chance to add to the unified section list.
384465eae36SPavel Labath     module_sp->GetSymbolFile();
3853046e668SGreg Clayton     SectionList *section_list = module_sp->GetSectionList();
386cac9c5f9SGreg Clayton 
387cac9c5f9SGreg Clayton     if (section_list)
388e72dfb32SGreg Clayton       sb_section.SetSP(section_list->GetSectionAtIndex(idx));
389cac9c5f9SGreg Clayton   }
390baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_section);
391cac9c5f9SGreg Clayton }
392cac9c5f9SGreg Clayton 
393b9c1b51eSKate Stone lldb::SBSymbolContextList SBModule::FindFunctions(const char *name,
394b9c1b51eSKate Stone                                                   uint32_t name_type_mask) {
395baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindFunctions,
396baf5664fSJonas Devlieghere                      (const char *, uint32_t), name, name_type_mask);
397baf5664fSJonas Devlieghere 
3985569e64eSGreg Clayton   lldb::SBSymbolContextList sb_sc_list;
399c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
400b9c1b51eSKate Stone   if (name && module_sp) {
401fe356d35SGreg Clayton     const bool symbols_ok = true;
4029df05fbbSSean Callanan     const bool inlines_ok = true;
403117b1fa1SZachary Turner     FunctionNameType type = static_cast<FunctionNameType>(name_type_mask);
404f9568a95SRaphael Isemann     module_sp->FindFunctions(ConstString(name), CompilerDeclContext(), type,
405f9568a95SRaphael Isemann                              symbols_ok, inlines_ok, *sb_sc_list);
406fe356d35SGreg Clayton   }
407baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_sc_list);
408fe356d35SGreg Clayton }
409fe356d35SGreg Clayton 
410b9c1b51eSKate Stone SBValueList SBModule::FindGlobalVariables(SBTarget &target, const char *name,
411b9c1b51eSKate Stone                                           uint32_t max_matches) {
412baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBValueList, SBModule, FindGlobalVariables,
413baf5664fSJonas Devlieghere                      (lldb::SBTarget &, const char *, uint32_t), target, name,
414baf5664fSJonas Devlieghere                      max_matches);
415baf5664fSJonas Devlieghere 
416dea8cb4fSGreg Clayton   SBValueList sb_value_list;
417c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
418b9c1b51eSKate Stone   if (name && module_sp) {
419dea8cb4fSGreg Clayton     VariableList variable_list;
420f9568a95SRaphael Isemann     module_sp->FindGlobalVariables(ConstString(name), CompilerDeclContext(),
421f9568a95SRaphael Isemann                                    max_matches, variable_list);
422d1782133SRaphael Isemann     for (const VariableSP &var_sp : variable_list) {
423dea8cb4fSGreg Clayton       lldb::ValueObjectSP valobj_sp;
424b9556accSGreg Clayton       TargetSP target_sp(target.GetSP());
425d1782133SRaphael Isemann       valobj_sp = ValueObjectVariable::Create(target_sp.get(), var_sp);
426dea8cb4fSGreg Clayton       if (valobj_sp)
42785425d77SEnrico Granata         sb_value_list.Append(SBValue(valobj_sp));
428dea8cb4fSGreg Clayton     }
429dea8cb4fSGreg Clayton   }
430dea8cb4fSGreg Clayton 
431baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_value_list);
432dea8cb4fSGreg Clayton }
4336f3533fbSEnrico Granata 
434b9c1b51eSKate Stone lldb::SBValue SBModule::FindFirstGlobalVariable(lldb::SBTarget &target,
435b9c1b51eSKate Stone                                                 const char *name) {
436baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBValue, SBModule, FindFirstGlobalVariable,
437baf5664fSJonas Devlieghere                      (lldb::SBTarget &, const char *), target, name);
438baf5664fSJonas Devlieghere 
439bcd80b47SEnrico Granata   SBValueList sb_value_list(FindGlobalVariables(target, name, 1));
440bcd80b47SEnrico Granata   if (sb_value_list.IsValid() && sb_value_list.GetSize() > 0)
441baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(sb_value_list.GetValueAtIndex(0));
442baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBValue());
443bcd80b47SEnrico Granata }
444bcd80b47SEnrico Granata 
445b9c1b51eSKate Stone lldb::SBType SBModule::FindFirstType(const char *name_cstr) {
446baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBType, SBModule, FindFirstType, (const char *),
447baf5664fSJonas Devlieghere                      name_cstr);
448baf5664fSJonas Devlieghere 
449fe42ac4dSGreg Clayton   SBType sb_type;
450c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
451b9c1b51eSKate Stone   if (name_cstr && module_sp) {
4526f3533fbSEnrico Granata     SymbolContext sc;
45384db9105SGreg Clayton     const bool exact_match = false;
4546f3533fbSEnrico Granata     ConstString name(name_cstr);
4556f3533fbSEnrico Granata 
456b43165b7SGreg Clayton     sb_type = SBType(module_sp->FindFirstType(sc, name, exact_match));
4576f3533fbSEnrico Granata 
458b9c1b51eSKate Stone     if (!sb_type.IsValid()) {
4590e252e38SAlex Langford       auto type_system_or_err =
460b9c1b51eSKate Stone           module_sp->GetTypeSystemForLanguage(eLanguageTypeC);
4610e252e38SAlex Langford       if (auto err = type_system_or_err.takeError()) {
4620e252e38SAlex Langford         llvm::consumeError(std::move(err));
4630e252e38SAlex Langford         return LLDB_RECORD_RESULT(SBType());
4640e252e38SAlex Langford       }
4650e252e38SAlex Langford       sb_type = SBType(type_system_or_err->GetBuiltinTypeByName(name));
46656939cb3SGreg Clayton     }
4676f3533fbSEnrico Granata   }
468baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_type);
4696f3533fbSEnrico Granata }
4706f3533fbSEnrico Granata 
471b9c1b51eSKate Stone lldb::SBType SBModule::GetBasicType(lldb::BasicType type) {
472baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBType, SBModule, GetBasicType, (lldb::BasicType),
473baf5664fSJonas Devlieghere                      type);
474baf5664fSJonas Devlieghere 
475b43165b7SGreg Clayton   ModuleSP module_sp(GetSP());
476b9c1b51eSKate Stone   if (module_sp) {
4770e252e38SAlex Langford     auto type_system_or_err =
478b9c1b51eSKate Stone         module_sp->GetTypeSystemForLanguage(eLanguageTypeC);
4790e252e38SAlex Langford     if (auto err = type_system_or_err.takeError()) {
4800e252e38SAlex Langford       llvm::consumeError(std::move(err));
4810e252e38SAlex Langford     } else {
4820e252e38SAlex Langford       return LLDB_RECORD_RESULT(
4830e252e38SAlex Langford           SBType(type_system_or_err->GetBasicTypeFromAST(type)));
4840e252e38SAlex Langford     }
48556939cb3SGreg Clayton   }
486baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBType());
487b43165b7SGreg Clayton }
488b43165b7SGreg Clayton 
489b9c1b51eSKate Stone lldb::SBTypeList SBModule::FindTypes(const char *type) {
490baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeList, SBModule, FindTypes, (const char *),
491baf5664fSJonas Devlieghere                      type);
492baf5664fSJonas Devlieghere 
4936f3533fbSEnrico Granata   SBTypeList retval;
4946f3533fbSEnrico Granata 
495c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
496b9c1b51eSKate Stone   if (type && module_sp) {
4976f3533fbSEnrico Granata     TypeList type_list;
49884db9105SGreg Clayton     const bool exact_match = false;
4996f3533fbSEnrico Granata     ConstString name(type);
500ae088e52SGreg Clayton     llvm::DenseSet<SymbolFile *> searched_symbol_files;
501bf9d84c0SAdrian Prantl     module_sp->FindTypes(name, exact_match, UINT32_MAX, searched_symbol_files,
502bf9d84c0SAdrian Prantl                          type_list);
5036f3533fbSEnrico Granata 
504bf9d84c0SAdrian Prantl     if (type_list.Empty()) {
5050e252e38SAlex Langford       auto type_system_or_err =
506b9c1b51eSKate Stone           module_sp->GetTypeSystemForLanguage(eLanguageTypeC);
5070e252e38SAlex Langford       if (auto err = type_system_or_err.takeError()) {
5080e252e38SAlex Langford         llvm::consumeError(std::move(err));
5090e252e38SAlex Langford       } else {
5100e252e38SAlex Langford         CompilerType compiler_type =
5110e252e38SAlex Langford             type_system_or_err->GetBuiltinTypeByName(name);
51256939cb3SGreg Clayton         if (compiler_type)
51356939cb3SGreg Clayton           retval.Append(SBType(compiler_type));
51456939cb3SGreg Clayton       }
515bf9d84c0SAdrian Prantl     } else {
516bf9d84c0SAdrian Prantl       for (size_t idx = 0; idx < type_list.GetSize(); idx++) {
517bf9d84c0SAdrian Prantl         TypeSP type_sp(type_list.GetTypeAtIndex(idx));
518bf9d84c0SAdrian Prantl         if (type_sp)
519bf9d84c0SAdrian Prantl           retval.Append(SBType(type_sp));
520b43165b7SGreg Clayton       }
521b43165b7SGreg Clayton     }
522bf9d84c0SAdrian Prantl   }
523baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(retval);
5246f3533fbSEnrico Granata }
525cac9c5f9SGreg Clayton 
526b9c1b51eSKate Stone lldb::SBType SBModule::GetTypeByID(lldb::user_id_t uid) {
527baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBType, SBModule, GetTypeByID, (lldb::user_id_t),
528baf5664fSJonas Devlieghere                      uid);
529baf5664fSJonas Devlieghere 
5301f4db7daSGreg Clayton   ModuleSP module_sp(GetSP());
531b9c1b51eSKate Stone   if (module_sp) {
532465eae36SPavel Labath     if (SymbolFile *symfile = module_sp->GetSymbolFile()) {
533465eae36SPavel Labath       Type *type_ptr = symfile->ResolveTypeUID(uid);
5341f4db7daSGreg Clayton       if (type_ptr)
535baf5664fSJonas Devlieghere         return LLDB_RECORD_RESULT(SBType(type_ptr->shared_from_this()));
5361f4db7daSGreg Clayton     }
5371f4db7daSGreg Clayton   }
538baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBType());
5391f4db7daSGreg Clayton }
5401f4db7daSGreg Clayton 
541b9c1b51eSKate Stone lldb::SBTypeList SBModule::GetTypes(uint32_t type_mask) {
542baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBTypeList, SBModule, GetTypes, (uint32_t),
543baf5664fSJonas Devlieghere                      type_mask);
544baf5664fSJonas Devlieghere 
545f02500c7SGreg Clayton   SBTypeList sb_type_list;
546f02500c7SGreg Clayton 
547f02500c7SGreg Clayton   ModuleSP module_sp(GetSP());
548117b1fa1SZachary Turner   if (!module_sp)
549baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(sb_type_list);
550465eae36SPavel Labath   SymbolFile *symfile = module_sp->GetSymbolFile();
551465eae36SPavel Labath   if (!symfile)
552baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(sb_type_list);
553117b1fa1SZachary Turner 
554117b1fa1SZachary Turner   TypeClass type_class = static_cast<TypeClass>(type_mask);
555f02500c7SGreg Clayton   TypeList type_list;
556465eae36SPavel Labath   symfile->GetTypes(nullptr, type_class, type_list);
557d5b44036SJonas Devlieghere   sb_type_list.m_opaque_up->Append(type_list);
558baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_type_list);
559f02500c7SGreg Clayton }
560cac9c5f9SGreg Clayton 
561b9c1b51eSKate Stone SBSection SBModule::FindSection(const char *sect_name) {
562baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSection, SBModule, FindSection, (const char *),
563baf5664fSJonas Devlieghere                      sect_name);
564baf5664fSJonas Devlieghere 
565cac9c5f9SGreg Clayton   SBSection sb_section;
566cac9c5f9SGreg Clayton 
567c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
568b9c1b51eSKate Stone   if (sect_name && module_sp) {
569a7499c98SMichael Sartain     // Give the symbol vendor a chance to add to the unified section list.
570465eae36SPavel Labath     module_sp->GetSymbolFile();
5713046e668SGreg Clayton     SectionList *section_list = module_sp->GetSectionList();
572b9c1b51eSKate Stone     if (section_list) {
573cac9c5f9SGreg Clayton       ConstString const_sect_name(sect_name);
574cac9c5f9SGreg Clayton       SectionSP section_sp(section_list->FindSectionByName(const_sect_name));
575b9c1b51eSKate Stone       if (section_sp) {
576e72dfb32SGreg Clayton         sb_section.SetSP(section_sp);
577cac9c5f9SGreg Clayton       }
578cac9c5f9SGreg Clayton     }
579cac9c5f9SGreg Clayton   }
580baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_section);
581cac9c5f9SGreg Clayton }
582cac9c5f9SGreg Clayton 
583b9c1b51eSKate Stone lldb::ByteOrder SBModule::GetByteOrder() {
584baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::ByteOrder, SBModule, GetByteOrder);
585baf5664fSJonas Devlieghere 
586c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
587c2ff9318SGreg Clayton   if (module_sp)
588c2ff9318SGreg Clayton     return module_sp->GetArchitecture().GetByteOrder();
58913d1950aSGreg Clayton   return eByteOrderInvalid;
59013d1950aSGreg Clayton }
59113d1950aSGreg Clayton 
592b9c1b51eSKate Stone const char *SBModule::GetTriple() {
593baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBModule, GetTriple);
594baf5664fSJonas Devlieghere 
595c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
596b9c1b51eSKate Stone   if (module_sp) {
597c2ff9318SGreg Clayton     std::string triple(module_sp->GetArchitecture().GetTriple().str());
59805097246SAdrian Prantl     // Unique the string so we don't run into ownership issues since the const
59905097246SAdrian Prantl     // strings put the string into the string pool once and the strings never
60005097246SAdrian Prantl     // comes out
60113d1950aSGreg Clayton     ConstString const_triple(triple.c_str());
60213d1950aSGreg Clayton     return const_triple.GetCString();
60313d1950aSGreg Clayton   }
604248a1305SKonrad Kleine   return nullptr;
60513d1950aSGreg Clayton }
60613d1950aSGreg Clayton 
607b9c1b51eSKate Stone uint32_t SBModule::GetAddressByteSize() {
608baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBModule, GetAddressByteSize);
609baf5664fSJonas Devlieghere 
610c2ff9318SGreg Clayton   ModuleSP module_sp(GetSP());
611c2ff9318SGreg Clayton   if (module_sp)
612c2ff9318SGreg Clayton     return module_sp->GetArchitecture().GetAddressByteSize();
61313d1950aSGreg Clayton   return sizeof(void *);
61413d1950aSGreg Clayton }
61513d1950aSGreg Clayton 
616b9c1b51eSKate Stone uint32_t SBModule::GetVersion(uint32_t *versions, uint32_t num_versions) {
617baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBModule, GetVersion, (uint32_t *, uint32_t),
618baf5664fSJonas Devlieghere                      versions, num_versions);
619baf5664fSJonas Devlieghere 
6202272c481SPavel Labath   llvm::VersionTuple version;
6212272c481SPavel Labath   if (ModuleSP module_sp = GetSP())
6222272c481SPavel Labath     version = module_sp->GetVersion();
6232272c481SPavel Labath   uint32_t result = 0;
6242272c481SPavel Labath   if (!version.empty())
6252272c481SPavel Labath     ++result;
6262272c481SPavel Labath   if (version.getMinor())
6272272c481SPavel Labath     ++result;
6282272c481SPavel Labath   if(version.getSubminor())
6292272c481SPavel Labath     ++result;
6302272c481SPavel Labath 
6312272c481SPavel Labath   if (!versions)
6322272c481SPavel Labath     return result;
6332272c481SPavel Labath 
6342272c481SPavel Labath   if (num_versions > 0)
6352272c481SPavel Labath     versions[0] = version.empty() ? UINT32_MAX : version.getMajor();
6362272c481SPavel Labath   if (num_versions > 1)
6372272c481SPavel Labath     versions[1] = version.getMinor().getValueOr(UINT32_MAX);
6382272c481SPavel Labath   if (num_versions > 2)
6392272c481SPavel Labath     versions[2] = version.getSubminor().getValueOr(UINT32_MAX);
6402272c481SPavel Labath   for (uint32_t i = 3; i < num_versions; ++i)
641c2ff9318SGreg Clayton     versions[i] = UINT32_MAX;
6422272c481SPavel Labath   return result;
6433467d80bSEnrico Granata }
644c2ff9318SGreg Clayton 
645b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetSymbolFileSpec() const {
646baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule,
647baf5664fSJonas Devlieghere                                    GetSymbolFileSpec);
648baf5664fSJonas Devlieghere 
649eb2c19a5SIlia K   lldb::SBFileSpec sb_file_spec;
650eb2c19a5SIlia K   ModuleSP module_sp(GetSP());
651b9c1b51eSKate Stone   if (module_sp) {
652465eae36SPavel Labath     if (SymbolFile *symfile = module_sp->GetSymbolFile())
653465eae36SPavel Labath       sb_file_spec.SetFileSpec(symfile->GetObjectFile()->GetFileSpec());
654eb2c19a5SIlia K   }
655baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_file_spec);
656eb2c19a5SIlia K }
657eb2c19a5SIlia K 
658b9c1b51eSKate Stone lldb::SBAddress SBModule::GetObjectFileHeaderAddress() const {
659baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBAddress, SBModule,
660baf5664fSJonas Devlieghere                                    GetObjectFileHeaderAddress);
661baf5664fSJonas Devlieghere 
662eb2c19a5SIlia K   lldb::SBAddress sb_addr;
663eb2c19a5SIlia K   ModuleSP module_sp(GetSP());
664b9c1b51eSKate Stone   if (module_sp) {
665eb2c19a5SIlia K     ObjectFile *objfile_ptr = module_sp->GetObjectFile();
666eb2c19a5SIlia K     if (objfile_ptr)
667d1e3fe21SPavel Labath       sb_addr.ref() = objfile_ptr->GetBaseAddress();
668eb2c19a5SIlia K   }
669baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_addr);
670eb2c19a5SIlia K }
6719b087d2cSAleksandr Urakov 
6729b087d2cSAleksandr Urakov lldb::SBAddress SBModule::GetObjectFileEntryPointAddress() const {
673baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBAddress, SBModule,
674baf5664fSJonas Devlieghere                                    GetObjectFileEntryPointAddress);
675baf5664fSJonas Devlieghere 
6769b087d2cSAleksandr Urakov   lldb::SBAddress sb_addr;
6779b087d2cSAleksandr Urakov   ModuleSP module_sp(GetSP());
6789b087d2cSAleksandr Urakov   if (module_sp) {
6799b087d2cSAleksandr Urakov     ObjectFile *objfile_ptr = module_sp->GetObjectFile();
6809b087d2cSAleksandr Urakov     if (objfile_ptr)
6819b087d2cSAleksandr Urakov       sb_addr.ref() = objfile_ptr->GetEntryPointAddress();
6829b087d2cSAleksandr Urakov   }
683baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_addr);
6849b087d2cSAleksandr Urakov }
685ae211eceSMichal Gorny 
686*da601ea7SJonas Devlieghere uint32_t SBModule::GetNumberAllocatedModules() {
687*da601ea7SJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(uint32_t, SBModule,
688*da601ea7SJonas Devlieghere                                     GetNumberAllocatedModules);
689*da601ea7SJonas Devlieghere 
690*da601ea7SJonas Devlieghere   return Module::GetNumberAllocatedModules();
691*da601ea7SJonas Devlieghere }
692*da601ea7SJonas Devlieghere 
693ae211eceSMichal Gorny namespace lldb_private {
694ae211eceSMichal Gorny namespace repro {
695ae211eceSMichal Gorny 
696ae211eceSMichal Gorny template <>
697ae211eceSMichal Gorny void RegisterMethods<SBModule>(Registry &R) {
698ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBModule, ());
699ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBModule, (const lldb::SBModuleSpec &));
700ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBModule, (const lldb::SBModule &));
701ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBModule, (lldb::SBProcess &, lldb::addr_t));
702ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const lldb::SBModule &,
703ae211eceSMichal Gorny                        SBModule, operator=,(const lldb::SBModule &));
704ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBModule, IsValid, ());
705ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBModule, operator bool, ());
706ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBModule, Clear, ());
707ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetFileSpec, ());
708ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetPlatformFileSpec,
709ae211eceSMichal Gorny                              ());
710ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBModule, SetPlatformFileSpec,
711ae211eceSMichal Gorny                        (const lldb::SBFileSpec &));
712ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBFileSpec, SBModule, GetRemoteInstallFileSpec,
713ae211eceSMichal Gorny                        ());
714ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBModule, SetRemoteInstallFileSpec,
715ae211eceSMichal Gorny                        (lldb::SBFileSpec &));
716ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBModule, GetUUIDString, ());
717ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool,
718ae211eceSMichal Gorny                              SBModule, operator==,(const lldb::SBModule &));
719ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool,
720ae211eceSMichal Gorny                              SBModule, operator!=,(const lldb::SBModule &));
721ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBAddress, SBModule, ResolveFileAddress,
722ae211eceSMichal Gorny                        (lldb::addr_t));
723ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSymbolContext, SBModule,
724ae211eceSMichal Gorny                        ResolveSymbolContextForAddress,
725ae211eceSMichal Gorny                        (const lldb::SBAddress &, uint32_t));
726ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBModule, GetDescription, (lldb::SBStream &));
727ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBModule, GetNumCompileUnits, ());
728ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBCompileUnit, SBModule, GetCompileUnitAtIndex,
729ae211eceSMichal Gorny                        (uint32_t));
730ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindCompileUnits,
731ae211eceSMichal Gorny                        (const lldb::SBFileSpec &));
732ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(size_t, SBModule, GetNumSymbols, ());
733ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSymbol, SBModule, GetSymbolAtIndex, (size_t));
734ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSymbol, SBModule, FindSymbol,
735ae211eceSMichal Gorny                        (const char *, lldb::SymbolType));
736ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindSymbols,
737ae211eceSMichal Gorny                        (const char *, lldb::SymbolType));
738ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(size_t, SBModule, GetNumSections, ());
739ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSection, SBModule, GetSectionAtIndex,
740ae211eceSMichal Gorny                        (size_t));
741ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindFunctions,
742ae211eceSMichal Gorny                        (const char *, uint32_t));
743ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBValueList, SBModule, FindGlobalVariables,
744ae211eceSMichal Gorny                        (lldb::SBTarget &, const char *, uint32_t));
745ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBValue, SBModule, FindFirstGlobalVariable,
746ae211eceSMichal Gorny                        (lldb::SBTarget &, const char *));
747ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBType, SBModule, FindFirstType, (const char *));
748ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBType, SBModule, GetBasicType,
749ae211eceSMichal Gorny                        (lldb::BasicType));
750ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeList, SBModule, FindTypes, (const char *));
751ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBType, SBModule, GetTypeByID,
752ae211eceSMichal Gorny                        (lldb::user_id_t));
753ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBTypeList, SBModule, GetTypes, (uint32_t));
754ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSection, SBModule, FindSection,
755ae211eceSMichal Gorny                        (const char *));
756ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::ByteOrder, SBModule, GetByteOrder, ());
757ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBModule, GetTriple, ());
758ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBModule, GetAddressByteSize, ());
759ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBModule, GetVersion,
760ae211eceSMichal Gorny                        (uint32_t *, uint32_t));
761ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetSymbolFileSpec,
762ae211eceSMichal Gorny                              ());
763ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBAddress, SBModule,
764ae211eceSMichal Gorny                              GetObjectFileHeaderAddress, ());
765ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBAddress, SBModule,
766ae211eceSMichal Gorny                              GetObjectFileEntryPointAddress, ());
767*da601ea7SJonas Devlieghere   LLDB_REGISTER_STATIC_METHOD(uint32_t, SBModule, GetNumberAllocatedModules,
768*da601ea7SJonas Devlieghere                               ());
769ae211eceSMichal Gorny }
770ae211eceSMichal Gorny 
771ae211eceSMichal Gorny }
772ae211eceSMichal Gorny }
773