https://github.com/Michael137 updated https://github.com/llvm/llvm-project/pull/102488
>From 99dd6c9d974ffd95f3c2aed9dfb2a861cc55f084 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Thu, 8 Aug 2024 16:07:21 +0100 Subject: [PATCH 1/2] [lldb][Platform] Move the GetSDKPathFromDebugInfo helpers from PlatformDarwin into Platform This will soon be needed for https://github.com/llvm/llvm-project/pull/102309, where we plan on calling these APIs from generic ExpressionParser code. --- lldb/include/lldb/Target/Platform.h | 34 +++++++++++++++++++ .../Plugins/Platform/MacOSX/PlatformDarwin.h | 31 +++-------------- 2 files changed, 39 insertions(+), 26 deletions(-) diff --git a/lldb/include/lldb/Target/Platform.h b/lldb/include/lldb/Target/Platform.h index 5ed2fc33356d9d..8cf52a486e2c87 100644 --- a/lldb/include/lldb/Target/Platform.h +++ b/lldb/include/lldb/Target/Platform.h @@ -27,6 +27,7 @@ #include "lldb/Utility/StructuredData.h" #include "lldb/Utility/Timeout.h" #include "lldb/Utility/UserIDResolver.h" +#include "lldb/Utility/XcodeSDK.h" #include "lldb/lldb-private-forward.h" #include "lldb/lldb-public.h" @@ -436,6 +437,39 @@ class Platform : public PluginInterface { return lldb_private::ConstString(); } + /// Search each CU associated with the specified 'module' for + /// the SDK paths the CUs were compiled against. In the presence + /// of different SDKs, we try to pick the most appropriate one + /// using \ref XcodeSDK::Merge. + /// + /// \param[in] module Module whose debug-info CUs to parse for + /// which SDK they were compiled against. + /// + /// \returns If successful, returns a pair of a parsed XcodeSDK + /// object and a boolean that is 'true' if we encountered + /// a conflicting combination of SDKs when parsing the CUs + /// (e.g., a public and internal SDK). + virtual llvm::Expected<std::pair<XcodeSDK, bool>> + GetSDKPathFromDebugInfo(Module &module) { + return llvm::createStringError(llvm::formatv( + "{0} not implemented for '{1}' platform.", __func__, GetName())); + } + + /// Returns the full path of the most appropriate SDK for the + /// specified 'module'. This function gets this path by parsing + /// debug-info (see \ref `GetSDKPathFromDebugInfo`). + /// + /// \param[in] module Module whose debug-info to parse for + /// which SDK it was compiled against. + /// + /// \returns If successful, returns the full path to an + /// Xcode SDK. + virtual llvm::Expected<std::string> + ResolveSDKPathFromDebugInfo(Module &module) { + return llvm::createStringError(llvm::formatv( + "{0} not implemented for '{1}' platform.", __func__, GetName())); + } + const std::string &GetRemoteURL() const { return m_remote_url; } bool IsHost() const { diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h index ff7087da6825d9..66a26d2f496776 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h @@ -124,32 +124,11 @@ class PlatformDarwin : public PlatformPOSIX { /// located in. static FileSpec GetCurrentCommandLineToolsDirectory(); - /// Search each CU associated with the specified 'module' for - /// the SDK paths the CUs were compiled against. In the presence - /// of different SDKs, we try to pick the most appropriate one - /// using \ref XcodeSDK::Merge. - /// - /// \param[in] module Module whose debug-info CUs to parse for - /// which SDK they were compiled against. - /// - /// \returns If successful, returns a pair of a parsed XcodeSDK - /// object and a boolean that is 'true' if we encountered - /// a conflicting combination of SDKs when parsing the CUs - /// (e.g., a public and internal SDK). - static llvm::Expected<std::pair<XcodeSDK, bool>> - GetSDKPathFromDebugInfo(Module &module); - - /// Returns the full path of the most appropriate SDK for the - /// specified 'module'. This function gets this path by parsing - /// debug-info (see \ref `GetSDKPathFromDebugInfo`). - /// - /// \param[in] module Module whose debug-info to parse for - /// which SDK it was compiled against. - /// - /// \returns If successful, returns the full path to an - /// Xcode SDK. - static llvm::Expected<std::string> - ResolveSDKPathFromDebugInfo(Module &module); + llvm::Expected<std::pair<XcodeSDK, bool>> + GetSDKPathFromDebugInfo(Module &module) override; + + llvm::Expected<std::string> + ResolveSDKPathFromDebugInfo(Module &module) override; protected: static const char *GetCompatibleArch(ArchSpec::Core core, size_t idx); >From 7f560914c7ffd0521c093d1bea9e424b1dfbfc06 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Thu, 8 Aug 2024 16:32:53 +0100 Subject: [PATCH 2/2] fixup! fix unit-test build --- .../SymbolFile/DWARF/XcodeSDKModuleTests.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp b/lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp index c37da89ff79ce7..dc5680522e1836 100644 --- a/lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp +++ b/lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp @@ -162,7 +162,9 @@ TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_InvalidSDKPath) { ModuleSP module = t.GetModule(); ASSERT_NE(module, nullptr); - auto path_or_err = PlatformDarwin::ResolveSDKPathFromDebugInfo(*module); + auto platform_sp = Platform::GetHostPlatform(); + ASSERT_TRUE(platform_sp); + auto path_or_err = platform_sp->ResolveSDKPathFromDebugInfo(*module); EXPECT_FALSE(static_cast<bool>(path_or_err)); llvm::consumeError(path_or_err.takeError()); } @@ -206,7 +208,9 @@ TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_No_DW_AT_APPLE_sdk) { ModuleSP module = t.GetModule(); ASSERT_NE(module, nullptr); - auto path_or_err = PlatformDarwin::ResolveSDKPathFromDebugInfo(*module); + auto platform_sp = Platform::GetHostPlatform(); + ASSERT_TRUE(platform_sp); + auto path_or_err = platform_sp->ResolveSDKPathFromDebugInfo(*module); EXPECT_FALSE(static_cast<bool>(path_or_err)); llvm::consumeError(path_or_err.takeError()); } @@ -254,7 +258,9 @@ TEST_P(SDKPathParsingMultiparamTests, TestSDKPathFromDebugInfo) { ModuleSP module = t.GetModule(); ASSERT_NE(module, nullptr); - auto sdk_or_err = PlatformDarwin::GetSDKPathFromDebugInfo(*module); + auto platform_sp = Platform::GetHostPlatform(); + ASSERT_TRUE(platform_sp); + auto sdk_or_err = platform_sp->GetSDKPathFromDebugInfo(*module); ASSERT_TRUE(static_cast<bool>(sdk_or_err)); auto [sdk, found_mismatch] = *sdk_or_err; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits