Skip to content

[lldb][NFC] remove the ResolveSDKPathFromDebugInfo method #145744

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 0 additions & 16 deletions lldb/include/lldb/Target/Platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -458,22 +458,6 @@ class Platform : public PluginInterface {
LLVM_PRETTY_FUNCTION, 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.",
LLVM_PRETTY_FUNCTION, GetName()));
}

/// Search CU for the SDK path the CUs was compiled against.
///
/// \param[in] unit The CU
Expand Down
13 changes: 0 additions & 13 deletions lldb/include/lldb/Utility/XcodeSDK.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,19 +93,6 @@ class XcodeSDK {
static bool SDKSupportsModules(Type type, llvm::VersionTuple version);
static bool SDKSupportsModules(Type desired_type, const FileSpec &sdk_path);

/// Returns true if the SDK for the specified triple supports
/// builtin modules in system headers.
///
/// NOTE: should be kept in sync with sdkSupportsBuiltinModules in
/// Toolchains/Darwin.cpp
///
/// FIXME: this function will be removed once LLDB's ClangExpressionParser
/// constructs the compiler instance through the driver/toolchain. See \ref
/// SetupImportStdModuleLangOpts
///
static bool SDKSupportsBuiltinModules(const llvm::Triple &target_triple,
llvm::VersionTuple sdk_version);

/// Return the canonical SDK name, such as "macosx" for the macOS SDK.
static std::string GetCanonicalName(Info info);
/// Return the best-matching SDK type for a specific triple.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -319,49 +319,6 @@ class ClangDiagnosticManagerAdapter : public clang::DiagnosticConsumer {
StringRef m_filename;
};

/// Returns true if the SDK for the specified triple supports
/// builtin modules in system headers. This is used to decide
/// whether to pass -fbuiltin-headers-in-system-modules to
/// the compiler instance when compiling the `std` module.
static llvm::Expected<bool>
sdkSupportsBuiltinModules(lldb_private::Target &target) {
auto arch_spec = target.GetArchitecture();
auto const &triple = arch_spec.GetTriple();
auto module_sp = target.GetExecutableModule();
if (!module_sp)
return llvm::createStringError("Executable module not found.");

// Get SDK path that the target was compiled against.
auto platform_sp = target.GetPlatform();
if (!platform_sp)
return llvm::createStringError("No Platform plugin found on target.");

auto sdk_or_err = platform_sp->GetSDKPathFromDebugInfo(*module_sp);
if (!sdk_or_err)
return sdk_or_err.takeError();

// Use the SDK path from debug-info to find a local matching SDK directory.
auto sdk_path_or_err =
HostInfo::GetSDKRoot(HostInfo::SDKOptions{std::move(sdk_or_err->first)});
if (!sdk_path_or_err)
return sdk_path_or_err.takeError();

auto VFS = FileSystem::Instance().GetVirtualFileSystem();
if (!VFS)
return llvm::createStringError("No virtual filesystem available.");

// Extract SDK version from the /path/to/some.sdk/SDKSettings.json
auto parsed_or_err = clang::parseDarwinSDKInfo(*VFS, *sdk_path_or_err);
if (!parsed_or_err)
return parsed_or_err.takeError();

auto maybe_sdk = *parsed_or_err;
if (!maybe_sdk)
return llvm::createStringError("Couldn't find Darwin SDK info.");

return XcodeSDK::SDKSupportsBuiltinModules(triple, maybe_sdk->getVersion());
}

