xref: /xnu-8796.101.5/libkdd/kcdtypes.c (revision aca3beaa3dfbd42498b42c5e5ce20a938e6554e5)
1*aca3beaaSApple OSS Distributions /*
2*aca3beaaSApple OSS Distributions  * Copyright (c) 2015 Apple Inc. All rights reserved.
3*aca3beaaSApple OSS Distributions  *
4*aca3beaaSApple OSS Distributions  * @APPLE_LICENSE_HEADER_START@
5*aca3beaaSApple OSS Distributions  *
6*aca3beaaSApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*aca3beaaSApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*aca3beaaSApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*aca3beaaSApple OSS Distributions  * compliance with the License. Please obtain a copy of the License at
10*aca3beaaSApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this
11*aca3beaaSApple OSS Distributions  * file.
12*aca3beaaSApple OSS Distributions  *
13*aca3beaaSApple OSS Distributions  * The Original Code and all software distributed under the License are
14*aca3beaaSApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15*aca3beaaSApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16*aca3beaaSApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17*aca3beaaSApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18*aca3beaaSApple OSS Distributions  * Please see the License for the specific language governing rights and
19*aca3beaaSApple OSS Distributions  * limitations under the License.
20*aca3beaaSApple OSS Distributions  *
21*aca3beaaSApple OSS Distributions  * @APPLE_LICENSE_HEADER_END@
22*aca3beaaSApple OSS Distributions  */
23*aca3beaaSApple OSS Distributions 
24*aca3beaaSApple OSS Distributions #include <kcdata.h>
25*aca3beaaSApple OSS Distributions #include <sys/time.h>
26*aca3beaaSApple OSS Distributions #include <stdlib.h>
27*aca3beaaSApple OSS Distributions #include <stddef.h>
28*aca3beaaSApple OSS Distributions #include <string.h>
29*aca3beaaSApple OSS Distributions #include <assert.h>
30*aca3beaaSApple OSS Distributions #include <stdio.h>
31*aca3beaaSApple OSS Distributions #include <mach/mach_time.h>
32*aca3beaaSApple OSS Distributions #include <assert.h>
33*aca3beaaSApple OSS Distributions 
34*aca3beaaSApple OSS Distributions /*!
35*aca3beaaSApple OSS Distributions  * @function kcdata_get_typedescription
36*aca3beaaSApple OSS Distributions  *
37*aca3beaaSApple OSS Distributions  * @abstract
38*aca3beaaSApple OSS Distributions  * Search the known type definitions for type with id type_id.
39*aca3beaaSApple OSS Distributions  *
40*aca3beaaSApple OSS Distributions  * @param type_id
41*aca3beaaSApple OSS Distributions  * A unsinged int type specified by the KCDATA.
42*aca3beaaSApple OSS Distributions  *
43*aca3beaaSApple OSS Distributions  * @param buffer
44*aca3beaaSApple OSS Distributions  * pointer to data area where type definition will be saved.
45*aca3beaaSApple OSS Distributions  *
46*aca3beaaSApple OSS Distributions  * @param buffer_size
47*aca3beaaSApple OSS Distributions  * size of the buffer provided.
48*aca3beaaSApple OSS Distributions  *
49*aca3beaaSApple OSS Distributions  * @return struct kcdata_type_definition *
50*aca3beaaSApple OSS Distributions  * pointer to a malloc'ed buffer holding the type definition and each subtype defintion for its fields.
51*aca3beaaSApple OSS Distributions  * It may return NULL if no type with id == type_id is found.
52*aca3beaaSApple OSS Distributions  * Note: The caller is responsible to free() the memory when its no longer used.
53*aca3beaaSApple OSS Distributions  *
54*aca3beaaSApple OSS Distributions  * @discussion
55*aca3beaaSApple OSS Distributions  * This function queries the known type definitions table. If found the defintion data is returned
56*aca3beaaSApple OSS Distributions  * else NULL is returned. It is advised to cache the return value from this function since the data
57*aca3beaaSApple OSS Distributions  * is always going to be the same for same type_id. The definition setup requires memory on heap.
58*aca3beaaSApple OSS Distributions  * The caller should make sure to free() the data once its done with using it.
59*aca3beaaSApple OSS Distributions  *
60*aca3beaaSApple OSS Distributions  */
61*aca3beaaSApple OSS Distributions struct kcdata_type_definition * kcdata_get_typedescription(unsigned type_id, uint8_t * buffer, uint32_t buffer_size);
62*aca3beaaSApple OSS Distributions 
63*aca3beaaSApple OSS Distributions /* forward declarations for helper routines */
64*aca3beaaSApple OSS Distributions static uint32_t get_kctype_subtype_size(kctype_subtype_t type);
65*aca3beaaSApple OSS Distributions static void setup_subtype_description(kcdata_subtype_descriptor_t desc, kctype_subtype_t type, uint32_t offset, char * name);
66*aca3beaaSApple OSS Distributions static void setup_subtype_array_description(
67*aca3beaaSApple OSS Distributions 	kcdata_subtype_descriptor_t desc, kctype_subtype_t type, uint32_t offset, uint32_t count, char * name);
68*aca3beaaSApple OSS Distributions static void setup_type_definition(struct kcdata_type_definition * d, uint32_t type, uint32_t num_elems, char * name);
69*aca3beaaSApple OSS Distributions 
70*aca3beaaSApple OSS Distributions struct kcdata_type_definition *
kcdata_get_typedescription(unsigned type_id,uint8_t * buffer,uint32_t buffer_size)71*aca3beaaSApple OSS Distributions kcdata_get_typedescription(unsigned type_id, uint8_t * buffer, uint32_t buffer_size)
72*aca3beaaSApple OSS Distributions {
73*aca3beaaSApple OSS Distributions 	unsigned int i = 0;
74*aca3beaaSApple OSS Distributions #define _STR_VALUE(x) #x
75*aca3beaaSApple OSS Distributions #define _SUBTYPE_TRUNC(t, s, f, name) do { \
76*aca3beaaSApple OSS Distributions     setup_subtype_description(&subtypes[i++], (t), offsetof(s, f), name); \
77*aca3beaaSApple OSS Distributions     _Static_assert(sizeof(name) == sizeof ((struct kcdata_subtype_descriptor *)0)->kcs_name, "\"" name "\" should fit exactly in kcs_name"); \
78*aca3beaaSApple OSS Distributions } while (0)
79*aca3beaaSApple OSS Distributions #define _SUBTYPE(t, s, f) do { \
80*aca3beaaSApple OSS Distributions     setup_subtype_description(&subtypes[i++], (t), offsetof(s, f), _STR_VALUE(f)); \
81*aca3beaaSApple OSS Distributions     _Static_assert(sizeof(_STR_VALUE(f)) <= sizeof ((struct kcdata_subtype_descriptor *)0)->kcs_name, "\"" _STR_VALUE(f) "\" should fit in kcs_name"); \
82*aca3beaaSApple OSS Distributions } while (0)
83*aca3beaaSApple OSS Distributions 
84*aca3beaaSApple OSS Distributions #define _SUBTYPE_ARRAY(t, s, f, c) setup_subtype_array_description(&subtypes[i++], (t), offsetof(s, f), (c), _STR_VALUE(f))
85*aca3beaaSApple OSS Distributions #define _STRINGTYPE(f) setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, 0, UINT16_MAX, f)
86*aca3beaaSApple OSS Distributions 
87*aca3beaaSApple OSS Distributions 	if (buffer_size < sizeof(struct kcdata_type_definition) || buffer == NULL) {
88*aca3beaaSApple OSS Distributions 		return NULL;
89*aca3beaaSApple OSS Distributions 	}
90*aca3beaaSApple OSS Distributions 
91*aca3beaaSApple OSS Distributions 	struct kcdata_type_definition * retval = (struct kcdata_type_definition *)&buffer[0];
92*aca3beaaSApple OSS Distributions 	kcdata_subtype_descriptor_t subtypes = (kcdata_subtype_descriptor_t)&buffer[sizeof(struct kcdata_type_definition)];
93*aca3beaaSApple OSS Distributions 	switch (type_id) {
94*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_STRING_DESC: {
95*aca3beaaSApple OSS Distributions 		i = 0;
96*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, 0, KCDATA_DESC_MAXLEN, "desc");
97*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, KCDATA_DESC_MAXLEN, UINT16_MAX, "data");
98*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "string_desc");
99*aca3beaaSApple OSS Distributions 		break;
100*aca3beaaSApple OSS Distributions 	}
101*aca3beaaSApple OSS Distributions 
102*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_UINT32_DESC: {
103*aca3beaaSApple OSS Distributions 		i = 0;
104*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, 0, KCDATA_DESC_MAXLEN, "desc");
105*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT32, KCDATA_DESC_MAXLEN, "data");
106*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "uint32_desc");
107*aca3beaaSApple OSS Distributions 		break;
108*aca3beaaSApple OSS Distributions 	}
109*aca3beaaSApple OSS Distributions 
110*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_UINT64_DESC: {
111*aca3beaaSApple OSS Distributions 		i = 0;
112*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, 0, KCDATA_DESC_MAXLEN, "desc");
113*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT64, KCDATA_DESC_MAXLEN, "data");
114*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "uint64_desc");
115*aca3beaaSApple OSS Distributions 		break;
116*aca3beaaSApple OSS Distributions 	}
117*aca3beaaSApple OSS Distributions 
118*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_INT32_DESC: {
119*aca3beaaSApple OSS Distributions 		i = 0;
120*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, 0, KCDATA_DESC_MAXLEN, "desc");
121*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_INT32, KCDATA_DESC_MAXLEN, "data");
122*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "int32_desc");
123*aca3beaaSApple OSS Distributions 		break;
124*aca3beaaSApple OSS Distributions 	}
125*aca3beaaSApple OSS Distributions 
126*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_INT64_DESC: {
127*aca3beaaSApple OSS Distributions 		i = 0;
128*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, 0, KCDATA_DESC_MAXLEN, "desc");
129*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_INT64, KCDATA_DESC_MAXLEN, "data");
130*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "int64_desc");
131*aca3beaaSApple OSS Distributions 		break;
132*aca3beaaSApple OSS Distributions 	}
133*aca3beaaSApple OSS Distributions 
134*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_TYPEDEFINTION: {
135*aca3beaaSApple OSS Distributions 		i = 0;
136*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT32, offsetof(struct kcdata_type_definition, kct_type_identifier), "typeID");
137*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT32, offsetof(struct kcdata_type_definition, kct_num_elements), "numOfFields");
138*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, offsetof(struct kcdata_type_definition, kct_name), KCDATA_DESC_MAXLEN, "name");
139*aca3beaaSApple OSS Distributions 		// Note "fields" is an array of run time defined length. So we populate fields at parsing time.
140*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "typedef");
141*aca3beaaSApple OSS Distributions 		break;
142*aca3beaaSApple OSS Distributions 	}
143*aca3beaaSApple OSS Distributions 
144*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_CONTAINER_BEGIN: {
145*aca3beaaSApple OSS Distributions 		i = 0;
146*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT32, 0, "kcContainerType");
147*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "container_begin");
148*aca3beaaSApple OSS Distributions 		break;
149*aca3beaaSApple OSS Distributions 	}
150*aca3beaaSApple OSS Distributions 
151*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_LIBRARY_LOADINFO: {
152*aca3beaaSApple OSS Distributions 		i = 0;
153*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct user32_dyld_uuid_info, imageLoadAddress);
154*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct user32_dyld_uuid_info, imageUUID, 16);
155*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "dyld_load_info");
156*aca3beaaSApple OSS Distributions 		break;
157*aca3beaaSApple OSS Distributions 	}
158*aca3beaaSApple OSS Distributions 
159*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_LIBRARY_LOADINFO64: {
160*aca3beaaSApple OSS Distributions 		i = 0;
161*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct user64_dyld_uuid_info, imageLoadAddress);
162*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct user64_dyld_uuid_info, imageUUID, 16);
163*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "dyld_load_info");
164*aca3beaaSApple OSS Distributions 		break;
165*aca3beaaSApple OSS Distributions 	}
166*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_LOADINFO64_TEXT_EXEC: {
167*aca3beaaSApple OSS Distributions 		i = 0;
168*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct user64_dyld_uuid_info, imageLoadAddress);
169*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct user64_dyld_uuid_info, imageUUID, 16);
170*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "dyld_load_info_text_exec");
171*aca3beaaSApple OSS Distributions 		break;
172*aca3beaaSApple OSS Distributions 	}
173*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_SHAREDCACHE_LOADINFO: {
174*aca3beaaSApple OSS Distributions 		i = 0;
175*aca3beaaSApple OSS Distributions 		/*
176*aca3beaaSApple OSS Distributions 		 * for backwards compatibility, we keep the old field names, but the
177*aca3beaaSApple OSS Distributions 		 * new data is being put in dyld_shared_cache_loadinfo
178*aca3beaaSApple OSS Distributions 		 */
179*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_uuid_info_64_v2, imageLoadAddress);
180*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct dyld_uuid_info_64_v2, imageUUID, 16);
181*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_uuid_info_64_v2, imageSlidBaseAddress);
182*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_shared_cache_loadinfo, sharedCacheSlidFirstMapping);
183*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct dyld_shared_cache_loadinfo_v2, sharedCacheID);
184*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct dyld_shared_cache_loadinfo_v2, sharedCacheFlags);
185*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "shared_cache_dyld_load_info");
186*aca3beaaSApple OSS Distributions 		break;
187*aca3beaaSApple OSS Distributions 	}
188*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_SHAREDCACHE_INFO: {
189*aca3beaaSApple OSS Distributions 		i = 0;
190*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_shared_cache_loadinfo_v2, sharedCacheSlide);
191*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct dyld_shared_cache_loadinfo_v2, sharedCacheUUID, 16);
192*aca3beaaSApple OSS Distributions 		_SUBTYPE_TRUNC(KC_ST_UINT64, struct dyld_shared_cache_loadinfo_v2, sharedCacheUnreliableSlidBaseAddress, "sharedCacheUnreliableSlidBaseAd");
193*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_shared_cache_loadinfo_v2, sharedCacheSlidFirstMapping);
194*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct dyld_shared_cache_loadinfo_v2, sharedCacheID);
195*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct dyld_shared_cache_loadinfo_v2, sharedCacheFlags);
196*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "shared_cache_dyld_load_info");
197*aca3beaaSApple OSS Distributions 		break;
198*aca3beaaSApple OSS Distributions 	}
199*aca3beaaSApple OSS Distributions 
200*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_KERNELCACHE_LOADINFO: {
201*aca3beaaSApple OSS Distributions 		i = 0;
202*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_uuid_info_64, imageLoadAddress);
203*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct dyld_uuid_info_64, imageUUID, 16);
204*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "kernelcache_load_info");
205*aca3beaaSApple OSS Distributions 		break;
206*aca3beaaSApple OSS Distributions 	}
207*aca3beaaSApple OSS Distributions 
208*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_TIMEBASE: {
209*aca3beaaSApple OSS Distributions 		i = 0;
210*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mach_timebase_info, numer);
211*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mach_timebase_info, denom);
212*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "mach_timebase_info");
213*aca3beaaSApple OSS Distributions 		break;
214*aca3beaaSApple OSS Distributions 	}
215*aca3beaaSApple OSS Distributions 
216*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_MACH_ABSOLUTE_TIME:
217*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "mach_absolute_time");
218*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "mach_absolute_time");
219*aca3beaaSApple OSS Distributions 		break;
220*aca3beaaSApple OSS Distributions 
221*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_TIMEVAL: {
222*aca3beaaSApple OSS Distributions 		i = 0;
223*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT64, struct timeval64, tv_sec);
224*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT64, struct timeval64, tv_usec);
225*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "timeval");
226*aca3beaaSApple OSS Distributions 		break;
227*aca3beaaSApple OSS Distributions 	}
228*aca3beaaSApple OSS Distributions 
229*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_USECS_SINCE_EPOCH:
230*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "usecs_since_epoch");
231*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "usecs_since_epoch");
232*aca3beaaSApple OSS Distributions 		break;
233*aca3beaaSApple OSS Distributions 
234*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_PID:
235*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "pid");
236*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "pid");
237*aca3beaaSApple OSS Distributions 		break;
238*aca3beaaSApple OSS Distributions 
239*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_PROCNAME:
240*aca3beaaSApple OSS Distributions 		i = 0;
241*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, 0, 64, "proc_name");
242*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "proc_name");
243*aca3beaaSApple OSS Distributions 		break;
244*aca3beaaSApple OSS Distributions 
245*aca3beaaSApple OSS Distributions 	case KCDATA_TYPE_LIBRARY_AOTINFO: {
246*aca3beaaSApple OSS Distributions 		i = 0;
247*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct user64_dyld_aot_info, x86LoadAddress);
248*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct user64_dyld_aot_info, aotLoadAddress);
249*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct user64_dyld_aot_info, aotImageSize);
250*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct user64_dyld_aot_info, aotImageKey, DYLD_AOT_IMAGE_KEY_SIZE);
251*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "dyld_aot_info");
252*aca3beaaSApple OSS Distributions 		break;
253*aca3beaaSApple OSS Distributions 	}
254*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_AOTCACHE_LOADINFO: {
255*aca3beaaSApple OSS Distributions 		i = 0;
256*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_aot_cache_uuid_info, x86SlidBaseAddress);
257*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct dyld_aot_cache_uuid_info, x86UUID, 16);
258*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_aot_cache_uuid_info, aotSlidBaseAddress);
259*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct dyld_aot_cache_uuid_info, aotUUID, 16);
260*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "dyld_aot_cache_uuid_info");
261*aca3beaaSApple OSS Distributions 		break;
262*aca3beaaSApple OSS Distributions 	}
263*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_SHAREDCACHE_AOTINFO: {
264*aca3beaaSApple OSS Distributions 		i = 0;
265*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_aot_cache_uuid_info, x86SlidBaseAddress);
266*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct dyld_aot_cache_uuid_info, x86UUID, 16);
267*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct dyld_aot_cache_uuid_info, aotSlidBaseAddress);
268*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct dyld_aot_cache_uuid_info, aotUUID, 16);
269*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "dyld_aot_cache_uuid_info");
270*aca3beaaSApple OSS Distributions 		break;
271*aca3beaaSApple OSS Distributions 	}
272*aca3beaaSApple OSS Distributions 
273*aca3beaaSApple OSS Distributions 	/* stackshot specific types */
274*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_IOSTATS: {
275*aca3beaaSApple OSS Distributions 		i = 0;
276*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_disk_reads_count);
277*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_disk_reads_size);
278*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_disk_writes_count);
279*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_disk_writes_size);
280*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT64, struct io_stats_snapshot, ss_io_priority_count, STACKSHOT_IO_NUM_PRIORITIES);
281*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT64, struct io_stats_snapshot, ss_io_priority_size, STACKSHOT_IO_NUM_PRIORITIES);
282*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_paging_count);
283*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_paging_size);
284*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_non_paging_count);
285*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_non_paging_size);
286*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_data_count);
287*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_data_size);
288*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_metadata_count);
289*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct io_stats_snapshot, ss_metadata_size);
290*aca3beaaSApple OSS Distributions 
291*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "io_statistics");
292*aca3beaaSApple OSS Distributions 		break;
293*aca3beaaSApple OSS Distributions 	}
294*aca3beaaSApple OSS Distributions 
295*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_GLOBAL_MEM_STATS: {
296*aca3beaaSApple OSS Distributions 		i = 0;
297*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, snapshot_magic);
298*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, free_pages);
299*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, active_pages);
300*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, inactive_pages);
301*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, purgeable_pages);
302*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, wired_pages);
303*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, speculative_pages);
304*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, throttled_pages);
305*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, filebacked_pages);
306*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, compressions);
307*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, decompressions);
308*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, compressor_size);
309*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, busy_buffer_count);
310*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, pages_wanted);
311*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct mem_and_io_snapshot, pages_reclaimed);
312*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct mem_and_io_snapshot, pages_wanted_reclaimed_valid);
313*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "mem_and_io_snapshot");
314*aca3beaaSApple OSS Distributions 		break;
315*aca3beaaSApple OSS Distributions 	}
316*aca3beaaSApple OSS Distributions 
317*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCCONTAINER_SHAREDCACHE:
318*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 0, "shared_caches");
319*aca3beaaSApple OSS Distributions 		break;
320*aca3beaaSApple OSS Distributions 
321*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCCONTAINER_TASK:
322*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 0, "task_snapshots");
323*aca3beaaSApple OSS Distributions 		break;
324*aca3beaaSApple OSS Distributions 
325*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCCONTAINER_TRANSITIONING_TASK:
326*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 0, "transitioning_task_snapshots");
327*aca3beaaSApple OSS Distributions 		break;
328*aca3beaaSApple OSS Distributions 
329*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCCONTAINER_THREAD:
330*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 0, "thread_snapshots");
331*aca3beaaSApple OSS Distributions 		break;
332*aca3beaaSApple OSS Distributions 
333*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCCONTAINER_PORTLABEL:
334*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 0, "portlabels");
335*aca3beaaSApple OSS Distributions 		break;
336*aca3beaaSApple OSS Distributions 
337*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_TASK_SNAPSHOT: {
338*aca3beaaSApple OSS Distributions 		i = 0;
339*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_snapshot_v2, ts_unique_pid);
340*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_snapshot_v2, ts_ss_flags);
341*aca3beaaSApple OSS Distributions 		_SUBTYPE_TRUNC(KC_ST_UINT64, struct task_snapshot_v2, ts_user_time_in_terminated_threads, "ts_user_time_in_terminated_thre");
342*aca3beaaSApple OSS Distributions 		_SUBTYPE_TRUNC(KC_ST_UINT64, struct task_snapshot_v2, ts_system_time_in_terminated_threads, "ts_system_time_in_terminated_th");
343*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_snapshot_v2, ts_p_start_sec);
344*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_snapshot_v2, ts_task_size);
345*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_snapshot_v2, ts_max_resident_size);
346*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_snapshot_v2, ts_suspend_count);
347*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_snapshot_v2, ts_faults);
348*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_snapshot_v2, ts_pageins);
349*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_snapshot_v2, ts_cow_faults);
350*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_snapshot_v2, ts_was_throttled);
351*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_snapshot_v2, ts_did_throttle);
352*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_snapshot_v2, ts_latency_qos);
353*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT32, struct task_snapshot_v2, ts_pid);
354*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct task_snapshot_v2, ts_p_comm, 32);
355*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "task_snapshot");
356*aca3beaaSApple OSS Distributions 		break;
357*aca3beaaSApple OSS Distributions 	}
358*aca3beaaSApple OSS Distributions 
359*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_TRANSITIONING_TASK_SNAPSHOT: {
360*aca3beaaSApple OSS Distributions 		i = 0;
361*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct transitioning_task_snapshot, tts_unique_pid);
362*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct transitioning_task_snapshot, tts_ss_flags);
363*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct transitioning_task_snapshot, tts_transition_type);
364*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT32, struct transitioning_task_snapshot, tts_pid);
365*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct transitioning_task_snapshot, tts_p_comm, 32);
366*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "transitioning_task_snapshot");
367*aca3beaaSApple OSS Distributions 		break;
368*aca3beaaSApple OSS Distributions 	}
369*aca3beaaSApple OSS Distributions 
370*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_TASK_DELTA_SNAPSHOT: {
371*aca3beaaSApple OSS Distributions 		i = 0;
372*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_delta_snapshot_v2, tds_unique_pid);
373*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_delta_snapshot_v2, tds_ss_flags);
374*aca3beaaSApple OSS Distributions 		_SUBTYPE_TRUNC(KC_ST_UINT64, struct task_delta_snapshot_v2, tds_user_time_in_terminated_threads, "tds_user_time_in_terminated_thr");
375*aca3beaaSApple OSS Distributions 		_SUBTYPE_TRUNC(KC_ST_UINT64, struct task_delta_snapshot_v2, tds_system_time_in_terminated_threads, "tds_system_time_in_terminated_t");
376*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_delta_snapshot_v2, tds_task_size);
377*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct task_delta_snapshot_v2, tds_max_resident_size);
378*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_delta_snapshot_v2, tds_suspend_count);
379*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_delta_snapshot_v2, tds_faults);
380*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_delta_snapshot_v2, tds_pageins);
381*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_delta_snapshot_v2, tds_cow_faults);
382*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_delta_snapshot_v2, tds_was_throttled);
383*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_delta_snapshot_v2, tds_did_throttle);
384*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct task_delta_snapshot_v2, tds_latency_qos);
385*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "task_delta_snapshot");
386*aca3beaaSApple OSS Distributions 		break;
387*aca3beaaSApple OSS Distributions 	}
388*aca3beaaSApple OSS Distributions 
389*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_SNAPSHOT: {
390*aca3beaaSApple OSS Distributions 		i = 0;
391*aca3beaaSApple OSS Distributions 
392*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_thread_id);
393*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_wait_event);
394*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_continuation);
395*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_total_syscalls);
396*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_voucher_identifier);
397*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_dqserialnum);
398*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_user_time);
399*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_sys_time);
400*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_ss_flags);
401*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_last_run_time);
402*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_last_made_runnable_time);
403*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct thread_snapshot_v3, ths_state);
404*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct thread_snapshot_v3, ths_sched_flags);
405*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT16, struct thread_snapshot_v3, ths_base_priority);
406*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT16, struct thread_snapshot_v3, ths_sched_priority);
407*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct thread_snapshot_v3, ths_eqos);
408*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct thread_snapshot_v3, ths_rqos);
409*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct thread_snapshot_v3, ths_rqos_override);
410*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct thread_snapshot_v3, ths_io_tier);
411*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v3, ths_thread_t);
412*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v4, ths_requested_policy);
413*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_snapshot_v4, ths_effective_policy);
414*aca3beaaSApple OSS Distributions 
415*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "thread_snapshot");
416*aca3beaaSApple OSS Distributions 		break;
417*aca3beaaSApple OSS Distributions 	}
418*aca3beaaSApple OSS Distributions 
419*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_DELTA_SNAPSHOT: {
420*aca3beaaSApple OSS Distributions 		i = 0;
421*aca3beaaSApple OSS Distributions 
422*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_delta_snapshot_v2, tds_thread_id);
423*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_delta_snapshot_v2, tds_voucher_identifier);
424*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_delta_snapshot_v2, tds_ss_flags);
425*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_delta_snapshot_v2, tds_last_made_runnable_time);
426*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct thread_delta_snapshot_v2, tds_state);
427*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct thread_delta_snapshot_v2, tds_sched_flags);
428*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT16, struct thread_delta_snapshot_v2, tds_base_priority);
429*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT16, struct thread_delta_snapshot_v2, tds_sched_priority);
430*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct thread_delta_snapshot_v2, tds_eqos);
431*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct thread_delta_snapshot_v2, tds_rqos);
432*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct thread_delta_snapshot_v2, tds_rqos_override);
433*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct thread_delta_snapshot_v2, tds_io_tier);
434*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_delta_snapshot_v3, tds_requested_policy);
435*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_delta_snapshot_v3, tds_effective_policy);
436*aca3beaaSApple OSS Distributions 
437*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "thread_delta_snapshot");
438*aca3beaaSApple OSS Distributions 
439*aca3beaaSApple OSS Distributions 		break;
440*aca3beaaSApple OSS Distributions 	}
441*aca3beaaSApple OSS Distributions 
442*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_DONATING_PIDS:
443*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "donating_pids");
444*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "donating_pids");
445*aca3beaaSApple OSS Distributions 		break;
446*aca3beaaSApple OSS Distributions 
447*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_NAME: {
448*aca3beaaSApple OSS Distributions 		i = 0;
449*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_CHAR, 0, 64, "pth_name");
450*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "pth_name");
451*aca3beaaSApple OSS Distributions 		break;
452*aca3beaaSApple OSS Distributions 	}
453*aca3beaaSApple OSS Distributions 
454*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_KERN_STACKFRAME:
455*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 2, "kernel_stack_frames");
456*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "lr");
457*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[1], KC_ST_UINT32, sizeof(uint32_t), "sp");
458*aca3beaaSApple OSS Distributions 		break;
459*aca3beaaSApple OSS Distributions 
460*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_KERN_STACKFRAME64:
461*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 2, "kernel_stack_frames");
462*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "lr");
463*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[1], KC_ST_UINT64, sizeof(uint64_t), "sp");
464*aca3beaaSApple OSS Distributions 		break;
465*aca3beaaSApple OSS Distributions 
466*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_USER_STACKFRAME:
467*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 2, "user_stack_frames");
468*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "lr");
469*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[1], KC_ST_UINT32, sizeof(uint32_t), "sp");
470*aca3beaaSApple OSS Distributions 		break;
471*aca3beaaSApple OSS Distributions 
472*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_USER_STACKFRAME64:
473*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 2, "user_stack_frames");
474*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "lr");
475*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[1], KC_ST_UINT64, sizeof(uint64_t), "sp");
476*aca3beaaSApple OSS Distributions 		break;
477*aca3beaaSApple OSS Distributions 
478*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_KERN_STACKLR:
479*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "kernel_stack_frames");
480*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "lr");
481*aca3beaaSApple OSS Distributions 		subtypes[0].kcs_flags |= KCS_SUBTYPE_FLAGS_STRUCT;
482*aca3beaaSApple OSS Distributions 		break;
483*aca3beaaSApple OSS Distributions 
484*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_KERN_STACKLR64:
485*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "kernel_stack_frames");
486*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "lr");
487*aca3beaaSApple OSS Distributions 		subtypes[0].kcs_flags |= KCS_SUBTYPE_FLAGS_STRUCT;
488*aca3beaaSApple OSS Distributions 		break;
489*aca3beaaSApple OSS Distributions 
490*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_USER_STACKLR:
491*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "user_stack_frames");
492*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "lr");
493*aca3beaaSApple OSS Distributions 		subtypes[0].kcs_flags |= KCS_SUBTYPE_FLAGS_STRUCT;
494*aca3beaaSApple OSS Distributions 		break;
495*aca3beaaSApple OSS Distributions 
496*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_USER_STACKLR64:
497*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "user_stack_frames");
498*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "lr");
499*aca3beaaSApple OSS Distributions 		subtypes[0].kcs_flags |= KCS_SUBTYPE_FLAGS_STRUCT;
500*aca3beaaSApple OSS Distributions 		break;
501*aca3beaaSApple OSS Distributions 
502*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_USER_ASYNC_START_INDEX:
503*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "user_async_start_index");
504*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "user_async_start_index");
505*aca3beaaSApple OSS Distributions 		break;
506*aca3beaaSApple OSS Distributions 
507*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_USER_ASYNC_STACKLR64:
508*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "user_async_stack_frames");
509*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "lr");
510*aca3beaaSApple OSS Distributions 		subtypes[0].kcs_flags |= KCS_SUBTYPE_FLAGS_STRUCT;
511*aca3beaaSApple OSS Distributions 		break;
512*aca3beaaSApple OSS Distributions 
513*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_NONRUNNABLE_TIDS:
514*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "nonrunnable_threads");
515*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT64, 0, "nonrunnable_threads");
516*aca3beaaSApple OSS Distributions 		break;
517*aca3beaaSApple OSS Distributions 
518*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_NONRUNNABLE_TASKS:
519*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "nonrunnable_tasks");
520*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT64, 0, "nonrunnable_tasks");
521*aca3beaaSApple OSS Distributions 		break;
522*aca3beaaSApple OSS Distributions 
523*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_SHAREDCACHE_ID:
524*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "sharedCacheID");
525*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "sharedCacheID");
526*aca3beaaSApple OSS Distributions 		break;
527*aca3beaaSApple OSS Distributions 
528*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_CODESIGNING_INFO:
529*aca3beaaSApple OSS Distributions 		i = 0;
530*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_task_codesigning_info, csflags);
531*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct stackshot_task_codesigning_info, cs_trust_level);
532*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "stackshot_task_codesigning_info");
533*aca3beaaSApple OSS Distributions 		break;
534*aca3beaaSApple OSS Distributions 
535*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_BOOTARGS: {
536*aca3beaaSApple OSS Distributions 		i = 0;
537*aca3beaaSApple OSS Distributions 		_STRINGTYPE("boot_args");
538*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "boot_args");
539*aca3beaaSApple OSS Distributions 		break;
540*aca3beaaSApple OSS Distributions 	}
541*aca3beaaSApple OSS Distributions 
542*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_OSVERSION: {
543*aca3beaaSApple OSS Distributions 		i = 0;
544*aca3beaaSApple OSS Distributions 		_STRINGTYPE("osversion");
545*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "osversion");
546*aca3beaaSApple OSS Distributions 		break;
547*aca3beaaSApple OSS Distributions 	}
548*aca3beaaSApple OSS Distributions 
549*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_KERN_PAGE_SIZE: {
550*aca3beaaSApple OSS Distributions 		i = 0;
551*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT32, 0, "kernel_page_size");
552*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "kernel_page_size");
553*aca3beaaSApple OSS Distributions 		break;
554*aca3beaaSApple OSS Distributions 	}
555*aca3beaaSApple OSS Distributions 
556*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_POLICY_VERSION: {
557*aca3beaaSApple OSS Distributions 		i = 0;
558*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT32, 0, "thread_policy_version");
559*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "thread_policy_version");
560*aca3beaaSApple OSS Distributions 		break;
561*aca3beaaSApple OSS Distributions 	}
562*aca3beaaSApple OSS Distributions 
563*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_JETSAM_LEVEL: {
564*aca3beaaSApple OSS Distributions 		i = 0;
565*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT32, 0, "jetsam_level");
566*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "jetsam_level");
567*aca3beaaSApple OSS Distributions 		break;
568*aca3beaaSApple OSS Distributions 	}
569*aca3beaaSApple OSS Distributions 
570*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_DELTA_SINCE_TIMESTAMP: {
571*aca3beaaSApple OSS Distributions 		i = 0;
572*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT64, 0, "stackshot_delta_since_timestamp");
573*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "stackshot_delta_since_timestamp");
574*aca3beaaSApple OSS Distributions 		break;
575*aca3beaaSApple OSS Distributions 	}
576*aca3beaaSApple OSS Distributions 
577*aca3beaaSApple OSS Distributions 	/* crashinfo types */
578*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_BSDINFOWITHUNIQID: {
579*aca3beaaSApple OSS Distributions 		i = 0;
580*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct crashinfo_proc_uniqidentifierinfo, p_uuid, 16);
581*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct crashinfo_proc_uniqidentifierinfo, p_uniqueid);
582*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct crashinfo_proc_uniqidentifierinfo, p_puniqueid);
583*aca3beaaSApple OSS Distributions 		/* Ignore the p_reserve fields */
584*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "proc_uniqidentifierinfo");
585*aca3beaaSApple OSS Distributions 		break;
586*aca3beaaSApple OSS Distributions 	}
587*aca3beaaSApple OSS Distributions 
588*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PID: {
589*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "pid");
590*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "pid");
591*aca3beaaSApple OSS Distributions 		break;
592*aca3beaaSApple OSS Distributions 	}
593*aca3beaaSApple OSS Distributions 
594*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PPID: {
595*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "ppid");
596*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "ppid");
597*aca3beaaSApple OSS Distributions 		break;
598*aca3beaaSApple OSS Distributions 	}
599*aca3beaaSApple OSS Distributions 
600*aca3beaaSApple OSS Distributions 	/* case TASK_CRASHINFO_RUSAGE: { */
601*aca3beaaSApple OSS Distributions 	/*      /\* */
602*aca3beaaSApple OSS Distributions 	/*       * rusage is a complex structure and is only for legacy use for crashed processes rusage info. */
603*aca3beaaSApple OSS Distributions 	/*       * So we just consider it as opaque data. */
604*aca3beaaSApple OSS Distributions 	/*       *\/ */
605*aca3beaaSApple OSS Distributions 	/*      i = 0; */
606*aca3beaaSApple OSS Distributions 	/*      setup_subtype_array_description(&subtypes[i++], KC_ST_UINT8, 0, sizeof(struct rusage), "rusage"); */
607*aca3beaaSApple OSS Distributions 	/*      setup_type_definition(retval, type_id, i, "rusage"); */
608*aca3beaaSApple OSS Distributions 	/*      break; */
609*aca3beaaSApple OSS Distributions 	/* } */
610*aca3beaaSApple OSS Distributions 
611*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_RUSAGE_INFO: {
612*aca3beaaSApple OSS Distributions 		i = 0;
613*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct rusage_info_v3, ri_uuid, 16);
614*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_user_time);
615*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_system_time);
616*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_pkg_idle_wkups);
617*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_interrupt_wkups);
618*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_pageins);
619*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_wired_size);
620*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_resident_size);
621*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_phys_footprint);
622*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_proc_start_abstime);
623*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_proc_exit_abstime);
624*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_child_user_time);
625*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_child_system_time);
626*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_child_pkg_idle_wkups);
627*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_child_interrupt_wkups);
628*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_child_pageins);
629*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_child_elapsed_abstime);
630*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_diskio_bytesread);
631*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_diskio_byteswritten);
632*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_cpu_time_qos_default);
633*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_cpu_time_qos_maintenance);
634*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_cpu_time_qos_background);
635*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_cpu_time_qos_utility);
636*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_cpu_time_qos_legacy);
637*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_cpu_time_qos_user_initiated);
638*aca3beaaSApple OSS Distributions 		_SUBTYPE_TRUNC(KC_ST_UINT64, struct rusage_info_v3, ri_cpu_time_qos_user_interactive, "ri_cpu_time_qos_user_interactiv");
639*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_billed_system_time);
640*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct rusage_info_v3, ri_serviced_system_time);
641*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "rusage_info");
642*aca3beaaSApple OSS Distributions 		break;
643*aca3beaaSApple OSS Distributions 	}
644*aca3beaaSApple OSS Distributions 
645*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_CPU_TIMES: {
646*aca3beaaSApple OSS Distributions 		i = 0;
647*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_cpu_times_v2, user_usec);
648*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_cpu_times_v2, system_usec);
649*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_cpu_times_v2, runnable_usec);
650*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "cpu_times");
651*aca3beaaSApple OSS Distributions 		break;
652*aca3beaaSApple OSS Distributions 	}
653*aca3beaaSApple OSS Distributions 
654*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_STACKSHOT_DURATION: {
655*aca3beaaSApple OSS Distributions 		i = 0;
656*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_duration_v2, stackshot_duration);
657*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_duration_v2, stackshot_duration_outer);
658*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_duration_v2, stackshot_duration_prior);
659*aca3beaaSApple OSS Distributions 		subtypes[0].kcs_flags |= KCS_SUBTYPE_FLAGS_MERGE;
660*aca3beaaSApple OSS Distributions 		subtypes[1].kcs_flags |= KCS_SUBTYPE_FLAGS_MERGE;
661*aca3beaaSApple OSS Distributions 		subtypes[2].kcs_flags |= KCS_SUBTYPE_FLAGS_MERGE;
662*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "stackshot_duration");
663*aca3beaaSApple OSS Distributions 		break;
664*aca3beaaSApple OSS Distributions 	}
665*aca3beaaSApple OSS Distributions 
666*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_STACKSHOT_FAULT_STATS: {
667*aca3beaaSApple OSS Distributions 		i = 0;
668*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct stackshot_fault_stats, sfs_pages_faulted_in);
669*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_fault_stats, sfs_time_spent_faulting);
670*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_fault_stats, sfs_system_max_fault_time);
671*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct stackshot_fault_stats, sfs_stopped_faulting);
672*aca3beaaSApple OSS Distributions 
673*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "stackshot_fault_stats");
674*aca3beaaSApple OSS Distributions 		break;
675*aca3beaaSApple OSS Distributions 	}
676*aca3beaaSApple OSS Distributions 
677*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_WAITINFO: {
678*aca3beaaSApple OSS Distributions 		i = 0;
679*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_thread_waitinfo_v2, owner);
680*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_thread_waitinfo_v2, waiter);
681*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_thread_waitinfo_v2, context);
682*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct stackshot_thread_waitinfo_v2, wait_type);
683*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT16, struct stackshot_thread_waitinfo_v2, portlabel_id);
684*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct stackshot_thread_waitinfo_v2, wait_flags);
685*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "thread_waitinfo");
686*aca3beaaSApple OSS Distributions 		break;
687*aca3beaaSApple OSS Distributions 	}
688*aca3beaaSApple OSS Distributions 
689*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_GROUP_SNAPSHOT: {
690*aca3beaaSApple OSS Distributions 		i = 0;
691*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_group_snapshot_v3, tgs_id);
692*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct thread_group_snapshot_v3, tgs_name, 16);
693*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct thread_group_snapshot_v3, tgs_flags);
694*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct thread_group_snapshot_v3, tgs_name_cont, 16);
695*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "thread_group_snapshot");
696*aca3beaaSApple OSS Distributions 		break;
697*aca3beaaSApple OSS Distributions 	}
698*aca3beaaSApple OSS Distributions 
699*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_GROUP: {
700*aca3beaaSApple OSS Distributions 		i = 0;
701*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT64, 0, "thread_group");
702*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "thread_group");
703*aca3beaaSApple OSS Distributions 		break;
704*aca3beaaSApple OSS Distributions 	};
705*aca3beaaSApple OSS Distributions 
706*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_JETSAM_COALITION_SNAPSHOT: {
707*aca3beaaSApple OSS Distributions 		i = 0;
708*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct jetsam_coalition_snapshot, jcs_id);
709*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct jetsam_coalition_snapshot, jcs_flags);
710*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct jetsam_coalition_snapshot, jcs_thread_group);
711*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct jetsam_coalition_snapshot, jcs_leader_task_uniqueid);
712*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "jetsam_coalition_snapshot");
713*aca3beaaSApple OSS Distributions 		break;
714*aca3beaaSApple OSS Distributions 	}
715*aca3beaaSApple OSS Distributions 
716*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_JETSAM_COALITION: {
717*aca3beaaSApple OSS Distributions 		i = 0;
718*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT64, 0, "jetsam_coalition");
719*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "jetsam_coalition");
720*aca3beaaSApple OSS Distributions 		break;
721*aca3beaaSApple OSS Distributions 	};
722*aca3beaaSApple OSS Distributions 
723*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_INSTRS_CYCLES: {
724*aca3beaaSApple OSS Distributions 		i = 0;
725*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct instrs_cycles_snapshot_v2, ics_instructions);
726*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct instrs_cycles_snapshot_v2, ics_cycles);
727*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct instrs_cycles_snapshot_v2, ics_p_instructions);
728*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct instrs_cycles_snapshot_v2, ics_p_cycles);
729*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "instrs_cycles_snapshot");
730*aca3beaaSApple OSS Distributions 		break;
731*aca3beaaSApple OSS Distributions 	}
732*aca3beaaSApple OSS Distributions 
733*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_USER_STACKTOP: {
734*aca3beaaSApple OSS Distributions 		i = 0;
735*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stack_snapshot_stacktop, sp);
736*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct stack_snapshot_stacktop, stack_contents, 8);
737*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "user_stacktop");
738*aca3beaaSApple OSS Distributions 		break;
739*aca3beaaSApple OSS Distributions 	}
740*aca3beaaSApple OSS Distributions 
741*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PROC_STARTTIME: {
742*aca3beaaSApple OSS Distributions 		i = 0;
743*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT64, struct timeval64, tv_sec);
744*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT64, struct timeval64, tv_usec);
745*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "proc_starttime");
746*aca3beaaSApple OSS Distributions 		break;
747*aca3beaaSApple OSS Distributions 	}
748*aca3beaaSApple OSS Distributions 
749*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_EXCEPTION_CODES: {
750*aca3beaaSApple OSS Distributions 		i = 0;
751*aca3beaaSApple OSS Distributions 		char codenum[100];
752*aca3beaaSApple OSS Distributions 		for (i = 0; i < EXCEPTION_CODE_MAX; i++) {
753*aca3beaaSApple OSS Distributions 			snprintf(codenum, sizeof(codenum), "code_%d", i);
754*aca3beaaSApple OSS Distributions 			setup_subtype_description(&subtypes[i], KC_ST_UINT64, i * (sizeof(uint64_t)), codenum);
755*aca3beaaSApple OSS Distributions 		}
756*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "mach_exception_data_t");
757*aca3beaaSApple OSS Distributions 		break;
758*aca3beaaSApple OSS Distributions 	}
759*aca3beaaSApple OSS Distributions 
760*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PROC_NAME: {
761*aca3beaaSApple OSS Distributions 		i = 0;
762*aca3beaaSApple OSS Distributions 		_STRINGTYPE("p_comm");
763*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "p_comm");
764*aca3beaaSApple OSS Distributions 		break;
765*aca3beaaSApple OSS Distributions 	}
766*aca3beaaSApple OSS Distributions 
767*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_USERSTACK: {
768*aca3beaaSApple OSS Distributions 		i = 0;
769*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "userstack_ptr");
770*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "userstack_ptr");
771*aca3beaaSApple OSS Distributions 		break;
772*aca3beaaSApple OSS Distributions 	}
773*aca3beaaSApple OSS Distributions 
774*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_ARGSLEN: {
775*aca3beaaSApple OSS Distributions 		i = 0;
776*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "p_argslen");
777*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "p_argslen");
778*aca3beaaSApple OSS Distributions 		break;
779*aca3beaaSApple OSS Distributions 	}
780*aca3beaaSApple OSS Distributions 
781*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PROC_PATH: {
782*aca3beaaSApple OSS Distributions 		i = 0;
783*aca3beaaSApple OSS Distributions 		_STRINGTYPE("p_path");
784*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "p_path");
785*aca3beaaSApple OSS Distributions 		break;
786*aca3beaaSApple OSS Distributions 	}
787*aca3beaaSApple OSS Distributions 
788*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PROC_CSFLAGS: {
789*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "p_csflags");
790*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "p_csflags");
791*aca3beaaSApple OSS Distributions 		break;
792*aca3beaaSApple OSS Distributions 	}
793*aca3beaaSApple OSS Distributions 
794*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PROC_STATUS: {
795*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT8, 0, "p_status");
796*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "p_status");
797*aca3beaaSApple OSS Distributions 		break;
798*aca3beaaSApple OSS Distributions 	}
799*aca3beaaSApple OSS Distributions 
800*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_UID: {
801*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "uid");
802*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "uid");
803*aca3beaaSApple OSS Distributions 		break;
804*aca3beaaSApple OSS Distributions 	}
805*aca3beaaSApple OSS Distributions 
806*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_GID: {
807*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "gid");
808*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "gid");
809*aca3beaaSApple OSS Distributions 		break;
810*aca3beaaSApple OSS Distributions 	}
811*aca3beaaSApple OSS Distributions 
812*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PROC_ARGC: {
813*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "argc");
814*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "argc");
815*aca3beaaSApple OSS Distributions 		break;
816*aca3beaaSApple OSS Distributions 	}
817*aca3beaaSApple OSS Distributions 
818*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_PROC_FLAGS: {
819*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "p_flags");
820*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "p_flags");
821*aca3beaaSApple OSS Distributions 		break;
822*aca3beaaSApple OSS Distributions 	}
823*aca3beaaSApple OSS Distributions 
824*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_CPUTYPE: {
825*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "cputype");
826*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "cputype");
827*aca3beaaSApple OSS Distributions 		break;
828*aca3beaaSApple OSS Distributions 	}
829*aca3beaaSApple OSS Distributions 
830*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_RESPONSIBLE_PID: {
831*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_INT32, 0, "responsible_pid");
832*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "responsible_pid");
833*aca3beaaSApple OSS Distributions 		break;
834*aca3beaaSApple OSS Distributions 	}
835*aca3beaaSApple OSS Distributions 
836*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_DIRTY_FLAGS: {
837*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "dirty_flags");
838*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "dirty_flags");
839*aca3beaaSApple OSS Distributions 		break;
840*aca3beaaSApple OSS Distributions 	}
841*aca3beaaSApple OSS Distributions 
842*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_CRASHED_THREADID: {
843*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "crashed_threadid");
844*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "crashed_threadid");
845*aca3beaaSApple OSS Distributions 		break;
846*aca3beaaSApple OSS Distributions 	}
847*aca3beaaSApple OSS Distributions 
848*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_COALITION_ID: {
849*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "coalition_id");
850*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "coalition_id");
851*aca3beaaSApple OSS Distributions 		break;
852*aca3beaaSApple OSS Distributions 	}
853*aca3beaaSApple OSS Distributions 
854*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_UDATA_PTRS: {
855*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "udata_ptrs");
856*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "udata_ptrs");
857*aca3beaaSApple OSS Distributions 		break;
858*aca3beaaSApple OSS Distributions 	}
859*aca3beaaSApple OSS Distributions 
860*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_MEMORY_LIMIT: {
861*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT64, 0, "task_phys_mem_limit");
862*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "task_phys_mem_limit");
863*aca3beaaSApple OSS Distributions 		break;
864*aca3beaaSApple OSS Distributions 	}
865*aca3beaaSApple OSS Distributions 
866*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_TASK_IS_CORPSE_FORK: {
867*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "task_is_corpse_fork");
868*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "task_is_corpse_fork");
869*aca3beaaSApple OSS Distributions 		break;
870*aca3beaaSApple OSS Distributions 	}
871*aca3beaaSApple OSS Distributions 
872*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_EXCEPTION_TYPE: {
873*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "exception_type");
874*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "exception_type");
875*aca3beaaSApple OSS Distributions 		break;
876*aca3beaaSApple OSS Distributions 	}
877*aca3beaaSApple OSS Distributions 
878*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_CS_SIGNING_ID: {
879*aca3beaaSApple OSS Distributions 		i = 0;
880*aca3beaaSApple OSS Distributions 		_STRINGTYPE("cs_signing_id");
881*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "cs_signing_id");
882*aca3beaaSApple OSS Distributions 		break;
883*aca3beaaSApple OSS Distributions 	}
884*aca3beaaSApple OSS Distributions 
885*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_CS_TEAM_ID: {
886*aca3beaaSApple OSS Distributions 		i = 0;
887*aca3beaaSApple OSS Distributions 		_STRINGTYPE("cs_team_id");
888*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "cs_team_id");
889*aca3beaaSApple OSS Distributions 		break;
890*aca3beaaSApple OSS Distributions 	}
891*aca3beaaSApple OSS Distributions 
892*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_CS_VALIDATION_CATEGORY: {
893*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "cs_validation_category");
894*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "cs_validation_category");
895*aca3beaaSApple OSS Distributions 		break;
896*aca3beaaSApple OSS Distributions 	}
897*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_CS_TRUST_LEVEL: {
898*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[0], KC_ST_UINT32, 0, "cs_trust_level");
899*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, 1, "cs_trust_level");
900*aca3beaaSApple OSS Distributions 		break;
901*aca3beaaSApple OSS Distributions 	}
902*aca3beaaSApple OSS Distributions 
903*aca3beaaSApple OSS Distributions 	case EXIT_REASON_SNAPSHOT: {
904*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct exit_reason_snapshot, ers_namespace);
905*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct exit_reason_snapshot, ers_code);
906*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct exit_reason_snapshot, ers_flags);
907*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "exit_reason_basic_info");
908*aca3beaaSApple OSS Distributions 
909*aca3beaaSApple OSS Distributions 		break;
910*aca3beaaSApple OSS Distributions 	}
911*aca3beaaSApple OSS Distributions 
912*aca3beaaSApple OSS Distributions 	case EXIT_REASON_USER_DESC: {
913*aca3beaaSApple OSS Distributions 		i = 0;
914*aca3beaaSApple OSS Distributions 
915*aca3beaaSApple OSS Distributions 		_STRINGTYPE("exit_reason_user_description");
916*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "exit_reason_user_description");
917*aca3beaaSApple OSS Distributions 		break;
918*aca3beaaSApple OSS Distributions 	}
919*aca3beaaSApple OSS Distributions 
920*aca3beaaSApple OSS Distributions 	case EXIT_REASON_USER_PAYLOAD: {
921*aca3beaaSApple OSS Distributions 		i = 0;
922*aca3beaaSApple OSS Distributions 
923*aca3beaaSApple OSS Distributions 		setup_subtype_array_description(&subtypes[i++], KC_ST_UINT8, 0, EXIT_REASON_PAYLOAD_MAX_LEN, "exit_reason_user_payload");
924*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "exit_reason_user_payload");
925*aca3beaaSApple OSS Distributions 		break;
926*aca3beaaSApple OSS Distributions 	}
927*aca3beaaSApple OSS Distributions 
928*aca3beaaSApple OSS Distributions 	case EXIT_REASON_CODESIGNING_INFO: {
929*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct codesigning_exit_reason_info, ceri_virt_addr);
930*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct codesigning_exit_reason_info, ceri_file_offset);
931*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct codesigning_exit_reason_info, ceri_pathname, EXIT_REASON_CODESIG_PATH_MAX);
932*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct codesigning_exit_reason_info, ceri_filename, EXIT_REASON_CODESIG_PATH_MAX);
933*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct codesigning_exit_reason_info, ceri_codesig_modtime_secs);
934*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct codesigning_exit_reason_info, ceri_codesig_modtime_nsecs);
935*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct codesigning_exit_reason_info, ceri_page_modtime_secs);
936*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct codesigning_exit_reason_info, ceri_page_modtime_nsecs);
937*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct codesigning_exit_reason_info, ceri_path_truncated);
938*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct codesigning_exit_reason_info, ceri_object_codesigned);
939*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct codesigning_exit_reason_info, ceri_page_codesig_validated);
940*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct codesigning_exit_reason_info, ceri_page_codesig_tainted);
941*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct codesigning_exit_reason_info, ceri_page_codesig_nx);
942*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct codesigning_exit_reason_info, ceri_page_wpmapped);
943*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct codesigning_exit_reason_info, ceri_page_slid);
944*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct codesigning_exit_reason_info, ceri_page_dirty);
945*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT32, struct codesigning_exit_reason_info, ceri_page_shadow_depth);
946*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "exit_reason_codesigning_info");
947*aca3beaaSApple OSS Distributions 		break;
948*aca3beaaSApple OSS Distributions 	}
949*aca3beaaSApple OSS Distributions 
950*aca3beaaSApple OSS Distributions 	case EXIT_REASON_WORKLOOP_ID: {
951*aca3beaaSApple OSS Distributions 		i = 0;
952*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT64, 0, "exit_reason_workloop_id");
953*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "exit_reason_workloop_id");
954*aca3beaaSApple OSS Distributions 		break;
955*aca3beaaSApple OSS Distributions 	}
956*aca3beaaSApple OSS Distributions 
957*aca3beaaSApple OSS Distributions 	case EXIT_REASON_DISPATCH_QUEUE_NO: {
958*aca3beaaSApple OSS Distributions 		i = 0;
959*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT64, 0, "exit_reason_dispatch_queue_no");
960*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "exit_reason_dispatch_queue_no");
961*aca3beaaSApple OSS Distributions 		break;
962*aca3beaaSApple OSS Distributions 	}
963*aca3beaaSApple OSS Distributions 
964*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_ASID: {
965*aca3beaaSApple OSS Distributions 		i = 0;
966*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT32, 0, "ts_asid");
967*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "ts_asid");
968*aca3beaaSApple OSS Distributions 		break;
969*aca3beaaSApple OSS Distributions 	}
970*aca3beaaSApple OSS Distributions 
971*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_PAGE_TABLES: {
972*aca3beaaSApple OSS Distributions 		i = 0;
973*aca3beaaSApple OSS Distributions 		setup_subtype_description(&subtypes[i++], KC_ST_UINT64, 0, "ts_pagetable");
974*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "ts_pagetable");
975*aca3beaaSApple OSS Distributions 		break;
976*aca3beaaSApple OSS Distributions 	}
977*aca3beaaSApple OSS Distributions 
978*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_SYS_SHAREDCACHE_LAYOUT: {
979*aca3beaaSApple OSS Distributions 		i = 0;
980*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct user64_dyld_uuid_info, imageLoadAddress);
981*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_UINT8, struct user64_dyld_uuid_info, imageUUID, 16);
982*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "system_shared_cache_layout");
983*aca3beaaSApple OSS Distributions 		break;
984*aca3beaaSApple OSS Distributions 	}
985*aca3beaaSApple OSS Distributions 
986*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_DISPATCH_QUEUE_LABEL: {
987*aca3beaaSApple OSS Distributions 		i = 0;
988*aca3beaaSApple OSS Distributions 		_STRINGTYPE("dispatch_queue_label");
989*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "dispatch_queue_label");
990*aca3beaaSApple OSS Distributions 		break;
991*aca3beaaSApple OSS Distributions 	}
992*aca3beaaSApple OSS Distributions 
993*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_THREAD_TURNSTILEINFO: {
994*aca3beaaSApple OSS Distributions 		i = 0;
995*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_thread_turnstileinfo_v2, waiter);
996*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_thread_turnstileinfo_v2, turnstile_context);
997*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct stackshot_thread_turnstileinfo_v2, turnstile_priority);
998*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT8, struct stackshot_thread_turnstileinfo_v2, number_of_hops);
999*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_thread_turnstileinfo_v2, turnstile_flags);
1000*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT16, struct stackshot_thread_turnstileinfo_v2, portlabel_id);
1001*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "thread_turnstileinfo");
1002*aca3beaaSApple OSS Distributions 		break;
1003*aca3beaaSApple OSS Distributions 	}
1004*aca3beaaSApple OSS Distributions 
1005*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_PORTLABEL: {
1006*aca3beaaSApple OSS Distributions 		i = 0;
1007*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT16, struct portlabel_info, portlabel_id);
1008*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT16, struct portlabel_info, portlabel_flags);
1009*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT8, struct portlabel_info, portlabel_domain);
1010*aca3beaaSApple OSS Distributions 		subtypes[0].kcs_flags |= KCS_SUBTYPE_FLAGS_MERGE;
1011*aca3beaaSApple OSS Distributions 		subtypes[1].kcs_flags |= KCS_SUBTYPE_FLAGS_MERGE;
1012*aca3beaaSApple OSS Distributions 		subtypes[2].kcs_flags |= KCS_SUBTYPE_FLAGS_MERGE;
1013*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "portlabel_info");
1014*aca3beaaSApple OSS Distributions 		break;
1015*aca3beaaSApple OSS Distributions 	}
1016*aca3beaaSApple OSS Distributions 
1017*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_PORTLABEL_NAME:
1018*aca3beaaSApple OSS Distributions 		i = 0;
1019*aca3beaaSApple OSS Distributions 		_STRINGTYPE("portlabel_name");
1020*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "portlabel_name");
1021*aca3beaaSApple OSS Distributions 		break;
1022*aca3beaaSApple OSS Distributions 
1023*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_TASK_CPU_ARCHITECTURE: {
1024*aca3beaaSApple OSS Distributions 		i = 0;
1025*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT32, struct stackshot_cpu_architecture, cputype);
1026*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_INT32, struct stackshot_cpu_architecture, cpusubtype);
1027*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "task_cpu_architecture");
1028*aca3beaaSApple OSS Distributions 		break;
1029*aca3beaaSApple OSS Distributions 	}
1030*aca3beaaSApple OSS Distributions 
1031*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_LATENCY_INFO: {
1032*aca3beaaSApple OSS Distributions 		i = 0;
1033*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_collection, latency_version);
1034*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_collection, setup_latency);
1035*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_collection, total_task_iteration_latency);
1036*aca3beaaSApple OSS Distributions 		_SUBTYPE_TRUNC(KC_ST_UINT64, struct stackshot_latency_collection, total_terminated_task_iteration_latency, "total_terminated_task_iteration");
1037*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "stackshot_latency_collection");
1038*aca3beaaSApple OSS Distributions 		break;
1039*aca3beaaSApple OSS Distributions 	}
1040*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_LATENCY_INFO_TASK: {
1041*aca3beaaSApple OSS Distributions 		i = 0;
1042*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, task_uniqueid);
1043*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, setup_latency);
1044*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, task_thread_count_loop_latency);
1045*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, task_thread_data_loop_latency);
1046*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, cur_tsnap_latency);
1047*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, pmap_latency);
1048*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, bsd_proc_ids_latency);
1049*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, misc_latency);
1050*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, misc2_latency);
1051*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_task, end_latency);
1052*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "stackshot_latency_task");
1053*aca3beaaSApple OSS Distributions 		break;
1054*aca3beaaSApple OSS Distributions 	}
1055*aca3beaaSApple OSS Distributions 	case STACKSHOT_KCTYPE_LATENCY_INFO_THREAD: {
1056*aca3beaaSApple OSS Distributions 		i = 0;
1057*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, thread_id);
1058*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, cur_thsnap1_latency);
1059*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, dispatch_serial_latency);
1060*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, dispatch_label_latency);
1061*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, cur_thsnap2_latency);
1062*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, thread_name_latency);
1063*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, sur_times_latency);
1064*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, user_stack_latency);
1065*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, kernel_stack_latency);
1066*aca3beaaSApple OSS Distributions 		_SUBTYPE(KC_ST_UINT64, struct stackshot_latency_thread, misc_latency);
1067*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "stackshot_latency_thread");
1068*aca3beaaSApple OSS Distributions 		break;
1069*aca3beaaSApple OSS Distributions 	}
1070*aca3beaaSApple OSS Distributions 
1071*aca3beaaSApple OSS Distributions 	case TASK_CRASHINFO_KERNEL_TRIAGE_INFO_V1: {
1072*aca3beaaSApple OSS Distributions 		i = 0;
1073*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct kernel_triage_info_v1, triage_string1, MAX_TRIAGE_STRING_LEN);
1074*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct kernel_triage_info_v1, triage_string2, MAX_TRIAGE_STRING_LEN);
1075*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct kernel_triage_info_v1, triage_string3, MAX_TRIAGE_STRING_LEN);
1076*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct kernel_triage_info_v1, triage_string4, MAX_TRIAGE_STRING_LEN);
1077*aca3beaaSApple OSS Distributions 		_SUBTYPE_ARRAY(KC_ST_CHAR, struct kernel_triage_info_v1, triage_string5, MAX_TRIAGE_STRING_LEN);
1078*aca3beaaSApple OSS Distributions 		setup_type_definition(retval, type_id, i, "kernel_triage_info_v1");
1079*aca3beaaSApple OSS Distributions 		break;
1080*aca3beaaSApple OSS Distributions 	}
1081*aca3beaaSApple OSS Distributions 
1082*aca3beaaSApple OSS Distributions 	default:
1083*aca3beaaSApple OSS Distributions 		retval = NULL;
1084*aca3beaaSApple OSS Distributions 		break;
1085*aca3beaaSApple OSS Distributions 	}
1086*aca3beaaSApple OSS Distributions 
1087*aca3beaaSApple OSS Distributions 	assert(retval == NULL || (buffer_size > sizeof(struct kcdata_type_definition) +
1088*aca3beaaSApple OSS Distributions 	    (retval->kct_num_elements * sizeof(struct kcdata_subtype_descriptor))));
1089*aca3beaaSApple OSS Distributions 	return retval;
1090*aca3beaaSApple OSS Distributions }
1091*aca3beaaSApple OSS Distributions 
1092*aca3beaaSApple OSS Distributions static void
setup_type_definition(struct kcdata_type_definition * d,uint32_t type,uint32_t num_elems,char * name)1093*aca3beaaSApple OSS Distributions setup_type_definition(struct kcdata_type_definition * d, uint32_t type, uint32_t num_elems, char * name)
1094*aca3beaaSApple OSS Distributions {
1095*aca3beaaSApple OSS Distributions 	d->kct_type_identifier = type;
1096*aca3beaaSApple OSS Distributions 	d->kct_num_elements = num_elems;
1097*aca3beaaSApple OSS Distributions 	memcpy(d->kct_name, name, sizeof(d->kct_name));
1098*aca3beaaSApple OSS Distributions 	d->kct_name[sizeof(d->kct_name) - 1] = '\0';
1099*aca3beaaSApple OSS Distributions }
1100*aca3beaaSApple OSS Distributions 
1101*aca3beaaSApple OSS Distributions static uint32_t
get_kctype_subtype_size(kctype_subtype_t type)1102*aca3beaaSApple OSS Distributions get_kctype_subtype_size(kctype_subtype_t type)
1103*aca3beaaSApple OSS Distributions {
1104*aca3beaaSApple OSS Distributions 	switch (type) {
1105*aca3beaaSApple OSS Distributions 	case KC_ST_CHAR:
1106*aca3beaaSApple OSS Distributions 	case KC_ST_INT8:
1107*aca3beaaSApple OSS Distributions 	case KC_ST_UINT8:
1108*aca3beaaSApple OSS Distributions 		return sizeof(uint8_t);
1109*aca3beaaSApple OSS Distributions 		break;
1110*aca3beaaSApple OSS Distributions 	case KC_ST_INT16:
1111*aca3beaaSApple OSS Distributions 	case KC_ST_UINT16:
1112*aca3beaaSApple OSS Distributions 		return sizeof(uint16_t);
1113*aca3beaaSApple OSS Distributions 		break;
1114*aca3beaaSApple OSS Distributions 	case KC_ST_INT32:
1115*aca3beaaSApple OSS Distributions 	case KC_ST_UINT32:
1116*aca3beaaSApple OSS Distributions 		return sizeof(uint32_t);
1117*aca3beaaSApple OSS Distributions 		break;
1118*aca3beaaSApple OSS Distributions 	case KC_ST_INT64:
1119*aca3beaaSApple OSS Distributions 	case KC_ST_UINT64:
1120*aca3beaaSApple OSS Distributions 		return sizeof(uint64_t);
1121*aca3beaaSApple OSS Distributions 		break;
1122*aca3beaaSApple OSS Distributions 
1123*aca3beaaSApple OSS Distributions 	default:
1124*aca3beaaSApple OSS Distributions 		assert(0);
1125*aca3beaaSApple OSS Distributions 		break;
1126*aca3beaaSApple OSS Distributions 	}
1127*aca3beaaSApple OSS Distributions 	return 0;
1128*aca3beaaSApple OSS Distributions }
1129*aca3beaaSApple OSS Distributions 
1130*aca3beaaSApple OSS Distributions static void
setup_subtype_array_description(kcdata_subtype_descriptor_t desc,kctype_subtype_t type,uint32_t offset,uint32_t count,char * name)1131*aca3beaaSApple OSS Distributions setup_subtype_array_description(
1132*aca3beaaSApple OSS Distributions 	kcdata_subtype_descriptor_t desc, kctype_subtype_t type, uint32_t offset, uint32_t count, char * name)
1133*aca3beaaSApple OSS Distributions {
1134*aca3beaaSApple OSS Distributions 	desc->kcs_flags       = KCS_SUBTYPE_FLAGS_ARRAY;
1135*aca3beaaSApple OSS Distributions 	desc->kcs_elem_type   = type;
1136*aca3beaaSApple OSS Distributions 	desc->kcs_elem_offset = offset;
1137*aca3beaaSApple OSS Distributions 	desc->kcs_elem_size = KCS_SUBTYPE_PACK_SIZE(count, get_kctype_subtype_size(type));
1138*aca3beaaSApple OSS Distributions 	memcpy(desc->kcs_name, name, sizeof(desc->kcs_name));
1139*aca3beaaSApple OSS Distributions 	desc->kcs_name[sizeof(desc->kcs_name) - 1] = '\0';
1140*aca3beaaSApple OSS Distributions }
1141*aca3beaaSApple OSS Distributions 
1142*aca3beaaSApple OSS Distributions static void
setup_subtype_description(kcdata_subtype_descriptor_t desc,kctype_subtype_t type,uint32_t offset,char * name)1143*aca3beaaSApple OSS Distributions setup_subtype_description(kcdata_subtype_descriptor_t desc, kctype_subtype_t type, uint32_t offset, char * name)
1144*aca3beaaSApple OSS Distributions {
1145*aca3beaaSApple OSS Distributions 	desc->kcs_flags       = KCS_SUBTYPE_FLAGS_NONE;
1146*aca3beaaSApple OSS Distributions 	desc->kcs_elem_type   = type;
1147*aca3beaaSApple OSS Distributions 	desc->kcs_elem_offset = offset;
1148*aca3beaaSApple OSS Distributions 	desc->kcs_elem_size = get_kctype_subtype_size(type);
1149*aca3beaaSApple OSS Distributions 	memcpy(desc->kcs_name, name, sizeof(desc->kcs_name));
1150*aca3beaaSApple OSS Distributions 	desc->kcs_name[sizeof(desc->kcs_name) - 1] = '\0';
1151*aca3beaaSApple OSS Distributions }
1152