| ... | ... | @@ -6,6 +6,9 @@ const native_arch = builtin.target.cpu.arch; |
| 6 | 6 | const maxInt = std.math.maxInt; |
| 7 | 7 | const iovec_const = std.os.iovec_const; |
| 8 | 8 | |
| 9 | pub const aarch64 = @import("darwin/aarch64.zig"); |
| 10 | pub const x86_64 = @import("darwin/x86_64.zig"); |
| 11 | |
| 9 | 12 | const arch_bits = switch (native_arch) { |
| 10 | 13 | .aarch64 => @import("darwin/aarch64.zig"), |
| 11 | 14 | .x86_64 => @import("darwin/x86_64.zig"), |
| ... | ... | @@ -124,8 +127,12 @@ pub extern "c" fn mach_host_self() mach_port_t; |
| 124 | 127 | pub extern "c" fn clock_get_time(clock_serv: clock_serv_t, cur_time: *mach_timespec_t) kern_return_t; |
| 125 | 128 | |
| 126 | 129 | pub const vm_map_t = mach_port_t; |
| 130 | pub const vm_map_read_t = mach_port_t; |
| 131 | pub const vm_region_flavor_t = c_int; |
| 132 | pub const vm_region_info_t = *c_int; |
| 127 | 133 | pub const mach_vm_address_t = usize; |
| 128 | 134 | pub const vm_offset_t = usize; |
| 135 | pub const mach_vm_size_t = u64; |
| 129 | 136 | pub const mach_msg_type_number_t = natural_t; |
| 130 | 137 | |
| 131 | 138 | extern "c" var mach_task_self_: mach_port_t; |
| ... | ... | @@ -133,13 +140,284 @@ pub fn mach_task_self() callconv(.C) mach_port_t { |
| 133 | 140 | return mach_task_self_; |
| 134 | 141 | } |
| 135 | 142 | |
| 143 | pub const task_read_t = mach_port_t; |
| 144 | |
| 145 | pub extern "c" fn task_resume(target_task: task_read_t) kern_return_t; |
| 146 | pub extern "c" fn task_suspend(target_task: task_read_t) kern_return_t; |
| 147 | |
| 136 | 148 | pub extern "c" fn task_for_pid(target_tport: mach_port_name_t, pid: pid_t, t: *mach_port_name_t) kern_return_t; |
| 149 | pub extern "c" fn mach_vm_read( |
| 150 | target_task: vm_map_read_t, |
| 151 | address: mach_vm_address_t, |
| 152 | size: mach_vm_size_t, |
| 153 | data: *vm_offset_t, |
| 154 | data_cnt: *mach_msg_type_number_t, |
| 155 | ) kern_return_t; |
| 137 | 156 | pub extern "c" fn mach_vm_write( |
| 138 | 157 | target_task: vm_map_t, |
| 139 | 158 | address: mach_vm_address_t, |
| 140 | 159 | data: vm_offset_t, |
| 141 | 160 | data_cnt: mach_msg_type_number_t, |
| 142 | 161 | ) kern_return_t; |
| 162 | pub extern "c" fn mach_vm_region( |
| 163 | target_task: vm_map_t, |
| 164 | address: *mach_vm_address_t, |
| 165 | size: *mach_vm_size_t, |
| 166 | flavor: vm_region_flavor_t, |
| 167 | info: vm_region_info_t, |
| 168 | info_cnt: *mach_msg_type_number_t, |
| 169 | object_name: *mach_port_t, |
| 170 | ) kern_return_t; |
| 171 | |
| 172 | pub const VM_REGION_BASIC_INFO_64 = 9; |
| 173 | pub const VM_REGION_SUBMAP_SHORT_INFO_COUNT_64: mach_msg_type_number_t = @sizeOf(vm_region_submap_info_64) / @sizeOf(natural_t); |
| 174 | |
| 175 | pub const vm_inherit_t = u32; |
| 176 | pub const memory_object_offset_t = u64; |
| 177 | pub const vm_behavior_t = i32; |
| 178 | |
| 179 | pub const VM_INHERIT_SHARE: vm_inherit_t = 0; |
| 180 | pub const VM_INHERIT_COPY: vm_inherit_t = 1; |
| 181 | pub const VM_INHERIT_NONE: vm_inherit_t = 2; |
| 182 | pub const VM_INHERIT_DONATE_COPY: vm_inherit_t = 3; |
| 183 | pub const VM_INHERIT_DEFAULT = VM_INHERIT_COPY; |
| 184 | |
| 185 | pub const VM_BEHAVIOR_DEFAULT: vm_behavior_t = 0; |
| 186 | pub const VM_BEHAVIOR_RANDOM: vm_behavior_t = 1; |
| 187 | pub const VM_BEHAVIOR_SEQUENTIAL: vm_behavior_t = 2; |
| 188 | pub const VM_BEHAVIOR_RSEQNTL: vm_behavior_t = 3; |
| 189 | |
| 190 | pub const VM_BEHAVIOR_WILLNEED: vm_behavior_t = 4; |
| 191 | pub const VM_BEHAVIOR_DONTNEED: vm_behavior_t = 5; |
| 192 | pub const VM_BEHAVIOR_FREE: vm_behavior_t = 6; |
| 193 | pub const VM_BEHAVIOR_ZERO_WIRED_PAGES: vm_behavior_t = 7; |
| 194 | pub const VM_BEHAVIOR_REUSABLE: vm_behavior_t = 8; |
| 195 | pub const VM_BEHAVIOR_REUSE: vm_behavior_t = 9; |
| 196 | pub const VM_BEHAVIOR_CAN_REUSE: vm_behavior_t = 10; |
| 197 | pub const VM_BEHAVIOR_PAGEOUT: vm_behavior_t = 11; |
| 198 | |
| 199 | pub const vm32_object_id_t = u32; |
| 200 | pub const vm_object_id_t = u64; |
| 201 | |
| 202 | pub const vm_region_submap_info_64 = extern struct { |
| 203 | // present across protection |
| 204 | protection: std.macho.vm_prot_t, |
| 205 | // max avail through vm_prot |
| 206 | max_protection: std.macho.vm_prot_t, |
| 207 | // behavior of map/obj on fork |
| 208 | inheritance: vm_inherit_t, |
| 209 | // offset into object/map |
| 210 | offset: memory_object_offset_t, |
| 211 | // user tag on map entry |
| 212 | user_tag: u32, |
| 213 | // only valid for objects |
| 214 | pages_resident: u32, |
| 215 | // only for objects |
| 216 | pages_shared_now_private: u32, |
| 217 | // only for objects |
| 218 | pages_swapped_out: u32, |
| 219 | // only for objects |
| 220 | pages_dirtied: u32, |
| 221 | // obj/map mappers, etc. |
| 222 | ref_count: u32, |
| 223 | // only for obj |
| 224 | shadow_depth: u16, |
| 225 | // only for obj |
| 226 | external_pager: u8, |
| 227 | // see enumeration |
| 228 | share_mode: u8, |
| 229 | // submap vs obj |
| 230 | is_submap: boolean_t, |
| 231 | // access behavior hint |
| 232 | behavior: vm_behavior_t, |
| 233 | // obj/map name, not a handle |
| 234 | object_id: vm32_object_id_t, |
| 235 | user_wired_count: u16, |
| 236 | pages_reusable: u32, |
| 237 | object_id_full: vm_object_id_t, |
| 238 | }; |
| 239 | |
| 240 | pub const thread_act_t = mach_port_t; |
| 241 | pub const thread_state_t = *natural_t; |
| 242 | pub const mach_port_array_t = *mach_port_t; |
| 243 | |
| 244 | pub extern "c" fn task_threads( |
| 245 | target_task: mach_port_t, |
| 246 | init_port_set: *mach_port_array_t, |
| 247 | init_port_count: *mach_msg_type_number_t, |
| 248 | ) kern_return_t; |
| 249 | pub extern "c" fn thread_get_state( |
| 250 | thread: thread_act_t, |
| 251 | flavor: thread_flavor_t, |
| 252 | state: thread_state_t, |
| 253 | count: *mach_msg_type_number_t, |
| 254 | ) kern_return_t; |
| 255 | pub extern "c" fn thread_set_state( |
| 256 | thread: thread_act_t, |
| 257 | flavor: thread_flavor_t, |
| 258 | new_state: thread_state_t, |
| 259 | count: mach_msg_type_number_t, |
| 260 | ) kern_return_t; |
| 261 | pub extern "c" fn thread_info( |
| 262 | thread: thread_act_t, |
| 263 | flavor: thread_flavor_t, |
| 264 | info: thread_info_t, |
| 265 | count: *mach_msg_type_number_t, |
| 266 | ) kern_return_t; |
| 267 | pub extern "c" fn thread_resume(thread: thread_act_t) kern_return_t; |
| 268 | |
| 269 | pub const THREAD_BASIC_INFO = 3; |
| 270 | pub const THREAD_BASIC_INFO_COUNT: mach_msg_type_number_t = @sizeOf(thread_basic_info) / @sizeOf(natural_t); |
| 271 | |
| 272 | pub const thread_flavor_t = natural_t; |
| 273 | pub const thread_info_t = *integer_t; |
| 274 | pub const time_value_t = time_value; |
| 275 | pub const task_policy_flavor_t = natural_t; |
| 276 | pub const task_policy_t = *integer_t; |
| 277 | pub const policy_t = c_int; |
| 278 | |
| 279 | pub const time_value = extern struct { |
| 280 | seconds: integer_t, |
| 281 | microseconds: integer_t, |
| 282 | }; |
| 283 | |
| 284 | pub const thread_basic_info = extern struct { |
| 285 | // user run time |
| 286 | user_time: time_value_t, |
| 287 | // system run time |
| 288 | system_time: time_value_t, |
| 289 | // scaled cpu usage percentage |
| 290 | cpu_usage: integer_t, |
| 291 | // scheduling policy in effect |
| 292 | policy: policy_t, |
| 293 | // run state |
| 294 | run_state: integer_t, |
| 295 | // various flags |
| 296 | flags: integer_t, |
| 297 | // suspend count for thread |
| 298 | suspend_count: integer_t, |
| 299 | // number of seconds that thread has been sleeping |
| 300 | sleep_time: integer_t, |
| 301 | }; |
| 302 | |
| 303 | /// Cachability |
| 304 | pub const MATTR_CACHE = 1; |
| 305 | /// Migrability |
| 306 | pub const MATTR_MIGRATE = 2; |
| 307 | /// Replicability |
| 308 | pub const MATTR_REPLICATE = 4; |
| 309 | |
| 310 | /// (Generic) turn attribute off |
| 311 | pub const MATTR_VAL_OFF = 0; |
| 312 | /// (Generic) turn attribute on |
| 313 | pub const MATTR_VAL_ON = 1; |
| 314 | /// (Generic) return current value |
| 315 | pub const MATTR_VAL_GET = 2; |
| 316 | /// Flush from all caches |
| 317 | pub const MATTR_VAL_CACHE_FLUSH = 6; |
| 318 | /// Flush from data caches |
| 319 | pub const MATTR_VAL_DCACHE_FLUSH = 7; |
| 320 | /// Flush from instruction caches |
| 321 | pub const MATTR_VAL_ICACHE_FLUSH = 8; |
| 322 | /// Sync I+D caches |
| 323 | pub const MATTR_VAL_CACHE_SYNC = 9; |
| 324 | /// Get page info (stats) |
| 325 | pub const MATTR_VAL_GET_INFO = 10; |
| 326 | |
| 327 | pub const TASK_VM_INFO = 22; |
| 328 | pub const TASK_VM_INFO_COUNT: mach_msg_type_number_t = @sizeOf(task_vm_info_data_t) / @sizeOf(natural_t); |
| 329 | |
| 330 | pub const task_vm_info = extern struct { |
| 331 | // virtual memory size (bytes) |
| 332 | virtual_size: mach_vm_size_t, |
| 333 | // number of memory regions |
| 334 | region_count: integer_t, |
| 335 | page_size: integer_t, |
| 336 | // resident memory size (bytes) |
| 337 | resident_size: mach_vm_size_t, |
| 338 | // peak resident size (bytes) |
| 339 | resident_size_peak: mach_vm_size_t, |
| 340 | |
| 341 | device: mach_vm_size_t, |
| 342 | device_peak: mach_vm_size_t, |
| 343 | internal: mach_vm_size_t, |
| 344 | internal_peak: mach_vm_size_t, |
| 345 | external: mach_vm_size_t, |
| 346 | external_peak: mach_vm_size_t, |
| 347 | reusable: mach_vm_size_t, |
| 348 | reusable_peak: mach_vm_size_t, |
| 349 | purgeable_volatile_pmap: mach_vm_size_t, |
| 350 | purgeable_volatile_resident: mach_vm_size_t, |
| 351 | purgeable_volatile_virtual: mach_vm_size_t, |
| 352 | compressed: mach_vm_size_t, |
| 353 | compressed_peak: mach_vm_size_t, |
| 354 | compressed_lifetime: mach_vm_size_t, |
| 355 | |
| 356 | // added for rev1 |
| 357 | phys_footprint: mach_vm_size_t, |
| 358 | |
| 359 | // added for rev2 |
| 360 | min_address: mach_vm_address_t, |
| 361 | max_address: mach_vm_address_t, |
| 362 | |
| 363 | // added for rev3 |
| 364 | ledger_phys_footprint_peak: i64, |
| 365 | ledger_purgeable_nonvolatile: i64, |
| 366 | ledger_purgeable_novolatile_compressed: i64, |
| 367 | ledger_purgeable_volatile: i64, |
| 368 | ledger_purgeable_volatile_compressed: i64, |
| 369 | ledger_tag_network_nonvolatile: i64, |
| 370 | ledger_tag_network_nonvolatile_compressed: i64, |
| 371 | ledger_tag_network_volatile: i64, |
| 372 | ledger_tag_network_volatile_compressed: i64, |
| 373 | ledger_tag_media_footprint: i64, |
| 374 | ledger_tag_media_footprint_compressed: i64, |
| 375 | ledger_tag_media_nofootprint: i64, |
| 376 | ledger_tag_media_nofootprint_compressed: i64, |
| 377 | ledger_tag_graphics_footprint: i64, |
| 378 | ledger_tag_graphics_footprint_compressed: i64, |
| 379 | ledger_tag_graphics_nofootprint: i64, |
| 380 | ledger_tag_graphics_nofootprint_compressed: i64, |
| 381 | ledger_tag_neural_footprint: i64, |
| 382 | ledger_tag_neural_footprint_compressed: i64, |
| 383 | ledger_tag_neural_nofootprint: i64, |
| 384 | ledger_tag_neural_nofootprint_compressed: i64, |
| 385 | |
| 386 | // added for rev4 |
| 387 | limit_bytes_remaining: u64, |
| 388 | |
| 389 | // added for rev5 |
| 390 | decompressions: integer_t, |
| 391 | }; |
| 392 | pub const task_vm_info_data_t = task_vm_info; |
| 393 | |
| 394 | pub const boolean_t = c_int; |
| 395 | |
| 396 | pub extern "c" fn mach_vm_protect( |
| 397 | target_task: vm_map_t, |
| 398 | address: mach_vm_address_t, |
| 399 | size: mach_vm_size_t, |
| 400 | set_maximum: boolean_t, |
| 401 | new_protection: std.macho.vm_prot_t, |
| 402 | ) kern_return_t; |
| 403 | |
| 404 | pub extern "c" fn mach_port_deallocate(target_tport: mach_port_name_t, task: mach_port_name_t) kern_return_t; |
| 405 | |
| 406 | pub extern "c" fn task_info( |
| 407 | target_task: task_name_t, |
| 408 | flavor: task_flavor_t, |
| 409 | task_info_out: task_info_t, |
| 410 | task_info_outCnt: *mach_msg_type_number_t, |
| 411 | ) kern_return_t; |
| 412 | pub extern "c" fn _host_page_size(task: mach_port_t, size: *vm_size_t) kern_return_t; |
| 413 | pub extern "c" fn vm_deallocate(target_task: vm_map_t, address: vm_address_t, size: vm_size_t) kern_return_t; |
| 414 | pub extern "c" fn vm_machine_attribute( |
| 415 | target_task: vm_map_t, |
| 416 | address: vm_address_t, |
| 417 | size: vm_size_t, |
| 418 | attribute: vm_machine_attribute_t, |
| 419 | value: *vm_machine_attribute_val_t, |
| 420 | ) kern_return_t; |
| 143 | 421 | |
| 144 | 422 | pub const sf_hdtr = extern struct { |
| 145 | 423 | headers: [*]const iovec_const, |
| ... | ... | @@ -622,6 +900,15 @@ pub const mach_timespec_t = extern struct { |
| 622 | 900 | }; |
| 623 | 901 | pub const kern_return_t = c_int; |
| 624 | 902 | pub const host_t = mach_port_t; |
| 903 | pub const integer_t = c_int; |
| 904 | pub const task_flavor_t = natural_t; |
| 905 | pub const task_info_t = *integer_t; |
| 906 | pub const task_name_t = mach_port_name_t; |
| 907 | pub const vm_address_t = vm_offset_t; |
| 908 | pub const vm_size_t = mach_vm_size_t; |
| 909 | pub const vm_machine_attribute_t = usize; |
| 910 | pub const vm_machine_attribute_val_t = isize; |
| 911 | |
| 625 | 912 | pub const CALENDAR_CLOCK = 1; |
| 626 | 913 | |
| 627 | 914 | pub const PATH_MAX = 1024; |
| ... | ... | @@ -2051,3 +2338,15 @@ pub const _POSIX_SPAWN_DISABLE_ASLR: c_int = 0x0100; |
| 2051 | 2338 | pub const POSIX_SPAWN_SETSID: c_int = 0x0400; |
| 2052 | 2339 | pub const _POSIX_SPAWN_RESLIDE: c_int = 0x0800; |
| 2053 | 2340 | pub const POSIX_SPAWN_CLOEXEC_DEFAULT: c_int = 0x4000; |
| 2341 | |
| 2342 | pub const PT_TRACE_ME = 0; |
| 2343 | pub const PT_CONTINUE = 7; |
| 2344 | pub const PT_KILL = 8; |
| 2345 | pub const PT_STEP = 9; |
| 2346 | pub const PT_DETACH = 11; |
| 2347 | pub const PT_ATTACHEXC = 14; |
| 2348 | pub const PT_DENY_ATTACH = 31; |
| 2349 | |
| 2350 | pub const caddr_t = ?[*]u8; |
| 2351 | |
| 2352 | pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int; |