1 //! This module roughly corresponds to `mach/vm_region.h`. 2 3 use boolean::boolean_t; 4 use mem; 5 use memory_object_types::{memory_object_offset_t, vm_object_id_t}; 6 use message::mach_msg_type_number_t; 7 use vm_behavior::vm_behavior_t; 8 use vm_inherit::vm_inherit_t; 9 use vm_prot::vm_prot_t; 10 use vm_types::{mach_vm_address_t, mach_vm_size_t}; 11 12 pub type vm32_object_id_t = u32; 13 14 pub type vm_region_info_t = *mut ::libc::c_int; 15 pub type vm_region_info_64_t = *mut ::libc::c_int; 16 pub type vm_region_recurse_info_t = *mut ::libc::c_int; 17 pub type vm_region_recurse_info_64_t = *mut ::libc::c_int; 18 pub type vm_region_flavor_t = ::libc::c_int; 19 pub type vm_region_info_data_t = [::libc::c_int; VM_REGION_INFO_MAX as usize]; 20 21 pub type vm_region_basic_info_64_t = *mut vm_region_basic_info_64; 22 pub type vm_region_basic_info_data_64_t = vm_region_basic_info_64; 23 pub type vm_region_basic_info_t = *mut vm_region_basic_info; 24 pub type vm_region_basic_info_data_t = vm_region_basic_info; 25 pub type vm_region_extended_info_t = *mut vm_region_extended_info; 26 pub type vm_region_extended_info_data_t = vm_region_extended_info; 27 pub type vm_region_top_info_t = *mut vm_region_top_info; 28 pub type vm_region_top_info_data_t = vm_region_top_info; 29 pub type vm_region_submap_info_t = *mut vm_region_submap_info; 30 pub type vm_region_submap_info_data_t = vm_region_submap_info; 31 pub type vm_region_submap_info_64_t = *mut vm_region_submap_info_64; 32 pub type vm_region_submap_info_data_64_t = vm_region_submap_info_64; 33 pub type vm_region_submap_short_info_64_t = *mut vm_region_submap_short_info_64; 34 pub type vm_region_submap_short_info_data_64_t = vm_region_submap_short_info_64; 35 pub type vm_page_info_t = *mut ::libc::c_int; 36 pub type vm_page_info_flavor_t = ::libc::c_int; 37 pub type vm_page_info_basic_t = *mut vm_page_info_basic; 38 pub type vm_page_info_basic_data_t = vm_page_info_basic; 39 pub type mach_vm_read_entry_t = [mach_vm_read_entry; VM_MAP_ENTRY_MAX as usize]; 40 41 pub const VM_REGION_INFO_MAX: ::libc::c_int = (1 << 10); 42 pub const VM_MAP_ENTRY_MAX: ::libc::c_int = (1 << 8); 43 44 pub const VM_PAGE_INFO_BASIC: vm_page_info_flavor_t = 1; 45 46 pub const VM_REGION_BASIC_INFO_64: vm_region_flavor_t = 9; 47 pub const VM_REGION_BASIC_INFO: vm_region_flavor_t = 10; 48 pub const VM_REGION_EXTENDED_INFO: vm_region_flavor_t = 13; 49 pub const VM_REGION_TOP_INFO: vm_region_flavor_t = 12; 50 51 pub const SM_COW: ::libc::c_uchar = 1; 52 pub const SM_PRIVATE: ::libc::c_uchar = 2; 53 pub const SM_EMPTY: ::libc::c_uchar = 3; 54 pub const SM_SHARED: ::libc::c_uchar = 4; 55 pub const SM_TRUESHARED: ::libc::c_uchar = 5; 56 pub const SM_PRIVATE_ALIASED: ::libc::c_uchar = 6; 57 pub const SM_SHARED_ALIASED: ::libc::c_uchar = 7; 58 59 #[repr(C, packed(4))] 60 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 61 pub struct vm_region_basic_info_64 { 62 pub protection: vm_prot_t, 63 pub max_protection: vm_prot_t, 64 pub inheritance: vm_inherit_t, 65 pub shared: boolean_t, 66 pub reserved: boolean_t, 67 pub offset: memory_object_offset_t, 68 pub behavior: vm_behavior_t, 69 pub user_wired_count: ::libc::c_ushort, 70 } 71 72 impl vm_region_basic_info_64 { count() -> mach_msg_type_number_t73 pub fn count() -> mach_msg_type_number_t { 74 (mem::size_of::<Self>() / mem::size_of::<::libc::c_int>()) as mach_msg_type_number_t 75 } 76 } 77 78 #[repr(C)] 79 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 80 pub struct vm_region_basic_info { 81 pub protection: vm_prot_t, 82 pub max_protection: vm_prot_t, 83 pub inheritance: vm_inherit_t, 84 pub shared: boolean_t, 85 pub reserved: boolean_t, 86 pub offset: u32, 87 pub behavior: vm_behavior_t, 88 pub user_wired_count: ::libc::c_ushort, 89 } 90 91 impl vm_region_basic_info { count() -> mach_msg_type_number_t92 pub fn count() -> mach_msg_type_number_t { 93 (mem::size_of::<Self>() / mem::size_of::<::libc::c_int>()) as mach_msg_type_number_t 94 } 95 } 96 97 #[repr(C)] 98 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 99 pub struct vm_region_extended_info { 100 pub protection: vm_prot_t, 101 pub user_tag: ::libc::c_uint, 102 pub pages_resident: ::libc::c_uint, 103 pub pages_shared_now_private: ::libc::c_uint, 104 pub pages_swapped_out: ::libc::c_uint, 105 pub pages_dirtied: ::libc::c_uint, 106 pub ref_count: ::libc::c_uint, 107 pub shadow_depth: ::libc::c_ushort, 108 pub external_pager: ::libc::c_uchar, 109 pub share_mode: ::libc::c_uchar, 110 pub pages_reusable: ::libc::c_uint, 111 } 112 113 impl vm_region_extended_info { count() -> mach_msg_type_number_t114 pub fn count() -> mach_msg_type_number_t { 115 (mem::size_of::<Self>() / mem::size_of::<::libc::c_int>()) as mach_msg_type_number_t 116 } 117 } 118 119 #[repr(C)] 120 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 121 pub struct vm_region_top_info { 122 pub obj_id: ::libc::c_uint, 123 pub ref_count: ::libc::c_uint, 124 pub private_pages_resident: ::libc::c_uint, 125 pub shared_pages_resident: ::libc::c_uint, 126 pub share_mode: ::libc::c_uchar, 127 } 128 129 impl vm_region_top_info { count() -> mach_msg_type_number_t130 pub fn count() -> mach_msg_type_number_t { 131 (mem::size_of::<Self>() / mem::size_of::<::libc::c_int>()) as mach_msg_type_number_t 132 } 133 } 134 135 #[repr(C)] 136 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 137 pub struct vm_region_submap_info { 138 pub protection: vm_prot_t, 139 pub max_protection: vm_prot_t, 140 pub inheritance: vm_inherit_t, 141 pub offset: u32, 142 pub user_tag: ::libc::c_uint, 143 pub pages_resident: ::libc::c_uint, 144 pub pages_shared_now_private: ::libc::c_uint, 145 pub pages_swapped_out: ::libc::c_uint, 146 pub pages_dirtied: ::libc::c_uint, 147 pub ref_count: ::libc::c_uint, 148 pub shadow_depth: ::libc::c_ushort, 149 pub external_pager: ::libc::c_uchar, 150 pub share_mode: ::libc::c_uchar, 151 pub is_submap: boolean_t, 152 pub behavior: vm_behavior_t, 153 pub object_id: vm32_object_id_t, 154 pub user_wired_count: ::libc::c_ushort, 155 } 156 157 impl vm_region_submap_info { count() -> mach_msg_type_number_t158 pub fn count() -> mach_msg_type_number_t { 159 (mem::size_of::<Self>() / mem::size_of::<::libc::c_int>()) as mach_msg_type_number_t 160 } 161 } 162 163 #[repr(C, packed(4))] 164 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 165 pub struct vm_region_submap_info_64 { 166 pub protection: vm_prot_t, 167 pub max_protection: vm_prot_t, 168 pub inheritance: vm_inherit_t, 169 pub offset: memory_object_offset_t, 170 pub user_tag: ::libc::c_uint, 171 pub pages_resident: ::libc::c_uint, 172 pub pages_shared_now_private: ::libc::c_uint, 173 pub pages_swapped_out: ::libc::c_uint, 174 pub pages_dirtied: ::libc::c_uint, 175 pub ref_count: ::libc::c_uint, 176 pub shadow_depth: ::libc::c_ushort, 177 pub external_pager: ::libc::c_uchar, 178 pub share_mode: ::libc::c_uchar, 179 pub is_submap: boolean_t, 180 pub behavior: vm_behavior_t, 181 pub object_id: vm32_object_id_t, 182 pub user_wired_count: ::libc::c_ushort, 183 pub pages_reusable: ::libc::c_uint, 184 } 185 186 impl vm_region_submap_info_64 { count() -> mach_msg_type_number_t187 pub fn count() -> mach_msg_type_number_t { 188 (mem::size_of::<Self>() / mem::size_of::<::libc::c_int>()) as mach_msg_type_number_t 189 } 190 } 191 192 #[repr(C, packed(4))] 193 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 194 pub struct vm_region_submap_short_info_64 { 195 pub protection: vm_prot_t, 196 pub max_protection: vm_prot_t, 197 pub inheritance: vm_inherit_t, 198 pub offset: memory_object_offset_t, 199 pub user_tag: ::libc::c_uint, 200 pub ref_count: ::libc::c_uint, 201 pub shadow_depth: ::libc::c_ushort, 202 pub external_pager: ::libc::c_uchar, 203 pub share_mode: ::libc::c_uchar, 204 pub is_submap: boolean_t, 205 pub behavior: vm_behavior_t, 206 pub object_id: vm32_object_id_t, 207 pub user_wired_count: ::libc::c_ushort, 208 } 209 210 impl vm_region_submap_short_info_64 { count() -> mach_msg_type_number_t211 pub fn count() -> mach_msg_type_number_t { 212 (mem::size_of::<Self>() / mem::size_of::<::libc::c_int>()) as mach_msg_type_number_t 213 } 214 } 215 216 #[repr(C)] 217 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 218 pub struct vm_page_info_basic { 219 pub disposition: ::libc::c_int, 220 pub ref_count: ::libc::c_int, 221 pub object_id: vm_object_id_t, 222 pub offset: memory_object_offset_t, 223 pub depth: ::libc::c_int, 224 pub __pad: ::libc::c_int, 225 } 226 227 impl vm_page_info_basic { count() -> mach_msg_type_number_t228 pub fn count() -> mach_msg_type_number_t { 229 (mem::size_of::<Self>() / mem::size_of::<::libc::c_int>()) as mach_msg_type_number_t 230 } 231 } 232 233 #[repr(C, packed(4))] 234 #[derive(Copy, Clone, Debug, Default, Hash, PartialOrd, PartialEq, Eq, Ord)] 235 pub struct mach_vm_read_entry { 236 pub address: mach_vm_address_t, 237 pub size: mach_vm_size_t, 238 } 239