| ... | @@ -6,6 +6,9 @@ const native_arch = builtin.target.cpu.arch; | ... | @@ -6,6 +6,9 @@ const native_arch = builtin.target.cpu.arch; |
| 6 | const maxInt = std.math.maxInt; | 6 | const maxInt = std.math.maxInt; |
| 7 | const iovec_const = std.os.iovec_const; | 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 | const arch_bits = switch (native_arch) { | 12 | const arch_bits = switch (native_arch) { |
| 10 | .aarch64 => @import("darwin/aarch64.zig"), | 13 | .aarch64 => @import("darwin/aarch64.zig"), |
| 11 | .x86_64 => @import("darwin/x86_64.zig"), | 14 | .x86_64 => @import("darwin/x86_64.zig"), |
| ... | @@ -124,8 +127,12 @@ pub extern "c" fn mach_host_self() mach_port_t; | ... | @@ -124,8 +127,12 @@ pub extern "c" fn mach_host_self() mach_port_t; |
| 124 | pub extern "c" fn clock_get_time(clock_serv: clock_serv_t, cur_time: *mach_timespec_t) kern_return_t; | 127 | pub extern "c" fn clock_get_time(clock_serv: clock_serv_t, cur_time: *mach_timespec_t) kern_return_t; |
| 125 | | 128 | |
| 126 | pub const vm_map_t = mach_port_t; | 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 | pub const mach_vm_address_t = usize; | 133 | pub const mach_vm_address_t = usize; |
| 128 | pub const vm_offset_t = usize; | 134 | pub const vm_offset_t = usize; |
| | 135 | pub const mach_vm_size_t = u64; |
| 129 | pub const mach_msg_type_number_t = natural_t; | 136 | pub const mach_msg_type_number_t = natural_t; |
| 130 | | 137 | |
| 131 | extern "c" var mach_task_self_: mach_port_t; | 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,13 +140,284 @@ pub fn mach_task_self() callconv(.C) mach_port_t { |
| 133 | return mach_task_self_; | 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 | pub extern "c" fn task_for_pid(target_tport: mach_port_name_t, pid: pid_t, t: *mach_port_name_t) kern_return_t; | 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 | pub extern "c" fn mach_vm_write( | 156 | pub extern "c" fn mach_vm_write( |
| 138 | target_task: vm_map_t, | 157 | target_task: vm_map_t, |
| 139 | address: mach_vm_address_t, | 158 | address: mach_vm_address_t, |
| 140 | data: vm_offset_t, | 159 | data: vm_offset_t, |
| 141 | data_cnt: mach_msg_type_number_t, | 160 | data_cnt: mach_msg_type_number_t, |
| 142 | ) kern_return_t; | 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 | pub const sf_hdtr = extern struct { | 422 | pub const sf_hdtr = extern struct { |
| 145 | headers: [*]const iovec_const, | 423 | headers: [*]const iovec_const, |
| ... | @@ -622,6 +900,15 @@ pub const mach_timespec_t = extern struct { | ... | @@ -622,6 +900,15 @@ pub const mach_timespec_t = extern struct { |
| 622 | }; | 900 | }; |
| 623 | pub const kern_return_t = c_int; | 901 | pub const kern_return_t = c_int; |
| 624 | pub const host_t = mach_port_t; | 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 | pub const CALENDAR_CLOCK = 1; | 912 | pub const CALENDAR_CLOCK = 1; |
| 626 | | 913 | |
| 627 | pub const PATH_MAX = 1024; | 914 | pub const PATH_MAX = 1024; |
| ... | @@ -2051,3 +2338,15 @@ pub const _POSIX_SPAWN_DISABLE_ASLR: c_int = 0x0100; | ... | @@ -2051,3 +2338,15 @@ pub const _POSIX_SPAWN_DISABLE_ASLR: c_int = 0x0100; |
| 2051 | pub const POSIX_SPAWN_SETSID: c_int = 0x0400; | 2338 | pub const POSIX_SPAWN_SETSID: c_int = 0x0400; |
| 2052 | pub const _POSIX_SPAWN_RESLIDE: c_int = 0x0800; | 2339 | pub const _POSIX_SPAWN_RESLIDE: c_int = 0x0800; |
| 2053 | pub const POSIX_SPAWN_CLOEXEC_DEFAULT: c_int = 0x4000; | 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; |