Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 | /* * Copyright (c) 2000-2007, 2015 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. The rights granted to you under the License * may not be used to create, or enable the creation or redistribution of, * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ */ /* * Mach Operating System * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University * All Rights Reserved. * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. * * Carnegie Mellon requests users of this software to return to * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 * * any improvements or extensions that they make and grant Carnegie Mellon * the rights to redistribute these changes. */ /* * Machine-independent task information structures and definitions. * * The definitions in this file are exported to the user. The kernel * will translate its internal data structures to these structures * as appropriate. * */ #ifndef _MACH_TASK_INFO_H_ #define _MACH_TASK_INFO_H_ #include <mach/message.h> #include <mach/machine/vm_types.h> #include <mach/time_value.h> #include <mach/policy.h> #include <mach/vm_statistics.h> /* for vm_extmod_statistics_data_t */ #include <Availability.h> #include <sys/cdefs.h> /* * Generic information structure to allow for expansion. */ typedef natural_t task_flavor_t; typedef integer_t *task_info_t; /* varying array of int */ /* Deprecated, use per structure _data_t's instead */ #define TASK_INFO_MAX (1024) /* maximum array size */ typedef integer_t task_info_data_t[TASK_INFO_MAX]; /* * Currently defined information structures. */ #pragma pack(push, 4) /* Don't use this, use MACH_TASK_BASIC_INFO instead */ #define TASK_BASIC_INFO_32 4 /* basic information */ #define TASK_BASIC2_INFO_32 6 struct task_basic_info_32 { integer_t suspend_count; /* suspend count for task */ natural_t virtual_size; /* virtual memory size (bytes) */ natural_t resident_size; /* resident memory size (bytes) */ time_value_t user_time; /* total user run time for * terminated threads */ time_value_t system_time; /* total system run time for * terminated threads */ policy_t policy; /* default policy for new threads */ }; typedef struct task_basic_info_32 task_basic_info_32_data_t; typedef struct task_basic_info_32 *task_basic_info_32_t; #define TASK_BASIC_INFO_32_COUNT \ (sizeof(task_basic_info_32_data_t) / sizeof(natural_t)) /* Don't use this, use MACH_TASK_BASIC_INFO instead */ struct task_basic_info_64 { integer_t suspend_count; /* suspend count for task */ #if defined(__arm__) || defined(__arm64__) #if defined(KERNEL) /* Compatibility with old 32-bit mach_vm_size_t */ natural_t virtual_size; /* virtual memory size (bytes) */ natural_t resident_size; /* resident memory size (bytes) */ #else mach_vm_size_t virtual_size; /* virtual memory size (bytes) */ mach_vm_size_t resident_size; /* resident memory size (bytes) */ #endif #else /* defined(__arm__) || defined(__arm64__) */ mach_vm_size_t virtual_size; /* virtual memory size (bytes) */ mach_vm_size_t resident_size; /* resident memory size (bytes) */ #endif /* defined(__arm__) || defined(__arm64__) */ time_value_t user_time; /* total user run time for * terminated threads */ time_value_t system_time; /* total system run time for * terminated threads */ policy_t policy; /* default policy for new threads */ }; typedef struct task_basic_info_64 task_basic_info_64_data_t; typedef struct task_basic_info_64 *task_basic_info_64_t; #if defined(__arm__) || defined(__arm64__) #if defined(KERNEL) /* * Backwards-compatibility for old mach_vm*_t types. * The kernel knows about old and new, and if you are compiled * to run on an earlier iOS version, you interact with the old * (narrow) version. If you are compiled for a newer OS * version, however, you are mapped to the wide version. */ #define TASK_BASIC_INFO_64 5 #define TASK_BASIC_INFO_64_COUNT \ (sizeof(task_basic_info_64_data_t) / sizeof(natural_t)) #elif defined(__arm__) && defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0) /* * Note: arm64 can't use the old flavor. If you somehow manage to, * you can cope with the nonsense data yourself. */ #define TASK_BASIC_INFO_64 5 #define TASK_BASIC_INFO_64_COUNT \ (sizeof(task_basic_info_64_data_t) / sizeof(natural_t)) #else #define TASK_BASIC_INFO_64 TASK_BASIC_INFO_64_2 #define TASK_BASIC_INFO_64_COUNT TASK_BASIC_INFO_64_2_COUNT #endif #else /* defined(__arm__) || defined(__arm64__) */ #define TASK_BASIC_INFO_64 5 /* 64-bit capable basic info */ #define TASK_BASIC_INFO_64_COUNT \ (sizeof(task_basic_info_64_data_t) / sizeof(natural_t)) #endif /* localized structure - cannot be safely passed between tasks of differing sizes */ /* Don't use this, use MACH_TASK_BASIC_INFO instead */ struct task_basic_info { integer_t suspend_count; /* suspend count for task */ vm_size_t virtual_size; /* virtual memory size (bytes) */ vm_size_t resident_size; /* resident memory size (bytes) */ time_value_t user_time; /* total user run time for * terminated threads */ time_value_t system_time; /* total system run time for * terminated threads */ policy_t policy; /* default policy for new threads */ }; typedef struct task_basic_info task_basic_info_data_t; typedef struct task_basic_info *task_basic_info_t; #define TASK_BASIC_INFO_COUNT \ (sizeof(task_basic_info_data_t) / sizeof(natural_t)) #if !defined(__LP64__) #define TASK_BASIC_INFO TASK_BASIC_INFO_32 #else #define TASK_BASIC_INFO TASK_BASIC_INFO_64 #endif #define TASK_EVENTS_INFO 2 /* various event counts */ struct task_events_info { integer_t faults; /* number of page faults */ integer_t pageins; /* number of actual pageins */ integer_t cow_faults; /* number of copy-on-write faults */ integer_t messages_sent; /* number of messages sent */ integer_t messages_received; /* number of messages received */ integer_t syscalls_mach; /* number of mach system calls */ integer_t syscalls_unix; /* number of unix system calls */ integer_t csw; /* number of context switches */ }; typedef struct task_events_info task_events_info_data_t; typedef struct task_events_info *task_events_info_t; #define TASK_EVENTS_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(task_events_info_data_t) / sizeof(natural_t))) #define TASK_THREAD_TIMES_INFO 3 /* total times for live threads - * only accurate if suspended */ struct task_thread_times_info { time_value_t user_time; /* total user run time for * live threads */ time_value_t system_time; /* total system run time for * live threads */ }; typedef struct task_thread_times_info task_thread_times_info_data_t; typedef struct task_thread_times_info *task_thread_times_info_t; #define TASK_THREAD_TIMES_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(task_thread_times_info_data_t) / sizeof(natural_t))) #define TASK_ABSOLUTETIME_INFO 1 struct task_absolutetime_info { uint64_t total_user; uint64_t total_system; uint64_t threads_user; /* existing threads only */ uint64_t threads_system; }; typedef struct task_absolutetime_info task_absolutetime_info_data_t; typedef struct task_absolutetime_info *task_absolutetime_info_t; #define TASK_ABSOLUTETIME_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof (task_absolutetime_info_data_t) / sizeof (natural_t))) #define TASK_KERNELMEMORY_INFO 7 struct task_kernelmemory_info { uint64_t total_palloc; /* private kernel mem alloc'ed */ uint64_t total_pfree; /* private kernel mem freed */ uint64_t total_salloc; /* shared kernel mem alloc'ed */ uint64_t total_sfree; /* shared kernel mem freed */ }; typedef struct task_kernelmemory_info task_kernelmemory_info_data_t; typedef struct task_kernelmemory_info *task_kernelmemory_info_t; #define TASK_KERNELMEMORY_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof (task_kernelmemory_info_data_t) / sizeof (natural_t))) #define TASK_SECURITY_TOKEN 13 #define TASK_SECURITY_TOKEN_COUNT ((mach_msg_type_number_t) \ (sizeof(security_token_t) / sizeof(natural_t))) #define TASK_AUDIT_TOKEN 15 #define TASK_AUDIT_TOKEN_COUNT \ (sizeof(audit_token_t) / sizeof(natural_t)) #define TASK_AFFINITY_TAG_INFO 16 /* This is experimental. */ struct task_affinity_tag_info { integer_t set_count; integer_t min; integer_t max; integer_t task_count; }; typedef struct task_affinity_tag_info task_affinity_tag_info_data_t; typedef struct task_affinity_tag_info *task_affinity_tag_info_t; #define TASK_AFFINITY_TAG_INFO_COUNT \ (sizeof(task_affinity_tag_info_data_t) / sizeof(natural_t)) #define TASK_DYLD_INFO 17 struct task_dyld_info { mach_vm_address_t all_image_info_addr; mach_vm_size_t all_image_info_size; integer_t all_image_info_format; }; typedef struct task_dyld_info task_dyld_info_data_t; typedef struct task_dyld_info *task_dyld_info_t; #define TASK_DYLD_INFO_COUNT \ (sizeof(task_dyld_info_data_t) / sizeof(natural_t)) #define TASK_DYLD_ALL_IMAGE_INFO_32 0 /* format value */ #define TASK_DYLD_ALL_IMAGE_INFO_64 1 /* format value */ #if defined(__arm__) || defined(__arm64__) /* Don't use this, use MACH_TASK_BASIC_INFO instead */ /* Compatibility for old 32-bit mach_vm_*_t */ #define TASK_BASIC_INFO_64_2 18 /* 64-bit capable basic info */ struct task_basic_info_64_2 { integer_t suspend_count; /* suspend count for task */ mach_vm_size_t virtual_size; /* virtual memory size (bytes) */ mach_vm_size_t resident_size; /* resident memory size (bytes) */ time_value_t user_time; /* total user run time for * terminated threads */ time_value_t system_time; /* total system run time for * terminated threads */ policy_t policy; /* default policy for new threads */ }; typedef struct task_basic_info_64_2 task_basic_info_64_2_data_t; typedef struct task_basic_info_64_2 *task_basic_info_64_2_t; #define TASK_BASIC_INFO_64_2_COUNT \ (sizeof(task_basic_info_64_2_data_t) / sizeof(natural_t)) #endif #define TASK_EXTMOD_INFO 19 struct task_extmod_info { unsigned char task_uuid[16]; vm_extmod_statistics_data_t extmod_statistics; }; typedef struct task_extmod_info task_extmod_info_data_t; typedef struct task_extmod_info *task_extmod_info_t; #define TASK_EXTMOD_INFO_COUNT \ (sizeof(task_extmod_info_data_t) / sizeof(natural_t)) #define MACH_TASK_BASIC_INFO 20 /* always 64-bit basic info */ struct mach_task_basic_info { mach_vm_size_t virtual_size; /* virtual memory size (bytes) */ mach_vm_size_t resident_size; /* resident memory size (bytes) */ mach_vm_size_t resident_size_max; /* maximum resident memory size (bytes) */ time_value_t user_time; /* total user run time for * terminated threads */ time_value_t system_time; /* total system run time for * terminated threads */ policy_t policy; /* default policy for new threads */ integer_t suspend_count; /* suspend count for task */ }; typedef struct mach_task_basic_info mach_task_basic_info_data_t; typedef struct mach_task_basic_info *mach_task_basic_info_t; #define MACH_TASK_BASIC_INFO_COUNT \ (sizeof(mach_task_basic_info_data_t) / sizeof(natural_t)) #define TASK_POWER_INFO 21 struct task_power_info { uint64_t total_user; uint64_t total_system; uint64_t task_interrupt_wakeups; uint64_t task_platform_idle_wakeups; uint64_t task_timer_wakeups_bin_1; uint64_t task_timer_wakeups_bin_2; }; typedef struct task_power_info task_power_info_data_t; typedef struct task_power_info *task_power_info_t; #define TASK_POWER_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof (task_power_info_data_t) / sizeof (natural_t))) #define TASK_VM_INFO 22 #define TASK_VM_INFO_PURGEABLE 23 struct task_vm_info { mach_vm_size_t virtual_size; /* virtual memory size (bytes) */ integer_t region_count; /* number of memory regions */ integer_t page_size; mach_vm_size_t resident_size; /* resident memory size (bytes) */ mach_vm_size_t resident_size_peak; /* peak resident size (bytes) */ mach_vm_size_t device; mach_vm_size_t device_peak; mach_vm_size_t internal; mach_vm_size_t internal_peak; mach_vm_size_t external; mach_vm_size_t external_peak; mach_vm_size_t reusable; mach_vm_size_t reusable_peak; mach_vm_size_t purgeable_volatile_pmap; mach_vm_size_t purgeable_volatile_resident; mach_vm_size_t purgeable_volatile_virtual; mach_vm_size_t compressed; mach_vm_size_t compressed_peak; mach_vm_size_t compressed_lifetime; /* added for rev1 */ mach_vm_size_t phys_footprint; /* added for rev2 */ mach_vm_address_t min_address; mach_vm_address_t max_address; /* added for rev3 */ int64_t ledger_phys_footprint_peak; int64_t ledger_purgeable_nonvolatile; int64_t ledger_purgeable_novolatile_compressed; int64_t ledger_purgeable_volatile; int64_t ledger_purgeable_volatile_compressed; int64_t ledger_tag_network_nonvolatile; int64_t ledger_tag_network_nonvolatile_compressed; int64_t ledger_tag_network_volatile; int64_t ledger_tag_network_volatile_compressed; int64_t ledger_tag_media_footprint; int64_t ledger_tag_media_footprint_compressed; int64_t ledger_tag_media_nofootprint; int64_t ledger_tag_media_nofootprint_compressed; int64_t ledger_tag_graphics_footprint; int64_t ledger_tag_graphics_footprint_compressed; int64_t ledger_tag_graphics_nofootprint; int64_t ledger_tag_graphics_nofootprint_compressed; int64_t ledger_tag_neural_footprint; int64_t ledger_tag_neural_footprint_compressed; int64_t ledger_tag_neural_nofootprint; int64_t ledger_tag_neural_nofootprint_compressed; /* added for rev4 */ uint64_t limit_bytes_remaining; /* added for rev5 */ integer_t decompressions; /* added for rev6 */ int64_t ledger_swapins; /* added for rev7 */ int64_t ledger_tag_neural_nofootprint_total; int64_t ledger_tag_neural_nofootprint_peak; }; typedef struct task_vm_info task_vm_info_data_t; typedef struct task_vm_info *task_vm_info_t; #define TASK_VM_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof (task_vm_info_data_t) / sizeof (natural_t))) /* * The capacity of task_info_t in mach_types.defs also needs to be adjusted */ #define TASK_VM_INFO_REV7_COUNT TASK_VM_INFO_COUNT #define TASK_VM_INFO_REV6_COUNT /* doesn't include neural total and peak */ \ ((mach_msg_type_number_t) (TASK_VM_INFO_REV7_COUNT - 4)) #define TASK_VM_INFO_REV5_COUNT /* doesn't include ledger swapins */ \ ((mach_msg_type_number_t) (TASK_VM_INFO_REV6_COUNT - 2)) #define TASK_VM_INFO_REV4_COUNT /* doesn't include decompressions */ \ ((mach_msg_type_number_t) (TASK_VM_INFO_REV5_COUNT - 1)) #define TASK_VM_INFO_REV3_COUNT /* doesn't include limit bytes */ \ ((mach_msg_type_number_t) (TASK_VM_INFO_REV4_COUNT - 2)) #define TASK_VM_INFO_REV2_COUNT /* doesn't include extra ledgers info */ \ ((mach_msg_type_number_t) (TASK_VM_INFO_REV3_COUNT - 42)) #define TASK_VM_INFO_REV1_COUNT /* doesn't include min and max address */ \ ((mach_msg_type_number_t) (TASK_VM_INFO_REV2_COUNT - 4)) #define TASK_VM_INFO_REV0_COUNT /* doesn't include phys_footprint */ \ ((mach_msg_type_number_t) (TASK_VM_INFO_REV1_COUNT - 2)) typedef struct vm_purgeable_info task_purgable_info_t; #define TASK_TRACE_MEMORY_INFO 24 /* no longer supported */ struct task_trace_memory_info { uint64_t user_memory_address; /* address of start of trace memory buffer */ uint64_t buffer_size; /* size of buffer in bytes */ uint64_t mailbox_array_size; /* size of mailbox area in bytes */ }; typedef struct task_trace_memory_info task_trace_memory_info_data_t; typedef struct task_trace_memory_info * task_trace_memory_info_t; #define TASK_TRACE_MEMORY_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(task_trace_memory_info_data_t) / sizeof(natural_t))) #define TASK_WAIT_STATE_INFO 25 /* deprecated. */ struct task_wait_state_info { uint64_t total_wait_state_time; /* Time that all threads past and present have been in a wait state */ uint64_t total_wait_sfi_state_time; /* Time that threads have been in SFI wait (should be a subset of total wait state time */ uint32_t _reserved[4]; }; typedef struct task_wait_state_info task_wait_state_info_data_t; typedef struct task_wait_state_info * task_wait_state_info_t; #define TASK_WAIT_STATE_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(task_wait_state_info_data_t) / sizeof(natural_t))) #define TASK_POWER_INFO_V2 26 typedef struct { uint64_t task_gpu_utilisation; uint64_t task_gpu_stat_reserved0; uint64_t task_gpu_stat_reserved1; uint64_t task_gpu_stat_reserved2; } gpu_energy_data; typedef gpu_energy_data *gpu_energy_data_t; struct task_power_info_v2 { task_power_info_data_t cpu_energy; gpu_energy_data gpu_energy; #if defined(__arm__) || defined(__arm64__) uint64_t task_energy; #endif /* defined(__arm__) || defined(__arm64__) */ uint64_t task_ptime; uint64_t task_pset_switches; }; typedef struct task_power_info_v2 task_power_info_v2_data_t; typedef struct task_power_info_v2 *task_power_info_v2_t; #define TASK_POWER_INFO_V2_COUNT_OLD \ ((mach_msg_type_number_t) (sizeof (task_power_info_v2_data_t) - sizeof(uint64_t)*2) / sizeof (natural_t)) #define TASK_POWER_INFO_V2_COUNT \ ((mach_msg_type_number_t) (sizeof (task_power_info_v2_data_t) / sizeof (natural_t))) #define TASK_VM_INFO_PURGEABLE_ACCOUNT 27 /* Used for xnu purgeable vm unit tests */ #ifdef PRIVATE struct pvm_account_info { uint64_t pvm_volatile_count; /* Number of volatile bytes associated with a task */ uint64_t pvm_volatile_compressed_count; /* Number of volatile compressed bytes associated with a task */ uint64_t pvm_nonvolatile_count; /* Number of nonvolatile bytes associated with a task */ uint64_t pvm_nonvolatile_compressed_count; /* Number of nonvolatile compressed bytes associated with a task */ }; typedef struct pvm_account_info *pvm_account_info_t; typedef struct pvm_account_info pvm_account_info_data_t; #define PVM_ACCOUNT_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof (pvm_account_info_data_t) / sizeof (natural_t))) #endif /* PRIVATE */ #define TASK_FLAGS_INFO 28 /* return t_flags field */ struct task_flags_info { uint32_t flags; /* task flags */ }; typedef struct task_flags_info task_flags_info_data_t; typedef struct task_flags_info * task_flags_info_t; #define TASK_FLAGS_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(task_flags_info_data_t) / sizeof (natural_t))) #define TF_LP64 0x00000001 /* task has 64-bit addressing */ #define TF_64B_DATA 0x00000002 /* task has 64-bit data registers */ #define TASK_DEBUG_INFO_INTERNAL 29 /* Used for kernel internal development tests. */ #ifdef PRIVATE struct task_debug_info_internal { integer_t suspend_count; uint64_t ipc_space_size; }; typedef struct task_debug_info_internal *task_debug_info_internal_t; typedef struct task_debug_info_internal task_debug_info_internal_data_t; #define TASK_DEBUG_INFO_INTERNAL_COUNT ((mach_msg_type_number_t) \ (sizeof (task_debug_info_internal_data_t) / sizeof(natural_t))) #endif /* PRIVATE */ #ifdef PRIVATE typedef struct task_suspend_stats_s { uint64_t tss_last_start; /* mach_absolute_time of beginning of last suspension*/ uint64_t tss_last_end; /* mach_absolute_time of end of last suspension */ uint64_t tss_count; /* number of times this task has been suspended */ uint64_t tss_duration; /* sum(mach_absolute_time) of time spend suspended */ } *task_suspend_stats_t; typedef struct task_suspend_stats_s task_suspend_stats_data_t; #define TASK_SUSPEND_STATS_INFO 30 #define TASK_SUSPEND_STATS_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(task_suspend_stats_data_t) / sizeof(natural_t))) typedef struct task_suspend_source_s { uint64_t tss_time; /* mach_absolute_time of suspend */ uint64_t tss_tid; /* tid of suspending thread */ int tss_pid; /* pid of suspending task */ char tss_procname[65]; /* name of suspending task */ uint8_t tss_padding[3]; /* pad to multiple of natural_t */ } *task_suspend_source_t; #define TASK_SUSPEND_SOURCES_MAX 4 typedef struct task_suspend_source_s task_suspend_source_array_t[TASK_SUSPEND_SOURCES_MAX]; typedef struct task_suspend_source_s task_suspend_source_data_t; #define TASK_SUSPEND_SOURCES_INFO 31 #define TASK_SUSPEND_SOURCES_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(task_suspend_source_data_t) * TASK_SUSPEND_SOURCES_MAX / sizeof(natural_t))) #endif /* PRIVATE */ #define TASK_SECURITY_CONFIG_INFO 32 /* Runtime security mitigations configuration for the task */ struct task_security_config_info { uint32_t config; /* Configuration bitmask */ }; typedef struct task_security_config_info * task_security_config_info_t; #define TASK_SECURITY_CONFIG_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(struct task_security_config_info) / sizeof(natural_t))) #define TASK_IPC_SPACE_POLICY_INFO 33 /* Runtime security mitigations configuration for the task */ struct task_ipc_space_policy_info { uint32_t space_policy; /* Configuration bitmask */ }; typedef struct task_ipc_space_policy_info * task_ipc_space_policy_info_t; #define TASK_IPC_SPACE_POLICY_INFO_COUNT ((mach_msg_type_number_t) \ (sizeof(struct task_ipc_space_policy_info) / sizeof(natural_t))) /* * Type to control EXC_GUARD delivery options for a task * via task_get/set_exc_guard_behavior interface(s). */ typedef uint32_t task_exc_guard_behavior_t; /* EXC_GUARD optional delivery settings on a per-task basis */ #define TASK_EXC_GUARD_NONE 0x00 #define TASK_EXC_GUARD_VM_DELIVER 0x01 /* Deliver virtual memory EXC_GUARD exceptions */ #define TASK_EXC_GUARD_VM_ONCE 0x02 /* Deliver them only once */ #define TASK_EXC_GUARD_VM_CORPSE 0x04 /* Deliver them via a forked corpse */ #define TASK_EXC_GUARD_VM_FATAL 0x08 /* Virtual Memory EXC_GUARD delivery is fatal */ #define TASK_EXC_GUARD_VM_ALL 0x0f #define TASK_EXC_GUARD_MP_DELIVER 0x10 /* Deliver mach port EXC_GUARD exceptions */ #define TASK_EXC_GUARD_MP_ONCE 0x20 /* Deliver them only once */ #define TASK_EXC_GUARD_MP_CORPSE 0x40 /* Deliver them via a forked corpse */ #define TASK_EXC_GUARD_MP_FATAL 0x80 /* mach port EXC_GUARD delivery is fatal */ #define TASK_EXC_GUARD_MP_ALL 0xf0 #define TASK_EXC_GUARD_ALL 0xff /* All optional deliver settings */ #ifdef PRIVATE /* * Experimental mode of setting default guard behavior for non-Apple processes * The default for 3rd party guards is shifted up 8 bits - but otherwise the same values as above. */ #define TASK_EXC_GUARD_THIRD_PARTY_DEFAULT_SHIFT 0x8 /* 3rd party default shifted up in boot-arg */ #define TASK_EXC_GUARD_HONOR_NAMED_DEFAULTS 0x10000 /* Honor the by-process-name defaults */ #endif /* * Type to control corpse forking options for a task * via task_get/set_corpse_forking_behavior interface(s). */ typedef uint32_t task_corpse_forking_behavior_t; #define TASK_CORPSE_FORKING_DISABLED_MEM_DIAG 0x01 /* Disable corpse forking because the task is running under a diagnostic tool */ #ifdef XNU_KERNEL_PRIVATE __options_closed_decl(task_control_port_options_t, uint8_t, { TASK_CONTROL_PORT_OPTIONS_INVALID = 0x00000000, TASK_CONTROL_PORT_OPTIONS_NONE = 0x00000001, TASK_CONTROL_PORT_IMMOVABLE_HARD = 0x00000002, TASK_CONTROL_PORT_IMMOVABLE_MASK = ( TASK_CONTROL_PORT_IMMOVABLE_HARD), }); #endif /* XNU_KERNEL_PRIVATE */ /* * Obsolete interfaces. */ #define TASK_SCHED_TIMESHARE_INFO 10 #define TASK_SCHED_RR_INFO 11 #define TASK_SCHED_FIFO_INFO 12 #define TASK_SCHED_INFO 14 #pragma pack(pop) #endif /* _MACH_TASK_INFO_H_ */ |