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 32*a3436f73SKazu Hirata SBModule::SBModule() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBModule); } 3330fdc8d8SChris Lattner 34b9c1b51eSKate Stone SBModule::SBModule(const lldb::ModuleSP &module_sp) : m_opaque_sp(module_sp) {} 3530fdc8d8SChris Lattner 36*a3436f73SKazu Hirata SBModule::SBModule(const SBModuleSpec &module_spec) { 37baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBModule, (const lldb::SBModuleSpec &), module_spec); 38baf5664fSJonas Devlieghere 39226cce25SGreg Clayton ModuleSP module_sp; 40248a1305SKonrad Kleine Status error = ModuleList::GetSharedModule( 41248a1305SKonrad Kleine *module_spec.m_opaque_up, module_sp, nullptr, nullptr, nullptr); 42226cce25SGreg Clayton if (module_sp) 43226cce25SGreg Clayton SetSP(module_sp); 44226cce25SGreg Clayton } 45226cce25SGreg Clayton 46baf5664fSJonas Devlieghere SBModule::SBModule(const SBModule &rhs) : m_opaque_sp(rhs.m_opaque_sp) { 47baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBModule, (const lldb::SBModule &), rhs); 48baf5664fSJonas Devlieghere } 49efabb123SGreg Clayton 50*a3436f73SKazu Hirata SBModule::SBModule(lldb::SBProcess &process, lldb::addr_t header_addr) { 51baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBModule, (lldb::SBProcess &, lldb::addr_t), process, 52baf5664fSJonas Devlieghere header_addr); 53baf5664fSJonas Devlieghere 54c9660546SGreg Clayton ProcessSP process_sp(process.GetSP()); 55b9c1b51eSKate Stone if (process_sp) { 5639f7ee86SGreg Clayton m_opaque_sp = process_sp->ReadModuleFromMemory(FileSpec(), header_addr); 57b9c1b51eSKate Stone if (m_opaque_sp) { 5839f7ee86SGreg Clayton Target &target = process_sp->GetTarget(); 5939f7ee86SGreg Clayton bool changed = false; 60751caf65SGreg Clayton m_opaque_sp->SetLoadAddress(target, 0, true, changed); 6139f7ee86SGreg Clayton target.GetImages().Append(m_opaque_sp); 6239f7ee86SGreg Clayton } 63c859e2d5SGreg Clayton } 64c9660546SGreg Clayton } 65c9660546SGreg Clayton 66b9c1b51eSKate Stone const SBModule &SBModule::operator=(const SBModule &rhs) { 67e095e98aSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBModule &, SBModule, operator=, 68e095e98aSJonas Devlieghere (const lldb::SBModule &), rhs); 69baf5664fSJonas Devlieghere 70efabb123SGreg Clayton if (this != &rhs) 71efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 72306809f2SJonas Devlieghere return LLDB_RECORD_RESULT(*this); 73efabb123SGreg Clayton } 74efabb123SGreg Clayton 75866b7a65SJonas Devlieghere SBModule::~SBModule() = default; 7630fdc8d8SChris Lattner 77baf5664fSJonas Devlieghere bool SBModule::IsValid() const { 78baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBModule, IsValid); 797f5237bcSPavel Labath return this->operator bool(); 807f5237bcSPavel Labath } 817f5237bcSPavel Labath SBModule::operator bool() const { 827f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBModule, operator bool); 8330fdc8d8SChris Lattner 84248a1305SKonrad Kleine return m_opaque_sp.get() != nullptr; 85baf5664fSJonas Devlieghere } 86baf5664fSJonas Devlieghere 87baf5664fSJonas Devlieghere void SBModule::Clear() { 88baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBModule, Clear); 89baf5664fSJonas Devlieghere 90baf5664fSJonas Devlieghere m_opaque_sp.reset(); 91baf5664fSJonas Devlieghere } 925d3bca4eSJim Ingham 93b9c1b51eSKate Stone SBFileSpec SBModule::GetFileSpec() const { 94baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule, GetFileSpec); 95baf5664fSJonas Devlieghere 9630fdc8d8SChris Lattner SBFileSpec file_spec; 97c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 98c2ff9318SGreg Clayton if (module_sp) 99c2ff9318SGreg Clayton file_spec.SetFileSpec(module_sp->GetFileSpec()); 100ceb6b139SCaroline Tice 101baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(file_spec); 10230fdc8d8SChris Lattner } 10330fdc8d8SChris Lattner 104b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetPlatformFileSpec() const { 105baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule, 106baf5664fSJonas Devlieghere GetPlatformFileSpec); 107baf5664fSJonas Devlieghere 1082289fa48SGreg Clayton SBFileSpec file_spec; 109c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 110c2ff9318SGreg Clayton if (module_sp) 111c2ff9318SGreg Clayton file_spec.SetFileSpec(module_sp->GetPlatformFileSpec()); 1122289fa48SGreg Clayton 113baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(file_spec); 1142289fa48SGreg Clayton } 1152289fa48SGreg Clayton 116b9c1b51eSKate Stone bool SBModule::SetPlatformFileSpec(const lldb::SBFileSpec &platform_file) { 117baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBModule, SetPlatformFileSpec, 118baf5664fSJonas Devlieghere (const lldb::SBFileSpec &), platform_file); 119baf5664fSJonas Devlieghere 1202289fa48SGreg Clayton bool result = false; 1212289fa48SGreg Clayton 122c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 123b9c1b51eSKate Stone if (module_sp) { 124c2ff9318SGreg Clayton module_sp->SetPlatformFileSpec(*platform_file); 1252289fa48SGreg Clayton result = true; 1262289fa48SGreg Clayton } 1272289fa48SGreg Clayton 1282289fa48SGreg Clayton return result; 1292289fa48SGreg Clayton } 1302289fa48SGreg Clayton 131b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetRemoteInstallFileSpec() { 132baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBFileSpec, SBModule, 133baf5664fSJonas Devlieghere GetRemoteInstallFileSpec); 134baf5664fSJonas Devlieghere 135fbb76349SGreg Clayton SBFileSpec sb_file_spec; 136fbb76349SGreg Clayton ModuleSP module_sp(GetSP()); 137fbb76349SGreg Clayton if (module_sp) 138fbb76349SGreg Clayton sb_file_spec.SetFileSpec(module_sp->GetRemoteInstallFileSpec()); 139baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_file_spec); 140fbb76349SGreg Clayton } 141fbb76349SGreg Clayton 142b9c1b51eSKate Stone bool SBModule::SetRemoteInstallFileSpec(lldb::SBFileSpec &file) { 143baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBModule, SetRemoteInstallFileSpec, 144baf5664fSJonas Devlieghere (lldb::SBFileSpec &), file); 145baf5664fSJonas Devlieghere 146fbb76349SGreg Clayton ModuleSP module_sp(GetSP()); 147b9c1b51eSKate Stone if (module_sp) { 148fbb76349SGreg Clayton module_sp->SetRemoteInstallFileSpec(file.ref()); 149fbb76349SGreg Clayton return true; 150fbb76349SGreg Clayton } 151fbb76349SGreg Clayton return false; 152fbb76349SGreg Clayton } 1532289fa48SGreg Clayton 154b9c1b51eSKate Stone const uint8_t *SBModule::GetUUIDBytes() const { 155baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(const uint8_t *, SBModule, GetUUIDBytes); 156baf5664fSJonas Devlieghere 157248a1305SKonrad Kleine const uint8_t *uuid_bytes = nullptr; 158c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 159c2ff9318SGreg Clayton if (module_sp) 160470b286eSPavel Labath uuid_bytes = module_sp->GetUUID().GetBytes().data(); 161ceb6b139SCaroline Tice 1624838131bSGreg Clayton return uuid_bytes; 16330fdc8d8SChris Lattner } 16430fdc8d8SChris Lattner 165b9c1b51eSKate Stone const char *SBModule::GetUUIDString() const { 166baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBModule, GetUUIDString); 167baf5664fSJonas Devlieghere 168248a1305SKonrad Kleine const char *uuid_cstr = nullptr; 169c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 170b9c1b51eSKate Stone if (module_sp) { 17105097246SAdrian Prantl // We are going to return a "const char *" value through the public API, so 17205097246SAdrian Prantl // we need to constify it so it gets added permanently the string pool and 17305097246SAdrian Prantl // then we don't need to worry about the lifetime of the string as it will 17405097246SAdrian Prantl // never go away once it has been put into the ConstString string pool 175f1be855aSGreg Clayton uuid_cstr = ConstString(module_sp->GetUUID().GetAsString()).GetCString(); 176f1be855aSGreg Clayton } 177f1be855aSGreg Clayton 178b9c1b51eSKate Stone if (uuid_cstr && uuid_cstr[0]) { 179f1be855aSGreg Clayton return uuid_cstr; 180c16b4af0SJason Molenda } 181df2963edSJohnny Chen 182248a1305SKonrad Kleine return nullptr; 183df2963edSJohnny Chen } 184df2963edSJohnny Chen 185b9c1b51eSKate Stone bool SBModule::operator==(const SBModule &rhs) const { 186baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBModule, operator==, (const lldb::SBModule &), 187baf5664fSJonas Devlieghere rhs); 188baf5664fSJonas Devlieghere 1896611103cSGreg Clayton if (m_opaque_sp) 1906611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 19130fdc8d8SChris Lattner return false; 19230fdc8d8SChris Lattner } 19330fdc8d8SChris Lattner 194b9c1b51eSKate Stone bool SBModule::operator!=(const SBModule &rhs) const { 195baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBModule, operator!=, (const lldb::SBModule &), 196baf5664fSJonas Devlieghere rhs); 197baf5664fSJonas Devlieghere 1986611103cSGreg Clayton if (m_opaque_sp) 1996611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 20030fdc8d8SChris Lattner return false; 20130fdc8d8SChris Lattner } 20230fdc8d8SChris Lattner 203b9c1b51eSKate Stone ModuleSP SBModule::GetSP() const { return m_opaque_sp; } 20430fdc8d8SChris Lattner 205b9c1b51eSKate Stone void SBModule::SetSP(const ModuleSP &module_sp) { m_opaque_sp = module_sp; } 20630fdc8d8SChris Lattner 207b9c1b51eSKate Stone SBAddress SBModule::ResolveFileAddress(lldb::addr_t vm_addr) { 208baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBAddress, SBModule, ResolveFileAddress, 209baf5664fSJonas Devlieghere (lldb::addr_t), vm_addr); 210baf5664fSJonas Devlieghere 211cac9c5f9SGreg Clayton lldb::SBAddress sb_addr; 212c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 213b9c1b51eSKate Stone if (module_sp) { 214cac9c5f9SGreg Clayton Address addr; 215c2ff9318SGreg Clayton if (module_sp->ResolveFileAddress(vm_addr, addr)) 216cac9c5f9SGreg Clayton sb_addr.ref() = addr; 217cac9c5f9SGreg Clayton } 218baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_addr); 21909960031SGreg Clayton } 22009960031SGreg Clayton 22109960031SGreg Clayton SBSymbolContext 222b9c1b51eSKate Stone SBModule::ResolveSymbolContextForAddress(const SBAddress &addr, 223b9c1b51eSKate Stone uint32_t resolve_scope) { 224baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbolContext, SBModule, 225baf5664fSJonas Devlieghere ResolveSymbolContextForAddress, 226baf5664fSJonas Devlieghere (const lldb::SBAddress &, uint32_t), addr, resolve_scope); 227baf5664fSJonas Devlieghere 22809960031SGreg Clayton SBSymbolContext sb_sc; 229c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 230991e4453SZachary Turner SymbolContextItem scope = static_cast<SymbolContextItem>(resolve_scope); 231c2ff9318SGreg Clayton if (module_sp && addr.IsValid()) 232991e4453SZachary Turner module_sp->ResolveSymbolContextForAddress(addr.ref(), scope, *sb_sc); 233baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_sc); 23409960031SGreg Clayton } 23509960031SGreg Clayton 236b9c1b51eSKate Stone bool SBModule::GetDescription(SBStream &description) { 237baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBModule, GetDescription, (lldb::SBStream &), 238baf5664fSJonas Devlieghere description); 239baf5664fSJonas Devlieghere 240da7bc7d0SGreg Clayton Stream &strm = description.ref(); 241da7bc7d0SGreg Clayton 242c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 243b9c1b51eSKate Stone if (module_sp) { 244c4c464f8SRaphael Isemann module_sp->GetDescription(strm.AsRawOstream()); 245b9c1b51eSKate Stone } else 246da7bc7d0SGreg Clayton strm.PutCString("No value"); 247dde9cff3SCaroline Tice 248dde9cff3SCaroline Tice return true; 249dde9cff3SCaroline Tice } 250bbdabce2SGreg Clayton 251b9c1b51eSKate Stone uint32_t SBModule::GetNumCompileUnits() { 252baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBModule, GetNumCompileUnits); 253baf5664fSJonas Devlieghere 254873a7a4bSJohnny Chen ModuleSP module_sp(GetSP()); 255b9c1b51eSKate Stone if (module_sp) { 256873a7a4bSJohnny Chen return module_sp->GetNumCompileUnits(); 257873a7a4bSJohnny Chen } 258873a7a4bSJohnny Chen return 0; 259873a7a4bSJohnny Chen } 260873a7a4bSJohnny Chen 261b9c1b51eSKate Stone SBCompileUnit SBModule::GetCompileUnitAtIndex(uint32_t index) { 262baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBCompileUnit, SBModule, GetCompileUnitAtIndex, 263baf5664fSJonas Devlieghere (uint32_t), index); 264baf5664fSJonas Devlieghere 265873a7a4bSJohnny Chen SBCompileUnit sb_cu; 266873a7a4bSJohnny Chen ModuleSP module_sp(GetSP()); 267b9c1b51eSKate Stone if (module_sp) { 268873a7a4bSJohnny Chen CompUnitSP cu_sp = module_sp->GetCompileUnitAtIndex(index); 269873a7a4bSJohnny Chen sb_cu.reset(cu_sp.get()); 270873a7a4bSJohnny Chen } 271baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_cu); 272873a7a4bSJohnny Chen } 273873a7a4bSJohnny Chen 274baf5664fSJonas Devlieghere SBSymbolContextList SBModule::FindCompileUnits(const SBFileSpec &sb_file_spec) { 275baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindCompileUnits, 276baf5664fSJonas Devlieghere (const lldb::SBFileSpec &), sb_file_spec); 277baf5664fSJonas Devlieghere 278da0c081fSAlexander Polyakov SBSymbolContextList sb_sc_list; 279da0c081fSAlexander Polyakov const ModuleSP module_sp(GetSP()); 280da0c081fSAlexander Polyakov if (sb_file_spec.IsValid() && module_sp) { 2811ad655e2SAdrian Prantl module_sp->FindCompileUnits(*sb_file_spec, *sb_sc_list); 282da0c081fSAlexander Polyakov } 283baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_sc_list); 284da0c081fSAlexander Polyakov } 285da0c081fSAlexander Polyakov 286b9c1b51eSKate Stone static Symtab *GetUnifiedSymbolTable(const lldb::ModuleSP &module_sp) { 287d5d47a35SPavel Labath if (module_sp) 288d5d47a35SPavel Labath return module_sp->GetSymtab(); 289248a1305SKonrad Kleine return nullptr; 290a7499c98SMichael Sartain } 291a7499c98SMichael Sartain 292b9c1b51eSKate Stone size_t SBModule::GetNumSymbols() { 293baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(size_t, SBModule, GetNumSymbols); 294baf5664fSJonas Devlieghere 295c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 296d5d47a35SPavel Labath if (Symtab *symtab = GetUnifiedSymbolTable(module_sp)) 297bbdabce2SGreg Clayton return symtab->GetNumSymbols(); 298bbdabce2SGreg Clayton return 0; 299bbdabce2SGreg Clayton } 300bbdabce2SGreg Clayton 301b9c1b51eSKate Stone SBSymbol SBModule::GetSymbolAtIndex(size_t idx) { 302baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbol, SBModule, GetSymbolAtIndex, (size_t), idx); 303baf5664fSJonas Devlieghere 304bbdabce2SGreg Clayton SBSymbol sb_symbol; 305c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 306a7499c98SMichael Sartain Symtab *symtab = GetUnifiedSymbolTable(module_sp); 307bbdabce2SGreg Clayton if (symtab) 308bbdabce2SGreg Clayton sb_symbol.SetSymbol(symtab->SymbolAtIndex(idx)); 309baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_symbol); 310bbdabce2SGreg Clayton } 311fe356d35SGreg Clayton 312b9c1b51eSKate Stone lldb::SBSymbol SBModule::FindSymbol(const char *name, 313b9c1b51eSKate Stone lldb::SymbolType symbol_type) { 314baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbol, SBModule, FindSymbol, 315baf5664fSJonas Devlieghere (const char *, lldb::SymbolType), name, symbol_type); 316baf5664fSJonas Devlieghere 317e14e1925SGreg Clayton SBSymbol sb_symbol; 318b9c1b51eSKate Stone if (name && name[0]) { 319e14e1925SGreg Clayton ModuleSP module_sp(GetSP()); 320a7499c98SMichael Sartain Symtab *symtab = GetUnifiedSymbolTable(module_sp); 321e14e1925SGreg Clayton if (symtab) 322b9c1b51eSKate Stone sb_symbol.SetSymbol(symtab->FindFirstSymbolWithNameAndType( 323b9c1b51eSKate Stone ConstString(name), symbol_type, Symtab::eDebugAny, 324b9c1b51eSKate Stone Symtab::eVisibilityAny)); 325e14e1925SGreg Clayton } 326baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_symbol); 327e14e1925SGreg Clayton } 328e14e1925SGreg Clayton 329b9c1b51eSKate Stone lldb::SBSymbolContextList SBModule::FindSymbols(const char *name, 330b9c1b51eSKate Stone lldb::SymbolType symbol_type) { 331baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindSymbols, 332baf5664fSJonas Devlieghere (const char *, lldb::SymbolType), name, symbol_type); 333baf5664fSJonas Devlieghere 334e14e1925SGreg Clayton SBSymbolContextList sb_sc_list; 335b9c1b51eSKate Stone if (name && name[0]) { 336e14e1925SGreg Clayton ModuleSP module_sp(GetSP()); 337a7499c98SMichael Sartain Symtab *symtab = GetUnifiedSymbolTable(module_sp); 338b9c1b51eSKate Stone if (symtab) { 339e14e1925SGreg Clayton std::vector<uint32_t> matching_symbol_indexes; 3401ad655e2SAdrian Prantl symtab->FindAllSymbolsWithNameAndType(ConstString(name), symbol_type, 3411ad655e2SAdrian Prantl matching_symbol_indexes); 3421ad655e2SAdrian Prantl const size_t num_matches = matching_symbol_indexes.size(); 343b9c1b51eSKate Stone if (num_matches) { 344e14e1925SGreg Clayton SymbolContext sc; 345e14e1925SGreg Clayton sc.module_sp = module_sp; 346e14e1925SGreg Clayton SymbolContextList &sc_list = *sb_sc_list; 347b9c1b51eSKate Stone for (size_t i = 0; i < num_matches; ++i) { 348e14e1925SGreg Clayton sc.symbol = symtab->SymbolAtIndex(matching_symbol_indexes[i]); 349e14e1925SGreg Clayton if (sc.symbol) 350e14e1925SGreg Clayton sc_list.Append(sc); 351e14e1925SGreg Clayton } 352e14e1925SGreg Clayton } 353e14e1925SGreg Clayton } 354e14e1925SGreg Clayton } 355baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_sc_list); 356e14e1925SGreg Clayton } 357e14e1925SGreg Clayton 358b9c1b51eSKate Stone size_t SBModule::GetNumSections() { 359baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(size_t, SBModule, GetNumSections); 360baf5664fSJonas Devlieghere 361c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 362b9c1b51eSKate Stone if (module_sp) { 363a7499c98SMichael Sartain // Give the symbol vendor a chance to add to the unified section list. 364465eae36SPavel Labath module_sp->GetSymbolFile(); 3653046e668SGreg Clayton SectionList *section_list = module_sp->GetSectionList(); 366cac9c5f9SGreg Clayton if (section_list) 367cac9c5f9SGreg Clayton return section_list->GetSize(); 368cac9c5f9SGreg Clayton } 369cac9c5f9SGreg Clayton return 0; 370cac9c5f9SGreg Clayton } 371cac9c5f9SGreg Clayton 372b9c1b51eSKate Stone SBSection SBModule::GetSectionAtIndex(size_t idx) { 373baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSection, SBModule, GetSectionAtIndex, (size_t), 374baf5664fSJonas Devlieghere idx); 375baf5664fSJonas Devlieghere 376cac9c5f9SGreg Clayton SBSection sb_section; 377c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 378b9c1b51eSKate Stone if (module_sp) { 379a7499c98SMichael Sartain // Give the symbol vendor a chance to add to the unified section list. 380465eae36SPavel Labath module_sp->GetSymbolFile(); 3813046e668SGreg Clayton SectionList *section_list = module_sp->GetSectionList(); 382cac9c5f9SGreg Clayton 383cac9c5f9SGreg Clayton if (section_list) 384e72dfb32SGreg Clayton sb_section.SetSP(section_list->GetSectionAtIndex(idx)); 385cac9c5f9SGreg Clayton } 386baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_section); 387cac9c5f9SGreg Clayton } 388cac9c5f9SGreg Clayton 389b9c1b51eSKate Stone lldb::SBSymbolContextList SBModule::FindFunctions(const char *name, 390b9c1b51eSKate Stone uint32_t name_type_mask) { 391baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindFunctions, 392baf5664fSJonas Devlieghere (const char *, uint32_t), name, name_type_mask); 393baf5664fSJonas Devlieghere 3945569e64eSGreg Clayton lldb::SBSymbolContextList sb_sc_list; 395c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 396b9c1b51eSKate Stone if (name && module_sp) { 397c020be17SJonas Devlieghere 398c020be17SJonas Devlieghere ModuleFunctionSearchOptions function_options; 399c020be17SJonas Devlieghere function_options.include_symbols = true; 400c020be17SJonas Devlieghere function_options.include_inlines = true; 401117b1fa1SZachary Turner FunctionNameType type = static_cast<FunctionNameType>(name_type_mask); 402f9568a95SRaphael Isemann module_sp->FindFunctions(ConstString(name), CompilerDeclContext(), type, 403c020be17SJonas Devlieghere function_options, *sb_sc_list); 404fe356d35SGreg Clayton } 405baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_sc_list); 406fe356d35SGreg Clayton } 407fe356d35SGreg Clayton 408b9c1b51eSKate Stone SBValueList SBModule::FindGlobalVariables(SBTarget &target, const char *name, 409b9c1b51eSKate Stone uint32_t max_matches) { 410baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBValueList, SBModule, FindGlobalVariables, 411baf5664fSJonas Devlieghere (lldb::SBTarget &, const char *, uint32_t), target, name, 412baf5664fSJonas Devlieghere max_matches); 413baf5664fSJonas Devlieghere 414dea8cb4fSGreg Clayton SBValueList sb_value_list; 415c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 416b9c1b51eSKate Stone if (name && module_sp) { 417dea8cb4fSGreg Clayton VariableList variable_list; 418f9568a95SRaphael Isemann module_sp->FindGlobalVariables(ConstString(name), CompilerDeclContext(), 419f9568a95SRaphael Isemann max_matches, variable_list); 420d1782133SRaphael Isemann for (const VariableSP &var_sp : variable_list) { 421dea8cb4fSGreg Clayton lldb::ValueObjectSP valobj_sp; 422b9556accSGreg Clayton TargetSP target_sp(target.GetSP()); 423d1782133SRaphael Isemann valobj_sp = ValueObjectVariable::Create(target_sp.get(), var_sp); 424dea8cb4fSGreg Clayton if (valobj_sp) 42585425d77SEnrico Granata sb_value_list.Append(SBValue(valobj_sp)); 426dea8cb4fSGreg Clayton } 427dea8cb4fSGreg Clayton } 428dea8cb4fSGreg Clayton 429baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_value_list); 430dea8cb4fSGreg Clayton } 4316f3533fbSEnrico Granata 432b9c1b51eSKate Stone lldb::SBValue SBModule::FindFirstGlobalVariable(lldb::SBTarget &target, 433b9c1b51eSKate Stone const char *name) { 434baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBValue, SBModule, FindFirstGlobalVariable, 435baf5664fSJonas Devlieghere (lldb::SBTarget &, const char *), target, name); 436baf5664fSJonas Devlieghere 437bcd80b47SEnrico Granata SBValueList sb_value_list(FindGlobalVariables(target, name, 1)); 438bcd80b47SEnrico Granata if (sb_value_list.IsValid() && sb_value_list.GetSize() > 0) 439baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_value_list.GetValueAtIndex(0)); 440baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBValue()); 441bcd80b47SEnrico Granata } 442bcd80b47SEnrico Granata 443b9c1b51eSKate Stone lldb::SBType SBModule::FindFirstType(const char *name_cstr) { 444baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBType, SBModule, FindFirstType, (const char *), 445baf5664fSJonas Devlieghere name_cstr); 446baf5664fSJonas Devlieghere 447fe42ac4dSGreg Clayton SBType sb_type; 448c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 449b9c1b51eSKate Stone if (name_cstr && module_sp) { 4506f3533fbSEnrico Granata SymbolContext sc; 45184db9105SGreg Clayton const bool exact_match = false; 4526f3533fbSEnrico Granata ConstString name(name_cstr); 4536f3533fbSEnrico Granata 454b43165b7SGreg Clayton sb_type = SBType(module_sp->FindFirstType(sc, name, exact_match)); 4556f3533fbSEnrico Granata 456b9c1b51eSKate Stone if (!sb_type.IsValid()) { 4570e252e38SAlex Langford auto type_system_or_err = 458b9c1b51eSKate Stone module_sp->GetTypeSystemForLanguage(eLanguageTypeC); 4590e252e38SAlex Langford if (auto err = type_system_or_err.takeError()) { 4600e252e38SAlex Langford llvm::consumeError(std::move(err)); 4610e252e38SAlex Langford return LLDB_RECORD_RESULT(SBType()); 4620e252e38SAlex Langford } 4630e252e38SAlex Langford sb_type = SBType(type_system_or_err->GetBuiltinTypeByName(name)); 46456939cb3SGreg Clayton } 4656f3533fbSEnrico Granata } 466baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_type); 4676f3533fbSEnrico Granata } 4686f3533fbSEnrico Granata 469b9c1b51eSKate Stone lldb::SBType SBModule::GetBasicType(lldb::BasicType type) { 470baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBType, SBModule, GetBasicType, (lldb::BasicType), 471baf5664fSJonas Devlieghere type); 472baf5664fSJonas Devlieghere 473b43165b7SGreg Clayton ModuleSP module_sp(GetSP()); 474b9c1b51eSKate Stone if (module_sp) { 4750e252e38SAlex Langford auto type_system_or_err = 476b9c1b51eSKate Stone module_sp->GetTypeSystemForLanguage(eLanguageTypeC); 4770e252e38SAlex Langford if (auto err = type_system_or_err.takeError()) { 4780e252e38SAlex Langford llvm::consumeError(std::move(err)); 4790e252e38SAlex Langford } else { 4800e252e38SAlex Langford return LLDB_RECORD_RESULT( 4810e252e38SAlex Langford SBType(type_system_or_err->GetBasicTypeFromAST(type))); 4820e252e38SAlex Langford } 48356939cb3SGreg Clayton } 484baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBType()); 485b43165b7SGreg Clayton } 486b43165b7SGreg Clayton 487b9c1b51eSKate Stone lldb::SBTypeList SBModule::FindTypes(const char *type) { 488baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeList, SBModule, FindTypes, (const char *), 489baf5664fSJonas Devlieghere type); 490baf5664fSJonas Devlieghere 4916f3533fbSEnrico Granata SBTypeList retval; 4926f3533fbSEnrico Granata 493c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 494b9c1b51eSKate Stone if (type && module_sp) { 4956f3533fbSEnrico Granata TypeList type_list; 49684db9105SGreg Clayton const bool exact_match = false; 4976f3533fbSEnrico Granata ConstString name(type); 498ae088e52SGreg Clayton llvm::DenseSet<SymbolFile *> searched_symbol_files; 499bf9d84c0SAdrian Prantl module_sp->FindTypes(name, exact_match, UINT32_MAX, searched_symbol_files, 500bf9d84c0SAdrian Prantl type_list); 5016f3533fbSEnrico Granata 502bf9d84c0SAdrian Prantl if (type_list.Empty()) { 5030e252e38SAlex Langford auto type_system_or_err = 504b9c1b51eSKate Stone module_sp->GetTypeSystemForLanguage(eLanguageTypeC); 5050e252e38SAlex Langford if (auto err = type_system_or_err.takeError()) { 5060e252e38SAlex Langford llvm::consumeError(std::move(err)); 5070e252e38SAlex Langford } else { 5080e252e38SAlex Langford CompilerType compiler_type = 5090e252e38SAlex Langford type_system_or_err->GetBuiltinTypeByName(name); 51056939cb3SGreg Clayton if (compiler_type) 51156939cb3SGreg Clayton retval.Append(SBType(compiler_type)); 51256939cb3SGreg Clayton } 513bf9d84c0SAdrian Prantl } else { 514bf9d84c0SAdrian Prantl for (size_t idx = 0; idx < type_list.GetSize(); idx++) { 515bf9d84c0SAdrian Prantl TypeSP type_sp(type_list.GetTypeAtIndex(idx)); 516bf9d84c0SAdrian Prantl if (type_sp) 517bf9d84c0SAdrian Prantl retval.Append(SBType(type_sp)); 518b43165b7SGreg Clayton } 519b43165b7SGreg Clayton } 520bf9d84c0SAdrian Prantl } 521baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(retval); 5226f3533fbSEnrico Granata } 523cac9c5f9SGreg Clayton 524b9c1b51eSKate Stone lldb::SBType SBModule::GetTypeByID(lldb::user_id_t uid) { 525baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBType, SBModule, GetTypeByID, (lldb::user_id_t), 526baf5664fSJonas Devlieghere uid); 527baf5664fSJonas Devlieghere 5281f4db7daSGreg Clayton ModuleSP module_sp(GetSP()); 529b9c1b51eSKate Stone if (module_sp) { 530465eae36SPavel Labath if (SymbolFile *symfile = module_sp->GetSymbolFile()) { 531465eae36SPavel Labath Type *type_ptr = symfile->ResolveTypeUID(uid); 5321f4db7daSGreg Clayton if (type_ptr) 533baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBType(type_ptr->shared_from_this())); 5341f4db7daSGreg Clayton } 5351f4db7daSGreg Clayton } 536baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBType()); 5371f4db7daSGreg Clayton } 5381f4db7daSGreg Clayton 539b9c1b51eSKate Stone lldb::SBTypeList SBModule::GetTypes(uint32_t type_mask) { 540baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeList, SBModule, GetTypes, (uint32_t), 541baf5664fSJonas Devlieghere type_mask); 542baf5664fSJonas Devlieghere 543f02500c7SGreg Clayton SBTypeList sb_type_list; 544f02500c7SGreg Clayton 545f02500c7SGreg Clayton ModuleSP module_sp(GetSP()); 546117b1fa1SZachary Turner if (!module_sp) 547baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_type_list); 548465eae36SPavel Labath SymbolFile *symfile = module_sp->GetSymbolFile(); 549465eae36SPavel Labath if (!symfile) 550baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_type_list); 551117b1fa1SZachary Turner 552117b1fa1SZachary Turner TypeClass type_class = static_cast<TypeClass>(type_mask); 553f02500c7SGreg Clayton TypeList type_list; 554465eae36SPavel Labath symfile->GetTypes(nullptr, type_class, type_list); 555d5b44036SJonas Devlieghere sb_type_list.m_opaque_up->Append(type_list); 556baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_type_list); 557f02500c7SGreg Clayton } 558cac9c5f9SGreg Clayton 559b9c1b51eSKate Stone SBSection SBModule::FindSection(const char *sect_name) { 560baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSection, SBModule, FindSection, (const char *), 561baf5664fSJonas Devlieghere sect_name); 562baf5664fSJonas Devlieghere 563cac9c5f9SGreg Clayton SBSection sb_section; 564cac9c5f9SGreg Clayton 565c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 566b9c1b51eSKate Stone if (sect_name && module_sp) { 567a7499c98SMichael Sartain // Give the symbol vendor a chance to add to the unified section list. 568465eae36SPavel Labath module_sp->GetSymbolFile(); 5693046e668SGreg Clayton SectionList *section_list = module_sp->GetSectionList(); 570b9c1b51eSKate Stone if (section_list) { 571cac9c5f9SGreg Clayton ConstString const_sect_name(sect_name); 572cac9c5f9SGreg Clayton SectionSP section_sp(section_list->FindSectionByName(const_sect_name)); 573b9c1b51eSKate Stone if (section_sp) { 574e72dfb32SGreg Clayton sb_section.SetSP(section_sp); 575cac9c5f9SGreg Clayton } 576cac9c5f9SGreg Clayton } 577cac9c5f9SGreg Clayton } 578baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_section); 579cac9c5f9SGreg Clayton } 580cac9c5f9SGreg Clayton 581b9c1b51eSKate Stone lldb::ByteOrder SBModule::GetByteOrder() { 582baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::ByteOrder, SBModule, GetByteOrder); 583baf5664fSJonas Devlieghere 584c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 585c2ff9318SGreg Clayton if (module_sp) 586c2ff9318SGreg Clayton return module_sp->GetArchitecture().GetByteOrder(); 58713d1950aSGreg Clayton return eByteOrderInvalid; 58813d1950aSGreg Clayton } 58913d1950aSGreg Clayton 590b9c1b51eSKate Stone const char *SBModule::GetTriple() { 591baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBModule, GetTriple); 592baf5664fSJonas Devlieghere 593c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 594b9c1b51eSKate Stone if (module_sp) { 595c2ff9318SGreg Clayton std::string triple(module_sp->GetArchitecture().GetTriple().str()); 59605097246SAdrian Prantl // Unique the string so we don't run into ownership issues since the const 59705097246SAdrian Prantl // strings put the string into the string pool once and the strings never 59805097246SAdrian Prantl // comes out 59913d1950aSGreg Clayton ConstString const_triple(triple.c_str()); 60013d1950aSGreg Clayton return const_triple.GetCString(); 60113d1950aSGreg Clayton } 602248a1305SKonrad Kleine return nullptr; 60313d1950aSGreg Clayton } 60413d1950aSGreg Clayton 605b9c1b51eSKate Stone uint32_t SBModule::GetAddressByteSize() { 606baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBModule, GetAddressByteSize); 607baf5664fSJonas Devlieghere 608c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 609c2ff9318SGreg Clayton if (module_sp) 610c2ff9318SGreg Clayton return module_sp->GetArchitecture().GetAddressByteSize(); 61113d1950aSGreg Clayton return sizeof(void *); 61213d1950aSGreg Clayton } 61313d1950aSGreg Clayton 614b9c1b51eSKate Stone uint32_t SBModule::GetVersion(uint32_t *versions, uint32_t num_versions) { 615baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(uint32_t, SBModule, GetVersion, (uint32_t *, uint32_t), 616baf5664fSJonas Devlieghere versions, num_versions); 617baf5664fSJonas Devlieghere 6182272c481SPavel Labath llvm::VersionTuple version; 6192272c481SPavel Labath if (ModuleSP module_sp = GetSP()) 6202272c481SPavel Labath version = module_sp->GetVersion(); 6212272c481SPavel Labath uint32_t result = 0; 6222272c481SPavel Labath if (!version.empty()) 6232272c481SPavel Labath ++result; 6242272c481SPavel Labath if (version.getMinor()) 6252272c481SPavel Labath ++result; 6262272c481SPavel Labath if (version.getSubminor()) 6272272c481SPavel Labath ++result; 6282272c481SPavel Labath 6292272c481SPavel Labath if (!versions) 6302272c481SPavel Labath return result; 6312272c481SPavel Labath 6322272c481SPavel Labath if (num_versions > 0) 6332272c481SPavel Labath versions[0] = version.empty() ? UINT32_MAX : version.getMajor(); 6342272c481SPavel Labath if (num_versions > 1) 6352272c481SPavel Labath versions[1] = version.getMinor().getValueOr(UINT32_MAX); 6362272c481SPavel Labath if (num_versions > 2) 6372272c481SPavel Labath versions[2] = version.getSubminor().getValueOr(UINT32_MAX); 6382272c481SPavel Labath for (uint32_t i = 3; i < num_versions; ++i) 639c2ff9318SGreg Clayton versions[i] = UINT32_MAX; 6402272c481SPavel Labath return result; 6413467d80bSEnrico Granata } 642c2ff9318SGreg Clayton 643b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetSymbolFileSpec() const { 644baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule, 645baf5664fSJonas Devlieghere GetSymbolFileSpec); 646baf5664fSJonas Devlieghere 647eb2c19a5SIlia K lldb::SBFileSpec sb_file_spec; 648eb2c19a5SIlia K ModuleSP module_sp(GetSP()); 649b9c1b51eSKate Stone if (module_sp) { 650465eae36SPavel Labath if (SymbolFile *symfile = module_sp->GetSymbolFile()) 651465eae36SPavel Labath sb_file_spec.SetFileSpec(symfile->GetObjectFile()->GetFileSpec()); 652eb2c19a5SIlia K } 653baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_file_spec); 654eb2c19a5SIlia K } 655eb2c19a5SIlia K 656b9c1b51eSKate Stone lldb::SBAddress SBModule::GetObjectFileHeaderAddress() const { 657baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBAddress, SBModule, 658baf5664fSJonas Devlieghere GetObjectFileHeaderAddress); 659baf5664fSJonas Devlieghere 660eb2c19a5SIlia K lldb::SBAddress sb_addr; 661eb2c19a5SIlia K ModuleSP module_sp(GetSP()); 662b9c1b51eSKate Stone if (module_sp) { 663eb2c19a5SIlia K ObjectFile *objfile_ptr = module_sp->GetObjectFile(); 664eb2c19a5SIlia K if (objfile_ptr) 665d1e3fe21SPavel Labath sb_addr.ref() = objfile_ptr->GetBaseAddress(); 666eb2c19a5SIlia K } 667baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_addr); 668eb2c19a5SIlia K } 6699b087d2cSAleksandr Urakov 6709b087d2cSAleksandr Urakov lldb::SBAddress SBModule::GetObjectFileEntryPointAddress() const { 671baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBAddress, SBModule, 672baf5664fSJonas Devlieghere GetObjectFileEntryPointAddress); 673baf5664fSJonas Devlieghere 6749b087d2cSAleksandr Urakov lldb::SBAddress sb_addr; 6759b087d2cSAleksandr Urakov ModuleSP module_sp(GetSP()); 6769b087d2cSAleksandr Urakov if (module_sp) { 6779b087d2cSAleksandr Urakov ObjectFile *objfile_ptr = module_sp->GetObjectFile(); 6789b087d2cSAleksandr Urakov if (objfile_ptr) 6799b087d2cSAleksandr Urakov sb_addr.ref() = objfile_ptr->GetEntryPointAddress(); 6809b087d2cSAleksandr Urakov } 681baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_addr); 6829b087d2cSAleksandr Urakov } 683ae211eceSMichal Gorny 684da601ea7SJonas Devlieghere uint32_t SBModule::GetNumberAllocatedModules() { 685da601ea7SJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(uint32_t, SBModule, 686da601ea7SJonas Devlieghere GetNumberAllocatedModules); 687da601ea7SJonas Devlieghere 688da601ea7SJonas Devlieghere return Module::GetNumberAllocatedModules(); 689da601ea7SJonas Devlieghere } 690da601ea7SJonas Devlieghere 691c2f9454aSRaphael Isemann void SBModule::GarbageCollectAllocatedModules() { 692c2f9454aSRaphael Isemann LLDB_RECORD_STATIC_METHOD_NO_ARGS(void, SBModule, 693c2f9454aSRaphael Isemann GarbageCollectAllocatedModules); 694e095e98aSJonas Devlieghere 695c2f9454aSRaphael Isemann const bool mandatory = false; 696c2f9454aSRaphael Isemann ModuleList::RemoveOrphanSharedModules(mandatory); 697c2f9454aSRaphael Isemann } 698c2f9454aSRaphael Isemann 699ae211eceSMichal Gorny namespace lldb_private { 700ae211eceSMichal Gorny namespace repro { 701ae211eceSMichal Gorny 702e095e98aSJonas Devlieghere template <> void RegisterMethods<SBModule>(Registry &R) { 703ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBModule, ()); 704ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBModule, (const lldb::SBModuleSpec &)); 705ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBModule, (const lldb::SBModule &)); 706ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBModule, (lldb::SBProcess &, lldb::addr_t)); 707e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD(const lldb::SBModule &, SBModule, operator=, 708e095e98aSJonas Devlieghere (const lldb::SBModule &)); 709ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBModule, IsValid, ()); 710ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBModule, operator bool, ()); 711ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBModule, Clear, ()); 712ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetFileSpec, ()); 713ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetPlatformFileSpec, 714ae211eceSMichal Gorny ()); 715ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBModule, SetPlatformFileSpec, 716ae211eceSMichal Gorny (const lldb::SBFileSpec &)); 717ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBFileSpec, SBModule, GetRemoteInstallFileSpec, 718ae211eceSMichal Gorny ()); 719ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBModule, SetRemoteInstallFileSpec, 720ae211eceSMichal Gorny (lldb::SBFileSpec &)); 721ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(const char *, SBModule, GetUUIDString, ()); 722e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD_CONST(bool, SBModule, operator==, 723e095e98aSJonas Devlieghere (const lldb::SBModule &)); 724e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD_CONST(bool, SBModule, operator!=, 725e095e98aSJonas Devlieghere (const lldb::SBModule &)); 726ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBAddress, SBModule, ResolveFileAddress, 727ae211eceSMichal Gorny (lldb::addr_t)); 728ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbolContext, SBModule, 729ae211eceSMichal Gorny ResolveSymbolContextForAddress, 730ae211eceSMichal Gorny (const lldb::SBAddress &, uint32_t)); 731ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBModule, GetDescription, (lldb::SBStream &)); 732ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBModule, GetNumCompileUnits, ()); 733ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBCompileUnit, SBModule, GetCompileUnitAtIndex, 734ae211eceSMichal Gorny (uint32_t)); 735ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindCompileUnits, 736ae211eceSMichal Gorny (const lldb::SBFileSpec &)); 737ae211eceSMichal Gorny LLDB_REGISTER_METHOD(size_t, SBModule, GetNumSymbols, ()); 738ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbol, SBModule, GetSymbolAtIndex, (size_t)); 739ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbol, SBModule, FindSymbol, 740ae211eceSMichal Gorny (const char *, lldb::SymbolType)); 741ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindSymbols, 742ae211eceSMichal Gorny (const char *, lldb::SymbolType)); 743ae211eceSMichal Gorny LLDB_REGISTER_METHOD(size_t, SBModule, GetNumSections, ()); 744e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD(lldb::SBSection, SBModule, GetSectionAtIndex, (size_t)); 745ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindFunctions, 746ae211eceSMichal Gorny (const char *, uint32_t)); 747ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBValueList, SBModule, FindGlobalVariables, 748ae211eceSMichal Gorny (lldb::SBTarget &, const char *, uint32_t)); 749ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBValue, SBModule, FindFirstGlobalVariable, 750ae211eceSMichal Gorny (lldb::SBTarget &, const char *)); 751ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBType, SBModule, FindFirstType, (const char *)); 752e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD(lldb::SBType, SBModule, GetBasicType, (lldb::BasicType)); 753ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeList, SBModule, FindTypes, (const char *)); 754e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD(lldb::SBType, SBModule, GetTypeByID, (lldb::user_id_t)); 755ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeList, SBModule, GetTypes, (uint32_t)); 756e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD(lldb::SBSection, SBModule, FindSection, (const char *)); 757ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::ByteOrder, SBModule, GetByteOrder, ()); 758ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBModule, GetTriple, ()); 759ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBModule, GetAddressByteSize, ()); 760e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD(uint32_t, SBModule, GetVersion, (uint32_t *, uint32_t)); 761e095e98aSJonas Devlieghere LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetSymbolFileSpec, ()); 762ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBAddress, SBModule, 763ae211eceSMichal Gorny GetObjectFileHeaderAddress, ()); 764ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBAddress, SBModule, 765ae211eceSMichal Gorny GetObjectFileEntryPointAddress, ()); 766da601ea7SJonas Devlieghere LLDB_REGISTER_STATIC_METHOD(uint32_t, SBModule, GetNumberAllocatedModules, 767da601ea7SJonas Devlieghere ()); 768e095e98aSJonas Devlieghere LLDB_REGISTER_STATIC_METHOD(void, SBModule, GarbageCollectAllocatedModules, 769e095e98aSJonas Devlieghere ()); 770ae211eceSMichal Gorny } 771ae211eceSMichal Gorny 772e095e98aSJonas Devlieghere } // namespace repro 773e095e98aSJonas Devlieghere } // namespace lldb_private 774