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