Loading...
--- dyld/dyld-360.18/src/ImageLoaderMachOCompressed.cpp
+++ dyld/dyld-353.2.1/src/ImageLoaderMachOCompressed.cpp
@@ -23,21 +23,18 @@
*/
-#if __arm__ || __arm64__
- #include <System/sys/mman.h>
-#else
- #include <sys/mman.h>
-#endif
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/stat.h>
+#include <sys/mman.h>
#include <sys/param.h>
#include <mach/mach.h>
#include <mach/thread_status.h>
#include <mach-o/loader.h>
+
#include "ImageLoaderMachOCompressed.h"
#include "mach-o/dyld_images.h"
@@ -115,11 +112,10 @@
// for PIE record end of program, to know where to start loading dylibs
if ( slide != 0 )
fgNextPIEDylibAddress = (uintptr_t)image->getEnd();
-
- image->disableCoverageCheck();
+
image->instantiateFinish(context);
image->setMapped(context);
-
+
if ( context.verboseMapping ) {
dyld::log("dyld: Main executable mapped %s\n", path);
for(unsigned int i=0, e=image->segmentCount(); i < e; ++i) {
@@ -135,12 +131,10 @@
}
// create image by mapping in a mach-o file
-ImageLoaderMachOCompressed* ImageLoaderMachOCompressed::instantiateFromFile(const char* path, int fd, const uint8_t* fileData, size_t lenFileData,
+ImageLoaderMachOCompressed* ImageLoaderMachOCompressed::instantiateFromFile(const char* path, int fd, const uint8_t* fileData,
uint64_t offsetInFat, uint64_t lenInFat, const struct stat& info,
unsigned int segCount, unsigned int libCount,
- const struct linkedit_data_command* codeSigCmd,
- const struct encryption_info_command* encryptCmd,
- const LinkContext& context)
+ const struct linkedit_data_command* codeSigCmd, const LinkContext& context)
{
ImageLoaderMachOCompressed* image = ImageLoaderMachOCompressed::instantiateStart((macho_header*)fileData, path, segCount, libCount);
@@ -151,15 +145,9 @@
// if this image is code signed, let kernel validate signature before mapping any pages from image
image->loadCodeSignature(codeSigCmd, fd, offsetInFat, context);
- // Validate that first data we read with pread actually matches with code signature
- image->validateFirstPages(codeSigCmd, fd, fileData, lenFileData, offsetInFat, context);
-
// mmap segments
image->mapSegments(fd, offsetInFat, lenInFat, info.st_size, context);
- // if framework is FairPlay encrypted, register with kernel
- image->registerEncryption(encryptCmd, context);
-
// probe to see if code signed correctly
image->crashIfInvalidCodeSignature();
@@ -221,7 +209,6 @@
image->fInSharedCache = true;
image->setNeverUnload();
image->setSlide(slide);
- image->disableCoverageCheck();
// segments already mapped in cache
if ( context.verboseMapping ) {
@@ -260,8 +247,6 @@
// for compatibility, never unload dylibs loaded from memory
image->setNeverUnload();
- image->disableCoverageCheck();
-
// bundle loads need path copied
if ( moduleName != NULL )
image->setPath(moduleName);
@@ -312,7 +297,7 @@
void ImageLoaderMachOCompressed::instantiateFinish(const LinkContext& context)
{
// now that segments are mapped in, get real fMachOData, fLinkEditBase, and fSlide
- this->parseLoadCmds(context);
+ this->parseLoadCmds();
}
uint32_t* ImageLoaderMachOCompressed::segmentCommandOffsets() const
@@ -1707,32 +1692,3 @@
}
-void ImageLoaderMachOCompressed::registerEncryption(const encryption_info_command* encryptCmd, const LinkContext& context)
-{
-#if __arm__ || __arm64__
- if ( encryptCmd == NULL )
- return;
- const mach_header* mh = NULL;
- for(unsigned int i=0; i < fSegmentsCount; ++i) {
- if ( (segFileOffset(i) == 0) && (segFileSize(i) != 0) ) {
- mh = (mach_header*)segActualLoadAddress(i);
- break;
- }
- }
- void* start = ((uint8_t*)mh) + encryptCmd->cryptoff;
- size_t len = encryptCmd->cryptsize;
- uint32_t cputype = mh->cputype;
- uint32_t cpusubtype = mh->cpusubtype;
- uint32_t cryptid = encryptCmd->cryptid;
- if (context.verboseMapping) {
- dyld::log(" 0x%08lX->0x%08lX configured for FairPlay decryption\n", (long)start, (long)start+len);
- }
- int result = mremap_encrypted(start, len, cryptid, cputype, cpusubtype);
- if ( result != 0 ) {
- dyld::throwf("mremap_encrypted() => %d, errno=%d for %s\n", result, errno, this->getPath());
- }
-#endif
-}
-
-
-