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