static void SetupModuleHeaderPaths(CompilerInstance *compiler,
std::vector<std::string> include_directories,
lldb::TargetSP target_sp) {
Expand Down Expand Up @@ -705,7 +662,6 @@ static void SetupLangOpts(CompilerInstance &compiler,

static void SetupImportStdModuleLangOpts(CompilerInstance &compiler,
lldb_private::Target &target) {
Log *log = GetLog(LLDBLog::Expressions);
LangOptions &lang_opts = compiler.getLangOpts();
lang_opts.Modules = true;
// We want to implicitly build modules.
Expand All @@ -723,12 +679,7 @@ static void SetupImportStdModuleLangOpts(CompilerInstance &compiler,
lang_opts.GNUKeywords = true;
lang_opts.CPlusPlus11 = true;

if (auto supported_or_err = sdkSupportsBuiltinModules(target))
lang_opts.BuiltinHeadersInSystemModules = !*supported_or_err;
else
LLDB_LOG_ERROR(log, supported_or_err.takeError(),
"Failed to determine BuiltinHeadersInSystemModules when "
"setting up import-std-module: {0}");
lang_opts.BuiltinHeadersInSystemModules = false;

// The Darwin libc expects this macro to be set.
lang_opts.GNUCVersion = 40201;
Expand Down
57 changes: 26 additions & 31 deletions lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1130,13 +1130,33 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(

if (target) {
if (ModuleSP exe_module_sp = target->GetExecutableModule()) {
auto path_or_err = ResolveSDKPathFromDebugInfo(*exe_module_sp);
if (path_or_err) {
sysroot_spec = FileSpec(*path_or_err);
SymbolFile *sym_file = exe_module_sp->GetSymbolFile();
if (!sym_file)
return;

XcodeSDK merged_sdk;
for (unsigned i = 0; i < sym_file->GetNumCompileUnits(); ++i) {
if (auto cu_sp = sym_file->GetCompileUnitAtIndex(i)) {
auto cu_sdk = sym_file->ParseXcodeSDK(*cu_sp);
merged_sdk.Merge(cu_sdk);
}
}

// TODO: The result of this loop is almost equivalent to deriving the SDK
// from the target triple, which would be a lot cheaper.

if (FileSystem::Instance().Exists(merged_sdk.GetSysroot())) {
sysroot_spec = merged_sdk.GetSysroot();
} else {
LLDB_LOG_ERROR(GetLog(LLDBLog::Types | LLDBLog::Host),
path_or_err.takeError(),
"Failed to resolve SDK path: {0}");
auto path_or_err =
HostInfo::GetSDKRoot(HostInfo::SDKOptions{merged_sdk});
if (path_or_err) {
sysroot_spec = FileSpec(*path_or_err);
} else {
LLDB_LOG_ERROR(GetLog(LLDBLog::Types | LLDBLog::Host),
path_or_err.takeError(),
"Failed to resolve SDK path: {0}");
}
}
}
}
Expand Down Expand Up @@ -1384,31 +1404,6 @@ PlatformDarwin::GetSDKPathFromDebugInfo(Module &module) {
return std::pair{std::move(merged_sdk), found_mismatch};
}

llvm::Expected<std::string>
PlatformDarwin::ResolveSDKPathFromDebugInfo(Module &module) {
auto sdk_or_err = GetSDKPathFromDebugInfo(module);
if (!sdk_or_err)
return llvm::createStringError(
llvm::inconvertibleErrorCode(),
llvm::formatv("Failed to parse SDK path from debug-info: {0}",
llvm::toString(sdk_or_err.takeError())));

auto [sdk, _] = std::move(*sdk_or_err);

if (FileSystem::Instance().Exists(sdk.GetSysroot()))
return sdk.GetSysroot().GetPath();

auto path_or_err = HostInfo::GetSDKRoot(HostInfo::SDKOptions{sdk});
if (!path_or_err)
return llvm::createStringError(
llvm::inconvertibleErrorCode(),
llvm::formatv("Error while searching for SDK (XcodeSDK '{0}'): {1}",
sdk.GetString(),
llvm::toString(path_or_err.takeError())));

return path_or_err->str();
}

llvm::Expected<XcodeSDK>
PlatformDarwin::GetSDKPathFromDebugInfo(CompileUnit &unit) {
ModuleSP module_sp = unit.CalculateSymbolContextModule();
Expand Down
3 changes: 0 additions & 3 deletions lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,6 @@ class PlatformDarwin : public PlatformPOSIX {
llvm::Expected<std::pair<XcodeSDK, bool>>
GetSDKPathFromDebugInfo(Module &module) override;

llvm::Expected<std::string>
ResolveSDKPathFromDebugInfo(Module &module) override;

llvm::Expected<XcodeSDK> GetSDKPathFromDebugInfo(CompileUnit &unit) override;

llvm::Expected<std::string>
Expand Down
21 changes: 0 additions & 21 deletions lldb/source/Utility/XcodeSDK.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,27 +266,6 @@ bool XcodeSDK::SupportsSwift() const {
}
}

bool XcodeSDK::SDKSupportsBuiltinModules(const llvm::Triple &target_triple,
llvm::VersionTuple sdk_version) {
using namespace llvm;

switch (target_triple.getOS()) {
case Triple::OSType::MacOSX:
return sdk_version >= VersionTuple(15U);
case Triple::OSType::IOS:
return sdk_version >= VersionTuple(18U);
case Triple::OSType::TvOS:
return sdk_version >= VersionTuple(18U);
case Triple::OSType::WatchOS:
return sdk_version >= VersionTuple(11U);
case Triple::OSType::XROS:
return sdk_version >= VersionTuple(2U);
default:
// New SDKs support builtin modules from the start.
return true;
}
}

bool XcodeSDK::SDKSupportsModules(XcodeSDK::Type desired_type,
const FileSpec &sdk_path) {
ConstString last_path_component = sdk_path.GetFilename();
Expand Down
6 changes: 0 additions & 6 deletions lldb/unittests/SymbolFile/DWARF/XcodeSDKModuleTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,6 @@ TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_InvalidSDKPath) {

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());
}

TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_No_DW_AT_APPLE_sdk) {
Expand Down Expand Up @@ -207,9 +204,6 @@ TEST_F(XcodeSDKModuleTests, TestSDKPathFromDebugInfo_No_DW_AT_APPLE_sdk) {

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());
}

TEST_P(SDKPathParsingMultiparamTests, TestSDKPathFromDebugInfo) {
Expand Down
Loading