Loading...
other-tools/dyld_shared_cache_util.cpp dyld-1340 dyld-1323.3
--- dyld/dyld-1340/other-tools/dyld_shared_cache_util.cpp
+++ dyld/dyld-1323.3/other-tools/dyld_shared_cache_util.cpp
@@ -220,8 +220,8 @@
 
     SymbolicatedCache(const DyldSharedCache* cache, bool isCacheOnDisk);
 
-    std::optional<size_t>        findClosestRange(uint64_t addr) const;
-    SymbolicatedImage::SymbolLoc findClosestSymbol(uint64_t addr, const SymbolicatedImage*& image) const;
+    std::optional<size_t>   findClosestRange(uint64_t addr) const;
+    void                    findClosestSymbol(uint64_t addr, const SymbolicatedImage*& image, const char*& inSymbolName, uint32_t& inSymbolOffset) const;
 
     std::string symbolNameAt(uint64_t addr) const;
 
@@ -263,18 +263,20 @@
 
 std::string SymbolicatedCache::symbolNameAt(uint64_t addr) const
 {
+    const char* name = nullptr;
+    uint32_t offset = 0;
     const SymbolicatedImage* image = nullptr;
-    SymbolicatedImage::SymbolLoc loc = findClosestSymbol(addr, image);
-    if ( loc.name.empty() ) {
+    findClosestSymbol(addr, image, name, offset);
+    if ( name == nullptr ) {
         if ( image ) {
-            return std::string(image->image().header()->installName()) + "+" + json::hex(loc.inSymbolOffset);
+            return std::string(image->image().header()->installName()) + "+" + json::hex(offset);
         }
         return json::hex( addr );
     }
 
-    std::string nameWithImage = std::string(image->image().header()->installName()) + "`" + std::string(loc.name);
-    if ( loc.inSymbolOffset != 0 )
-        return nameWithImage + "+" + json::hex(loc.inSymbolOffset);
+    std::string nameWithImage = std::string(image->image().header()->installName()) + "`" + std::string(name);
+    if ( offset != 0 )
+        return nameWithImage + "+" + json::hex(offset);
     return nameWithImage;
 }
 
@@ -296,31 +298,31 @@
     return std::distance(ranges.begin(), it);
 }
 
-SymbolicatedImage::SymbolLoc SymbolicatedCache::findClosestSymbol(uint64_t addr, const SymbolicatedImage*& image) const
+void SymbolicatedCache::findClosestSymbol(uint64_t addr, const SymbolicatedImage*& image, const char*& inSymbolName, uint32_t& inSymbolOffset) const
 {
-    SymbolicatedImage::SymbolLoc loc;
+    inSymbolName = nullptr;
+    inSymbolOffset = 0;
     image = nullptr;
     if ( ranges.empty() )
-        return loc;
+        return;
 
     std::optional<size_t> rangeIndex = findClosestRange(addr);
     if ( !rangeIndex )
-        return loc;
+        return;
 
     const Range& range = ranges[*rangeIndex];
     if ( range.imageIndex == std::nullopt )
-        return loc;
+        return;
 
     size_t imageIndex = *range.imageIndex;
     assert(imageIndex < images.size());
     //fprintf(stderr, "debug symbol lookup at offset: %llu, abs: 0x%llX, image: %s\n", runtimeOffset, addr, images[imageIndex].image().header()->installName());
     image = &images[imageIndex];
-    loc = images[imageIndex].findClosestSymbol(addr);
-
-    if ( loc.name.empty() ) {
-        loc.inSymbolOffset = (uint32_t)(addr - image->prefLoadAddress());
-    }
-    return loc;
+    images[imageIndex].findClosestSymbol(addr, inSymbolName, inSymbolOffset);
+
+    if ( inSymbolName == nullptr ) {
+        inSymbolOffset = (uint32_t)(addr - image->prefLoadAddress());
+    }
 }