Loading...
launch-cache/dyld_shared_cache_util.cpp dyld-360.14 dyld-239.4
--- dyld/dyld-360.14/launch-cache/dyld_shared_cache_util.cpp
+++ dyld/dyld-239.4/launch-cache/dyld_shared_cache_util.cpp
@@ -33,16 +33,15 @@
 #include <sys/syslimits.h>
 #include <mach-o/arch.h>
 #include <mach-o/loader.h>
-#include <mach/mach.h>
 
 #include <map>
-#include <vector>
 
 #include "dsc_iterator.h"
 #include "dyld_cache_format.h"
 #include "Architectures.hpp"
 #include "MachOFileAbstraction.hpp"
 #include "CacheFileAbstraction.hpp"
+
 
 enum Mode {
 	modeNone,
@@ -51,8 +50,7 @@
 	modeDependencies,
 	modeSlideInfo,
 	modeLinkEdit,
-	modeInfo,
-	modeSize
+	modeInfo
 };
 
 struct Options {
@@ -62,47 +60,21 @@
 	bool		printUUIDs;
 	bool		printVMAddrs;
     bool		printDylibVersions;
-	bool		printInodes;
-};
-
-struct TextInfo {
-	uint64_t		textSize;
-	const char*		path;
-};
-
-struct TextInfoSorter {
-	bool operator()(const TextInfo& left, const TextInfo& right) {
-		return (left.textSize > right.textSize);
-	}
 };
 
 struct Results {
 	std::map<uint32_t, const char*>	pageToContent;
 	uint64_t						linkeditBase;
 	bool							dependentTargetFound;
-	std::vector<TextInfo>			textSegments;
 };
+
+
 
 
 
 void usage() {
 	fprintf(stderr, "Usage: dyld_shared_cache_util -list [ -uuid ] [-vmaddr] | -dependents <dylib-path> [ -versions ] | -linkedit | -map [ shared-cache-file ] | -slide_info | -info\n");
 }
