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