[Lldb-commits] [lldb] [lldb][macOS] Don't fetch settings in Host, to keep layering (PR #181406)
Jason Molenda via lldb-commits
lldb-commits at lists.llvm.org
Fri Feb 13 11:42:36 PST 2026
https://github.com/jasonmolenda created https://github.com/llvm/llvm-project/pull/181406
I introduced a dependency from Host on Core without realizing it in an earlier PR, while adding a setting to disable the new shared cache binary blob scanning/reading in HostInfoMacOSX, which caused build problems. Thanks to Alex for figuring out the build failure I caused.
Add a bool to the methods in HostInfoMacOSX, and have the callers (in Core and various plugins etc) all fetch the
symbols.shared-cache-binary-loading setting from ModuleList, and pass the result in.
The least obvious part of this is in ProcessGDBRemote where we first learn the shared cache filepath & uuid, it calls HostInfoMacOSX::SharedCacheIndexFiles() - this is only called when the shared cache binary loading is enabled, so I conditionalize the call to this method based on the setting.
rdar://148939795
>From ffd9b001fe975d60005eef050f366a2885ae6d31 Mon Sep 17 00:00:00 2001
From: Jason Molenda <jmolenda at apple.com>
Date: Fri, 13 Feb 2026 11:36:38 -0800
Subject: [PATCH] [lldb][macOS] Don't fetch settings in Host, to keep layering
I introduced a dependency from Host on Core without realizing
it in an earlier PR, while adding a setting to disable the new
shared cache binary blob scanning/reading in HostInfoMacOSX,
which caused build problems. Thanks to Alex for figuring out
the build failure I caused.
Add a bool to the methods in HostInfoMacOSX, and have the callers
(in Core and various plugins etc) all fetch the
symbols.shared-cache-binary-loading setting from ModuleList, and
pass the result in.
The least obvious part of this is in ProcessGDBRemote where we
first learn the shared cache filepath & uuid, it calls
HostInfoMacOSX::SharedCacheIndexFiles() - this is only called
when the shared cache binary loading is enabled, so I conditionalize
the call to this method based on the setting.
rdar://148939795
---
lldb/include/lldb/Host/HostInfoBase.h | 16 ++++++++--
.../include/lldb/Host/macosx/HostInfoMacOSX.h | 6 ++--
lldb/source/Host/macosx/objcxx/CMakeLists.txt | 1 -
.../Host/macosx/objcxx/HostInfoMacOSX.mm | 32 +++++++++----------
.../MacOSX-DYLD/DynamicLoaderDarwin.cpp | 6 ++--
.../Platform/MacOSX/PlatformDarwinDevice.cpp | 7 ++--
.../Process/gdb-remote/ProcessGDBRemote.cpp | 6 +++-
.../SymbolLocatorDebugSymbols.cpp | 10 ++++--
8 files changed, 56 insertions(+), 28 deletions(-)
diff --git a/lldb/include/lldb/Host/HostInfoBase.h b/lldb/include/lldb/Host/HostInfoBase.h
index bc80e5e62ed39..d88bc27a2757f 100644
--- a/lldb/include/lldb/Host/HostInfoBase.h
+++ b/lldb/include/lldb/Host/HostInfoBase.h
@@ -185,16 +185,28 @@ class HostInfoBase {
/// Return information about module \p image_name if it is loaded in
/// the current process's address space.
+ ///
+ /// \param[in] use_sc_binary_directly
+ /// Flag to control if this method can try to read a shared
+ /// cache binary blob directly, needed to keep user settings out of
+ /// Host.
static SharedCacheImageInfo
- GetSharedCacheImageInfo(llvm::StringRef image_name) {
+ GetSharedCacheImageInfo(llvm::StringRef image_name,
+ bool use_sc_binary_directly) {
return {};
}
/// Return information about module \p image_name if it is loaded in
/// the current process's address space using shared cache \p uuid.
/// The shared cache UUID must have been previously indexed.
+ ///
+ /// \param[in] use_sc_binary_directly
+ /// Flag to control if this method can try to read a shared
+ /// cache binary blob directly, needed to keep user settings out of
+ /// Host.
static SharedCacheImageInfo
- GetSharedCacheImageInfo(llvm::StringRef image_name, const UUID &uuid) {
+ GetSharedCacheImageInfo(llvm::StringRef image_name, const UUID &uuid,
+ bool use_sc_binary_directly) {
return {};
}
diff --git a/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h b/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h
index c58056cb492b7..9fcf922d00b80 100644
--- a/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h
+++ b/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h
@@ -43,10 +43,12 @@ class HostInfoMacOSX : public HostInfoPosix {
/// Shared cache utilities
static SharedCacheImageInfo
- GetSharedCacheImageInfo(llvm::StringRef image_name);
+ GetSharedCacheImageInfo(llvm::StringRef image_name,
+ bool use_sc_binary_directly);
static SharedCacheImageInfo
- GetSharedCacheImageInfo(llvm::StringRef image_name, const UUID &uuid);
+ GetSharedCacheImageInfo(llvm::StringRef image_name, const UUID &uuid,
+ bool use_sc_binary_directly);
static bool SharedCacheIndexFiles(FileSpec &filepath, UUID &uuid);
diff --git a/lldb/source/Host/macosx/objcxx/CMakeLists.txt b/lldb/source/Host/macosx/objcxx/CMakeLists.txt
index a47a1e5086eee..1d7573335b8ec 100644
--- a/lldb/source/Host/macosx/objcxx/CMakeLists.txt
+++ b/lldb/source/Host/macosx/objcxx/CMakeLists.txt
@@ -14,7 +14,6 @@ add_lldb_library(lldbHostMacOSXObjCXX NO_PLUGIN_DEPENDENCIES
Support
TargetParser
LINK_LIBS
- lldbCore
lldbUtility
${EXTRA_LIBS}
)
diff --git a/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm b/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
index d37062b152a00..dc81d831f0638 100644
--- a/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
+++ b/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
@@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//
#include "lldb/Host/macosx/HostInfoMacOSX.h"
-#include "lldb/Core/ModuleList.h"
#include "lldb/Host/FileSystem.h"
#include "lldb/Host/Host.h"
#include "lldb/Host/HostInfo.h"
@@ -702,7 +701,7 @@ bool GetImages(llvm::StringMap<SharedCacheImageInfo> **images,
/// system, open it and add all of the binary images to m_caches.
bool CreateSharedCacheImageList(UUID uuid, std::string filepath);
- SharedCacheInfo();
+ SharedCacheInfo(bool use_sc_binary_directly);
private:
bool CreateSharedCacheInfoWithInstrospectionSPIs();
@@ -721,7 +720,7 @@ bool GetImages(llvm::StringMap<SharedCacheImageInfo> **images,
} // namespace
-SharedCacheInfo::SharedCacheInfo() {
+SharedCacheInfo::SharedCacheInfo(bool use_sc_binary_directly) {
// macOS 26.4 and newer
m_dyld_image_retain_4HWTrace =
(void (*)(void *))dlsym(RTLD_DEFAULT, "dyld_image_retain_4HWTrace");
@@ -735,9 +734,7 @@ bool GetImages(llvm::StringMap<SharedCacheImageInfo> **images,
_dyld_get_shared_cache_uuid(dsc_uuid);
m_host_uuid = UUID(dsc_uuid);
- if (ModuleList::GetGlobalModuleListProperties()
- .GetSharedCacheBinaryLoading() &&
- CreateHostSharedCacheImageList())
+ if (use_sc_binary_directly && CreateHostSharedCacheImageList())
return;
if (CreateSharedCacheInfoWithInstrospectionSPIs())
@@ -973,21 +970,24 @@ static dispatch_data_t (*g_dyld_image_segment_data_4HWTrace)(
});
}
-SharedCacheInfo &GetSharedCacheSingleton() {
- static SharedCacheInfo g_shared_cache_info;
+SharedCacheInfo &GetSharedCacheSingleton(bool use_sc_binary_directly) {
+ static SharedCacheInfo g_shared_cache_info(use_sc_binary_directly);
return g_shared_cache_info;
}
SharedCacheImageInfo
-HostInfoMacOSX::GetSharedCacheImageInfo(llvm::StringRef image_name) {
- return GetSharedCacheSingleton().GetImages().lookup(image_name);
+HostInfoMacOSX::GetSharedCacheImageInfo(llvm::StringRef image_name,
+ bool use_sc_binary_directly) {
+ return GetSharedCacheSingleton(use_sc_binary_directly)
+ .GetImages()
+ .lookup(image_name);
}
-SharedCacheImageInfo
-HostInfoMacOSX::GetSharedCacheImageInfo(llvm::StringRef image_name,
- const UUID &uuid) {
+SharedCacheImageInfo HostInfoMacOSX::GetSharedCacheImageInfo(
+ llvm::StringRef image_name, const UUID &uuid, bool use_sc_binary_directly) {
llvm::StringMap<SharedCacheImageInfo> *shared_cache_info;
- if (GetSharedCacheSingleton().GetImages(&shared_cache_info, uuid))
+ if (GetSharedCacheSingleton(use_sc_binary_directly)
+ .GetImages(&shared_cache_info, uuid))
return shared_cache_info->lookup(image_name);
return {};
}
@@ -998,7 +998,7 @@ static dispatch_data_t (*g_dyld_image_segment_data_4HWTrace)(
// cache is installed. So require that we are given a filepath of
// the shared cache.
if (FileSystem::Instance().Exists(filepath))
- return GetSharedCacheSingleton().CreateSharedCacheImageList(
- uuid, filepath.GetPath());
+ return GetSharedCacheSingleton(/*use_sc_binary_directly=*/true)
+ .CreateSharedCacheImageList(uuid, filepath.GetPath());
return false;
}
diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
index 0a8aa51a1469c..70a6cf8ebc57c 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
@@ -141,14 +141,16 @@ ModuleSP DynamicLoaderDarwin::FindTargetModuleForImageInfo(
LazyBool using_sc;
LazyBool private_sc;
FileSpec sc_path;
+ bool use_sc_binary_directly = ModuleList::GetGlobalModuleListProperties()
+ .GetSharedCacheBinaryLoading();
if (GetSharedCacheInformation(sc_base_addr, sc_uuid, using_sc, private_sc,
sc_path) &&
sc_uuid)
image_info = HostInfo::GetSharedCacheImageInfo(
- module_spec.GetFileSpec().GetPath(), sc_uuid);
+ module_spec.GetFileSpec().GetPath(), sc_uuid, use_sc_binary_directly);
else
image_info = HostInfo::GetSharedCacheImageInfo(
- module_spec.GetFileSpec().GetPath());
+ module_spec.GetFileSpec().GetPath(), use_sc_binary_directly);
// If we found it and it has the correct UUID, let's proceed with
// creating a module from the memory contents.
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
index 59d2f9ed9d856..f81167f7443fd 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinDevice.cpp
@@ -319,6 +319,8 @@ lldb_private::Status PlatformDarwinDevice::GetSharedModuleWithLocalCache(
// exist on the filesystem, so let's use the images in our own memory
// to create the modules.
+ bool use_sc_binary_directly = ModuleList::GetGlobalModuleListProperties()
+ .GetSharedCacheBinaryLoading();
SharedCacheImageInfo image_info;
if (process && process->GetDynamicLoader()) {
addr_t sc_base_addr;
@@ -328,12 +330,13 @@ lldb_private::Status PlatformDarwinDevice::GetSharedModuleWithLocalCache(
if (process->GetDynamicLoader()->GetSharedCacheInformation(
sc_base_addr, sc_uuid, using_sc, private_sc, sc_path))
image_info = HostInfo::GetSharedCacheImageInfo(
- module_spec.GetFileSpec().GetPath(), sc_uuid);
+ module_spec.GetFileSpec().GetPath(), sc_uuid,
+ use_sc_binary_directly);
}
if (!image_info.GetUUID())
image_info = HostInfo::GetSharedCacheImageInfo(
- module_spec.GetFileSpec().GetPath());
+ module_spec.GetFileSpec().GetPath(), use_sc_binary_directly);
// If we found it and it has the correct UUID, let's proceed with
// creating a module from the memory contents.
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 767684e01ee3b..65d0ed6f51c79 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -4375,9 +4375,13 @@ StructuredData::ObjectSP ProcessGDBRemote::GetSharedCacheInfo() {
FileSpec sc_path(
dict->GetValueForKey("shared_cache_path")->GetStringValue());
+ bool use_sc_binary_directly =
+ ModuleList::GetGlobalModuleListProperties()
+ .GetSharedCacheBinaryLoading();
// Attempt to open the shared cache at sc_path, and
// if the uuid matches, index all the files.
- HostInfo::SharedCacheIndexFiles(sc_path, uuid);
+ if (use_sc_binary_directly)
+ HostInfo::SharedCacheIndexFiles(sc_path, uuid);
}
m_shared_cache_info_sp = response_sp;
}
diff --git a/lldb/source/Plugins/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp b/lldb/source/Plugins/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp
index f4b572c9e88ac..d885e5bfe5ee3 100644
--- a/lldb/source/Plugins/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp
+++ b/lldb/source/Plugins/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp
@@ -203,8 +203,11 @@ std::optional<ModuleSpec> SymbolLocatorDebugSymbols::LocateExecutableObjectFile(
// Check if the requested image is in our shared cache.
if (!success) {
+ bool use_sc_binary_directly =
+ ModuleList::GetGlobalModuleListProperties()
+ .GetSharedCacheBinaryLoading();
SharedCacheImageInfo image_info = HostInfo::GetSharedCacheImageInfo(
- module_spec.GetFileSpec().GetPath());
+ module_spec.GetFileSpec().GetPath(), use_sc_binary_directly);
// If we found it and it has the correct UUID, let's proceed with
// creating a module from the memory contents.
@@ -646,8 +649,11 @@ static int LocateMacOSXFilesUsingDebugSymbols(const ModuleSpec &module_spec,
// Check if the requested image is in our shared cache.
if (!success) {
+ bool use_sc_binary_directly =
+ ModuleList::GetGlobalModuleListProperties()
+ .GetSharedCacheBinaryLoading();
SharedCacheImageInfo image_info = HostInfo::GetSharedCacheImageInfo(
- module_spec.GetFileSpec().GetPath());
+ module_spec.GetFileSpec().GetPath(), use_sc_binary_directly);
// If we found it and it has the correct UUID, let's proceed with
// creating a module from the memory contents.
More information about the lldb-commits
mailing list