Index: lldb/include/lldb/Core/Module.h =================================================================== --- lldb/include/lldb/Core/Module.h +++ lldb/include/lldb/Core/Module.h @@ -512,7 +512,6 @@ /// This callback will be called by SymbolFile implementations when /// parsing a compile unit that contains SDK information. - /// \param sdk will be merged with \p m_sdk. /// \param sysroot will be added to the path remapping dictionary. void RegisterXcodeSDK(llvm::StringRef sdk, llvm::StringRef sysroot); @@ -864,11 +863,6 @@ bool RemapSourceFile(llvm::StringRef path, std::string &new_path) const; bool RemapSourceFile(const char *, std::string &) const = delete; - /// Return the Xcode SDK this module was compiled against. This - /// is computed by merging the SDKs from each compilation unit in - /// the module. - XcodeSDK GetXcodeSDK() const { return m_xcode_sdk; } - /// Update the ArchSpec to a more specific variant. bool MergeArchitecture(const ArchSpec &arch_spec); @@ -984,9 +978,6 @@ PathMappingList m_source_mappings = ModuleList::GetGlobalModuleListProperties().GetSymlinkMappings(); - /// The (Xcode) SDK this module was compiled with. - XcodeSDK m_xcode_sdk; - lldb::SectionListUP m_sections_up; ///< Unified section list for module that /// is used by the ObjectFile and and /// ObjectFile instances for the debug info Index: lldb/include/lldb/Symbol/SymbolFile.h =================================================================== --- lldb/include/lldb/Symbol/SymbolFile.h +++ lldb/include/lldb/Symbol/SymbolFile.h @@ -18,6 +18,7 @@ #include "lldb/Symbol/Type.h" #include "lldb/Symbol/TypeList.h" #include "lldb/Symbol/TypeSystem.h" +#include "lldb/Utility/XcodeSDK.h" #include "lldb/lldb-private.h" #include "llvm/ADT/DenseSet.h" #include "llvm/Support/Errc.h" @@ -128,6 +129,8 @@ Symtab *GetSymtab(); virtual lldb::LanguageType ParseLanguage(CompileUnit &comp_unit) = 0; + /// Return the Xcode SDK comp_unit was compiled against. + virtual XcodeSDK ParseXcodeSDK(CompileUnit &comp_unit) { return {}; } virtual size_t ParseFunctions(CompileUnit &comp_unit) = 0; virtual bool ParseLineTable(CompileUnit &comp_unit) = 0; virtual bool ParseDebugMacros(CompileUnit &comp_unit) = 0; Index: lldb/include/lldb/Target/Platform.h =================================================================== --- lldb/include/lldb/Target/Platform.h +++ lldb/include/lldb/Target/Platform.h @@ -435,8 +435,6 @@ return lldb_private::ConstString(); } - virtual llvm::StringRef GetSDKPath(lldb_private::XcodeSDK sdk) { return {}; } - const std::string &GetRemoteURL() const { return m_remote_url; } bool IsHost() const { Index: lldb/source/Core/Module.cpp =================================================================== --- lldb/source/Core/Module.cpp +++ lldb/source/Core/Module.cpp @@ -18,6 +18,7 @@ #include "lldb/Core/Section.h" #include "lldb/Host/FileSystem.h" #include "lldb/Host/Host.h" +#include "lldb/Host/HostInfo.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/ScriptInterpreter.h" #include "lldb/Symbol/CompileUnit.h" @@ -33,7 +34,6 @@ #include "lldb/Symbol/TypeMap.h" #include "lldb/Symbol/TypeSystem.h" #include "lldb/Target/Language.h" -#include "lldb/Target/Platform.h" #include "lldb/Target/Process.h" #include "lldb/Target/Target.h" #include "lldb/Utility/DataBufferHeap.h" @@ -1598,15 +1598,10 @@ void Module::RegisterXcodeSDK(llvm::StringRef sdk_name, llvm::StringRef sysroot) { XcodeSDK sdk(sdk_name.str()); - if (m_xcode_sdk == sdk) - return; - m_xcode_sdk.Merge(sdk); - PlatformSP module_platform = - Platform::GetPlatformForArchitecture(GetArchitecture(), nullptr); - ConstString sdk_path(module_platform->GetSDKPath(sdk)); + ConstString sdk_path(HostInfo::GetXcodeSDK(sdk)); if (!sdk_path) return; - // If merged SDK changed for a previously registered source path, update it. + // If the SDK changed for a previously registered source path, update it. // This could happend with -fdebug-prefix-map, otherwise it's unlikely. ConstString sysroot_cs(sysroot); if (!m_source_mappings.Replace(sysroot_cs, sdk_path, true)) Index: lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h =================================================================== --- lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h +++ lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h @@ -89,8 +89,6 @@ llvm::Expected FetchExtendedCrashInformation(lldb_private::Process &process) override; - llvm::StringRef GetSDKPath(lldb_private::XcodeSDK sdk) override; - static lldb_private::FileSpec GetXcodeContentsDirectory(); static lldb_private::FileSpec GetXcodeDeveloperDirectory(); Index: lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp =================================================================== --- lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -1761,14 +1761,6 @@ return {}; } -llvm::StringRef PlatformDarwin::GetSDKPath(XcodeSDK sdk) { - std::lock_guard guard(m_sdk_path_mutex); - std::string &path = m_sdk_path[sdk.GetString()]; - if (path.empty()) - path = HostInfo::GetXcodeSDK(sdk); - return path; -} - FileSpec PlatformDarwin::GetXcodeContentsDirectory() { static FileSpec g_xcode_contents_path; static std::once_flag g_once_flag; Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -106,6 +106,9 @@ lldb::LanguageType ParseLanguage(lldb_private::CompileUnit &comp_unit) override; + lldb_private::XcodeSDK + ParseXcodeSDK(lldb_private::CompileUnit &comp_unit) override; + size_t ParseFunctions(lldb_private::CompileUnit &comp_unit) override; bool ParseLineTable(lldb_private::CompileUnit &comp_unit) override; Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -664,12 +664,6 @@ const DWARFBaseDIE cu_die = dwarf_cu.GetNonSkeletonUnit().GetUnitDIEOnly(); if (cu_die) { - if (const char *sdk = - cu_die.GetAttributeValueAsString(DW_AT_APPLE_sdk, nullptr)) { - const char *sysroot = - cu_die.GetAttributeValueAsString(DW_AT_LLVM_sysroot, ""); - module_sp->RegisterXcodeSDK(sdk, sysroot); - } FileSpec cu_file_spec(cu_die.GetName(), dwarf_cu.GetPathStyle()); MakeAbsoluteAndRemap(cu_file_spec, dwarf_cu, module_sp); @@ -778,6 +772,22 @@ return eLanguageTypeUnknown; } +XcodeSDK SymbolFileDWARF::ParseXcodeSDK(CompileUnit &comp_unit) { + std::lock_guard guard(GetModuleMutex()); + if (DWARFUnit *dwarf_cu = GetDWARFCompileUnit(&comp_unit)) + if (ModuleSP module_sp = m_objfile_sp->GetModule()) + if (const DWARFBaseDIE cu_die = + dwarf_cu->GetNonSkeletonUnit().GetUnitDIEOnly()) + if (const char *sdk = + cu_die.GetAttributeValueAsString(DW_AT_APPLE_sdk, nullptr)) { + const char *sysroot = + cu_die.GetAttributeValueAsString(DW_AT_LLVM_sysroot, ""); + module_sp->RegisterXcodeSDK(sdk, sysroot); + return {sdk}; + } + return {}; +} + size_t SymbolFileDWARF::ParseFunctions(CompileUnit &comp_unit) { static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); Timer scoped_timer(func_cat, "SymbolFileDWARF::ParseFunctions"); Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h @@ -58,6 +58,9 @@ lldb::LanguageType ParseLanguage(lldb_private::CompileUnit &comp_unit) override; + lldb_private::XcodeSDK + ParseXcodeSDK(lldb_private::CompileUnit &comp_unit) override; + size_t ParseFunctions(lldb_private::CompileUnit &comp_unit) override; bool ParseLineTable(lldb_private::CompileUnit &comp_unit) override; Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp @@ -628,6 +628,15 @@ return eLanguageTypeUnknown; } +XcodeSDK +SymbolFileDWARFDebugMap::ParseXcodeSDK(CompileUnit &comp_unit) { + std::lock_guard guard(GetModuleMutex()); + SymbolFileDWARF *oso_dwarf = GetSymbolFile(comp_unit); + if (oso_dwarf) + return oso_dwarf->ParseXcodeSDK(comp_unit); + return {}; +} + size_t SymbolFileDWARFDebugMap::ParseFunctions(CompileUnit &comp_unit) { std::lock_guard guard(GetModuleMutex()); SymbolFileDWARF *oso_dwarf = GetSymbolFile(comp_unit); Index: lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp =================================================================== --- lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp +++ lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp @@ -64,13 +64,13 @@ auto triple = "x86_64-apple-macosx"; YAMLModuleTester t(yamldata, triple); - auto module = t.GetModule(); auto dwarf_unit_sp = t.GetDwarfUnit(); auto *dwarf_cu = llvm::cast(dwarf_unit_sp.get()); ASSERT_TRUE((bool)dwarf_cu); - ASSERT_TRUE((bool)dwarf_cu->GetSymbolFileDWARF().GetCompUnitForDWARFCompUnit( - *dwarf_cu)); - XcodeSDK sdk = module->GetXcodeSDK(); + SymbolFileDWARF &sym_file = dwarf_cu->GetSymbolFileDWARF(); + CompUnitSP comp_unit = sym_file.GetCompileUnitAtIndex(0); + ASSERT_TRUE((bool)comp_unit.get()); + XcodeSDK sdk = sym_file.ParseXcodeSDK(*comp_unit); ASSERT_EQ(sdk.GetType(), XcodeSDK::Type::MacOSX); } #endif