@@ -30,6 +30,13 @@ pub type natural_t = u32;
3030pub type mach_msg_type_number_t = natural_t ;
3131pub type kern_return_t = :: c_int ;
3232pub type uuid_t = [ u8 ; 16 ] ;
33+ pub type task_info_t = * mut integer_t ;
34+ pub type host_info_t = * mut integer_t ;
35+ pub type task_flavor_t = natural_t ;
36+ pub type rusage_info_t = * mut :: c_void ;
37+ pub type vm_offset_t = :: uintptr_t ;
38+ pub type vm_size_t = :: uintptr_t ;
39+ pub type vm_address_t = vm_offset_t ;
3340
3441pub type posix_spawnattr_t = * mut :: c_void ;
3542pub type posix_spawn_file_actions_t = * mut :: c_void ;
@@ -70,6 +77,11 @@ pub type processor_set_load_info_t = *mut processor_set_load_info;
7077pub type processor_info_t = * mut integer_t ;
7178pub type processor_info_array_t = * mut integer_t ;
7279
80+ pub type mach_task_basic_info_data_t = mach_task_basic_info ;
81+ pub type mach_task_basic_info_t = * mut mach_task_basic_info ;
82+ pub type task_thread_times_info_data_t = task_thread_times_info ;
83+ pub type task_thread_times_info_t = * mut task_thread_times_info ;
84+
7385pub type thread_info_t = * mut integer_t ;
7486pub type thread_basic_info_t = * mut thread_basic_info ;
7587pub type thread_basic_info_data_t = thread_basic_info ;
@@ -112,7 +124,6 @@ pub type CCCryptorStatus = i32;
112124pub type CCRNGStatus = :: CCCryptorStatus ;
113125
114126deprecated_mach ! {
115- pub type vm_size_t = :: uintptr_t;
116127 pub type mach_timebase_info_data_t = mach_timebase_info;
117128}
118129
@@ -800,6 +811,137 @@ s! {
800811 pub purges: natural_t,
801812 pub speculative_count: natural_t,
802813 }
814+
815+ pub struct task_thread_times_info {
816+ pub user_time: time_value_t,
817+ pub system_time: time_value_t,
818+ }
819+
820+ pub struct rusage_info_v0 {
821+ pub ri_uuid: [ u8 ; 16 ] ,
822+ pub ri_user_time: u64 ,
823+ pub ri_system_time: u64 ,
824+ pub ri_pkg_idle_wkups: u64 ,
825+ pub ri_interrupt_wkups: u64 ,
826+ pub ri_pageins: u64 ,
827+ pub ri_wired_size: u64 ,
828+ pub ri_resident_size: u64 ,
829+ pub ri_phys_footprint: u64 ,
830+ pub ri_proc_start_abstime: u64 ,
831+ pub ri_proc_exit_abstime: u64 ,
832+ }
833+
834+ pub struct rusage_info_v1 {
835+ pub ri_uuid: [ u8 ; 16 ] ,
836+ pub ri_user_time: u64 ,
837+ pub ri_system_time: u64 ,
838+ pub ri_pkg_idle_wkups: u64 ,
839+ pub ri_interrupt_wkups: u64 ,
840+ pub ri_pageins: u64 ,
841+ pub ri_wired_size: u64 ,
842+ pub ri_resident_size: u64 ,
843+ pub ri_phys_footprint: u64 ,
844+ pub ri_proc_start_abstime: u64 ,
845+ pub ri_proc_exit_abstime: u64 ,
846+ pub ri_child_user_time: u64 ,
847+ pub ri_child_system_time: u64 ,
848+ pub ri_child_pkg_idle_wkups: u64 ,
849+ pub ri_child_interrupt_wkups: u64 ,
850+ pub ri_child_pageins: u64 ,
851+ pub ri_child_elapsed_abstime: u64 ,
852+ }
853+
854+ pub struct rusage_info_v2 {
855+ pub ri_uuid: [ u8 ; 16 ] ,
856+ pub ri_user_time: u64 ,
857+ pub ri_system_time: u64 ,
858+ pub ri_pkg_idle_wkups: u64 ,
859+ pub ri_interrupt_wkups: u64 ,
860+ pub ri_pageins: u64 ,
861+ pub ri_wired_size: u64 ,
862+ pub ri_resident_size: u64 ,
863+ pub ri_phys_footprint: u64 ,
864+ pub ri_proc_start_abstime: u64 ,
865+ pub ri_proc_exit_abstime: u64 ,
866+ pub ri_child_user_time: u64 ,
867+ pub ri_child_system_time: u64 ,
868+ pub ri_child_pkg_idle_wkups: u64 ,
869+ pub ri_child_interrupt_wkups: u64 ,
870+ pub ri_child_pageins: u64 ,
871+ pub ri_child_elapsed_abstime: u64 ,
872+ pub ri_diskio_bytesread: u64 ,
873+ pub ri_diskio_byteswritten: u64 ,
874+ }
875+
876+ pub struct rusage_info_v3 {
877+ pub ri_uuid: [ u8 ; 16 ] ,
878+ pub ri_user_time: u64 ,
879+ pub ri_system_time: u64 ,
880+ pub ri_pkg_idle_wkups: u64 ,
881+ pub ri_interrupt_wkups: u64 ,
882+ pub ri_pageins: u64 ,
883+ pub ri_wired_size: u64 ,
884+ pub ri_resident_size: u64 ,
885+ pub ri_phys_footprint: u64 ,
886+ pub ri_proc_start_abstime: u64 ,
887+ pub ri_proc_exit_abstime: u64 ,
888+ pub ri_child_user_time: u64 ,
889+ pub ri_child_system_time: u64 ,
890+ pub ri_child_pkg_idle_wkups: u64 ,
891+ pub ri_child_interrupt_wkups: u64 ,
892+ pub ri_child_pageins: u64 ,
893+ pub ri_child_elapsed_abstime: u64 ,
894+ pub ri_diskio_bytesread: u64 ,
895+ pub ri_diskio_byteswritten: u64 ,
896+ pub ri_cpu_time_qos_default: u64 ,
897+ pub ri_cpu_time_qos_maintenance: u64 ,
898+ pub ri_cpu_time_qos_background: u64 ,
899+ pub ri_cpu_time_qos_utility: u64 ,
900+ pub ri_cpu_time_qos_legacy: u64 ,
901+ pub ri_cpu_time_qos_user_initiated: u64 ,
902+ pub ri_cpu_time_qos_user_interactive: u64 ,
903+ pub ri_billed_system_time: u64 ,
904+ pub ri_serviced_system_time: u64 ,
905+ }
906+
907+ pub struct rusage_info_v4 {
908+ pub ri_uuid: [ u8 ; 16 ] ,
909+ pub ri_user_time: u64 ,
910+ pub ri_system_time: u64 ,
911+ pub ri_pkg_idle_wkups: u64 ,
912+ pub ri_interrupt_wkups: u64 ,
913+ pub ri_pageins: u64 ,
914+ pub ri_wired_size: u64 ,
915+ pub ri_resident_size: u64 ,
916+ pub ri_phys_footprint: u64 ,
917+ pub ri_proc_start_abstime: u64 ,
918+ pub ri_proc_exit_abstime: u64 ,
919+ pub ri_child_user_time: u64 ,
920+ pub ri_child_system_time: u64 ,
921+ pub ri_child_pkg_idle_wkups: u64 ,
922+ pub ri_child_interrupt_wkups: u64 ,
923+ pub ri_child_pageins: u64 ,
924+ pub ri_child_elapsed_abstime: u64 ,
925+ pub ri_diskio_bytesread: u64 ,
926+ pub ri_diskio_byteswritten: u64 ,
927+ pub ri_cpu_time_qos_default: u64 ,
928+ pub ri_cpu_time_qos_maintenance: u64 ,
929+ pub ri_cpu_time_qos_background: u64 ,
930+ pub ri_cpu_time_qos_utility: u64 ,
931+ pub ri_cpu_time_qos_legacy: u64 ,
932+ pub ri_cpu_time_qos_user_initiated: u64 ,
933+ pub ri_cpu_time_qos_user_interactive: u64 ,
934+ pub ri_billed_system_time: u64 ,
935+ pub ri_serviced_system_time: u64 ,
936+ pub ri_logical_writes: u64 ,
937+ pub ri_lifetime_max_phys_footprint: u64 ,
938+ pub ri_instructions: u64 ,
939+ pub ri_cycles: u64 ,
940+ pub ri_billed_energy: u64 ,
941+ pub ri_serviced_energy: u64 ,
942+ pub ri_interval_max_phys_footprint: u64 ,
943+ pub ri_runnable_time: u64 ,
944+ }
803945}
804946
805947s_no_extra_traits ! {
@@ -1058,6 +1200,17 @@ s_no_extra_traits! {
10581200 pub internal_page_count: natural_t,
10591201 pub total_uncompressed_pages_in_compressor: u64 ,
10601202 }
1203+
1204+ #[ cfg_attr( libc_packedN, repr( packed( 4 ) ) ) ]
1205+ pub struct mach_task_basic_info {
1206+ pub virtual_size: mach_vm_size_t,
1207+ pub resident_size: mach_vm_size_t,
1208+ pub resident_size_max: mach_vm_size_t,
1209+ pub user_time: time_value_t,
1210+ pub system_time: time_value_t,
1211+ pub policy: :: policy_t,
1212+ pub suspend_count: integer_t,
1213+ }
10611214}
10621215
10631216impl siginfo_t {
@@ -2257,6 +2410,57 @@ cfg_if! {
22572410 total_uncompressed. hash( state) ;
22582411 }
22592412 }
2413+
2414+ impl PartialEq for mach_task_basic_info {
2415+ fn eq( & self , other: & mach_task_basic_info) -> bool {
2416+ self . virtual_size == other. virtual_size
2417+ && self . resident_size == other. resident_size
2418+ && self . resident_size_max == other. resident_size_max
2419+ && self . user_time == other. user_time
2420+ && self . system_time == other. system_time
2421+ && self . policy == other. policy
2422+ && self . suspend_count == other. suspend_count
2423+ }
2424+ }
2425+ impl Eq for mach_task_basic_info { }
2426+ impl :: fmt:: Debug for mach_task_basic_info {
2427+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
2428+ let virtual_size = self . virtual_size;
2429+ let resident_size = self . resident_size;
2430+ let resident_size_max = self . resident_size_max;
2431+ let user_time = self . user_time;
2432+ let system_time = self . system_time;
2433+ let policy = self . policy;
2434+ let suspend_count = self . suspend_count;
2435+ f. debug_struct( "mach_task_basic_info" )
2436+ . field( "virtual_size" , & virtual_size)
2437+ . field( "resident_size" , & resident_size)
2438+ . field( "resident_size_max" , & resident_size_max)
2439+ . field( "user_time" , & user_time)
2440+ . field( "system_time" , & system_time)
2441+ . field( "policy" , & policy)
2442+ . field( "suspend_count" , & suspend_count)
2443+ . finish( )
2444+ }
2445+ }
2446+ impl :: hash:: Hash for mach_task_basic_info {
2447+ fn hash<H : :: hash:: Hasher >( & self , state: & mut H ) {
2448+ let virtual_size = self . virtual_size;
2449+ let resident_size = self . resident_size;
2450+ let resident_size_max = self . resident_size_max;
2451+ let user_time = self . user_time;
2452+ let system_time = self . system_time;
2453+ let policy = self . policy;
2454+ let suspend_count = self . suspend_count;
2455+ virtual_size. hash( state) ;
2456+ resident_size. hash( state) ;
2457+ resident_size_max. hash( state) ;
2458+ user_time. hash( state) ;
2459+ system_time. hash( state) ;
2460+ policy. hash( state) ;
2461+ suspend_count. hash( state) ;
2462+ }
2463+ }
22602464 }
22612465}
22622466
@@ -4323,6 +4527,19 @@ pub const VM_PAGE_QUERY_PAGE_CS_VALIDATED: i32 = 0x100;
43234527pub const VM_PAGE_QUERY_PAGE_CS_TAINTED : i32 = 0x200 ;
43244528pub const VM_PAGE_QUERY_PAGE_CS_NX : i32 = 0x400 ;
43254529
4530+ // mach/task_info.h
4531+ pub const TASK_THREAD_TIMES_INFO : u32 = 3 ;
4532+ pub const HOST_CPU_LOAD_INFO_COUNT : u32 = 4 ;
4533+ pub const MACH_TASK_BASIC_INFO : u32 = 20 ;
4534+
4535+ pub const MACH_PORT_NULL : i32 = 0 ;
4536+
4537+ pub const RUSAGE_INFO_V0 : :: c_int = 0 ;
4538+ pub const RUSAGE_INFO_V1 : :: c_int = 1 ;
4539+ pub const RUSAGE_INFO_V2 : :: c_int = 2 ;
4540+ pub const RUSAGE_INFO_V3 : :: c_int = 3 ;
4541+ pub const RUSAGE_INFO_V4 : :: c_int = 4 ;
4542+
43264543cfg_if ! {
43274544 if #[ cfg( libc_const_extern_fn) ] {
43284545 const fn __DARWIN_ALIGN32( p: usize ) -> usize {
@@ -4364,6 +4581,15 @@ cfg_if! {
43644581 pub const THREAD_EXTENDED_INFO_COUNT : mach_msg_type_number_t =
43654582 ( :: mem:: size_of:: <thread_extended_info_data_t>( ) / :: mem:: size_of:: <integer_t>( ) )
43664583 as mach_msg_type_number_t;
4584+
4585+ pub const TASK_THREAD_TIMES_INFO_COUNT : u32 =
4586+ ( :: mem:: size_of:: <task_thread_times_info_data_t>( )
4587+ / :: mem:: size_of:: <natural_t>( ) ) as u32 ;
4588+ pub const MACH_TASK_BASIC_INFO_COUNT : u32 = ( :: mem:: size_of:: <mach_task_basic_info_data_t>( )
4589+ / :: mem:: size_of:: <natural_t>( ) ) as u32 ;
4590+ pub const HOST_VM_INFO64_COUNT : mach_msg_type_number_t =
4591+ ( :: mem:: size_of:: <vm_statistics64_data_t>( ) / :: mem:: size_of:: <integer_t>( ) )
4592+ as mach_msg_type_number_t;
43674593 } else {
43684594 fn __DARWIN_ALIGN32( p: usize ) -> usize {
43694595 let __DARWIN_ALIGNBYTES32: usize = :: mem:: size_of:: <u32 >( ) - 1 ;
@@ -4379,6 +4605,9 @@ cfg_if! {
43794605 pub const THREAD_BASIC_INFO_COUNT : mach_msg_type_number_t = 10 ;
43804606 pub const THREAD_IDENTIFIER_INFO_COUNT : mach_msg_type_number_t = 6 ;
43814607 pub const THREAD_EXTENDED_INFO_COUNT : mach_msg_type_number_t = 28 ;
4608+ pub const TASK_THREAD_TIMES_INFO_COUNT : u32 = 4 ;
4609+ pub const MACH_TASK_BASIC_INFO_COUNT : u32 = 12 ;
4610+ pub const HOST_VM_INFO64_COUNT : mach_msg_type_number_t = 38 ;
43824611 }
43834612}
43844613
@@ -4982,6 +5211,7 @@ extern "C" {
49825211 ) -> :: c_int ;
49835212 pub fn proc_kmsgbuf ( buffer : * mut :: c_void , buffersize : u32 ) -> :: c_int ;
49845213 pub fn proc_libversion ( major : * mut :: c_int , mintor : * mut :: c_int ) -> :: c_int ;
5214+ pub fn proc_pid_rusage ( pid : :: c_int , flavor : :: c_int , buffer : * mut rusage_info_t ) -> :: c_int ;
49855215 /// # Notes
49865216 ///
49875217 /// `id` is of type [`uuid_t`].
@@ -5009,6 +5239,12 @@ extern "C" {
50095239 inheritance : :: vm_inherit_t ,
50105240 ) -> :: kern_return_t ;
50115241
5242+ pub fn vm_deallocate (
5243+ target_task : vm_map_t ,
5244+ address : vm_address_t ,
5245+ size : vm_size_t ,
5246+ ) -> :: kern_return_t ;
5247+
50125248 pub fn host_statistics64 (
50135249 host_priv : host_t ,
50145250 flavor : host_flavor_t ,
@@ -5024,6 +5260,20 @@ extern "C" {
50245260 ) -> :: kern_return_t ;
50255261
50265262 pub static mut mach_task_self_: mach_port_t ;
5263+ pub fn task_for_pid ( host : mach_port_t , pid : :: pid_t , task : * mut mach_port_t )
5264+ -> :: kern_return_t ;
5265+ pub fn task_info (
5266+ host : mach_port_t ,
5267+ flavor : task_flavor_t ,
5268+ task_info_out : task_info_t ,
5269+ task_info_count : * mut mach_msg_type_number_t ,
5270+ ) -> :: kern_return_t ;
5271+ pub fn host_statistics (
5272+ host_priv : host_t ,
5273+ flavor : host_flavor_t ,
5274+ host_info_out : host_info_t ,
5275+ host_info_outCnt : * mut mach_msg_type_number_t ,
5276+ ) -> :: kern_return_t ;
50275277
50285278 // sysdir.h
50295279 pub fn sysdir_start_search_path_enumeration (
@@ -5034,6 +5284,8 @@ extern "C" {
50345284 state : :: sysdir_search_path_enumeration_state ,
50355285 path : * mut :: c_char ,
50365286 ) -> :: sysdir_search_path_enumeration_state ;
5287+
5288+ pub static vm_page_size: vm_size_t ;
50375289}
50385290
50395291pub unsafe fn mach_task_self ( ) -> mach_port_t {
0 commit comments