-
-#if __x86_64__
-static bool isHaswell()
-{
-	// check system is capable of running x86_64h code
-	struct host_basic_info info;
-	mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT;
-	mach_port_t hostPort = mach_host_self();
-	kern_return_t result = host_info(hostPort, HOST_BASIC_INFO, (host_info_t)&info, &count);
-	mach_port_deallocate(mach_task_self(), hostPort);
-	if ( result != KERN_SUCCESS )
-		return false;
-	return ( info.cpu_subtype == CPU_SUBTYPE_X86_64_H );
-}
-#endif
 
 /*
  * Get the path to the native shared cache for this host
@@ -111,24 +83,19 @@
 #if __i386__
 	return MACOSX_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "i386";
 #elif __x86_64__ 
-	if ( isHaswell() )
-		return MACOSX_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "x86_64h";
-	else
-		return MACOSX_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "x86_64";
+	return MACOSX_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "x86_64";
 #elif __ARM_ARCH_5TEJ__ 
 	return IPHONE_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "armv5";
 #elif __ARM_ARCH_6K__ 
 	return IPHONE_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "armv6";
-#elif __ARM_ARCH_7K__ 
-	return IPHONE_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "armv7k";
 #elif __ARM_ARCH_7A__ 
 	return IPHONE_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "armv7";
 #elif __ARM_ARCH_7F__ 
 	return IPHONE_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "armv7f";
 #elif __ARM_ARCH_7S__ 
 	return IPHONE_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "armv7s";
-#elif __arm64__ 
-	return IPHONE_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "arm64";
+#elif __ARM_ARCH_7K__ 
+	return IPHONE_DYLD_SHARED_CACHE_DIR DYLD_SHARED_CACHE_BASE_NAME "armv7k";
 #else
 	#error unsupported architecture
 #endif
@@ -206,8 +173,6 @@
 
 	if ( options.printVMAddrs )
 		printf("0x%08llX ", segInfo->address);
-	if ( options.printInodes )
-		printf("0x%08llX 0x%08llX ", dylibInfo->inode, dylibInfo->modTime);
 	if ( options.printUUIDs ) {
 		if ( dylibInfo->uuid != NULL ) {
 			const uint8_t* uuid = (uint8_t*)dylibInfo->uuid;;
@@ -224,23 +189,6 @@
 		printf("[alias] %s\n", dylibInfo->path);
 	else
 		printf("%s\n", dylibInfo->path);
-}
-
-
-template <typename A>
-void collect_size(const dyld_shared_cache_dylib_info* dylibInfo, const dyld_shared_cache_segment_info* segInfo, 
-																		const Options& options, Results& results) 
-{
-	if ( strcmp(segInfo->name, "__TEXT") != 0 )
-		return;
-	if ( dylibInfo->isAlias )
-		return;
-		
-	TextInfo info;
-	info.textSize = segInfo->fileSize;
-	info.path = dylibInfo->path;
-	results.textSegments.push_back(info);
-	size_t size = segInfo->fileSize;
 }
 
 
@@ -331,7 +279,7 @@
 
 static void checkMode(Mode mode) {
 	if ( mode != modeNone ) {
-		fprintf(stderr, "Error: select one of: -list, -dependents, -info, -slide_info, -linkedit, -map, or -size\n");
+		fprintf(stderr, "Error: select one of: -list, -dependents, -info, -slide_info, -linkedit, or -map\n");
 		usage();
 		exit(1);
 	}
@@ -346,7 +294,6 @@
     options.printUUIDs = false;
 	options.printVMAddrs = false;
     options.printDylibVersions = false;
-	options.printInodes = false;
     options.dependentsOfPath = NULL;
     
     for (uint32_t i = 1; i < argc; i++) {
@@ -382,15 +329,8 @@
 				checkMode(options.mode);
 				options.mode = modeMap;
             } 
-			else if (strcmp(opt, "-size") == 0) {
-				checkMode(options.mode);
-				options.mode = modeSize;
-            } 
 			else if (strcmp(opt, "-uuid") == 0) {
                 options.printUUIDs = true;
-            } 
-			else if (strcmp(opt, "-inode") == 0) {
-                options.printInodes = true;
             } 
 			else if (strcmp(opt, "-versions") == 0) {
                 options.printDylibVersions = true;
@@ -490,16 +430,11 @@
 		const dyldCacheFileMapping<LittleEndian>* mappings = (dyldCacheFileMapping<LittleEndian>*)((char*)options.mappedCache + header->mappingOffset());
 		for (uint32_t i=0; i < header->mappingCount(); ++i) {
 			if ( mappings[i].init_prot() & VM_PROT_EXECUTE )
-				printf("    __TEXT      %3lluMB,  0x%08llX -> 0x%08llX\n", mappings[i].size()/(1024*1024), mappings[i].address(), mappings[i].address() + mappings[i].size());
+				printf("    __TEXT     %lluMB\n", mappings[i].size()/(1024*1024));
 			else if ( mappings[i]. init_prot() & VM_PROT_WRITE )
-				printf("    __DATA      %3lluMB,  0x%08llX -> 0x%08llX\n", mappings[i].size()/(1024*1024), mappings[i].address(), mappings[i].address() + mappings[i].size());
+				printf("    __DATA      %lluMB\n", mappings[i].size()/(1024*1024));
 			else if ( mappings[i].init_prot() & VM_PROT_READ )
-				printf("    __LINKEDIT  %3lluMB,  0x%08llX -> 0x%08llX\n", mappings[i].size()/(1024*1024), mappings[i].address(), mappings[i].address() + mappings[i].size());
-		}
-		if ( header->codeSignatureOffset() != 0 ) {
-			uint64_t size = statbuf.st_size - header->codeSignatureOffset(); 
-			uint64_t csAddr = mappings[header->mappingCount()-1].address() + mappings[header->mappingCount()-1].size();
-				printf("    code sign   %3lluMB,  0x%08llX -> 0x%08llX\n", size/(1024*1024), csAddr, csAddr + size);
+				printf("    __LINKEDIT  %lluMB\n", mappings[i].size()/(1024*1024));
 		}
 	}
 	else {
@@ -518,17 +453,13 @@
 				case modeLinkEdit:
 					callback = process_linkedit<x86>;
 					break;
-				case modeSize:
-					callback = collect_size<x86>;
-					break;
 				case modeNone:
 				case modeInfo:
 				case modeSlideInfo:
 					break;
 			}
 		}		
-		else if (  (strcmp((char*)options.mappedCache, "dyld_v1  x86_64") == 0)
-				|| (strcmp((char*)options.mappedCache, "dyld_v1 x86_64h") == 0) ) {
+		else if ( strcmp((char*)options.mappedCache, "dyld_v1  x86_64") == 0 ) {
 			switch ( options.mode ) {
 				case modeList:
 					callback = print_list<x86_64>;
@@ -541,9 +472,6 @@
 					break;
 				case modeLinkEdit:
 					callback = process_linkedit<x86_64>;
-					break;
-				case modeSize:
-					callback = collect_size<x86_64>;
 					break;
 				case modeNone:
 				case modeInfo:
@@ -566,32 +494,6 @@
 				case modeLinkEdit:
 					callback = process_linkedit<arm>;
 					break;
-				case modeSize:
-					callback = collect_size<arm>;
-					break;
-				case modeNone:
-				case modeInfo:
-				case modeSlideInfo:
-					break;
-			}
-		}		
-		else if ( strcmp((char*)options.mappedCache, "dyld_v1   arm64") == 0 ) {
-			switch ( options.mode ) {
-				case modeList:
-					callback = print_list<arm64>;
-					break;
-				case modeMap:
-					callback = print_map<arm64>;
-					break;
-				case modeDependencies:
-					callback = print_dependencies<arm64>;
-					break;
-				case modeLinkEdit:
-					callback = process_linkedit<arm64>;
-					break;
-				case modeSize:
-					callback = collect_size<arm64>;
-					break;
 				case modeNone:
 				case modeInfo:
 				case modeSlideInfo:
@@ -602,10 +504,10 @@
 			fprintf(stderr, "Error: unrecognized dyld shared cache magic.\n");
 			exit(1);
 		}
-		
+		 		
 		__block Results results;
 		results.dependentTargetFound = false;
-		int iterateResult = dyld_shared_cache_iterate(options.mappedCache, (uint32_t)statbuf.st_size, 
+		int iterateResult = dyld_shared_cache_iterate(options.mappedCache, statbuf.st_size, 
 										   ^(const dyld_shared_cache_dylib_info* dylibInfo, const dyld_shared_cache_segment_info* segInfo ) {
 											   (callback)(dylibInfo, segInfo, options, results);
 										   });
@@ -620,12 +522,6 @@
 				printf("0x%08X %s\n", it->first, it->second);
 			}
 		}
-		else if ( options.mode == modeSize ) {
-			std::sort(results.textSegments.begin(), results.textSegments.end(), TextInfoSorter()); 
-			for (std::vector<TextInfo>::iterator it = results.textSegments.begin(); it != results.textSegments.end(); ++it) {
-				printf(" 0x%08llX  %s\n", it->textSize, it->path);
-			}
-		}
 		
 		if ( (options.mode == modeDependencies) && options.dependentsOfPath && !results.dependentTargetFound) {
 			fprintf(stderr, "Error: could not find '%s' in the shared cache at\n  %s\n", options.dependentsOfPath, sharedCachePath);