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/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