Author: Alex Langford
Date: 2026-08-19T10:16:29-07:00
New Revision: 2bbcc2b8a2ea58c4c453d190ed065889d12112ed

URL: 
https://github.com/llvm/llvm-project/commit/2bbcc2b8a2ea58c4c453d190ed065889d12112ed
DIFF: 
https://github.com/llvm/llvm-project/commit/2bbcc2b8a2ea58c4c453d190ed065889d12112ed.diff

LOG: [lldb] Replace ConstString with std::string in SharedCacheImageInfo 
(#216844)

Every call to `HostInfo::GetSharedCacheImageInfo` requires us to
construct a ConstString of module's full path before we can look
anything up (regardless of if it was successful). I changed the
interfaces and implementation to not require a ConstString for a lookup.

Going further, the actual SharedCacheImageInfo struct doesn't really
benefit from putting the path into a ConstString if the lookups aren't
also ConstStrings, so I modified that too.

Added: 
    

Modified: 
    lldb/include/lldb/Host/HostInfoBase.h
    lldb/include/lldb/Host/macosx/HostInfoMacOSX.h
    lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
    lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
    lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
    lldb/source/Plugins/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp
    lldb/unittests/ObjectFile/MachO/TestObjectFileMachO.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/Host/HostInfoBase.h 
b/lldb/include/lldb/Host/HostInfoBase.h
index 0f1f8c1d76367..f06cdd59b020a 100644
--- a/lldb/include/lldb/Host/HostInfoBase.h
+++ b/lldb/include/lldb/Host/HostInfoBase.h
@@ -10,7 +10,6 @@
 #define LLDB_HOST_HOSTINFOBASE_H
 
 #include "lldb/Utility/ArchSpec.h"
-#include "lldb/Utility/ConstString.h"
 #include "lldb/Utility/DataExtractor.h"
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/UUID.h"
@@ -33,15 +32,16 @@ struct SharedCacheImageInfo {
   SharedCacheImageInfo()
       : m_filename(), m_uuid(), m_extractor_sp(),
         m_create_data_extractor(nullptr), m_image_baton(nullptr) {}
-  SharedCacheImageInfo(ConstString filename, UUID uuid,
+  SharedCacheImageInfo(std::string filename, UUID uuid,
                        lldb::DataExtractorSP extractor_sp)
-      : m_filename(filename), m_uuid(uuid), m_extractor_sp(extractor_sp),
-        m_create_data_extractor(nullptr), m_image_baton(nullptr) {}
+      : m_filename(std::move(filename)), m_uuid(uuid),
+        m_extractor_sp(extractor_sp), m_create_data_extractor(nullptr),
+        m_image_baton(nullptr) {}
   SharedCacheImageInfo(
-      ConstString filename, UUID uuid,
+      std::string filename, UUID uuid,
       lldb::DataExtractorSP (*create_data_extractor)(void *image),
       void *image_baton)
-      : m_filename(filename), m_uuid(uuid), m_extractor_sp(),
+      : m_filename(std::move(filename)), m_uuid(uuid), m_extractor_sp(),
         m_create_data_extractor(create_data_extractor),
         m_image_baton(image_baton) {}
 
@@ -50,7 +50,7 @@ struct SharedCacheImageInfo {
       m_extractor_sp = m_create_data_extractor(m_image_baton);
     return m_extractor_sp;
   }
-  ConstString GetFilename() const { return m_filename; }
+  llvm::StringRef GetFilename() const { return m_filename; }
   const UUID &GetUUID() const { return m_uuid; }
   void *GetImageBaton();
   void SetExtractor(lldb::DataExtractorSP extractor_sp) {
@@ -61,7 +61,7 @@ struct SharedCacheImageInfo {
       lldb::DataExtractorSP (*create_data_extractor)(void *image));
 
 private:
-  ConstString m_filename;
+  std::string m_filename;
   UUID m_uuid;
   lldb::DataExtractorSP m_extractor_sp;
   lldb::DataExtractorSP (*m_create_data_extractor)(void *image);
@@ -198,7 +198,7 @@ class HostInfoBase {
   ///     cache binary blob directly, needed to keep user settings out of
   ///     Host.
   static SharedCacheImageInfo
-  GetSharedCacheImageInfo(ConstString filepath,
+  GetSharedCacheImageInfo(llvm::StringRef filepath,
                           lldb::SymbolSharedCacheUse sc_mode) {
     return {};
   }
@@ -225,7 +225,7 @@ class HostInfoBase {
   ///     cache binary blob directly, needed to keep user settings out of
   ///     Host.
   static SharedCacheImageInfo
-  GetSharedCacheImageInfo(ConstString filepath, const UUID &sc_uuid,
+  GetSharedCacheImageInfo(llvm::StringRef filepath, const UUID &sc_uuid,
                           lldb::SymbolSharedCacheUse sc_mode) {
     return {};
   }
@@ -244,20 +244,6 @@ class HostInfoBase {
     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,
-                          lldb::SymbolSharedCacheUse sc_mode) {
-    return {};
-  }
-
   /// Scan the files in a shared cache, if the filepath and uuid match
   /// on the debug host.
   /// Returns false if the shared cache filepath did not exist, or uuid

diff  --git a/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h 
b/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h
index 6c2cabbf55c74..7133182b595ed 100644
--- a/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h
+++ b/lldb/include/lldb/Host/macosx/HostInfoMacOSX.h
@@ -43,13 +43,13 @@ class HostInfoMacOSX : public HostInfoPosix {
 
   /// Shared cache utilities
   static SharedCacheImageInfo
-  GetSharedCacheImageInfo(ConstString filepath,
+  GetSharedCacheImageInfo(llvm::StringRef filepath,
                           lldb::SymbolSharedCacheUse sc_mode);
   static SharedCacheImageInfo
   GetSharedCacheImageInfo(const UUID &uuid, lldb::SymbolSharedCacheUse 
sc_mode);
 
   static SharedCacheImageInfo
-  GetSharedCacheImageInfo(ConstString filepath, const UUID &sc_uuid,
+  GetSharedCacheImageInfo(llvm::StringRef filepath, const UUID &sc_uuid,
                           lldb::SymbolSharedCacheUse sc_mode);
   static SharedCacheImageInfo
   GetSharedCacheImageInfo(const UUID &uuid, const UUID &sc_uuid,

diff  --git a/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm 
b/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
index 8091e2d799914..a2859a8788dbb 100644
--- a/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
+++ b/lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
@@ -11,7 +11,6 @@
 #include "lldb/Host/Host.h"
 #include "lldb/Host/HostInfo.h"
 #include "lldb/Utility/Args.h"
-#include "lldb/Utility/ConstString.h"
 #include "lldb/Utility/DataBuffer.h"
 #include "lldb/Utility/DataExtractor.h"
 #include "lldb/Utility/FileSpecList.h"
@@ -749,7 +748,7 @@ bool Has4HWTraceSPIs() const {
 
 class SharedCacheInfo {
 public:
-  SharedCacheImageInfo GetByFilename(UUID sc_uuid, ConstString filename) {
+  SharedCacheImageInfo GetByFilename(UUID sc_uuid, llvm::StringRef filename) {
     llvm::sys::ScopedReader guard(m_mutex);
     if (!sc_uuid)
       sc_uuid = m_host_uuid;
@@ -787,7 +786,7 @@ SharedCacheImageInfo GetByUUID(UUID sc_uuid, UUID 
file_uuid) {
   // All of the entries for a given shared cache are in m_file_infos.
   // m_filename_map and m_uuid_map have pointers into those entries.
   llvm::SmallDenseMap<UUID, std::vector<SharedCacheImageInfo>> m_file_infos;
-  llvm::SmallDenseMap<UUID, llvm::DenseMap<ConstString, size_t>> 
m_filename_map;
+  llvm::SmallDenseMap<UUID, llvm::StringMap<size_t>> m_filename_map;
   llvm::SmallDenseMap<UUID, llvm::DenseMap<UUID, size_t>> m_uuid_map;
 
   UUID m_host_uuid;
@@ -942,11 +941,11 @@ static DataExtractorSP 
map_shared_cache_binary_segments(void *image) {
         return;
       UUID image_uuid(uuid_tmp, sizeof(uuid_t));
 
-      // Copy the filename into the const string pool to
-      // ensure lifetime.
-      ConstString installname(dyld_image_get_installname(image));
+      const char *installname_cstr = dyld_image_get_installname(image);
+      std::string installname = installname_cstr ? installname_cstr : "";
+
       Log *log = GetLog(LLDBLog::Modules);
-      LLDB_LOGF_VERBOSE(log, "sc file %s image %p", installname.GetCString(),
+      LLDB_LOGF_VERBOSE(log, "sc file %s image %p", installname.c_str(),
                         (void *)image);
 
       dyld.image_retain_4HWTrace(image);
@@ -1052,9 +1051,8 @@ static DataExtractorSP 
map_shared_cache_binary_segments(void *image) {
           seg.first - minVmAddr, seg.second, seg.first - minVmAddr));
     lldb::DataExtractorSP extractor_sp =
         std::make_shared<VirtualDataExtractor>(data_sp, table);
-    // Copy the filename into the const string pool to
-    // ensure lifetime.
-    ConstString installname(dyld_image_get_installname(image));
+    const char *installname_cstr = dyld_image_get_installname(image);
+    std::string installname = installname_cstr ? installname_cstr : "";
     m_file_infos[m_host_uuid].push_back(
         SharedCacheImageInfo(installname, UUID(uuid, 16), extractor_sp));
   });
@@ -1076,7 +1074,7 @@ static DataExtractorSP 
map_shared_cache_binary_segments(void *image) {
 }
 
 SharedCacheImageInfo
-HostInfoMacOSX::GetSharedCacheImageInfo(ConstString filepath,
+HostInfoMacOSX::GetSharedCacheImageInfo(llvm::StringRef filepath,
                                         SymbolSharedCacheUse sc_mode) {
   return GetSharedCacheSingleton(sc_mode).GetByFilename(UUID(), filepath);
 }
@@ -1087,8 +1085,10 @@ static DataExtractorSP 
map_shared_cache_binary_segments(void *image) {
   return GetSharedCacheSingleton(sc_mode).GetByUUID(UUID(), file_uuid);
 }
 
-SharedCacheImageInfo HostInfoMacOSX::GetSharedCacheImageInfo(
-    ConstString filepath, const UUID &sc_uuid, SymbolSharedCacheUse sc_mode) {
+SharedCacheImageInfo
+HostInfoMacOSX::GetSharedCacheImageInfo(llvm::StringRef filepath,
+                                        const UUID &sc_uuid,
+                                        SymbolSharedCacheUse sc_mode) {
   return GetSharedCacheSingleton(sc_mode).GetByFilename(sc_uuid, filepath);
 }
 

diff  --git 
a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp 
b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
index 9ba3760b1628f..052774fe0141d 100644
--- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
+++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
@@ -152,13 +152,15 @@ ModuleSP 
DynamicLoaderDarwin::FindTargetModuleForImageInfo(
         image_info = HostInfo::GetSharedCacheImageInfo(module_spec.GetUUID(),
                                                        sc_uuid, sc_mode);
 
-      else
-        image_info = HostInfo::GetSharedCacheImageInfo(
-            ConstString(module_spec.GetFileSpec().GetPath()), sc_uuid, 
sc_mode);
+      else {
+        std::string filepath = module_spec.GetFileSpec().GetPath();
+        image_info =
+            HostInfo::GetSharedCacheImageInfo(filepath, sc_uuid, sc_mode);
+      }
     } else {
       // Fall back to looking lldb's own shared cache by filename
-      image_info = HostInfo::GetSharedCacheImageInfo(
-          ConstString(module_spec.GetFileSpec().GetPath()), sc_mode);
+      std::string filepath = module_spec.GetFileSpec().GetPath();
+      image_info = HostInfo::GetSharedCacheImageInfo(filepath, sc_mode);
     }
 
     // If we found it and it has the correct UUID, let's proceed with

diff  --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp 
b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 86af41e5c5647..4604f81d414be 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -439,15 +439,18 @@ Status PlatformDarwin::GetModuleFromSharedCaches(
       if (module_spec.GetUUID())
         image_info = HostInfo::GetSharedCacheImageInfo(module_spec.GetUUID(),
                                                        sc_uuid, sc_mode);
-      else
-        image_info = HostInfo::GetSharedCacheImageInfo(
-            ConstString(module_spec.GetFileSpec().GetPath()), sc_uuid, 
sc_mode);
+      else {
+        std::string filepath = module_spec.GetFileSpec().GetPath();
+        image_info =
+            HostInfo::GetSharedCacheImageInfo(filepath, sc_uuid, sc_mode);
+      }
     }
   }
   // Fall back to looking for the file in lldb's own shared cache.
-  if (!image_info.GetUUID())
-    image_info = HostInfo::GetSharedCacheImageInfo(
-        ConstString(module_spec.GetFileSpec().GetPath()), sc_mode);
+  if (!image_info.GetUUID()) {
+    std::string filepath = module_spec.GetFileSpec().GetPath();
+    image_info = HostInfo::GetSharedCacheImageInfo(filepath, sc_mode);
+  }
 
   // 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/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp 
b/lldb/source/Plugins/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp
index aeb6a07298207..fc15f9121eee2 100644
--- 
a/lldb/source/Plugins/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp
+++ 
b/lldb/source/Plugins/SymbolLocator/DebugSymbols/SymbolLocatorDebugSymbols.cpp
@@ -220,8 +220,9 @@ std::optional<ModuleSpec> 
SymbolLocatorDebugSymbols::LocateExecutableObjectFile(
             SymbolSharedCacheUse sc_mode =
                 ModuleList::GetGlobalModuleListProperties()
                     .GetSharedCacheBinaryLoading();
-            SharedCacheImageInfo image_info = 
HostInfo::GetSharedCacheImageInfo(
-                ConstString(module_spec.GetFileSpec().GetPath()), sc_mode);
+            std::string filepath = module_spec.GetFileSpec().GetPath();
+            SharedCacheImageInfo image_info =
+                HostInfo::GetSharedCacheImageInfo(filepath, sc_mode);
 
             // If we found it and it has the correct UUID, let's proceed with
             // creating a module from the memory contents.
@@ -647,8 +648,9 @@ static int LocateMacOSXFilesUsingDebugSymbols(const 
ModuleSpec &module_spec,
             SymbolSharedCacheUse sc_mode =
                 ModuleList::GetGlobalModuleListProperties()
                     .GetSharedCacheBinaryLoading();
-            SharedCacheImageInfo image_info = 
HostInfo::GetSharedCacheImageInfo(
-                ConstString(module_spec.GetFileSpec().GetPath()), sc_mode);
+            std::string filepath = module_spec.GetFileSpec().GetPath();
+            SharedCacheImageInfo image_info =
+                HostInfo::GetSharedCacheImageInfo(filepath, sc_mode);
 
             // 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/unittests/ObjectFile/MachO/TestObjectFileMachO.cpp 
b/lldb/unittests/ObjectFile/MachO/TestObjectFileMachO.cpp
index 7ebbcd6d1974d..004742bf2befa 100644
--- a/lldb/unittests/ObjectFile/MachO/TestObjectFileMachO.cpp
+++ b/lldb/unittests/ObjectFile/MachO/TestObjectFileMachO.cpp
@@ -45,8 +45,7 @@ TEST_F(ObjectFileMachOTest, ModuleFromSharedCacheInfo) {
   Platform::SetHostPlatform(PlatformRemoteMacOSX::CreateInstance(true, &arch));
 
   SharedCacheImageInfo image_info = HostInfo::GetSharedCacheImageInfo(
-      ConstString("/usr/lib/libobjc.A.dylib"),
-      lldb::eSymbolSharedCacheUseHostSharedCache);
+      "/usr/lib/libobjc.A.dylib", lldb::eSymbolSharedCacheUseHostSharedCache);
   EXPECT_TRUE(image_info.GetUUID());
   EXPECT_TRUE(image_info.GetExtractor());
 
@@ -94,8 +93,7 @@ TEST_F(ObjectFileMachOTest, ModuleFromSharedCacheInfo) {
 
 TEST_F(ObjectFileMachOTest, IndirectSymbolsInTheSharedCache) {
   SharedCacheImageInfo image_info = HostInfo::GetSharedCacheImageInfo(
-      ConstString(
-          "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit"),
+      "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit",
       lldb::eSymbolSharedCacheUseHostSharedCache);
   ModuleSpec spec(FileSpec(), UUID(), image_info.GetExtractor());
   lldb::ModuleSP module = std::make_shared<Module>(spec);


        
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to