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