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/source/Core/Module.cpp =================================================================== --- lldb/source/Core/Module.cpp +++ lldb/source/Core/Module.cpp @@ -1598,9 +1598,6 @@ 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)); 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