Loading...
--- dyld/dyld-1122.1.2/cache-builder/AppCacheBuilder.cpp
+++ dyld/dyld-1042.1/cache-builder/AppCacheBuilder.cpp
@@ -175,10 +175,6 @@
if ( dataConstRegion.sizeInUse != 0 )
callback(dataConstRegion);
- // dataSptmRegion
- if ( dataSptmRegion.sizeInUse != 0 )
- callback(dataSptmRegion);
-
// branchGOTsRegion
if ( branchGOTsRegion.bufferSize != 0 )
callback(branchGOTsRegion);
@@ -291,17 +287,6 @@
return totalTargets;
}
-bool AppCacheBuilder::hasSancovGateSection() const
-{
- for ( const AppCacheDylibInfo& dylib : sortedDylibs ) {
- const dyld3::MachOAnalyzer* ma = dylib.input->mappedFile.mh;
- if ( ma->hasSection("__DATA", "__sancov_gate") )
- return true;
- }
-
- return false;
-}
-
bool AppCacheBuilder::removeStubs()
{
// Only eliminate stubs in the base kernel collection. We could eliminate stubs
@@ -310,9 +295,6 @@
return false;
if ( _options.archs != &dyld3::GradedArchs::arm64e )
- return false;
-
- if ( hasSancovGateSection() )
return false;
return true;
@@ -652,51 +634,6 @@
dataConstRegion.maxProt = VM_PROT_READ;
dataConstRegion.name = "__DATA_CONST";
}
-
- // __DATA_SPTM segments
- {
- __block uint64_t offsetInRegion = 0;
- for (DylibInfo& dylib : sortedDylibs) {
- if (!dylib.input->mappedFile.mh->hasSplitSeg())
- continue;
-
- __block uint64_t textSegVmAddr = 0;
- dylib.input->mappedFile.mh->forEachSegment(^(const dyld3::MachOFile::SegmentInfo& segInfo, bool& stop) {
- if ( strcmp(segInfo.segName, "__TEXT") == 0 )
- textSegVmAddr = segInfo.vmAddr;
- if ( (segInfo.protections & VM_PROT_EXECUTE) != 0 )
- return;
- if ( (strcmp(segInfo.segName, "__DATA_SPTM") != 0) )
- return;
- uint32_t minAlignmentP2 = getMinAlignment(dylib.input->mappedFile.mh);
- offsetInRegion = align(offsetInRegion, segInfo.p2align);
- offsetInRegion = align(offsetInRegion, minAlignmentP2);
- size_t copySize = std::min((size_t)segInfo.fileSize, (size_t)segInfo.sizeOfSections);
- uint64_t dstCacheSegmentSize = align(segInfo.sizeOfSections, minAlignmentP2);
- SegmentMappingInfo loc;
- loc.srcSegment = (uint8_t*)dylib.input->mappedFile.mh + segInfo.vmAddr - textSegVmAddr;
- loc.segName = segInfo.segName;
- loc.dstSegment = nullptr;
- loc.dstCacheUnslidAddress = offsetInRegion; // This will be updated later once we've assigned addresses
- loc.dstCacheFileOffset = (uint32_t)offsetInRegion;
- loc.dstCacheSegmentSize = (uint32_t)dstCacheSegmentSize;
- loc.dstCacheFileSize = (uint32_t)copySize;
- loc.copySegmentSize = (uint32_t)copySize;
- loc.srcSegmentIndex = segInfo.segIndex;
- loc.parentRegion = &dataSptmRegion;
- dylib.cacheLocation[segInfo.segIndex] = loc;
- offsetInRegion += loc.dstCacheSegmentSize;
- });
- }
-
- // align r/o region end
- dataSptmRegion.bufferSize = align(offsetInRegion, 14);
- dataSptmRegion.sizeInUse = dataSptmRegion.bufferSize;
- dataSptmRegion.initProt = VM_PROT_READ;
- dataSptmRegion.maxProt = VM_PROT_READ;
- dataSptmRegion.name = "__DATA_SPTM";
- }
-
// Branch GOTs
if ( branchTargetsFromKexts != 0 ) {
@@ -1168,8 +1105,6 @@
uint64_t numBytesForPageStarts = 0;
if ( dataConstRegion.sizeInUse != 0 )
numBytesForPageStarts += sizeof(dyld_chained_starts_in_segment) + (sizeof(uint16_t) * numWritablePagesToFixup(dataConstRegion.bufferSize));
- if ( dataSptmRegion.sizeInUse != 0 )
- numBytesForPageStarts += sizeof(dyld_chained_starts_in_segment) + (sizeof(uint16_t) * numWritablePagesToFixup(dataSptmRegion.bufferSize));
if ( branchGOTsRegion.bufferSize != 0 )
numBytesForPageStarts += sizeof(dyld_chained_starts_in_segment) + (sizeof(uint16_t) * numWritablePagesToFixup(branchGOTsRegion.bufferSize));
if ( readWriteRegion.sizeInUse != 0 )
@@ -4274,8 +4209,6 @@
if ( dataConstRegion.sizeInUse != 0 )
addSegmentStarts(dataConstRegion);
- if ( dataSptmRegion.sizeInUse != 0 )
- addSegmentStarts(dataSptmRegion);
if ( branchGOTsRegion.sizeInUse != 0 )
addSegmentStarts(branchGOTsRegion);
if ( readWriteRegion.sizeInUse != 0 )
@@ -4370,12 +4303,6 @@
if ( dataConstRegion.sizeInUse != 0 ) {
vmOrder.emplace_back(&dataConstRegion, 14, 14);
fileOrder.emplace_back(&dataConstRegion, 14, 14);
- }
-
- // __DATA_SPTM
- if ( dataSptmRegion.sizeInUse != 0 ) {
- vmOrder.emplace_back(&dataSptmRegion, 14, 14);
- fileOrder.emplace_back(&dataSptmRegion, 14, 14);
}
// Split seg __TEXT_EXEC
@@ -5266,13 +5193,6 @@
firstDataRegion = &dataConstRegion;
if ( (lastDataRegion == nullptr) || (dataConstRegion.buffer > lastDataRegion->buffer) )
lastDataRegion = &dataConstRegion;
- }
-
- if ( dataSptmRegion.sizeInUse != 0 ) {
- if ( firstDataRegion == nullptr )
- firstDataRegion = &dataSptmRegion;
- if ( (lastDataRegion == nullptr) || (dataSptmRegion.buffer > lastDataRegion->buffer) )
- lastDataRegion = &dataSptmRegion;
}
if ( branchGOTsRegion.bufferSize != 0 ) {