Loading...
--- dyld/dyld-551.4/dyld3/shared-cache/CacheBuilder.cpp
+++ dyld/dyld-519.2.1/dyld3/shared-cache/CacheBuilder.cpp
@@ -119,11 +119,6 @@
return _diagnostics.warnings();
}
-const std::set<const mach_header*> CacheBuilder::evictions()
-{
- return _evictions;
-}
-
void CacheBuilder::deleteBuffer()
{
vm_deallocate(mach_task_self(), (vm_address_t)_buffer, _allocatedBufferSize);
@@ -181,7 +176,7 @@
}
}
-void CacheBuilder::build(const std::vector<DyldSharedCache::MappedMachO>& dylibs,
+bool CacheBuilder::build(const std::vector<DyldSharedCache::MappedMachO>& dylibs,
const std::vector<DyldSharedCache::MappedMachO>& otherOsDylibsInput,
const std::vector<DyldSharedCache::MappedMachO>& osExecutables)
{
@@ -189,7 +184,7 @@
// FIXME: plist should specify required vs optional dylibs
if ( dylibs.size() < 30 ) {
_diagnostics.error("missing required minimum set of dylibs");
- return;
+ return false;
}
uint64_t t1 = mach_absolute_time();
@@ -201,10 +196,10 @@
// assign addresses for each segment of each dylib in new cache
dyld_cache_mapping_info regions[3];
SegmentMapping segmentMapping = assignSegmentAddresses(sortedDylibs, regions);
- while ( cacheOverflow(regions) ) {
+ if ( cacheOverflow(regions) ) {
if ( !_options.evictLeafDylibsOnOverflow ) {
_diagnostics.error("cache overflow: %lluMB (max %lluMB)", _vmSize / 1024 / 1024, (_archLayout->sharedMemorySize) / 1024 / 1024);
- return;
+ return false;
}
// find all leaf (not referenced by anything else in cache) dylibs
@@ -253,7 +248,6 @@
for (std::vector<DyldSharedCache::MappedMachO>::iterator it=sortedDylibs.begin(); it != sortedDylibs.end(); ++it) {
dyld3::MachOParser parser(it->mh);
if ( installName == parser.installName() ) {
- _evictions.insert(parser.header());
otherOsDylibs.push_back(*it);
sortedDylibs.erase(it);
break;
@@ -262,10 +256,10 @@
}
// re-layout cache
segmentMapping = assignSegmentAddresses(sortedDylibs, regions);
- if ( unreferencedDylibs.size() == 0 && cacheOverflow(regions) ) {
+ if ( cacheOverflow(regions) ) {
_diagnostics.error("cache overflow, tried evicting %ld leaf daylibs, but still too big: %lluMB (max %lluMB)",
toRemove.size(), _vmSize / 1024 / 1024, (_archLayout->sharedMemorySize) / 1024 / 1024);
- return;
+ return false;
}
}
@@ -273,7 +267,7 @@
_allocatedBufferSize = std::max(_currentFileSize, (uint64_t)0x100000)*1.1; // add 10% to allocation to support large closures
if ( vm_allocate(mach_task_self(), (vm_address_t*)&_buffer, _allocatedBufferSize, VM_FLAGS_ANYWHERE) != 0 ) {
_diagnostics.error("could not allocate buffer");
- return;
+ return false;
}
_currentFileSize = _allocatedBufferSize;
@@ -282,17 +276,17 @@
copyRawSegments(sortedDylibs, segmentMapping);
adjustAllImagesForNewSegmentLocations(sortedDylibs, segmentMapping);
if ( _diagnostics.hasError() )
- return;
+ return false;
bindAllImagesInCacheFile(regions);
if ( _diagnostics.hasError() )
- return;
+ return false;
// optimize ObjC
if ( _options.optimizeObjC )
optimizeObjC(_buffer, _archLayout->is64, _options.optimizeStubs, _pointersForASLR, _diagnostics);
if ( _diagnostics.hasError() )
- return;
+ return false;
// optimize away stubs
std::vector<uint64_t> branchPoolOffsets;
@@ -361,10 +355,10 @@
_options.pathPrefixes, _patchTable,
_options.optimizeStubs, !_options.dylibsRemovedDuringMastering);
if ( _diagnostics.hasError() )
- return;
+ return false;
addCachedDylibsImageGroup(dylibGroup);
if ( _diagnostics.hasError() )
- return;
+ return false;
uint64_t t4 = mach_absolute_time();
@@ -372,10 +366,10 @@
dyld3::ImageProxyGroup* otherGroup = dyld3::ImageProxyGroup::makeOtherOsGroup(_diagnostics, dyldCacheParser, dylibGroup, otherOsDylibs,
_options.inodesAreSameAsRuntime, _options.pathPrefixes);
if ( _diagnostics.hasError() )
- return;
+ return false;
addCachedOtherDylibsImageGroup(otherGroup);
if ( _diagnostics.hasError() )
- return;
+ return false;
uint64_t t5 = mach_absolute_time();
@@ -399,7 +393,7 @@
}
addClosures(closures);
if ( _diagnostics.hasError() )
- return;
+ return false;
uint64_t t6 = mach_absolute_time();
@@ -461,13 +455,13 @@
// last sanity check on size
if ( _vmSize > _archLayout->sharedMemorySize ) {
_diagnostics.error("cache overflow after optimizations. %lluMB (max %lluMB)", _vmSize / 1024 / 1024, (_archLayout->sharedMemorySize) / 1024 / 1024);
- return;
+ return true;
}
// codesignature is part of file, but is not mapped
codeSign();
if ( _diagnostics.hasError() )
- return;
+ return false;
uint64_t t8 = mach_absolute_time();
@@ -489,7 +483,7 @@
_allocatedBufferSize = _currentFileSize;
}
- return;
+ return false;
}