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