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