Skip to content

Commit a50d9e8

Browse files
committed
Auto merge of #2401 - GuillaumeGomez:more-apple, r=Amanieu
Add more apple types
2 parents 328f221 + aa56cfe commit a50d9e8

File tree

1 file changed

+253
-1
lines changed

1 file changed

+253
-1
lines changed

src/unix/bsd/apple/mod.rs

+253-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ pub type natural_t = u32;
3030
pub type mach_msg_type_number_t = natural_t;
3131
pub type kern_return_t = ::c_int;
3232
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;
3340

3441
pub type posix_spawnattr_t = *mut ::c_void;
3542
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;
7077
pub type processor_info_t = *mut integer_t;
7178
pub 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+
7385
pub type thread_info_t = *mut integer_t;
7486
pub type thread_basic_info_t = *mut thread_basic_info;
7587
pub type thread_basic_info_data_t = thread_basic_info;
@@ -112,7 +124,6 @@ pub type CCCryptorStatus = i32;
112124
pub type CCRNGStatus = ::CCCryptorStatus;
113125

114126
deprecated_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

805947
s_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

10631216
impl 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;
43234527
pub const VM_PAGE_QUERY_PAGE_CS_TAINTED: i32 = 0x200;
43244528
pub 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+
43264543
cfg_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

50395291
pub unsafe fn mach_task_self() -> mach_port_t {

0 commit comments

Comments
 (0)