Loading...
cache_builder/SubCache.cpp dyld-1162 dyld-1125.5
--- dyld/dyld-1162/cache_builder/SubCache.cpp
+++ dyld/dyld-1125.5/cache_builder/SubCache.cpp
@@ -1970,110 +1970,6 @@
     return Error();
 }
 
-Error SubCache::computeSlideInfoV5(const BuilderConfig&           config,
-                                   cache_builder::SlideInfoChunk* slideChunk,
-                                   Region&                        region)
-{
-    __block Diagnostics diag;
-
-    bool canContainAuthPointers = region.canContainAuthPointers();
-
-    assert((region.subCacheVMSize.rawValue() % config.slideInfo.slideInfoPageSize) == 0);
-    dyld_cache_slide_info5* info    = (dyld_cache_slide_info5*)slideChunk->subCacheBuffer;
-    info->version                   = 5;
-    info->page_size                 = config.slideInfo.slideInfoPageSize;
-    info->page_starts_count         = (uint32_t)region.subCacheVMSize.rawValue() / config.slideInfo.slideInfoPageSize;
-    info->value_add                 = config.layout.cacheBaseAddress.rawValue();
-
-    assert((sizeof(dyld_cache_slide_info5) + (info->page_starts_count * sizeof(uint16_t))) <= slideChunk->cacheVMSize.rawValue());
-
-    std::fill(&info->page_starts[0], &info->page_starts[info->page_starts_count], DYLD_CACHE_SLIDE_V5_PAGE_ATTR_NO_REBASE);
-
-    // Walk each fixup in each segment.  Every time we cross a page, add a page start
-    __block dyld_cache_slide_pointer5* lastFixup     = nullptr;
-    __block uint64_t                   lastPageIndex = ~0ULL;
-    for ( Chunk* chunk : region.chunks ) {
-        SlidChunk* slidChunk = chunk->isSlidChunk();
-
-        slidChunk->tracker.forEachFixup(^(void *loc, bool& stop) {
-            // V5 fixups must be 8-byte aligned
-            assert(((uint64_t)loc % 8) == 0);
-
-            VMOffset       vmOffsetInSegment((uint64_t)loc - (uint64_t)slidChunk->subCacheBuffer);
-            CacheVMAddress fixupVMAddr = slidChunk->cacheVMAddress + vmOffsetInSegment;
-            uint64_t       pageIndex   = (fixupVMAddr - region.subCacheVMAddress).rawValue() / info->page_size;
-
-            // If we are on a new page, then start a new chain
-            if ( pageIndex != lastPageIndex ) {
-                uint64_t vmOffsetInPage      = fixupVMAddr.rawValue() % info->page_size;
-                info->page_starts[pageIndex] = vmOffsetInPage;
-            }
-            else {
-                // Patch the previous fixup on this page to point to this one
-                lastFixup->auth.next = ((uint64_t)loc - (uint64_t)lastFixup) / 8;
-            }
-
-            dyld_cache_slide_pointer5* fixupLocation = (dyld_cache_slide_pointer5*)loc;
-
-            // Convert this fixup from the chained format in the cache builder, to the version we want in the cache file
-            CacheVMAddress vmAddr = Fixup::Cache64::getCacheVMAddressFromLocation(config.layout.cacheBaseAddress,
-                                                                                  loc);
-
-            uint8_t high8 = Fixup::Cache64::getHigh8(loc);
-            VMOffset cacheVMOffset = vmAddr - config.layout.cacheBaseAddress;
-
-            uint16_t    authDiversity  = 0;
-            bool        authIsAddr     = false;
-            uint8_t     authKey        = 0;
-            if ( Fixup::Cache64::hasAuthData(loc, authDiversity, authIsAddr, authKey) ) {
-                // Authenticated value
-                assert(high8 == 0);
-                assert(canContainAuthPointers);
-                assert((authKey == 0) || (authKey == 2)); // IA (0) or DA (2)
-
-                fixupLocation->auth.runtimeOffset       = cacheVMOffset.rawValue();
-                fixupLocation->auth.diversity           = authDiversity;
-                fixupLocation->auth.addrDiv             = authIsAddr ? 1 : 0;
-                fixupLocation->auth.keyIsData           = (authKey == 2) ? 1 : 0;
-                fixupLocation->auth.next                = 0;
-                fixupLocation->auth.auth                = 1;
-
-                if ( fixupLocation->auth.runtimeOffset != cacheVMOffset.rawValue() ) {
-                    diag.error("cache offset 0x%llx exceeds v5 format", cacheVMOffset.rawValue());
-                    stop = true;
-                    return;
-                }
-            } else {
-                // Unauthenticated value
-                fixupLocation->regular.runtimeOffset    = cacheVMOffset.rawValue();
-                fixupLocation->regular.high8            = high8;
-                fixupLocation->regular.next             = 0;
-                fixupLocation->regular.unused           = 0;
-                fixupLocation->regular.auth             = 0;
-
-                if ( fixupLocation->regular.runtimeOffset != cacheVMOffset.rawValue() ) {
-                    diag.error("cache offset 0x%llx exceeds v5 format", cacheVMOffset.rawValue());
-                    stop = true;
-                    return;
-                }
-            }
-
-            lastFixup     = fixupLocation;
-            lastPageIndex = pageIndex;
-        });
-        if ( diag.hasError() )
-            break;
-    }
-
-    if ( diag.hasError() )
-        return Error("could not build slide info because: %s", diag.errorMessageCStr());
-
-    // V5 doesn't deduplicate content like V1, so the used size is the original size too
-    slideChunk->usedFileSize = slideChunk->subCacheFileSize;
-
-    return Error();
-}
-
 Error SubCache::computeSlideInfoForRegion(const BuilderConfig&           config,
                                           cache_builder::SlideInfoChunk* slideChunk,
                                           Region&                        region)
@@ -2085,8 +1981,6 @@
             return computeSlideInfoV2(config, slideChunk, region);
         case cache_builder::SlideInfo::SlideInfoFormat::v3:
             return computeSlideInfoV3(config, slideChunk, region);
-        case cache_builder::SlideInfo::SlideInfoFormat::v5:
-            return computeSlideInfoV5(config, slideChunk, region);
     }
 
     return Error();