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