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