1 /* 2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29 /* 30 * Data structure definitions copied from dyld so that we can read dyld's saved UUID information 31 * for each binary image not loaded from the shared cache during stackshots. 32 */ 33 34 /* Some clients check the dyld version at runtime */ 35 #define DYLD_ALL_IMAGE_INFOS_ADDRESS_MINIMUM_VERSION 9 36 #define DYLD_ALL_IMAGE_INFOS_TIMESTAMP_MINIMUM_VERSION 15 37 #define DYLD_ALL_IMAGE_INFOS_COMPACTINFO_MINIMUM_VERSION 16 38 39 #define DYLD_MAX_PROCESS_INFO_NOTIFY_COUNT 8 40 #define DYLD_PROCESS_INFO_NOTIFY_MAGIC 0x49414E46 41 42 /* Re-use dyld format for kext load addresses */ 43 #if __LP64__ 44 typedef struct user64_dyld_uuid_info kernel_uuid_info; 45 #else 46 typedef struct user32_dyld_uuid_info kernel_uuid_info; 47 #endif 48 49 struct user32_dyld_image_info { 50 user32_addr_t imageLoadAddress; /* base address image is mapped int */ 51 user32_addr_t imageFilePath; /* path dyld used to load the image */ 52 user32_ulong_t imageFileModDate; /* time_t of image file */ 53 }; 54 55 struct user64_dyld_image_info { 56 user64_addr_t imageLoadAddress; /* base address image is mapped int */ 57 user64_addr_t imageFilePath; /* path dyld used to load the image */ 58 user64_ulong_t imageFileModDate; /* time_t of image file */ 59 }; 60 61 // FIXME: dyld is in C++, and some of the fields in dyld_all_image_infos are C++ 62 // native booleans. There must be a better way... 63 typedef uint8_t dyld_bool; 64 65 struct user32_dyld_all_image_infos { 66 uint32_t version; 67 uint32_t infoArrayCount; 68 user32_addr_t infoArray; 69 user32_addr_t notification; 70 dyld_bool processDetachedFromSharedRegion; 71 dyld_bool libSystemInitialized; 72 user32_addr_t dyldImageLoadAddress; 73 user32_addr_t jitInfo; 74 user32_addr_t dyldVersion; 75 user32_addr_t errorMessage; 76 user32_addr_t terminationFlags; 77 user32_addr_t coreSymbolicationShmPage; 78 user32_addr_t systemOrderFlag; 79 user32_size_t uuidArrayCount; // dyld defines this as a uintptr_t despite it being a count 80 user32_addr_t uuidArray; 81 user32_addr_t dyldAllImageInfosAddress; 82 83 /* the following field is only in version 10 (Mac OS X 10.7, iOS 4.2) and later */ 84 user32_addr_t initialImageCount; 85 /* the following field is only in version 11 (Mac OS X 10.7, iOS 4.2) and later */ 86 user32_addr_t errorKind; 87 user32_addr_t errorClientOfDylibPath; 88 user32_addr_t errorTargetDylibPath; 89 user32_addr_t errorSymbol; 90 /* the following field is only in version 12 (Mac OS X 10.7, iOS 4.3) and later */ 91 user32_addr_t sharedCacheSlide; 92 /* the following field is only in version 13 (Mac OS X 10.9, iOS 7.0) and later */ 93 uint8_t sharedCacheUUID[16]; 94 /* the following field is only in version 15 (Mac OS X 10.12, iOS 10.0) and later */ 95 user32_addr_t sharedCacheBaseAddress; 96 uint64_t timestamp; 97 user32_addr_t dyldpath; 98 mach_port_name_t notifyMachPorts[DYLD_MAX_PROCESS_INFO_NOTIFY_COUNT]; 99 user32_addr_t reserved[5]; 100 /* the following fields are only in version 16 (macOS 10.13, iOS 12.0) and later */ 101 user32_addr_t compact_dyld_image_info_addr; 102 user32_size_t compact_dyld_image_info_size; 103 }; 104 105 struct user64_dyld_all_image_infos { 106 uint32_t version; 107 uint32_t infoArrayCount; 108 user64_addr_t infoArray; 109 user64_addr_t notification; 110 dyld_bool processDetachedFromSharedRegion; 111 dyld_bool libSystemInitialized; 112 user64_addr_t dyldImageLoadAddress; 113 user64_addr_t jitInfo; 114 user64_addr_t dyldVersion; 115 user64_addr_t errorMessage; 116 user64_addr_t terminationFlags; 117 user64_addr_t coreSymbolicationShmPage; 118 user64_addr_t systemOrderFlag; 119 user64_size_t uuidArrayCount; // dyld defines this as a uintptr_t despite it being a count 120 user64_addr_t uuidArray; 121 user64_addr_t dyldAllImageInfosAddress; 122 123 /* the following field is only in version 10 (Mac OS X 10.7, iOS 4.2) and later */ 124 user64_addr_t initialImageCount; 125 /* the following field is only in version 11 (Mac OS X 10.7, iOS 4.2) and later */ 126 user64_addr_t errorKind; 127 user64_addr_t errorClientOfDylibPath; 128 user64_addr_t errorTargetDylibPath; 129 user64_addr_t errorSymbol; 130 /* the following field is only in version 12 (Mac OS X 10.7, iOS 4.3) and later */ 131 user64_addr_t sharedCacheSlide; 132 /* the following field is only in version 13 (Mac OS X 10.9, iOS 7.0) and later */ 133 uint8_t sharedCacheUUID[16]; 134 /* the following field is only in version 15 (macOS 10.12, iOS 10.0) and later */ 135 user64_addr_t sharedCacheBaseAddress; 136 uint64_t timestamp; 137 user64_addr_t dyldPath; 138 mach_port_name_t notifyMachPorts[DYLD_MAX_PROCESS_INFO_NOTIFY_COUNT]; 139 user64_addr_t reserved[9]; 140 /* the following fields are only in version 16 (macOS 10.13, iOS 12.0) and later */ 141 user64_addr_t compact_dyld_image_info_addr; 142 user64_size_t compact_dyld_image_info_size; 143 uint32_t platform; 144 /* the following fields are only in version 17 (macOS 10.16) and later */ 145 uint32_t aotInfoArrayCount; 146 user64_addr_t aotInfoArray; 147 uint64_t aotTimestamp; 148 }; 149