1*4d495c6eSApple OSS Distributions#!/usr/bin/env recon 2*4d495c6eSApple OSS Distributions 3*4d495c6eSApple OSS Distributionslocal cjson = require 'cjson' 4*4d495c6eSApple OSS Distributionslocal lpeg = require 'lpeg' 5*4d495c6eSApple OSS Distributionslpeg.locale(lpeg) 6*4d495c6eSApple OSS Distributions 7*4d495c6eSApple OSS Distributions-- Only certain regions of the master file should be parsed. 8*4d495c6eSApple OSS Distributions-- The convention is that any `#if/#else/#endif` clauses are parsed, assuming the condition is true/defined, except for `COMPAT_GETFSSTAT`. 9*4d495c6eSApple OSS Distributions 10*4d495c6eSApple OSS Distributionslocal region_state = { valid = true, } 11*4d495c6eSApple OSS Distributionslocal function in_valid_region(line) 12*4d495c6eSApple OSS Distributions -- Only C preprocessor directives can affect the region's validity. 13*4d495c6eSApple OSS Distributions if line:sub(1, 1) ~= '#' then 14*4d495c6eSApple OSS Distributions return region_state.valid 15*4d495c6eSApple OSS Distributions end 16*4d495c6eSApple OSS Distributions 17*4d495c6eSApple OSS Distributions -- This is the only macro definition that is assumed to be undefined. 18*4d495c6eSApple OSS Distributions local assume_defined = not line:match('COMPAT_GETFSSTAT') 19*4d495c6eSApple OSS Distributions if line:match('^#if') then 20*4d495c6eSApple OSS Distributions region_state.valid = assume_defined 21*4d495c6eSApple OSS Distributions elseif line:match('^#else') then 22*4d495c6eSApple OSS Distributions region_state.valid = not region_state.valid 23*4d495c6eSApple OSS Distributions elseif line:match('^#endif') then 24*4d495c6eSApple OSS Distributions region_state.valid = true 25*4d495c6eSApple OSS Distributions end 26*4d495c6eSApple OSS Distributionsend 27*4d495c6eSApple OSS Distributions 28*4d495c6eSApple OSS Distributions-- Parse a syscall declaration line from `bsd/kern/syscalls.master` into a table with `name`, `number`, `arguments`, and `old` keys. 29*4d495c6eSApple OSS Distributions 30*4d495c6eSApple OSS Distributions-- Primitive tokens. 31*4d495c6eSApple OSS Distributionslocal space = lpeg.S(' \t')^0 32*4d495c6eSApple OSS Distributionslocal identifier = (lpeg.alnum + lpeg.P('_'))^1 33*4d495c6eSApple OSS Distributionslocal numeric = lpeg.digit^1 / tonumber 34*4d495c6eSApple OSS Distributions 35*4d495c6eSApple OSS Distributions-- Matching the function name of the syscall declaration. 36*4d495c6eSApple OSS Distributionslocal function_ptn = lpeg.Cg(identifier^1, 'name') * lpeg.P('(') 37*4d495c6eSApple OSS Distributionslocal nosys_ptn = lpeg.P('e')^-1 * lpeg.P('nosys(') 38*4d495c6eSApple OSS Distributions 39*4d495c6eSApple OSS Distributions-- Matching an argument list. 40*4d495c6eSApple OSS Distributionslocal arg = lpeg.C((1 - lpeg.S(',)'))^1) 41*4d495c6eSApple OSS Distributionslocal args_ptn = lpeg.Ct(arg * (lpeg.P(',') * space * arg)^0) 42*4d495c6eSApple OSS Distributions 43*4d495c6eSApple OSS Distributions-- Matching a normal C-style declaration of the syscall. 44*4d495c6eSApple OSS Distributionslocal decl_ptn = (1 - function_ptn)^1 * (function_ptn - nosys_ptn) * 45*4d495c6eSApple OSS Distributions lpeg.Cg(args_ptn, 'arguments') 46*4d495c6eSApple OSS Distributions 47*4d495c6eSApple OSS Distributions-- Matching an old breadcrumb, with empty arguments table. 48*4d495c6eSApple OSS Distributionslocal old_ptn = lpeg.P('old') * space * lpeg.Cg(identifier^1, 'name') * 49*4d495c6eSApple OSS Distributions lpeg.Cg(lpeg.Cc(true), 'old') * lpeg.Cg(lpeg.Cc({}), 'arguments') 50*4d495c6eSApple OSS Distributionslocal old_decl_ptn = (1 - old_ptn)^1 * old_ptn 51*4d495c6eSApple OSS Distributions 52*4d495c6eSApple OSS Distributionslocal syscall_ptn = lpeg.Ct(lpeg.Cg(numeric, 'number') * 53*4d495c6eSApple OSS Distributions (decl_ptn + old_decl_ptn)) 54*4d495c6eSApple OSS Distributions 55*4d495c6eSApple OSS Distributionslocal bsd_syscalls = {} 56*4d495c6eSApple OSS Distributionsfor line in io.stdin:lines() do 57*4d495c6eSApple OSS Distributions if in_valid_region(line) then 58*4d495c6eSApple OSS Distributions bsd_syscalls[#bsd_syscalls + 1] = syscall_ptn:match(line) 59*4d495c6eSApple OSS Distributions end 60*4d495c6eSApple OSS Distributionsend 61*4d495c6eSApple OSS Distributions 62*4d495c6eSApple OSS Distributionslocal syscalls = { 63*4d495c6eSApple OSS Distributions bsd_syscalls = bsd_syscalls, 64*4d495c6eSApple OSS Distributions mach_syscalls = { 65*4d495c6eSApple OSS Distributions -- Duplicate the names from `mach_trap_table` here. 66*4d495c6eSApple OSS Distributions { number = 10, name = 'mach_vm_allocate', 67*4d495c6eSApple OSS Distributions arguments = { 68*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 69*4d495c6eSApple OSS Distributions 'mach_vm_address_t *address', 70*4d495c6eSApple OSS Distributions 'mach_vm_size_t size', 71*4d495c6eSApple OSS Distributions 'int flags', 72*4d495c6eSApple OSS Distributions }, 73*4d495c6eSApple OSS Distributions }, 74*4d495c6eSApple OSS Distributions { number = 11, name = 'mach_vm_purgable_control', 75*4d495c6eSApple OSS Distributions arguments = { 76*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 77*4d495c6eSApple OSS Distributions 'mach_vm_offset_t address', 78*4d495c6eSApple OSS Distributions 'vm_purgable_t control', 79*4d495c6eSApple OSS Distributions 'int *state', 80*4d495c6eSApple OSS Distributions }, 81*4d495c6eSApple OSS Distributions }, 82*4d495c6eSApple OSS Distributions { number = 12, name = 'mach_vm_deallocate', 83*4d495c6eSApple OSS Distributions arguments = { 84*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 85*4d495c6eSApple OSS Distributions 'mach_vm_address_t address', 86*4d495c6eSApple OSS Distributions 'mach_vm_size_t size', 87*4d495c6eSApple OSS Distributions }, 88*4d495c6eSApple OSS Distributions }, 89*4d495c6eSApple OSS Distributions { number = 13, name = 'task_dyld_process_info_notify_get', 90*4d495c6eSApple OSS Distributions arguments = { 91*4d495c6eSApple OSS Distributions 'mach_port_name_array_t names_addr', 92*4d495c6eSApple OSS Distributions 'natural_t *names_count_addr', 93*4d495c6eSApple OSS Distributions }, 94*4d495c6eSApple OSS Distributions }, 95*4d495c6eSApple OSS Distributions { number = 14, name = 'mach_vm_protect', 96*4d495c6eSApple OSS Distributions arguments = { 97*4d495c6eSApple OSS Distributions 'mach_port_name_t task', 98*4d495c6eSApple OSS Distributions 'mach_vm_address_t address', 99*4d495c6eSApple OSS Distributions 'mach_vm_size_t size', 100*4d495c6eSApple OSS Distributions 'boolean_t set_maximum', 101*4d495c6eSApple OSS Distributions 'vm_prot_t new_protection', 102*4d495c6eSApple OSS Distributions } 103*4d495c6eSApple OSS Distributions }, 104*4d495c6eSApple OSS Distributions { number = 15, name = 'mach_vm_map', 105*4d495c6eSApple OSS Distributions arguments = { 106*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 107*4d495c6eSApple OSS Distributions 'mach_vm_address_t *address', 108*4d495c6eSApple OSS Distributions 'mach_vm_size_t size', 109*4d495c6eSApple OSS Distributions 'mach_vm_offset_t mask', 110*4d495c6eSApple OSS Distributions 'int flags', 111*4d495c6eSApple OSS Distributions 'mem_entry_name_port_t object', 112*4d495c6eSApple OSS Distributions 'memory_object_offset_t offset', 113*4d495c6eSApple OSS Distributions 'boolean_t copy', 114*4d495c6eSApple OSS Distributions 'vm_prot_t cur_protection', 115*4d495c6eSApple OSS Distributions 'vm_prot_t max_protection', 116*4d495c6eSApple OSS Distributions 'vm_inherit_t inheritance', 117*4d495c6eSApple OSS Distributions }, 118*4d495c6eSApple OSS Distributions }, 119*4d495c6eSApple OSS Distributions { number = 16, name = 'mach_port_allocate', 120*4d495c6eSApple OSS Distributions arguments = { 121*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 122*4d495c6eSApple OSS Distributions 'mach_port_right_t right', 123*4d495c6eSApple OSS Distributions 'mach_port_name_t *name', 124*4d495c6eSApple OSS Distributions }, 125*4d495c6eSApple OSS Distributions }, 126*4d495c6eSApple OSS Distributions 127*4d495c6eSApple OSS Distributions { number = 18, name = 'mach_port_deallocate', 128*4d495c6eSApple OSS Distributions arguments = { 129*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 130*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 131*4d495c6eSApple OSS Distributions }, 132*4d495c6eSApple OSS Distributions }, 133*4d495c6eSApple OSS Distributions { number = 19, name = 'mach_port_mod_refs', 134*4d495c6eSApple OSS Distributions arguments = { 135*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 136*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 137*4d495c6eSApple OSS Distributions 'mach_port_right_t right', 138*4d495c6eSApple OSS Distributions 'mach_port_delta_t delta', 139*4d495c6eSApple OSS Distributions }, 140*4d495c6eSApple OSS Distributions }, 141*4d495c6eSApple OSS Distributions { number = 20, name = 'mach_port_move_member', 142*4d495c6eSApple OSS Distributions arguments = { 143*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 144*4d495c6eSApple OSS Distributions 'mach_port_name_t member', 145*4d495c6eSApple OSS Distributions 'mach_port_name_t after', 146*4d495c6eSApple OSS Distributions }, 147*4d495c6eSApple OSS Distributions }, 148*4d495c6eSApple OSS Distributions { number = 21, name = 'mach_port_insert_right', 149*4d495c6eSApple OSS Distributions arguments = { 150*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 151*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 152*4d495c6eSApple OSS Distributions 'mach_port_name_t poly', 153*4d495c6eSApple OSS Distributions 'mach_msg_type_name_t polyPoly', 154*4d495c6eSApple OSS Distributions }, 155*4d495c6eSApple OSS Distributions }, 156*4d495c6eSApple OSS Distributions { number = 22, name = 'mach_port_insert_member', 157*4d495c6eSApple OSS Distributions arguments = { 158*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 159*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 160*4d495c6eSApple OSS Distributions 'mach_port_name_t pset', 161*4d495c6eSApple OSS Distributions }, 162*4d495c6eSApple OSS Distributions }, 163*4d495c6eSApple OSS Distributions { number = 23, name = 'mach_port_extract_member', 164*4d495c6eSApple OSS Distributions arguments = { 165*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 166*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 167*4d495c6eSApple OSS Distributions 'mach_port_name_t pset', 168*4d495c6eSApple OSS Distributions }, 169*4d495c6eSApple OSS Distributions }, 170*4d495c6eSApple OSS Distributions { number = 24, name = 'mach_port_construct', 171*4d495c6eSApple OSS Distributions arguments = { 172*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 173*4d495c6eSApple OSS Distributions 'mach_port_options_t *options', 174*4d495c6eSApple OSS Distributions 'uint64_t context', 175*4d495c6eSApple OSS Distributions 'mach_port_name_t *name', 176*4d495c6eSApple OSS Distributions }, 177*4d495c6eSApple OSS Distributions }, 178*4d495c6eSApple OSS Distributions { number = 25, name = 'mach_port_destruct', 179*4d495c6eSApple OSS Distributions arguments = { 180*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 181*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 182*4d495c6eSApple OSS Distributions 'mach_port_delta_t srdelta', 183*4d495c6eSApple OSS Distributions 'uint64_t guard', 184*4d495c6eSApple OSS Distributions }, 185*4d495c6eSApple OSS Distributions }, 186*4d495c6eSApple OSS Distributions { number = 26, name = 'mach_reply_port', 187*4d495c6eSApple OSS Distributions arguments = { 'void' }, 188*4d495c6eSApple OSS Distributions }, 189*4d495c6eSApple OSS Distributions { number = 27, name = 'thread_self', 190*4d495c6eSApple OSS Distributions arguments = { 'void' }, 191*4d495c6eSApple OSS Distributions }, 192*4d495c6eSApple OSS Distributions { number = 28, name = 'task_self', 193*4d495c6eSApple OSS Distributions arguments = { 'void' }, 194*4d495c6eSApple OSS Distributions }, 195*4d495c6eSApple OSS Distributions { number = 29, name = 'host_self', 196*4d495c6eSApple OSS Distributions arguments = { 'void' }, 197*4d495c6eSApple OSS Distributions }, 198*4d495c6eSApple OSS Distributions 199*4d495c6eSApple OSS Distributions { number = 31, name = 'mach_msg', 200*4d495c6eSApple OSS Distributions arguments = { 201*4d495c6eSApple OSS Distributions 'mach_msg_header_t *msg', 202*4d495c6eSApple OSS Distributions 'mach_msg_option_t option', 203*4d495c6eSApple OSS Distributions 'mach_msg_size_t send_size', 204*4d495c6eSApple OSS Distributions 'mach_msg_size_t rcv_size', 205*4d495c6eSApple OSS Distributions 'mach_port_name_t rcv_name', 206*4d495c6eSApple OSS Distributions 'mach_msg_timeout_t timeout', 207*4d495c6eSApple OSS Distributions 'mach_port_name_t notify', 208*4d495c6eSApple OSS Distributions }, 209*4d495c6eSApple OSS Distributions }, 210*4d495c6eSApple OSS Distributions { number = 32, name = 'mach_msg_overwrite', 211*4d495c6eSApple OSS Distributions arguments = { 212*4d495c6eSApple OSS Distributions 'mach_msg_header_t *msg', 213*4d495c6eSApple OSS Distributions 'mach_msg_option_t option', 214*4d495c6eSApple OSS Distributions 'mach_msg_size_t send_size', 215*4d495c6eSApple OSS Distributions 'mach_msg_size_t rcv_size', 216*4d495c6eSApple OSS Distributions 'mach_port_name_t rcv_name', 217*4d495c6eSApple OSS Distributions 'mach_msg_timeout_t timeout', 218*4d495c6eSApple OSS Distributions 'mach_port_name_t notify', 219*4d495c6eSApple OSS Distributions 'mach_msg_header_t *rcv_msg', 220*4d495c6eSApple OSS Distributions 'mach_msg_size_t rcv_limit', 221*4d495c6eSApple OSS Distributions }, 222*4d495c6eSApple OSS Distributions }, 223*4d495c6eSApple OSS Distributions { number = 33, name = 'semaphore_signal', 224*4d495c6eSApple OSS Distributions arguments = { 225*4d495c6eSApple OSS Distributions 'mach_port_name_t signal_name', 226*4d495c6eSApple OSS Distributions }, 227*4d495c6eSApple OSS Distributions }, 228*4d495c6eSApple OSS Distributions { number = 34, name = 'semaphore_signal_all', 229*4d495c6eSApple OSS Distributions arguments = { 230*4d495c6eSApple OSS Distributions 'mach_port_name_t signal_name', 231*4d495c6eSApple OSS Distributions }, 232*4d495c6eSApple OSS Distributions }, 233*4d495c6eSApple OSS Distributions { number = 35, name = 'semaphore_signal_thread', 234*4d495c6eSApple OSS Distributions arguments = { 235*4d495c6eSApple OSS Distributions 'mach_port_name_t signal_name', 236*4d495c6eSApple OSS Distributions 'mach_port_name_t thread_name', 237*4d495c6eSApple OSS Distributions }, 238*4d495c6eSApple OSS Distributions }, 239*4d495c6eSApple OSS Distributions { number = 36, name = 'semaphore_wait', 240*4d495c6eSApple OSS Distributions arguments = { 241*4d495c6eSApple OSS Distributions 'mach_port_name_t wait_name', 242*4d495c6eSApple OSS Distributions }, 243*4d495c6eSApple OSS Distributions }, 244*4d495c6eSApple OSS Distributions { number = 37, name = 'semaphore_wait_signal', 245*4d495c6eSApple OSS Distributions arguments = { 246*4d495c6eSApple OSS Distributions 'mach_port_name_t wait_name', 247*4d495c6eSApple OSS Distributions 'mach_port_name_t signal_name', 248*4d495c6eSApple OSS Distributions }, 249*4d495c6eSApple OSS Distributions }, 250*4d495c6eSApple OSS Distributions { number = 38, name = 'semaphore_timedwait', 251*4d495c6eSApple OSS Distributions arguments = { 252*4d495c6eSApple OSS Distributions 'mach_port_name_t wait_name', 253*4d495c6eSApple OSS Distributions 'unsigned int sec', 254*4d495c6eSApple OSS Distributions 'clock_res_t nsec', 255*4d495c6eSApple OSS Distributions }, 256*4d495c6eSApple OSS Distributions }, 257*4d495c6eSApple OSS Distributions { number = 39, name = 'semaphore_timedwait_signal', 258*4d495c6eSApple OSS Distributions arguments = { 259*4d495c6eSApple OSS Distributions 'mach_port_name_t wait_name', 260*4d495c6eSApple OSS Distributions 'mach_port_name_t signal_name', 261*4d495c6eSApple OSS Distributions 'unsigned int sec', 262*4d495c6eSApple OSS Distributions 'clock_res_t nsec', 263*4d495c6eSApple OSS Distributions }, 264*4d495c6eSApple OSS Distributions }, 265*4d495c6eSApple OSS Distributions { number = 40, name = 'mach_port_get_attributes', 266*4d495c6eSApple OSS Distributions arguments = { 267*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 268*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 269*4d495c6eSApple OSS Distributions 'mach_port_flavor_t flavor', 270*4d495c6eSApple OSS Distributions 'mach_port_info_t port_info_out', 271*4d495c6eSApple OSS Distributions 'mach_msg_type_number_t *port_info_outCnt', 272*4d495c6eSApple OSS Distributions }, 273*4d495c6eSApple OSS Distributions }, 274*4d495c6eSApple OSS Distributions { number = 41, name = 'mach_port_guard', 275*4d495c6eSApple OSS Distributions arguments = { 276*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 277*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 278*4d495c6eSApple OSS Distributions 'uint64_t guard', 279*4d495c6eSApple OSS Distributions 'boolean_t strict', 280*4d495c6eSApple OSS Distributions }, 281*4d495c6eSApple OSS Distributions }, 282*4d495c6eSApple OSS Distributions { number = 42, name = 'mach_port_unguard', 283*4d495c6eSApple OSS Distributions arguments = { 284*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 285*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 286*4d495c6eSApple OSS Distributions 'uint64_t guard', 287*4d495c6eSApple OSS Distributions }, 288*4d495c6eSApple OSS Distributions }, 289*4d495c6eSApple OSS Distributions { number = 43, name = 'mach_generate_activity_id', 290*4d495c6eSApple OSS Distributions arguments = { 291*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 292*4d495c6eSApple OSS Distributions 'int count', 293*4d495c6eSApple OSS Distributions 'uint64_t *activity_id', 294*4d495c6eSApple OSS Distributions }, 295*4d495c6eSApple OSS Distributions }, 296*4d495c6eSApple OSS Distributions { number = 44, name = 'task_name_for_pid', 297*4d495c6eSApple OSS Distributions arguments = { 298*4d495c6eSApple OSS Distributions 'mach_port_name_t target_tport', 299*4d495c6eSApple OSS Distributions 'int pid', 300*4d495c6eSApple OSS Distributions 'mach_port_name_t *tn', 301*4d495c6eSApple OSS Distributions }, 302*4d495c6eSApple OSS Distributions }, 303*4d495c6eSApple OSS Distributions { number = 45, name = 'task_for_pid', 304*4d495c6eSApple OSS Distributions arguments = { 305*4d495c6eSApple OSS Distributions 'mach_port_name_t target_tport', 306*4d495c6eSApple OSS Distributions 'int pid', 307*4d495c6eSApple OSS Distributions 'mach_port_name_t *t', 308*4d495c6eSApple OSS Distributions }, 309*4d495c6eSApple OSS Distributions }, 310*4d495c6eSApple OSS Distributions { number = 46, name = 'pid_for_task', 311*4d495c6eSApple OSS Distributions arguments = { 312*4d495c6eSApple OSS Distributions 'mach_port_name_t t', 313*4d495c6eSApple OSS Distributions 'int *x', 314*4d495c6eSApple OSS Distributions }, 315*4d495c6eSApple OSS Distributions }, 316*4d495c6eSApple OSS Distributions { number = 47, name = 'mach_msg2', 317*4d495c6eSApple OSS Distributions arguments = { 318*4d495c6eSApple OSS Distributions 'void *data', 319*4d495c6eSApple OSS Distributions 'mach_msg_option64_t option64', 320*4d495c6eSApple OSS Distributions 'mach_msg_header_t header', 321*4d495c6eSApple OSS Distributions 'mach_msg_size_t send_size', 322*4d495c6eSApple OSS Distributions 'mach_msg_size_t rcv_size', 323*4d495c6eSApple OSS Distributions 'mach_port_t rcv_name', 324*4d495c6eSApple OSS Distributions 'uint64_t timeout', 325*4d495c6eSApple OSS Distributions 'uint32_t priority', 326*4d495c6eSApple OSS Distributions }, 327*4d495c6eSApple OSS Distributions }, 328*4d495c6eSApple OSS Distributions { number = 48, name = 'macx_swapon', 329*4d495c6eSApple OSS Distributions arguments = { 330*4d495c6eSApple OSS Distributions 'uint64_t filename', 331*4d495c6eSApple OSS Distributions 'int flags', 332*4d495c6eSApple OSS Distributions 'int size', 333*4d495c6eSApple OSS Distributions 'int priority', 334*4d495c6eSApple OSS Distributions }, 335*4d495c6eSApple OSS Distributions }, 336*4d495c6eSApple OSS Distributions { number = 49, name = 'macx_swapoff', 337*4d495c6eSApple OSS Distributions arguments = { 338*4d495c6eSApple OSS Distributions 'uint64_t filename', 339*4d495c6eSApple OSS Distributions 'int flags', 340*4d495c6eSApple OSS Distributions }, 341*4d495c6eSApple OSS Distributions }, 342*4d495c6eSApple OSS Distributions { number = 50, name = 'thread_get_special_reply_port', 343*4d495c6eSApple OSS Distributions arguments = { 'void' }, 344*4d495c6eSApple OSS Distributions }, 345*4d495c6eSApple OSS Distributions { number = 51, name = 'macx_triggers', 346*4d495c6eSApple OSS Distributions arguments = { 347*4d495c6eSApple OSS Distributions 'int hi_water', 348*4d495c6eSApple OSS Distributions 'int low_water', 349*4d495c6eSApple OSS Distributions 'int flags', 350*4d495c6eSApple OSS Distributions 'mach_port_t alert_port', 351*4d495c6eSApple OSS Distributions }, 352*4d495c6eSApple OSS Distributions }, 353*4d495c6eSApple OSS Distributions { number = 52, name = 'macx_backing_store_suspend', 354*4d495c6eSApple OSS Distributions arguments = { 355*4d495c6eSApple OSS Distributions 'boolean_t suspend', 356*4d495c6eSApple OSS Distributions }, 357*4d495c6eSApple OSS Distributions }, 358*4d495c6eSApple OSS Distributions { number = 53, name = 'macx_backing_store_recovery', 359*4d495c6eSApple OSS Distributions arguments = { 360*4d495c6eSApple OSS Distributions 'int pid', 361*4d495c6eSApple OSS Distributions }, 362*4d495c6eSApple OSS Distributions }, 363*4d495c6eSApple OSS Distributions 364*4d495c6eSApple OSS Distributions { number = 58, name = 'pfz_exit', 365*4d495c6eSApple OSS Distributions arguments = { 'void' }, 366*4d495c6eSApple OSS Distributions }, 367*4d495c6eSApple OSS Distributions { number = 59, name = 'swtch_pri', 368*4d495c6eSApple OSS Distributions arguments = { 369*4d495c6eSApple OSS Distributions 'int pri', 370*4d495c6eSApple OSS Distributions }, 371*4d495c6eSApple OSS Distributions }, 372*4d495c6eSApple OSS Distributions { number = 60, name = 'swtch', 373*4d495c6eSApple OSS Distributions arguments = { 'void' }, 374*4d495c6eSApple OSS Distributions }, 375*4d495c6eSApple OSS Distributions { number = 61, name = 'thread_switch', 376*4d495c6eSApple OSS Distributions arguments = { 377*4d495c6eSApple OSS Distributions 'mach_port_name_t thread_name', 378*4d495c6eSApple OSS Distributions 'int option', 379*4d495c6eSApple OSS Distributions 'mach_msg_timeout_t option_time', 380*4d495c6eSApple OSS Distributions }, 381*4d495c6eSApple OSS Distributions }, 382*4d495c6eSApple OSS Distributions { number = 62, name = 'clock_sleep', 383*4d495c6eSApple OSS Distributions arguments = { 384*4d495c6eSApple OSS Distributions 'mach_port_name_t clock_name', 385*4d495c6eSApple OSS Distributions 'sleep_type_t sleep_type', 386*4d495c6eSApple OSS Distributions 'int sleep_sec', 387*4d495c6eSApple OSS Distributions 'int sleep_nsec', 388*4d495c6eSApple OSS Distributions 'mach_timespec_t *wakeup_time', 389*4d495c6eSApple OSS Distributions }, 390*4d495c6eSApple OSS Distributions }, 391*4d495c6eSApple OSS Distributions { number = 63, name = 'mach_vm_reclaim_update_kernel_accounting_trap', 392*4d495c6eSApple OSS Distributions arguments = { 393*4d495c6eSApple OSS Distributions 'mach_port_name_t target', 394*4d495c6eSApple OSS Distributions 'uint64_t *bytes_reclaimed', 395*4d495c6eSApple OSS Distributions }, 396*4d495c6eSApple OSS Distributions }, 397*4d495c6eSApple OSS Distributions 398*4d495c6eSApple OSS Distributions { number = 70, name = 'host_create_mach_voucher', 399*4d495c6eSApple OSS Distributions arguments = { 400*4d495c6eSApple OSS Distributions 'mach_port_name_t host', 401*4d495c6eSApple OSS Distributions 'mach_voucher_attr_raw_recipe_array_t recipes', 402*4d495c6eSApple OSS Distributions 'int recipes_size', 403*4d495c6eSApple OSS Distributions 'mach_port_name_t *voucher', 404*4d495c6eSApple OSS Distributions }, 405*4d495c6eSApple OSS Distributions }, 406*4d495c6eSApple OSS Distributions 407*4d495c6eSApple OSS Distributions { number = 72, name = 'mach_voucher_extract_attr_recipe', 408*4d495c6eSApple OSS Distributions arguments = { 409*4d495c6eSApple OSS Distributions 'mach_port_name_t voucher_name', 410*4d495c6eSApple OSS Distributions 'mach_voucher_attr_key_t key', 411*4d495c6eSApple OSS Distributions 'mach_voucher_attr_raw_recipe_t recipe', 412*4d495c6eSApple OSS Distributions 'mach_msg_type_number_t *recipe_size', 413*4d495c6eSApple OSS Distributions }, 414*4d495c6eSApple OSS Distributions }, 415*4d495c6eSApple OSS Distributions 416*4d495c6eSApple OSS Distributions { number = 76, name = 'mach_port_type', 417*4d495c6eSApple OSS Distributions arguments = { 418*4d495c6eSApple OSS Distributions 'ipc_space_t task', 419*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 420*4d495c6eSApple OSS Distributions 'mach_port_type_t *ptype', 421*4d495c6eSApple OSS Distributions }, 422*4d495c6eSApple OSS Distributions }, 423*4d495c6eSApple OSS Distributions { number = 77, name = 'mach_port_request_notification', 424*4d495c6eSApple OSS Distributions arguments = { 425*4d495c6eSApple OSS Distributions 'ipc_space_t task', 426*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 427*4d495c6eSApple OSS Distributions 'mach_msg_id_t msgid', 428*4d495c6eSApple OSS Distributions 'mach_port_mscount_t sync', 429*4d495c6eSApple OSS Distributions 'mach_port_name_t notify', 430*4d495c6eSApple OSS Distributions 'mach_msg_type_name_t notifyPoly', 431*4d495c6eSApple OSS Distributions 'mach_port_name_t *previous', 432*4d495c6eSApple OSS Distributions }, 433*4d495c6eSApple OSS Distributions }, 434*4d495c6eSApple OSS Distributions { number = 88, name = 'exclaves_ctl', 435*4d495c6eSApple OSS Distributions arguments = { 436*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 437*4d495c6eSApple OSS Distributions 'uint32_t operation_and_flags', 438*4d495c6eSApple OSS Distributions 'uint64_t identifier', 439*4d495c6eSApple OSS Distributions 'mach_vm_address_t buffer', 440*4d495c6eSApple OSS Distributions 'mach_vm_size_t size', 441*4d495c6eSApple OSS Distributions 'mach_vm_size_t size2', 442*4d495c6eSApple OSS Distributions 'mach_vm_size_t offset', 443*4d495c6eSApple OSS Distributions 'mach_vm_address_t status', 444*4d495c6eSApple OSS Distributions }, 445*4d495c6eSApple OSS Distributions }, 446*4d495c6eSApple OSS Distributions 447*4d495c6eSApple OSS Distributions { number = 89, name = 'mach_timebase_info', 448*4d495c6eSApple OSS Distributions arguments = { 449*4d495c6eSApple OSS Distributions 'mach_timebase_info_t info', 450*4d495c6eSApple OSS Distributions }, 451*4d495c6eSApple OSS Distributions }, 452*4d495c6eSApple OSS Distributions { number = 90, name = 'mach_wait_until', 453*4d495c6eSApple OSS Distributions arguments = { 454*4d495c6eSApple OSS Distributions 'uint64_t deadline', 455*4d495c6eSApple OSS Distributions }, 456*4d495c6eSApple OSS Distributions }, 457*4d495c6eSApple OSS Distributions { number = 91, name = 'mk_timer_create', 458*4d495c6eSApple OSS Distributions arguments = { 'void' }, 459*4d495c6eSApple OSS Distributions }, 460*4d495c6eSApple OSS Distributions { number = 92, name = 'mk_timer_destroy', 461*4d495c6eSApple OSS Distributions arguments = { 462*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 463*4d495c6eSApple OSS Distributions }, 464*4d495c6eSApple OSS Distributions }, 465*4d495c6eSApple OSS Distributions { number = 93, name = 'mk_timer_arm', 466*4d495c6eSApple OSS Distributions arguments = { 467*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 468*4d495c6eSApple OSS Distributions 'uint64_t expire_time', 469*4d495c6eSApple OSS Distributions }, 470*4d495c6eSApple OSS Distributions }, 471*4d495c6eSApple OSS Distributions { number = 94, name = 'mk_timer_cancel', 472*4d495c6eSApple OSS Distributions arguments = { 473*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 474*4d495c6eSApple OSS Distributions 'uint64_t *result_time', 475*4d495c6eSApple OSS Distributions }, 476*4d495c6eSApple OSS Distributions }, 477*4d495c6eSApple OSS Distributions { number = 95, name = 'mk_timer_arm_leeway', 478*4d495c6eSApple OSS Distributions arguments = { 479*4d495c6eSApple OSS Distributions 'mach_port_name_t name', 480*4d495c6eSApple OSS Distributions 'uint64_t mk_timer_flags', 481*4d495c6eSApple OSS Distributions 'uint64_t mk_timer_expire_time', 482*4d495c6eSApple OSS Distributions 'uint64_t mk_timer_leeway', 483*4d495c6eSApple OSS Distributions }, 484*4d495c6eSApple OSS Distributions }, 485*4d495c6eSApple OSS Distributions { number = 96, name = 'debug_control_port_for_pid', 486*4d495c6eSApple OSS Distributions arguments = { 487*4d495c6eSApple OSS Distributions 'mach_port_name_t target_tport', 488*4d495c6eSApple OSS Distributions 'int pid', 489*4d495c6eSApple OSS Distributions 'mach_port_name_t *t', 490*4d495c6eSApple OSS Distributions }, 491*4d495c6eSApple OSS Distributions }, 492*4d495c6eSApple OSS Distributions 493*4d495c6eSApple OSS Distributions { number = 100, name = 'iokit_user_client', 494*4d495c6eSApple OSS Distributions arguments = { 495*4d495c6eSApple OSS Distributions 'void *userClientRef', 496*4d495c6eSApple OSS Distributions 'uint32_t index', 497*4d495c6eSApple OSS Distributions 'void *p1', 498*4d495c6eSApple OSS Distributions 'void *p2', 499*4d495c6eSApple OSS Distributions 'void *p3', 500*4d495c6eSApple OSS Distributions 'void *p4', 501*4d495c6eSApple OSS Distributions 'void *p5', 502*4d495c6eSApple OSS Distributions 'void *p6', 503*4d495c6eSApple OSS Distributions }, 504*4d495c6eSApple OSS Distributions }, 505*4d495c6eSApple OSS Distributions }, 506*4d495c6eSApple OSS Distributions} 507*4d495c6eSApple OSS Distributions 508*4d495c6eSApple OSS Distributions-- Basic sanity checking that the same number isn't claimed by two syscalls. 509*4d495c6eSApple OSS Distributionsfor type, entries in pairs(syscalls) do 510*4d495c6eSApple OSS Distributions local numbers_seen = {} 511*4d495c6eSApple OSS Distributions for _, call in ipairs(entries) do 512*4d495c6eSApple OSS Distributions if numbers_seen[call.number] then 513*4d495c6eSApple OSS Distributions io.stderr:write(('error: %s: saw %d twice: %s and %s\n'):format(type, 514*4d495c6eSApple OSS Distributions call.number, call.name, numbers_seen[call.number])) 515*4d495c6eSApple OSS Distributions os.exit(1) 516*4d495c6eSApple OSS Distributions end 517*4d495c6eSApple OSS Distributions numbers_seen[call.number] = call.name 518*4d495c6eSApple OSS Distributions end 519*4d495c6eSApple OSS Distributionsend 520*4d495c6eSApple OSS Distributions 521*4d495c6eSApple OSS Distributionsprint(cjson.encode(syscalls)) 522