xref: /xnu-10002.61.3/osfmk/kdp/kdp_dyld.h (revision 0f4c859e951fba394238ab619495c4e1d54d0f34)
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