summaryrefslogtreecommitdiff
path: root/view/sharedcache/core/SharedCache.cpp
diff options
context:
space:
mode:
authorkat <kat@vector35.com>2025-01-30 10:39:55 -0500
committerkat <kat@vector35.com>2025-01-30 10:40:02 -0500
commit5a5426d030b6be26d4564ba1eba2d8a275533256 (patch)
treed6b57d04c8ac0c877149fd00f32d105d6f8c8def /view/sharedcache/core/SharedCache.cpp
parentac0fe22f3c158f51f8c1d43e73b8664d0fed2eb9 (diff)
[SharedCache] Vision Pro, tvOS, iOS Simulator support
Diffstat (limited to 'view/sharedcache/core/SharedCache.cpp')
-rw-r--r--view/sharedcache/core/SharedCache.cpp43
1 files changed, 24 insertions, 19 deletions
diff --git a/view/sharedcache/core/SharedCache.cpp b/view/sharedcache/core/SharedCache.cpp
index 6db1037d..0ba4f184 100644
--- a/view/sharedcache/core/SharedCache.cpp
+++ b/view/sharedcache/core/SharedCache.cpp
@@ -576,31 +576,36 @@ void SharedCache::PerformInitialLoad()
}
// Load .symbols subcache
+ try {
+ auto subCachePath = path + ".symbols";
+ auto subCacheFile = MMappedFileAccessor::Open(m_dscView, m_dscView->GetFile()->GetSessionId(), subCachePath)->lock();
- auto subCachePath = path + ".symbols";
- auto subCacheFile = MMappedFileAccessor::Open(m_dscView, m_dscView->GetFile()->GetSessionId(), subCachePath)->lock();
+ dyld_cache_header subCacheHeader {};
+ uint64_t headerSize = subCacheFile->ReadUInt32(16);
+ if (headerSize > sizeof(dyld_cache_header))
+ {
+ m_logger->LogDebug("Header size is larger than expected (0x%llx), using default size (0x%llx)", headerSize,
+ sizeof(dyld_cache_header));
+ headerSize = sizeof(dyld_cache_header);
+ }
+ subCacheFile->Read(&subCacheHeader, 0, headerSize);
- dyld_cache_header subCacheHeader {};
- uint64_t headerSize = subCacheFile->ReadUInt32(16);
- if (headerSize > sizeof(dyld_cache_header))
- {
- m_logger->LogDebug("Header size is larger than expected (0x%llx), using default size (0x%llx)", headerSize,
- sizeof(dyld_cache_header));
- headerSize = sizeof(dyld_cache_header);
- }
- subCacheFile->Read(&subCacheHeader, 0, headerSize);
+ dyld_cache_mapping_info subCacheMapping {};
+ BackingCache subCache;
- dyld_cache_mapping_info subCacheMapping {};
- BackingCache subCache;
+ for (size_t j = 0; j < subCacheHeader.mappingCount; j++)
+ {
+ subCacheFile->Read(&subCacheMapping, subCacheHeader.mappingOffset + (j * sizeof(subCacheMapping)),
+ sizeof(subCacheMapping));
+ subCache.mappings.push_back(subCacheMapping);
+ }
- for (size_t j = 0; j < subCacheHeader.mappingCount; j++)
+ MutableState().backingCaches.push_back(std::move(subCache));
+ }
+ catch (...)
{
- subCacheFile->Read(&subCacheMapping, subCacheHeader.mappingOffset + (j * sizeof(subCacheMapping)),
- sizeof(subCacheMapping));
- subCache.mappings.push_back(subCacheMapping);
+ m_logger->LogWarn("Failed to locate .symbols subcache. Non-exported symbol information may be missing.");
}
-
- MutableState().backingCaches.push_back(std::move(subCache));
break;
}
case iOS16CacheFormat: