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