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