130fdc8d8SChris Lattner //===-- SBModule.cpp --------------------------------------------*- C++ -*-===// 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" 236f3533fbSEnrico Granata #include "lldb/Symbol/SymbolVendor.h" 241f746071SGreg Clayton #include "lldb/Symbol/Symtab.h" 2556939cb3SGreg Clayton #include "lldb/Symbol/TypeSystem.h" 26dea8cb4fSGreg Clayton #include "lldb/Symbol/VariableList.h" 27dea8cb4fSGreg Clayton #include "lldb/Target/Target.h" 28bf9a7730SZachary Turner #include "lldb/Utility/StreamString.h" 2930fdc8d8SChris Lattner 3030fdc8d8SChris Lattner using namespace lldb; 31ceb6b139SCaroline Tice using namespace lldb_private; 3230fdc8d8SChris Lattner 33baf5664fSJonas Devlieghere SBModule::SBModule() : m_opaque_sp() { 34baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBModule); 35baf5664fSJonas Devlieghere } 3630fdc8d8SChris Lattner 37b9c1b51eSKate Stone SBModule::SBModule(const lldb::ModuleSP &module_sp) : m_opaque_sp(module_sp) {} 3830fdc8d8SChris Lattner 39b9c1b51eSKate Stone SBModule::SBModule(const SBModuleSpec &module_spec) : m_opaque_sp() { 40baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBModule, (const lldb::SBModuleSpec &), module_spec); 41baf5664fSJonas Devlieghere 42226cce25SGreg Clayton ModuleSP module_sp; 43248a1305SKonrad Kleine Status error = ModuleList::GetSharedModule( 44248a1305SKonrad Kleine *module_spec.m_opaque_up, module_sp, nullptr, nullptr, nullptr); 45226cce25SGreg Clayton if (module_sp) 46226cce25SGreg Clayton SetSP(module_sp); 47226cce25SGreg Clayton } 48226cce25SGreg Clayton 49baf5664fSJonas Devlieghere SBModule::SBModule(const SBModule &rhs) : m_opaque_sp(rhs.m_opaque_sp) { 50baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBModule, (const lldb::SBModule &), rhs); 51baf5664fSJonas Devlieghere } 52efabb123SGreg Clayton 53b9c1b51eSKate Stone SBModule::SBModule(lldb::SBProcess &process, lldb::addr_t header_addr) 54b9c1b51eSKate Stone : m_opaque_sp() { 55baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBModule, (lldb::SBProcess &, lldb::addr_t), process, 56baf5664fSJonas Devlieghere header_addr); 57baf5664fSJonas Devlieghere 58c9660546SGreg Clayton ProcessSP process_sp(process.GetSP()); 59b9c1b51eSKate Stone if (process_sp) { 6039f7ee86SGreg Clayton m_opaque_sp = process_sp->ReadModuleFromMemory(FileSpec(), header_addr); 61b9c1b51eSKate Stone if (m_opaque_sp) { 6239f7ee86SGreg Clayton Target &target = process_sp->GetTarget(); 6339f7ee86SGreg Clayton bool changed = false; 64751caf65SGreg Clayton m_opaque_sp->SetLoadAddress(target, 0, true, changed); 6539f7ee86SGreg Clayton target.GetImages().Append(m_opaque_sp); 6639f7ee86SGreg Clayton } 67c859e2d5SGreg Clayton } 68c9660546SGreg Clayton } 69c9660546SGreg Clayton 70b9c1b51eSKate Stone const SBModule &SBModule::operator=(const SBModule &rhs) { 71baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBModule &, 72baf5664fSJonas Devlieghere SBModule, operator=,(const lldb::SBModule &), rhs); 73baf5664fSJonas Devlieghere 74efabb123SGreg Clayton if (this != &rhs) 75efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 76306809f2SJonas Devlieghere return LLDB_RECORD_RESULT(*this); 77efabb123SGreg Clayton } 78efabb123SGreg Clayton 79b9c1b51eSKate Stone SBModule::~SBModule() {} 8030fdc8d8SChris Lattner 81baf5664fSJonas Devlieghere bool SBModule::IsValid() const { 82baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBModule, IsValid); 837f5237bcSPavel Labath return this->operator bool(); 847f5237bcSPavel Labath } 857f5237bcSPavel Labath SBModule::operator bool() const { 867f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBModule, operator bool); 8730fdc8d8SChris Lattner 88248a1305SKonrad Kleine return m_opaque_sp.get() != nullptr; 89baf5664fSJonas Devlieghere } 90baf5664fSJonas Devlieghere 91baf5664fSJonas Devlieghere void SBModule::Clear() { 92baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBModule, Clear); 93baf5664fSJonas Devlieghere 94baf5664fSJonas Devlieghere m_opaque_sp.reset(); 95baf5664fSJonas Devlieghere } 965d3bca4eSJim Ingham 97b9c1b51eSKate Stone SBFileSpec SBModule::GetFileSpec() const { 98baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule, GetFileSpec); 99baf5664fSJonas Devlieghere 10030fdc8d8SChris Lattner SBFileSpec file_spec; 101c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 102c2ff9318SGreg Clayton if (module_sp) 103c2ff9318SGreg Clayton file_spec.SetFileSpec(module_sp->GetFileSpec()); 104ceb6b139SCaroline Tice 105baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(file_spec); 10630fdc8d8SChris Lattner } 10730fdc8d8SChris Lattner 108b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetPlatformFileSpec() const { 109baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule, 110baf5664fSJonas Devlieghere GetPlatformFileSpec); 111baf5664fSJonas Devlieghere 1122289fa48SGreg Clayton 1132289fa48SGreg Clayton SBFileSpec file_spec; 114c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 115c2ff9318SGreg Clayton if (module_sp) 116c2ff9318SGreg Clayton file_spec.SetFileSpec(module_sp->GetPlatformFileSpec()); 1172289fa48SGreg Clayton 118baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(file_spec); 1192289fa48SGreg Clayton } 1202289fa48SGreg Clayton 121b9c1b51eSKate Stone bool SBModule::SetPlatformFileSpec(const lldb::SBFileSpec &platform_file) { 122baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBModule, SetPlatformFileSpec, 123baf5664fSJonas Devlieghere (const lldb::SBFileSpec &), platform_file); 124baf5664fSJonas Devlieghere 1252289fa48SGreg Clayton bool result = false; 1262289fa48SGreg Clayton 127c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 128b9c1b51eSKate Stone if (module_sp) { 129c2ff9318SGreg Clayton module_sp->SetPlatformFileSpec(*platform_file); 1302289fa48SGreg Clayton result = true; 1312289fa48SGreg Clayton } 1322289fa48SGreg Clayton 1332289fa48SGreg Clayton return result; 1342289fa48SGreg Clayton } 1352289fa48SGreg Clayton 136b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetRemoteInstallFileSpec() { 137baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBFileSpec, SBModule, 138baf5664fSJonas Devlieghere GetRemoteInstallFileSpec); 139baf5664fSJonas Devlieghere 140fbb76349SGreg Clayton SBFileSpec sb_file_spec; 141fbb76349SGreg Clayton ModuleSP module_sp(GetSP()); 142fbb76349SGreg Clayton if (module_sp) 143fbb76349SGreg Clayton sb_file_spec.SetFileSpec(module_sp->GetRemoteInstallFileSpec()); 144baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_file_spec); 145fbb76349SGreg Clayton } 146fbb76349SGreg Clayton 147b9c1b51eSKate Stone bool SBModule::SetRemoteInstallFileSpec(lldb::SBFileSpec &file) { 148baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBModule, SetRemoteInstallFileSpec, 149baf5664fSJonas Devlieghere (lldb::SBFileSpec &), file); 150baf5664fSJonas Devlieghere 151fbb76349SGreg Clayton ModuleSP module_sp(GetSP()); 152b9c1b51eSKate Stone if (module_sp) { 153fbb76349SGreg Clayton module_sp->SetRemoteInstallFileSpec(file.ref()); 154fbb76349SGreg Clayton return true; 155fbb76349SGreg Clayton } 156fbb76349SGreg Clayton return false; 157fbb76349SGreg Clayton } 1582289fa48SGreg Clayton 159b9c1b51eSKate Stone const uint8_t *SBModule::GetUUIDBytes() const { 160baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(const uint8_t *, SBModule, GetUUIDBytes); 161baf5664fSJonas Devlieghere 162248a1305SKonrad Kleine const uint8_t *uuid_bytes = nullptr; 163c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 164c2ff9318SGreg Clayton if (module_sp) 165470b286eSPavel Labath uuid_bytes = module_sp->GetUUID().GetBytes().data(); 166ceb6b139SCaroline Tice 1674838131bSGreg Clayton return uuid_bytes; 16830fdc8d8SChris Lattner } 16930fdc8d8SChris Lattner 170b9c1b51eSKate Stone const char *SBModule::GetUUIDString() const { 171baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBModule, GetUUIDString); 172baf5664fSJonas Devlieghere 173248a1305SKonrad Kleine const char *uuid_cstr = nullptr; 174c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 175b9c1b51eSKate Stone if (module_sp) { 17605097246SAdrian Prantl // We are going to return a "const char *" value through the public API, so 17705097246SAdrian Prantl // we need to constify it so it gets added permanently the string pool and 17805097246SAdrian Prantl // then we don't need to worry about the lifetime of the string as it will 17905097246SAdrian Prantl // never go away once it has been put into the ConstString string pool 180f1be855aSGreg Clayton uuid_cstr = ConstString(module_sp->GetUUID().GetAsString()).GetCString(); 181f1be855aSGreg Clayton } 182f1be855aSGreg Clayton 183b9c1b51eSKate Stone if (uuid_cstr && uuid_cstr[0]) { 184f1be855aSGreg Clayton return uuid_cstr; 185c16b4af0SJason Molenda } 186df2963edSJohnny Chen 187248a1305SKonrad Kleine return nullptr; 188df2963edSJohnny Chen } 189df2963edSJohnny Chen 190b9c1b51eSKate Stone bool SBModule::operator==(const SBModule &rhs) const { 191baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBModule, operator==,(const lldb::SBModule &), 192baf5664fSJonas Devlieghere rhs); 193baf5664fSJonas Devlieghere 1946611103cSGreg Clayton if (m_opaque_sp) 1956611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 19630fdc8d8SChris Lattner return false; 19730fdc8d8SChris Lattner } 19830fdc8d8SChris Lattner 199b9c1b51eSKate Stone bool SBModule::operator!=(const SBModule &rhs) const { 200baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBModule, operator!=,(const lldb::SBModule &), 201baf5664fSJonas Devlieghere rhs); 202baf5664fSJonas Devlieghere 2036611103cSGreg Clayton if (m_opaque_sp) 2046611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 20530fdc8d8SChris Lattner return false; 20630fdc8d8SChris Lattner } 20730fdc8d8SChris Lattner 208b9c1b51eSKate Stone ModuleSP SBModule::GetSP() const { return m_opaque_sp; } 20930fdc8d8SChris Lattner 210b9c1b51eSKate Stone void SBModule::SetSP(const ModuleSP &module_sp) { m_opaque_sp = module_sp; } 21130fdc8d8SChris Lattner 212b9c1b51eSKate Stone SBAddress SBModule::ResolveFileAddress(lldb::addr_t vm_addr) { 213baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBAddress, SBModule, ResolveFileAddress, 214baf5664fSJonas Devlieghere (lldb::addr_t), vm_addr); 215baf5664fSJonas Devlieghere 216cac9c5f9SGreg Clayton lldb::SBAddress sb_addr; 217c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 218b9c1b51eSKate Stone if (module_sp) { 219cac9c5f9SGreg Clayton Address addr; 220c2ff9318SGreg Clayton if (module_sp->ResolveFileAddress(vm_addr, addr)) 221cac9c5f9SGreg Clayton sb_addr.ref() = addr; 222cac9c5f9SGreg Clayton } 223baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_addr); 22409960031SGreg Clayton } 22509960031SGreg Clayton 22609960031SGreg Clayton SBSymbolContext 227b9c1b51eSKate Stone SBModule::ResolveSymbolContextForAddress(const SBAddress &addr, 228b9c1b51eSKate Stone uint32_t resolve_scope) { 229baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbolContext, SBModule, 230baf5664fSJonas Devlieghere ResolveSymbolContextForAddress, 231baf5664fSJonas Devlieghere (const lldb::SBAddress &, uint32_t), addr, resolve_scope); 232baf5664fSJonas Devlieghere 23309960031SGreg Clayton SBSymbolContext sb_sc; 234c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 235991e4453SZachary Turner SymbolContextItem scope = static_cast<SymbolContextItem>(resolve_scope); 236c2ff9318SGreg Clayton if (module_sp && addr.IsValid()) 237991e4453SZachary Turner module_sp->ResolveSymbolContextForAddress(addr.ref(), scope, *sb_sc); 238baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_sc); 23909960031SGreg Clayton } 24009960031SGreg Clayton 241b9c1b51eSKate Stone bool SBModule::GetDescription(SBStream &description) { 242baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBModule, GetDescription, (lldb::SBStream &), 243baf5664fSJonas Devlieghere description); 244baf5664fSJonas Devlieghere 245da7bc7d0SGreg Clayton Stream &strm = description.ref(); 246da7bc7d0SGreg Clayton 247c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 248b9c1b51eSKate Stone if (module_sp) { 249c2ff9318SGreg Clayton module_sp->GetDescription(&strm); 250b9c1b51eSKate Stone } else 251da7bc7d0SGreg Clayton strm.PutCString("No value"); 252dde9cff3SCaroline Tice 253dde9cff3SCaroline Tice return true; 254dde9cff3SCaroline Tice } 255bbdabce2SGreg Clayton 256b9c1b51eSKate Stone uint32_t SBModule::GetNumCompileUnits() { 257baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBModule, GetNumCompileUnits); 258baf5664fSJonas Devlieghere 259873a7a4bSJohnny Chen ModuleSP module_sp(GetSP()); 260b9c1b51eSKate Stone if (module_sp) { 261873a7a4bSJohnny Chen return module_sp->GetNumCompileUnits(); 262873a7a4bSJohnny Chen } 263873a7a4bSJohnny Chen return 0; 264873a7a4bSJohnny Chen } 265873a7a4bSJohnny Chen 266b9c1b51eSKate Stone SBCompileUnit SBModule::GetCompileUnitAtIndex(uint32_t index) { 267baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBCompileUnit, SBModule, GetCompileUnitAtIndex, 268baf5664fSJonas Devlieghere (uint32_t), index); 269baf5664fSJonas Devlieghere 270873a7a4bSJohnny Chen SBCompileUnit sb_cu; 271873a7a4bSJohnny Chen ModuleSP module_sp(GetSP()); 272b9c1b51eSKate Stone if (module_sp) { 273873a7a4bSJohnny Chen CompUnitSP cu_sp = module_sp->GetCompileUnitAtIndex(index); 274873a7a4bSJohnny Chen sb_cu.reset(cu_sp.get()); 275873a7a4bSJohnny Chen } 276baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_cu); 277873a7a4bSJohnny Chen } 278873a7a4bSJohnny Chen 279baf5664fSJonas Devlieghere SBSymbolContextList SBModule::FindCompileUnits(const SBFileSpec &sb_file_spec) { 280baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindCompileUnits, 281baf5664fSJonas Devlieghere (const lldb::SBFileSpec &), sb_file_spec); 282baf5664fSJonas Devlieghere 283da0c081fSAlexander Polyakov SBSymbolContextList sb_sc_list; 284da0c081fSAlexander Polyakov const ModuleSP module_sp(GetSP()); 285da0c081fSAlexander Polyakov if (sb_file_spec.IsValid() && module_sp) { 286da0c081fSAlexander Polyakov const bool append = true; 287da0c081fSAlexander Polyakov module_sp->FindCompileUnits(*sb_file_spec, append, *sb_sc_list); 288da0c081fSAlexander Polyakov } 289baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_sc_list); 290da0c081fSAlexander Polyakov } 291da0c081fSAlexander Polyakov 292b9c1b51eSKate Stone static Symtab *GetUnifiedSymbolTable(const lldb::ModuleSP &module_sp) { 293b9c1b51eSKate Stone if (module_sp) { 294a7499c98SMichael Sartain SymbolVendor *symbols = module_sp->GetSymbolVendor(); 295a7499c98SMichael Sartain if (symbols) 296a7499c98SMichael Sartain return symbols->GetSymtab(); 297a7499c98SMichael Sartain } 298248a1305SKonrad Kleine return nullptr; 299a7499c98SMichael Sartain } 300a7499c98SMichael Sartain 301b9c1b51eSKate Stone size_t SBModule::GetNumSymbols() { 302baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(size_t, SBModule, GetNumSymbols); 303baf5664fSJonas Devlieghere 304c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 305b9c1b51eSKate Stone if (module_sp) { 306a7499c98SMichael Sartain Symtab *symtab = GetUnifiedSymbolTable(module_sp); 307bbdabce2SGreg Clayton if (symtab) 308bbdabce2SGreg Clayton return symtab->GetNumSymbols(); 309bbdabce2SGreg Clayton } 310bbdabce2SGreg Clayton return 0; 311bbdabce2SGreg Clayton } 312bbdabce2SGreg Clayton 313b9c1b51eSKate Stone SBSymbol SBModule::GetSymbolAtIndex(size_t idx) { 314baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbol, SBModule, GetSymbolAtIndex, (size_t), idx); 315baf5664fSJonas Devlieghere 316bbdabce2SGreg Clayton SBSymbol sb_symbol; 317c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 318a7499c98SMichael Sartain Symtab *symtab = GetUnifiedSymbolTable(module_sp); 319bbdabce2SGreg Clayton if (symtab) 320bbdabce2SGreg Clayton sb_symbol.SetSymbol(symtab->SymbolAtIndex(idx)); 321baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_symbol); 322bbdabce2SGreg Clayton } 323fe356d35SGreg Clayton 324b9c1b51eSKate Stone lldb::SBSymbol SBModule::FindSymbol(const char *name, 325b9c1b51eSKate Stone lldb::SymbolType symbol_type) { 326baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbol, SBModule, FindSymbol, 327baf5664fSJonas Devlieghere (const char *, lldb::SymbolType), name, symbol_type); 328baf5664fSJonas Devlieghere 329e14e1925SGreg Clayton SBSymbol sb_symbol; 330b9c1b51eSKate Stone if (name && name[0]) { 331e14e1925SGreg Clayton ModuleSP module_sp(GetSP()); 332a7499c98SMichael Sartain Symtab *symtab = GetUnifiedSymbolTable(module_sp); 333e14e1925SGreg Clayton if (symtab) 334b9c1b51eSKate Stone sb_symbol.SetSymbol(symtab->FindFirstSymbolWithNameAndType( 335b9c1b51eSKate Stone ConstString(name), symbol_type, Symtab::eDebugAny, 336b9c1b51eSKate Stone Symtab::eVisibilityAny)); 337e14e1925SGreg Clayton } 338baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_symbol); 339e14e1925SGreg Clayton } 340e14e1925SGreg Clayton 341b9c1b51eSKate Stone lldb::SBSymbolContextList SBModule::FindSymbols(const char *name, 342b9c1b51eSKate Stone lldb::SymbolType symbol_type) { 343baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindSymbols, 344baf5664fSJonas Devlieghere (const char *, lldb::SymbolType), name, symbol_type); 345baf5664fSJonas Devlieghere 346e14e1925SGreg Clayton SBSymbolContextList sb_sc_list; 347b9c1b51eSKate Stone if (name && name[0]) { 348e14e1925SGreg Clayton ModuleSP module_sp(GetSP()); 349a7499c98SMichael Sartain Symtab *symtab = GetUnifiedSymbolTable(module_sp); 350b9c1b51eSKate Stone if (symtab) { 351e14e1925SGreg Clayton std::vector<uint32_t> matching_symbol_indexes; 352b9c1b51eSKate Stone const size_t num_matches = symtab->FindAllSymbolsWithNameAndType( 353b9c1b51eSKate Stone ConstString(name), symbol_type, matching_symbol_indexes); 354b9c1b51eSKate Stone if (num_matches) { 355e14e1925SGreg Clayton SymbolContext sc; 356e14e1925SGreg Clayton sc.module_sp = module_sp; 357e14e1925SGreg Clayton SymbolContextList &sc_list = *sb_sc_list; 358b9c1b51eSKate Stone for (size_t i = 0; i < num_matches; ++i) { 359e14e1925SGreg Clayton sc.symbol = symtab->SymbolAtIndex(matching_symbol_indexes[i]); 360e14e1925SGreg Clayton if (sc.symbol) 361e14e1925SGreg Clayton sc_list.Append(sc); 362e14e1925SGreg Clayton } 363e14e1925SGreg Clayton } 364e14e1925SGreg Clayton } 365e14e1925SGreg Clayton } 366baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_sc_list); 367e14e1925SGreg Clayton } 368e14e1925SGreg Clayton 369b9c1b51eSKate Stone size_t SBModule::GetNumSections() { 370baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(size_t, SBModule, GetNumSections); 371baf5664fSJonas Devlieghere 372c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 373b9c1b51eSKate Stone if (module_sp) { 374a7499c98SMichael Sartain // Give the symbol vendor a chance to add to the unified section list. 375a7499c98SMichael Sartain module_sp->GetSymbolVendor(); 3763046e668SGreg Clayton SectionList *section_list = module_sp->GetSectionList(); 377cac9c5f9SGreg Clayton if (section_list) 378cac9c5f9SGreg Clayton return section_list->GetSize(); 379cac9c5f9SGreg Clayton } 380cac9c5f9SGreg Clayton return 0; 381cac9c5f9SGreg Clayton } 382cac9c5f9SGreg Clayton 383b9c1b51eSKate Stone SBSection SBModule::GetSectionAtIndex(size_t idx) { 384baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSection, SBModule, GetSectionAtIndex, (size_t), 385baf5664fSJonas Devlieghere idx); 386baf5664fSJonas Devlieghere 387cac9c5f9SGreg Clayton SBSection sb_section; 388c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 389b9c1b51eSKate Stone if (module_sp) { 390a7499c98SMichael Sartain // Give the symbol vendor a chance to add to the unified section list. 391a7499c98SMichael Sartain module_sp->GetSymbolVendor(); 3923046e668SGreg Clayton SectionList *section_list = module_sp->GetSectionList(); 393cac9c5f9SGreg Clayton 394cac9c5f9SGreg Clayton if (section_list) 395e72dfb32SGreg Clayton sb_section.SetSP(section_list->GetSectionAtIndex(idx)); 396cac9c5f9SGreg Clayton } 397baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_section); 398cac9c5f9SGreg Clayton } 399cac9c5f9SGreg Clayton 400b9c1b51eSKate Stone lldb::SBSymbolContextList SBModule::FindFunctions(const char *name, 401b9c1b51eSKate Stone uint32_t name_type_mask) { 402baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSymbolContextList, SBModule, FindFunctions, 403baf5664fSJonas Devlieghere (const char *, uint32_t), name, name_type_mask); 404baf5664fSJonas Devlieghere 4055569e64eSGreg Clayton lldb::SBSymbolContextList sb_sc_list; 406c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 407b9c1b51eSKate Stone if (name && module_sp) { 4085569e64eSGreg Clayton const bool append = true; 409fe356d35SGreg Clayton const bool symbols_ok = true; 4109df05fbbSSean Callanan const bool inlines_ok = true; 411117b1fa1SZachary Turner FunctionNameType type = static_cast<FunctionNameType>(name_type_mask); 412248a1305SKonrad Kleine module_sp->FindFunctions(ConstString(name), nullptr, type, symbols_ok, 413117b1fa1SZachary Turner inlines_ok, append, *sb_sc_list); 414fe356d35SGreg Clayton } 415baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_sc_list); 416fe356d35SGreg Clayton } 417fe356d35SGreg Clayton 418b9c1b51eSKate Stone SBValueList SBModule::FindGlobalVariables(SBTarget &target, const char *name, 419b9c1b51eSKate Stone uint32_t max_matches) { 420baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBValueList, SBModule, FindGlobalVariables, 421baf5664fSJonas Devlieghere (lldb::SBTarget &, const char *, uint32_t), target, name, 422baf5664fSJonas Devlieghere max_matches); 423baf5664fSJonas Devlieghere 424dea8cb4fSGreg Clayton SBValueList sb_value_list; 425c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 426b9c1b51eSKate Stone if (name && module_sp) { 427dea8cb4fSGreg Clayton VariableList variable_list; 428b9c1b51eSKate Stone const uint32_t match_count = module_sp->FindGlobalVariables( 429248a1305SKonrad Kleine ConstString(name), nullptr, max_matches, variable_list); 430dea8cb4fSGreg Clayton 431b9c1b51eSKate Stone if (match_count > 0) { 432b9c1b51eSKate Stone for (uint32_t i = 0; i < match_count; ++i) { 433dea8cb4fSGreg Clayton lldb::ValueObjectSP valobj_sp; 434b9556accSGreg Clayton TargetSP target_sp(target.GetSP()); 435b9c1b51eSKate Stone valobj_sp = ValueObjectVariable::Create( 436b9c1b51eSKate Stone target_sp.get(), variable_list.GetVariableAtIndex(i)); 437dea8cb4fSGreg Clayton if (valobj_sp) 43885425d77SEnrico Granata sb_value_list.Append(SBValue(valobj_sp)); 439dea8cb4fSGreg Clayton } 440dea8cb4fSGreg Clayton } 441dea8cb4fSGreg Clayton } 442dea8cb4fSGreg Clayton 443baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_value_list); 444dea8cb4fSGreg Clayton } 4456f3533fbSEnrico Granata 446b9c1b51eSKate Stone lldb::SBValue SBModule::FindFirstGlobalVariable(lldb::SBTarget &target, 447b9c1b51eSKate Stone const char *name) { 448baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBValue, SBModule, FindFirstGlobalVariable, 449baf5664fSJonas Devlieghere (lldb::SBTarget &, const char *), target, name); 450baf5664fSJonas Devlieghere 451bcd80b47SEnrico Granata SBValueList sb_value_list(FindGlobalVariables(target, name, 1)); 452bcd80b47SEnrico Granata if (sb_value_list.IsValid() && sb_value_list.GetSize() > 0) 453baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_value_list.GetValueAtIndex(0)); 454baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBValue()); 455bcd80b47SEnrico Granata } 456bcd80b47SEnrico Granata 457b9c1b51eSKate Stone lldb::SBType SBModule::FindFirstType(const char *name_cstr) { 458baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBType, SBModule, FindFirstType, (const char *), 459baf5664fSJonas Devlieghere name_cstr); 460baf5664fSJonas Devlieghere 461fe42ac4dSGreg Clayton SBType sb_type; 462c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 463b9c1b51eSKate Stone if (name_cstr && module_sp) { 4646f3533fbSEnrico Granata SymbolContext sc; 46584db9105SGreg Clayton const bool exact_match = false; 4666f3533fbSEnrico Granata ConstString name(name_cstr); 4676f3533fbSEnrico Granata 468b43165b7SGreg Clayton sb_type = SBType(module_sp->FindFirstType(sc, name, exact_match)); 4696f3533fbSEnrico Granata 470b9c1b51eSKate Stone if (!sb_type.IsValid()) { 471*0e252e38SAlex Langford auto type_system_or_err = 472b9c1b51eSKate Stone module_sp->GetTypeSystemForLanguage(eLanguageTypeC); 473*0e252e38SAlex Langford if (auto err = type_system_or_err.takeError()) { 474*0e252e38SAlex Langford llvm::consumeError(std::move(err)); 475*0e252e38SAlex Langford return LLDB_RECORD_RESULT(SBType()); 476*0e252e38SAlex Langford } 477*0e252e38SAlex Langford sb_type = SBType(type_system_or_err->GetBuiltinTypeByName(name)); 47856939cb3SGreg Clayton } 4796f3533fbSEnrico Granata } 480baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_type); 4816f3533fbSEnrico Granata } 4826f3533fbSEnrico Granata 483b9c1b51eSKate Stone lldb::SBType SBModule::GetBasicType(lldb::BasicType type) { 484baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBType, SBModule, GetBasicType, (lldb::BasicType), 485baf5664fSJonas Devlieghere type); 486baf5664fSJonas Devlieghere 487b43165b7SGreg Clayton ModuleSP module_sp(GetSP()); 488b9c1b51eSKate Stone if (module_sp) { 489*0e252e38SAlex Langford auto type_system_or_err = 490b9c1b51eSKate Stone module_sp->GetTypeSystemForLanguage(eLanguageTypeC); 491*0e252e38SAlex Langford if (auto err = type_system_or_err.takeError()) { 492*0e252e38SAlex Langford llvm::consumeError(std::move(err)); 493*0e252e38SAlex Langford } else { 494*0e252e38SAlex Langford return LLDB_RECORD_RESULT( 495*0e252e38SAlex Langford SBType(type_system_or_err->GetBasicTypeFromAST(type))); 496*0e252e38SAlex Langford } 49756939cb3SGreg Clayton } 498baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBType()); 499b43165b7SGreg Clayton } 500b43165b7SGreg Clayton 501b9c1b51eSKate Stone lldb::SBTypeList SBModule::FindTypes(const char *type) { 502baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeList, SBModule, FindTypes, (const char *), 503baf5664fSJonas Devlieghere type); 504baf5664fSJonas Devlieghere 5056f3533fbSEnrico Granata SBTypeList retval; 5066f3533fbSEnrico Granata 507c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 508b9c1b51eSKate Stone if (type && module_sp) { 5096f3533fbSEnrico Granata TypeList type_list; 51084db9105SGreg Clayton const bool exact_match = false; 5116f3533fbSEnrico Granata ConstString name(type); 512ae088e52SGreg Clayton llvm::DenseSet<SymbolFile *> searched_symbol_files; 513b9c1b51eSKate Stone const uint32_t num_matches = module_sp->FindTypes( 514576495e6SZachary Turner name, exact_match, UINT32_MAX, searched_symbol_files, type_list); 5156f3533fbSEnrico Granata 516b9c1b51eSKate Stone if (num_matches > 0) { 517b9c1b51eSKate Stone for (size_t idx = 0; idx < num_matches; idx++) { 518fe42ac4dSGreg Clayton TypeSP type_sp(type_list.GetTypeAtIndex(idx)); 519fe42ac4dSGreg Clayton if (type_sp) 520fe42ac4dSGreg Clayton retval.Append(SBType(type_sp)); 521fe42ac4dSGreg Clayton } 522b9c1b51eSKate Stone } else { 523*0e252e38SAlex Langford auto type_system_or_err = 524b9c1b51eSKate Stone module_sp->GetTypeSystemForLanguage(eLanguageTypeC); 525*0e252e38SAlex Langford if (auto err = type_system_or_err.takeError()) { 526*0e252e38SAlex Langford llvm::consumeError(std::move(err)); 527*0e252e38SAlex Langford } else { 528*0e252e38SAlex Langford CompilerType compiler_type = 529*0e252e38SAlex Langford type_system_or_err->GetBuiltinTypeByName(name); 53056939cb3SGreg Clayton if (compiler_type) 53156939cb3SGreg Clayton retval.Append(SBType(compiler_type)); 53256939cb3SGreg Clayton } 533b43165b7SGreg Clayton } 534b43165b7SGreg Clayton } 5356f3533fbSEnrico Granata 536baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(retval); 5376f3533fbSEnrico Granata } 538cac9c5f9SGreg Clayton 539b9c1b51eSKate Stone lldb::SBType SBModule::GetTypeByID(lldb::user_id_t uid) { 540baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBType, SBModule, GetTypeByID, (lldb::user_id_t), 541baf5664fSJonas Devlieghere uid); 542baf5664fSJonas Devlieghere 5431f4db7daSGreg Clayton ModuleSP module_sp(GetSP()); 544b9c1b51eSKate Stone if (module_sp) { 5451f4db7daSGreg Clayton SymbolVendor *vendor = module_sp->GetSymbolVendor(); 546b9c1b51eSKate Stone if (vendor) { 5471f4db7daSGreg Clayton Type *type_ptr = vendor->ResolveTypeUID(uid); 5481f4db7daSGreg Clayton if (type_ptr) 549baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBType(type_ptr->shared_from_this())); 5501f4db7daSGreg Clayton } 5511f4db7daSGreg Clayton } 552baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBType()); 5531f4db7daSGreg Clayton } 5541f4db7daSGreg Clayton 555b9c1b51eSKate Stone lldb::SBTypeList SBModule::GetTypes(uint32_t type_mask) { 556baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBTypeList, SBModule, GetTypes, (uint32_t), 557baf5664fSJonas Devlieghere type_mask); 558baf5664fSJonas Devlieghere 559f02500c7SGreg Clayton SBTypeList sb_type_list; 560f02500c7SGreg Clayton 561f02500c7SGreg Clayton ModuleSP module_sp(GetSP()); 562117b1fa1SZachary Turner if (!module_sp) 563baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_type_list); 564f02500c7SGreg Clayton SymbolVendor *vendor = module_sp->GetSymbolVendor(); 565117b1fa1SZachary Turner if (!vendor) 566baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_type_list); 567117b1fa1SZachary Turner 568117b1fa1SZachary Turner TypeClass type_class = static_cast<TypeClass>(type_mask); 569f02500c7SGreg Clayton TypeList type_list; 570248a1305SKonrad Kleine vendor->GetTypes(nullptr, type_class, type_list); 571d5b44036SJonas Devlieghere sb_type_list.m_opaque_up->Append(type_list); 572baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_type_list); 573f02500c7SGreg Clayton } 574cac9c5f9SGreg Clayton 575b9c1b51eSKate Stone SBSection SBModule::FindSection(const char *sect_name) { 576baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBSection, SBModule, FindSection, (const char *), 577baf5664fSJonas Devlieghere sect_name); 578baf5664fSJonas Devlieghere 579cac9c5f9SGreg Clayton SBSection sb_section; 580cac9c5f9SGreg Clayton 581c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 582b9c1b51eSKate Stone if (sect_name && module_sp) { 583a7499c98SMichael Sartain // Give the symbol vendor a chance to add to the unified section list. 584a7499c98SMichael Sartain module_sp->GetSymbolVendor(); 5853046e668SGreg Clayton SectionList *section_list = module_sp->GetSectionList(); 586b9c1b51eSKate Stone if (section_list) { 587cac9c5f9SGreg Clayton ConstString const_sect_name(sect_name); 588cac9c5f9SGreg Clayton SectionSP section_sp(section_list->FindSectionByName(const_sect_name)); 589b9c1b51eSKate Stone if (section_sp) { 590e72dfb32SGreg Clayton sb_section.SetSP(section_sp); 591cac9c5f9SGreg Clayton } 592cac9c5f9SGreg Clayton } 593cac9c5f9SGreg Clayton } 594baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_section); 595cac9c5f9SGreg Clayton } 596cac9c5f9SGreg Clayton 597b9c1b51eSKate Stone lldb::ByteOrder SBModule::GetByteOrder() { 598baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::ByteOrder, SBModule, GetByteOrder); 599baf5664fSJonas Devlieghere 600c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 601c2ff9318SGreg Clayton if (module_sp) 602c2ff9318SGreg Clayton return module_sp->GetArchitecture().GetByteOrder(); 60313d1950aSGreg Clayton return eByteOrderInvalid; 60413d1950aSGreg Clayton } 60513d1950aSGreg Clayton 606b9c1b51eSKate Stone const char *SBModule::GetTriple() { 607baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBModule, GetTriple); 608baf5664fSJonas Devlieghere 609c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 610b9c1b51eSKate Stone if (module_sp) { 611c2ff9318SGreg Clayton std::string triple(module_sp->GetArchitecture().GetTriple().str()); 61205097246SAdrian Prantl // Unique the string so we don't run into ownership issues since the const 61305097246SAdrian Prantl // strings put the string into the string pool once and the strings never 61405097246SAdrian Prantl // comes out 61513d1950aSGreg Clayton ConstString const_triple(triple.c_str()); 61613d1950aSGreg Clayton return const_triple.GetCString(); 61713d1950aSGreg Clayton } 618248a1305SKonrad Kleine return nullptr; 61913d1950aSGreg Clayton } 62013d1950aSGreg Clayton 621b9c1b51eSKate Stone uint32_t SBModule::GetAddressByteSize() { 622baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBModule, GetAddressByteSize); 623baf5664fSJonas Devlieghere 624c2ff9318SGreg Clayton ModuleSP module_sp(GetSP()); 625c2ff9318SGreg Clayton if (module_sp) 626c2ff9318SGreg Clayton return module_sp->GetArchitecture().GetAddressByteSize(); 62713d1950aSGreg Clayton return sizeof(void *); 62813d1950aSGreg Clayton } 62913d1950aSGreg Clayton 630b9c1b51eSKate Stone uint32_t SBModule::GetVersion(uint32_t *versions, uint32_t num_versions) { 631baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(uint32_t, SBModule, GetVersion, (uint32_t *, uint32_t), 632baf5664fSJonas Devlieghere versions, num_versions); 633baf5664fSJonas Devlieghere 6342272c481SPavel Labath llvm::VersionTuple version; 6352272c481SPavel Labath if (ModuleSP module_sp = GetSP()) 6362272c481SPavel Labath version = module_sp->GetVersion(); 6372272c481SPavel Labath uint32_t result = 0; 6382272c481SPavel Labath if (!version.empty()) 6392272c481SPavel Labath ++result; 6402272c481SPavel Labath if (version.getMinor()) 6412272c481SPavel Labath ++result; 6422272c481SPavel Labath if(version.getSubminor()) 6432272c481SPavel Labath ++result; 6442272c481SPavel Labath 6452272c481SPavel Labath if (!versions) 6462272c481SPavel Labath return result; 6472272c481SPavel Labath 6482272c481SPavel Labath if (num_versions > 0) 6492272c481SPavel Labath versions[0] = version.empty() ? UINT32_MAX : version.getMajor(); 6502272c481SPavel Labath if (num_versions > 1) 6512272c481SPavel Labath versions[1] = version.getMinor().getValueOr(UINT32_MAX); 6522272c481SPavel Labath if (num_versions > 2) 6532272c481SPavel Labath versions[2] = version.getSubminor().getValueOr(UINT32_MAX); 6542272c481SPavel Labath for (uint32_t i = 3; i < num_versions; ++i) 655c2ff9318SGreg Clayton versions[i] = UINT32_MAX; 6562272c481SPavel Labath return result; 6573467d80bSEnrico Granata } 658c2ff9318SGreg Clayton 659b9c1b51eSKate Stone lldb::SBFileSpec SBModule::GetSymbolFileSpec() const { 660baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBFileSpec, SBModule, 661baf5664fSJonas Devlieghere GetSymbolFileSpec); 662baf5664fSJonas Devlieghere 663eb2c19a5SIlia K lldb::SBFileSpec sb_file_spec; 664eb2c19a5SIlia K ModuleSP module_sp(GetSP()); 665b9c1b51eSKate Stone if (module_sp) { 666eb2c19a5SIlia K SymbolVendor *symbol_vendor_ptr = module_sp->GetSymbolVendor(); 667eb2c19a5SIlia K if (symbol_vendor_ptr) 668eb2c19a5SIlia K sb_file_spec.SetFileSpec(symbol_vendor_ptr->GetMainFileSpec()); 669eb2c19a5SIlia K } 670baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_file_spec); 671eb2c19a5SIlia K } 672eb2c19a5SIlia K 673b9c1b51eSKate Stone lldb::SBAddress SBModule::GetObjectFileHeaderAddress() const { 674baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBAddress, SBModule, 675baf5664fSJonas Devlieghere GetObjectFileHeaderAddress); 676baf5664fSJonas Devlieghere 677eb2c19a5SIlia K lldb::SBAddress sb_addr; 678eb2c19a5SIlia K ModuleSP module_sp(GetSP()); 679b9c1b51eSKate Stone if (module_sp) { 680eb2c19a5SIlia K ObjectFile *objfile_ptr = module_sp->GetObjectFile(); 681eb2c19a5SIlia K if (objfile_ptr) 682d1e3fe21SPavel Labath sb_addr.ref() = objfile_ptr->GetBaseAddress(); 683eb2c19a5SIlia K } 684baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_addr); 685eb2c19a5SIlia K } 6869b087d2cSAleksandr Urakov 6879b087d2cSAleksandr Urakov lldb::SBAddress SBModule::GetObjectFileEntryPointAddress() const { 688baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBAddress, SBModule, 689baf5664fSJonas Devlieghere GetObjectFileEntryPointAddress); 690baf5664fSJonas Devlieghere 6919b087d2cSAleksandr Urakov lldb::SBAddress sb_addr; 6929b087d2cSAleksandr Urakov ModuleSP module_sp(GetSP()); 6939b087d2cSAleksandr Urakov if (module_sp) { 6949b087d2cSAleksandr Urakov ObjectFile *objfile_ptr = module_sp->GetObjectFile(); 6959b087d2cSAleksandr Urakov if (objfile_ptr) 6969b087d2cSAleksandr Urakov sb_addr.ref() = objfile_ptr->GetEntryPointAddress(); 6979b087d2cSAleksandr Urakov } 698baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_addr); 6999b087d2cSAleksandr Urakov } 700ae211eceSMichal Gorny 701ae211eceSMichal Gorny namespace lldb_private { 702ae211eceSMichal Gorny namespace repro { 703ae211eceSMichal Gorny 704ae211eceSMichal Gorny template <> 705ae211eceSMichal Gorny void RegisterMethods<SBModule>(Registry &R) { 706ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBModule, ()); 707ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBModule, (const lldb::SBModuleSpec &)); 708ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBModule, (const lldb::SBModule &)); 709ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBModule, (lldb::SBProcess &, lldb::addr_t)); 710ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const lldb::SBModule &, 711ae211eceSMichal Gorny SBModule, operator=,(const lldb::SBModule &)); 712ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBModule, IsValid, ()); 713ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBModule, operator bool, ()); 714ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBModule, Clear, ()); 715ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetFileSpec, ()); 716ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetPlatformFileSpec, 717ae211eceSMichal Gorny ()); 718ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBModule, SetPlatformFileSpec, 719ae211eceSMichal Gorny (const lldb::SBFileSpec &)); 720ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBFileSpec, SBModule, GetRemoteInstallFileSpec, 721ae211eceSMichal Gorny ()); 722ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBModule, SetRemoteInstallFileSpec, 723ae211eceSMichal Gorny (lldb::SBFileSpec &)); 724ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(const char *, SBModule, GetUUIDString, ()); 725ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, 726ae211eceSMichal Gorny SBModule, operator==,(const lldb::SBModule &)); 727ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, 728ae211eceSMichal Gorny SBModule, operator!=,(const lldb::SBModule &)); 729ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBAddress, SBModule, ResolveFileAddress, 730ae211eceSMichal Gorny (lldb::addr_t)); 731ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbolContext, SBModule, 732ae211eceSMichal Gorny ResolveSymbolContextForAddress, 733ae211eceSMichal Gorny (const lldb::SBAddress &, uint32_t)); 734ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBModule, GetDescription, (lldb::SBStream &)); 735ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBModule, GetNumCompileUnits, ()); 736ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBCompileUnit, SBModule, GetCompileUnitAtIndex, 737ae211eceSMichal Gorny (uint32_t)); 738ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindCompileUnits, 739ae211eceSMichal Gorny (const lldb::SBFileSpec &)); 740ae211eceSMichal Gorny LLDB_REGISTER_METHOD(size_t, SBModule, GetNumSymbols, ()); 741ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbol, SBModule, GetSymbolAtIndex, (size_t)); 742ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbol, SBModule, FindSymbol, 743ae211eceSMichal Gorny (const char *, lldb::SymbolType)); 744ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindSymbols, 745ae211eceSMichal Gorny (const char *, lldb::SymbolType)); 746ae211eceSMichal Gorny LLDB_REGISTER_METHOD(size_t, SBModule, GetNumSections, ()); 747ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSection, SBModule, GetSectionAtIndex, 748ae211eceSMichal Gorny (size_t)); 749ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSymbolContextList, SBModule, FindFunctions, 750ae211eceSMichal Gorny (const char *, uint32_t)); 751ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBValueList, SBModule, FindGlobalVariables, 752ae211eceSMichal Gorny (lldb::SBTarget &, const char *, uint32_t)); 753ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBValue, SBModule, FindFirstGlobalVariable, 754ae211eceSMichal Gorny (lldb::SBTarget &, const char *)); 755ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBType, SBModule, FindFirstType, (const char *)); 756ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBType, SBModule, GetBasicType, 757ae211eceSMichal Gorny (lldb::BasicType)); 758ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeList, SBModule, FindTypes, (const char *)); 759ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBType, SBModule, GetTypeByID, 760ae211eceSMichal Gorny (lldb::user_id_t)); 761ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBTypeList, SBModule, GetTypes, (uint32_t)); 762ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBSection, SBModule, FindSection, 763ae211eceSMichal Gorny (const char *)); 764ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::ByteOrder, SBModule, GetByteOrder, ()); 765ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBModule, GetTriple, ()); 766ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBModule, GetAddressByteSize, ()); 767ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBModule, GetVersion, 768ae211eceSMichal Gorny (uint32_t *, uint32_t)); 769ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBFileSpec, SBModule, GetSymbolFileSpec, 770ae211eceSMichal Gorny ()); 771ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBAddress, SBModule, 772ae211eceSMichal Gorny GetObjectFileHeaderAddress, ()); 773ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBAddress, SBModule, 774ae211eceSMichal Gorny GetObjectFileEntryPointAddress, ()); 775ae211eceSMichal Gorny } 776ae211eceSMichal Gorny 777ae211eceSMichal Gorny } 778ae211eceSMichal Gorny } 779