Loading...
dyld3/shared-cache/DyldSharedCache.cpp dyld-852 dyld-832.7.1
--- dyld/dyld-852/dyld3/shared-cache/DyldSharedCache.cpp
+++ dyld/dyld-832.7.1/dyld3/shared-cache/DyldSharedCache.cpp
@@ -57,10 +57,6 @@
 #if !(BUILDING_LIBDYLD || BUILDING_DYLD)
 #include "JSONWriter.h"
 #include <sstream>
-#endif
-
-#if (BUILDING_LIBDYLD || BUILDING_DYLD)
-VIS_HIDDEN bool gEnableSharedCacheDataConst = false;
 #endif
 
 
@@ -235,8 +231,8 @@
     return mappings[header.mappingCount-1].address + mappings[header.mappingCount-1].size;
 }
 
-void DyldSharedCache::forEachRegion(void (^handler)(const void* content, uint64_t vmAddr, uint64_t size,
-                                                    uint32_t initProt, uint32_t maxProt, uint64_t flags)) const
+void DyldSharedCache::forEachRegion(void (^handler)(const void* content, uint64_t vmAddr, uint64_t size, uint32_t permissions,
+                                                    uint64_t flags)) const
 {
     // <rdar://problem/49875993> sanity check cache header
     if ( strncmp(header.magic, "dyld_v1", 7) != 0 )
@@ -249,13 +245,13 @@
         const dyld_cache_mapping_info* mappings = (dyld_cache_mapping_info*)((char*)this + header.mappingOffset);
         const dyld_cache_mapping_info* mappingsEnd = &mappings[header.mappingCount];
         for (const dyld_cache_mapping_info* m=mappings; m < mappingsEnd; ++m) {
-            handler((char*)this + m->fileOffset, m->address, m->size, m->initProt, m->maxProt, 0);
+            handler((char*)this + m->fileOffset, m->address, m->size, m->initProt, 0);
         }
     } else {
         const dyld_cache_mapping_and_slide_info* mappings = (const dyld_cache_mapping_and_slide_info*)((char*)this + header.mappingWithSlideOffset);
         const dyld_cache_mapping_and_slide_info* mappingsEnd = &mappings[header.mappingCount];
         for (const dyld_cache_mapping_and_slide_info* m=mappings; m < mappingsEnd; ++m) {
-            handler((char*)this + m->fileOffset, m->address, m->size, m->initProt, m->maxProt, m->flags);
+            handler((char*)this + m->fileOffset, m->address, m->size, m->initProt, m->flags);
         }
     }
 }
@@ -464,16 +460,16 @@
     __block std::vector<uint64_t>   regionFileOffsets;
 
     result.reserve(256*1024);
-    forEachRegion(^(const void* content, uint64_t vmAddr, uint64_t size,
-                    uint32_t initProt, uint32_t maxProt, uint64_t flags) {
+    forEachRegion(^(const void* content, uint64_t vmAddr, uint64_t size, uint32_t permissions,
+                    uint64_t flags) {
         regionStartAddresses.push_back(vmAddr);
         regionSizes.push_back(size);
         regionFileOffsets.push_back((uint8_t*)content - (uint8_t*)this);
         char lineBuffer[256];
         const char* prot = "RW";
-        if ( maxProt == (VM_PROT_EXECUTE|VM_PROT_READ) )
+        if ( permissions == (VM_PROT_EXECUTE|VM_PROT_READ) )
             prot = "EX";
-        else if ( maxProt == VM_PROT_READ )
+        else if ( permissions == VM_PROT_READ )
             prot = "RO";
         if ( size > 1024*1024 )
             sprintf(lineBuffer, "mapping  %s %4lluMB 0x%0llX -> 0x%0llX\n", prot, size/(1024*1024), vmAddr, vmAddr+size);
@@ -516,8 +512,8 @@
 {
     __block uint64_t startAddr = 0;
     __block uint64_t endAddr = 0;
-    forEachRegion(^(const void* content, uint64_t vmAddr, uint64_t size,
-                    uint32_t initProt, uint32_t maxProt, uint64_t flags) {
+    forEachRegion(^(const void* content, uint64_t vmAddr, uint64_t size, uint32_t permissions,
+                    uint64_t flags) {
         if ( startAddr == 0 )
             startAddr = vmAddr;
         uint64_t end = vmAddr+size;
@@ -797,59 +793,6 @@
     }
 }
 
-#if (BUILDING_LIBDYLD || BUILDING_DYLD)
-void DyldSharedCache::changeDataConstPermissions(mach_port_t machTask, uint32_t permissions,
-                                                 DataConstLogFunc logFunc) const {
-
-    const dyld_cache_mapping_info* mappings = (dyld_cache_mapping_info*)((char*)this + header.mappingOffset);
-    uintptr_t slide = (uintptr_t)this - (uintptr_t)(mappings[0].address);
-
-    if ( (permissions & VM_PROT_WRITE) != 0 )
-        permissions |= VM_PROT_COPY;
-
-    forEachRegion(^(const void *, uint64_t vmAddr, uint64_t size,
-                    uint32_t initProt, uint32_t maxProt, uint64_t flags) {
-        void* content = (void*)(vmAddr + slide);
-        if ( ( flags & DYLD_CACHE_MAPPING_CONST_DATA) == 0 )
-            return;
-        if ( logFunc != nullptr ) {
-            logFunc("dyld: marking shared cache range 0x%x permissions: 0x%09lX -> 0x%09lX\n",
-                    permissions, (long)content, (long)content + size);
-        }
-        kern_return_t result = vm_protect(machTask, (vm_address_t)content, (vm_size_t)size, false, permissions);
-        if ( result != KERN_SUCCESS ) {
-            if ( logFunc != nullptr )
-                logFunc("dyld: failed to mprotect shared cache due to: %d\n", result);
-        }
-    });
-}
-
-DyldSharedCache::DataConstLazyScopedWriter::DataConstLazyScopedWriter(const DyldSharedCache* cache, mach_port_t machTask, DataConstLogFunc logFunc)
-    : cache(cache), machTask(machTask), logFunc(logFunc) {
-}
-
-DyldSharedCache::DataConstLazyScopedWriter::~DataConstLazyScopedWriter() {
-    if ( wasMadeWritable )
-        cache->changeDataConstPermissions(machTask, VM_PROT_READ, logFunc);
-}
-
-void DyldSharedCache::DataConstLazyScopedWriter::makeWriteable() {
-    if ( wasMadeWritable )
-        return;
-    if ( !gEnableSharedCacheDataConst )
-        return;
-    if ( cache == nullptr )
-        return;
-    wasMadeWritable = true;
-    cache->changeDataConstPermissions(machTask, VM_PROT_READ | VM_PROT_WRITE, logFunc);
-}
-
-DyldSharedCache::DataConstScopedWriter::DataConstScopedWriter(const DyldSharedCache* cache, mach_port_t machTask, DataConstLogFunc logFunc)
-    : writer(cache, machTask, logFunc) {
-    writer.makeWriteable();
-}
-#endif
-
 #if !(BUILDING_LIBDYLD || BUILDING_DYLD)
 // MRM map file generator
 std::string DyldSharedCache::generateJSONMap(const char* disposition) const {