@@ -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
@@ -4309,6 +4513,8 @@ pub const HOST_CPU_LOAD_INFO: i32 = 3;
4309
4513
pub const HOST_VM_INFO64 : i32 = 4 ;
4310
4514
pub const HOST_EXTMOD_INFO64 : i32 = 5 ;
4311
4515
pub const HOST_EXPIRED_TASK_INFO : i32 = 6 ;
4516
+ pub const HOST_VM_INFO64_COUNT : mach_msg_type_number_t =
4517
+ ( :: core:: mem:: size_of :: < vm_statistics64_data_t > ( ) / :: core:: mem:: size_of :: < integer_t > ( ) ) as _ ;
4312
4518
4313
4519
// mach/vm_statistics.h
4314
4520
pub const VM_PAGE_QUERY_PAGE_PRESENT : i32 = 0x1 ;
@@ -4323,6 +4529,24 @@ pub const VM_PAGE_QUERY_PAGE_CS_VALIDATED: i32 = 0x100;
4323
4529
pub const VM_PAGE_QUERY_PAGE_CS_TAINTED : i32 = 0x200 ;
4324
4530
pub const VM_PAGE_QUERY_PAGE_CS_NX : i32 = 0x400 ;
4325
4531
4532
+ // mach/task_info.h
4533
+ pub const TASK_THREAD_TIMES_INFO : u32 = 3 ;
4534
+ pub const HOST_CPU_LOAD_INFO_COUNT : u32 = 4 ;
4535
+ pub const MACH_TASK_BASIC_INFO : u32 = 20 ;
4536
+ pub const TASK_THREAD_TIMES_INFO_COUNT : u32 =
4537
+ ( :: core:: mem:: size_of :: < task_thread_times_info_data_t > ( ) / :: core:: mem:: size_of :: < natural_t > ( ) )
4538
+ as _ ;
4539
+ pub const MACH_TASK_BASIC_INFO_COUNT : u32 = ( :: core:: mem:: size_of :: < mach_task_basic_info_data_t > ( )
4540
+ / :: core:: mem:: size_of :: < natural_t > ( ) ) as _ ;
4541
+
4542
+ pub const MACH_PORT_NULL : i32 = 0 ;
4543
+
4544
+ pub const RUSAGE_INFO_V0 : :: c_int = 0 ;
4545
+ pub const RUSAGE_INFO_V1 : :: c_int = 1 ;
4546
+ pub const RUSAGE_INFO_V2 : :: c_int = 2 ;
4547
+ pub const RUSAGE_INFO_V3 : :: c_int = 3 ;
4548
+ pub const RUSAGE_INFO_V4 : :: c_int = 4 ;
4549
+
4326
4550
cfg_if ! {
4327
4551
if #[ cfg( libc_const_extern_fn) ] {
4328
4552
const fn __DARWIN_ALIGN32( p: usize ) -> usize {
@@ -4982,6 +5206,7 @@ extern "C" {
4982
5206
) -> :: c_int ;
4983
5207
pub fn proc_kmsgbuf ( buffer : * mut :: c_void , buffersize : u32 ) -> :: c_int ;
4984
5208
pub fn proc_libversion ( major : * mut :: c_int , mintor : * mut :: c_int ) -> :: c_int ;
5209
+ pub fn proc_pid_rusage ( pid : :: c_int , flavor : :: c_int , buffer : * mut rusage_info_t ) -> :: c_int ;
4985
5210
/// # Notes
4986
5211
///
4987
5212
/// `id` is of type [`uuid_t`].
@@ -5009,6 +5234,12 @@ extern "C" {
5009
5234
inheritance : :: vm_inherit_t ,
5010
5235
) -> :: kern_return_t ;
5011
5236
5237
+ pub fn vm_deallocate (
5238
+ target_task : vm_map_t ,
5239
+ address : vm_address_t ,
5240
+ size : vm_size_t ,
5241
+ ) -> :: kern_return_t ;
5242
+
5012
5243
pub fn host_statistics64 (
5013
5244
host_priv : host_t ,
5014
5245
flavor : host_flavor_t ,
@@ -5024,6 +5255,20 @@ extern "C" {
5024
5255
) -> :: kern_return_t ;
5025
5256
5026
5257
pub static mut mach_task_self_: mach_port_t ;
5258
+ pub fn task_for_pid ( host : mach_port_t , pid : :: pid_t , task : * mut mach_port_t )
5259
+ -> :: kern_return_t ;
5260
+ pub fn task_info (
5261
+ host : mach_port_t ,
5262
+ flavor : task_flavor_t ,
5263
+ task_info_out : task_info_t ,
5264
+ task_info_count : * mut mach_msg_type_number_t ,
5265
+ ) -> :: kern_return_t ;
5266
+ pub fn host_statistics (
5267
+ host_priv : host_t ,
5268
+ flavor : host_flavor_t ,
5269
+ host_info_out : host_info_t ,
5270
+ host_info_outCnt : * mut mach_msg_type_number_t ,
5271
+ ) -> :: kern_return_t ;
5027
5272
5028
5273
// sysdir.h
5029
5274
pub fn sysdir_start_search_path_enumeration (
@@ -5034,6 +5279,8 @@ extern "C" {
5034
5279
state : :: sysdir_search_path_enumeration_state ,
5035
5280
path : * mut :: c_char ,
5036
5281
) -> :: sysdir_search_path_enumeration_state ;
5282
+
5283
+ pub static vm_page_size: vm_size_t ;
5037
5284
}
5038
5285
5039
5286
pub unsafe fn mach_task_self ( ) -> mach_port_t {
0 commit comments