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