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