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