Skip to content

Commit a540d68

Browse files
Revert "[lldb][NFC] remove the ResolveSDKPathFromDebugInfo method (llvm#145744)"
This reverts commit 7381d81.
1 parent 13daf65 commit a540d68

File tree

4 files changed

+56
-26
lines changed

4 files changed

+56
-26
lines changed

lldb/include/lldb/Target/Platform.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,22 @@ class Platform : public PluginInterface {
458458
LLVM_PRETTY_FUNCTION, GetName()));
459459
}
460460

461+
/// Returns the full path of the most appropriate SDK for the
462+
/// specified 'module'. This function gets this path by parsing
463+
/// debug-info (see \ref `GetSDKPathFromDebugInfo`).
464+
///
465+
/// \param[in] module Module whose debug-info to parse for
466+
/// which SDK it was compiled against.
467+
///
468+
/// \returns If successful, returns the full path to an
469+
/// Xcode SDK.
470+
virtual llvm::Expected<std::string>
471+
ResolveSDKPathFromDebugInfo(Module &module) {
472+
return llvm::createStringError(
473+
llvm::formatv("{0} not implemented for '{1}' platform.",
474+
LLVM_PRETTY_FUNCTION, GetName()));
475+
}
476+
461477
/// Search CU for the SDK path the CUs was compiled against.
462478
///
463479
/// \param[in] unit The CU

lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,33 +1130,13 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
11301130

11311131
if (target) {
11321132
if (ModuleSP exe_module_sp = target->GetExecutableModule()) {
1133-
SymbolFile *sym_file = exe_module_sp->GetSymbolFile();
1134-
if (!sym_file)
1135-
return;
1136-
1137-
XcodeSDK merged_sdk;
1138-
for (unsigned i = 0; i < sym_file->GetNumCompileUnits(); ++i) {
1139-
if (auto cu_sp = sym_file->GetCompileUnitAtIndex(i)) {
1140-
auto cu_sdk = sym_file->ParseXcodeSDK(*cu_sp);
1141-
merged_sdk.Merge(cu_sdk);
1142-
}
1143-
}
1144-
1145-
// TODO: The result of this loop is almost equivalent to deriving the SDK
1146-
// from the target triple, which would be a lot cheaper.
1147-
1148-
if (FileSystem::Instance().Exists(merged_sdk.GetSysroot())) {
1149-
sysroot_spec = merged_sdk.GetSysroot();
1133+
auto path_or_err = ResolveSDKPathFromDebugInfo(*exe_module_sp);
1134+
if (path_or_err) {
1135+
sysroot_spec = FileSpec(*path_or_err);
11501136
} else {
1151-
auto path_or_err =
1152-
HostInfo::GetSDKRoot(HostInfo::SDKOptions{merged_sdk});
1153-
if (path_or_err) {
1154-
sysroot_spec = FileSpec(*path_or_err);
1155-
} else {
1156-
LLDB_LOG_ERROR(GetLog(LLDBLog::Types | LLDBLog::Host),
1157-
path_or_err.takeError(),
1158-
"Failed to resolve SDK path: {0}");
1159-
}
1137+
LLDB_LOG_ERROR(GetLog(LLDBLog::Types | LLDBLog::Host),
1138+
path_or_err.takeError(),
1139+
"Failed to resolve SDK path: {0}");
11601140
}
11611141
}
11621142
}
@@ -1404,6 +1384,31 @@ PlatformDarwin::GetSDKPathFromDebugInfo(Module &module) {
14041384
return std::pair{std::move(merged_sdk), found_mismatch};
14051385
}
14061386

1387+
llvm::Expected<std::string>
1388+
PlatformDarwin::ResolveSDKPathFromDebugInfo(Module &module) {
1389+
auto sdk_or_err = GetSDKPathFromDebugInfo(module);
1390+
if (!sdk_or_err)
1391+
return llvm::createStringError(
1392+
llvm::inconvertibleErrorCode(),
1393+
llvm::formatv("Failed to parse SDK path from debug-info: {0}",
1394+
llvm::toString(sdk_or_err.takeError())));
1395+
1396+
auto [sdk, _] = std::move(*sdk_or_err);
1397+
1398+
if (FileSystem::Instance().Exists(sdk.GetSysroot()))
1399+
return sdk.GetSysroot().GetPath();
1400+
1401+
auto path_or_err = HostInfo::GetSDKRoot(HostInfo::SDKOptions{sdk});
1402+
if (!path_or_err)
1403+
return llvm::createStringError(
1404+
llvm::inconvertibleErrorCode(),
1405+
llvm::formatv("Error while searching for SDK (XcodeSDK '{0}'): {1}",
1406+
sdk.GetString(),
1407+
llvm::toString(path_or_err.takeError())));
1408+
1409+
return path_or_err->str();
1410+
}
1411+
14071412
llvm::Expected<XcodeSDK>
14081413
PlatformDarwin::GetSDKPathFromDebugInfo(CompileUnit &unit) {
14091414
ModuleSP module_sp = unit.CalculateSymbolContextModule();

lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ class PlatformDarwin : public PlatformPOSIX {
120120
llvm::Expected<std::pair<XcodeSDK, bool>>
121121
GetSDKPathFromDebugInfo(Module &module) override;
122122

123+
llvm::Expected<std::string>
124+
ResolveSDKPathFromDebugInfo(Module &module) override;
125+
123126
llvm::Expected<XcodeSDK> GetSDKPathFromDebugInfo(CompileUnit &unit) override;
124127

125128
llvm::Expected<std::string>

lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_InvalidSDKPath) {
161161

162162
auto platform_sp = Platform::GetHostPlatform();
163163
ASSERT_TRUE(platform_sp);
164+
auto path_or_err = platform_sp->ResolveSDKPathFromDebugInfo(*module);
165+
EXPECT_FALSE(static_cast<bool>(path_or_err));
166+
llvm::consumeError(path_or_err.takeError());
164167
}
165168

166169
TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_No_DW_AT_APPLE_sdk) {
@@ -204,6 +207,9 @@ TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_No_DW_AT_APPLE_sdk) {
204207

205208
auto platform_sp = Platform::GetHostPlatform();
206209
ASSERT_TRUE(platform_sp);
210+
auto path_or_err = platform_sp->ResolveSDKPathFromDebugInfo(*module);
211+
EXPECT_FALSE(static_cast<bool>(path_or_err));
212+
llvm::consumeError(path_or_err.takeError());
207213
}
208214

209215
TEST_P(SDKPathParsingMultiparamTests, TestSDKPathFromDebugInfo) {

0 commit comments

Comments
 (0)