@@ -30,6 +30,13 @@ pub type natural_t = u32;
30
30
pub type mach_msg_type_number_t = natural_t ;
31
31
pub type kern_return_t = :: c_int ;
32
32
pub 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 ;
33
40
34
41
pub type posix_spawnattr_t = * mut :: c_void ;
35
42
pub 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;
70
77
pub type processor_info_t = * mut integer_t ;
71
78
pub type processor_info_array_t = * mut integer_t ;
72
79
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
+
73
85
pub type thread_info_t = * mut integer_t ;
74
86
pub type thread_basic_info_t = * mut thread_basic_info ;
75
87
pub type thread_basic_info_data_t = thread_basic_info ;
@@ -112,7 +124,6 @@ pub type CCCryptorStatus = i32;
112
124
pub type CCRNGStatus = :: CCCryptorStatus ;
113
125
114
126
deprecated_mach ! {
115
- pub type vm_size_t = :: uintptr_t;
116
127
pub type mach_timebase_info_data_t = mach_timebase_info;
117
128
}
118
129
@@ -800,6 +811,137 @@ s! {
800
811
pub purges: natural_t,
801
812
pub speculative_count: natural_t,
802
813
}
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
+ }
803
945
}
804
946
805
947
s_no_extra_traits ! {
@@ -1058,6 +1200,17 @@ s_no_extra_traits! {
1058
1200
pub internal_page_count: natural_t,
1059
1201
pub total_uncompressed_pages_in_compressor: u64 ,
1060
1202
}
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
+ }
1061
1214
}
1062
1215
1063
1216
impl siginfo_t {
@@ -2257,6 +2410,57 @@ cfg_if! {
2257
2410
total_uncompressed. hash( state) ;
2258
2411
}
2259
2412
}
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
+ }
2260
2464
}
2261
2465
}
2262
2466
@@ -4323,6 +4527,19 @@ pub const VM_PAGE_QUERY_PAGE_CS_VALIDATED: i32 = 0x100;
4323
4527
pub const VM_PAGE_QUERY_PAGE_CS_TAINTED : i32 = 0x200 ;
4324
4528
pub const VM_PAGE_QUERY_PAGE_CS_NX : i32 = 0x400 ;
4325
4529
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
+
4326
4543
cfg_if ! {
4327
4544
if #[ cfg( libc_const_extern_fn) ] {
4328
4545
const fn __DARWIN_ALIGN32( p: usize ) -> usize {
@@ -4364,6 +4581,15 @@ cfg_if! {
4364
4581
pub const THREAD_EXTENDED_INFO_COUNT : mach_msg_type_number_t =
4365
4582
( :: mem:: size_of:: <thread_extended_info_data_t>( ) / :: mem:: size_of:: <integer_t>( ) )
4366
4583
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;
4367
4593
} else {
4368
4594
fn __DARWIN_ALIGN32( p: usize ) -> usize {
4369
4595
let __DARWIN_ALIGNBYTES32: usize = :: mem:: size_of:: <u32 >( ) - 1 ;
@@ -4379,6 +4605,9 @@ cfg_if! {
4379
4605
pub const THREAD_BASIC_INFO_COUNT : mach_msg_type_number_t = 10 ;
4380
4606
pub const THREAD_IDENTIFIER_INFO_COUNT : mach_msg_type_number_t = 6 ;
4381
4607
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 ;
4382
4611
}
4383
4612
}
4384
4613
@@ -4982,6 +5211,7 @@ extern "C" {
4982
5211
) -> :: c_int ;
4983
5212
pub fn proc_kmsgbuf ( buffer : * mut :: c_void , buffersize : u32 ) -> :: c_int ;
4984
5213
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 ;
4985
5215
/// # Notes
4986
5216
///
4987
5217
/// `id` is of type [`uuid_t`].
@@ -5009,6 +5239,12 @@ extern "C" {
5009
5239
inheritance : :: vm_inherit_t ,
5010
5240
) -> :: kern_return_t ;
5011
5241
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
+
5012
5248
pub fn host_statistics64 (
5013
5249
host_priv : host_t ,
5014
5250
flavor : host_flavor_t ,
@@ -5024,6 +5260,20 @@ extern "C" {
5024
5260
) -> :: kern_return_t ;
5025
5261
5026
5262
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 ;
5027
5277
5028
5278
// sysdir.h
5029
5279
pub fn sysdir_start_search_path_enumeration (
@@ -5034,6 +5284,8 @@ extern "C" {
5034
5284
state : :: sysdir_search_path_enumeration_state ,
5035
5285
path : * mut :: c_char ,
5036
5286
) -> :: sysdir_search_path_enumeration_state ;
5287
+
5288
+ pub static vm_page_size: vm_size_t ;
5037
5289
}
5038
5290
5039
5291
pub unsafe fn mach_task_self ( ) -> mach_port_t {
0 commit comments