xref: /xnu-11215/tools/syscall_map.lua (revision 4f1223e8)
15c2921b0SApple OSS Distributions#!/usr/bin/env recon
25c2921b0SApple OSS Distributions
35c2921b0SApple OSS Distributionslocal cjson = require 'cjson'
45c2921b0SApple OSS Distributionslocal lpeg = require 'lpeg'
55c2921b0SApple OSS Distributionslpeg.locale(lpeg)
65c2921b0SApple OSS Distributions
75c2921b0SApple OSS Distributions-- Only certain regions of the master file should be parsed.
85c2921b0SApple OSS Distributions-- The convention is that any `#if/#else/#endif` clauses are parsed, assuming the condition is true/defined, except for `COMPAT_GETFSSTAT`.
95c2921b0SApple OSS Distributions
105c2921b0SApple OSS Distributionslocal region_state = { valid = true, }
115c2921b0SApple OSS Distributionslocal function in_valid_region(line)
125c2921b0SApple OSS Distributions  -- Only C preprocessor directives can affect the region's validity.
135c2921b0SApple OSS Distributions  if line:sub(1, 1) ~= '#' then
145c2921b0SApple OSS Distributions    return region_state.valid
155c2921b0SApple OSS Distributions  end
165c2921b0SApple OSS Distributions
175c2921b0SApple OSS Distributions  -- This is the only macro definition that is assumed to be undefined.
185c2921b0SApple OSS Distributions  local assume_defined = not line:match('COMPAT_GETFSSTAT')
195c2921b0SApple OSS Distributions  if line:match('^#if') then
205c2921b0SApple OSS Distributions    region_state.valid = assume_defined
215c2921b0SApple OSS Distributions  elseif line:match('^#else') then
225c2921b0SApple OSS Distributions    region_state.valid = not region_state.valid
235c2921b0SApple OSS Distributions  elseif line:match('^#endif') then
245c2921b0SApple OSS Distributions    region_state.valid = true
255c2921b0SApple OSS Distributions  end
265c2921b0SApple OSS Distributionsend
275c2921b0SApple OSS Distributions
285c2921b0SApple OSS Distributions-- Parse a syscall declaration line from `bsd/kern/syscalls.master` into a table with `name`, `number`, `arguments`, and `old` keys.
295c2921b0SApple OSS Distributions
305c2921b0SApple OSS Distributions-- Primitive tokens.
315c2921b0SApple OSS Distributionslocal space = lpeg.S(' \t')^0
325c2921b0SApple OSS Distributionslocal identifier = (lpeg.alnum + lpeg.P('_'))^1
335c2921b0SApple OSS Distributionslocal numeric = lpeg.digit^1 / tonumber
345c2921b0SApple OSS Distributions
355c2921b0SApple OSS Distributions-- Matching the function name of the syscall declaration.
365c2921b0SApple OSS Distributionslocal function_ptn = lpeg.Cg(identifier^1, 'name') * lpeg.P('(')
375c2921b0SApple OSS Distributionslocal nosys_ptn = lpeg.P('e')^-1 * lpeg.P('nosys(')
385c2921b0SApple OSS Distributions
395c2921b0SApple OSS Distributions-- Matching an argument list.
405c2921b0SApple OSS Distributionslocal arg = lpeg.C((1 - lpeg.S(',)'))^1)
415c2921b0SApple OSS Distributionslocal args_ptn = lpeg.Ct(arg * (lpeg.P(',') * space * arg)^0)
425c2921b0SApple OSS Distributions
435c2921b0SApple OSS Distributions-- Matching a normal C-style declaration of the syscall.
445c2921b0SApple OSS Distributionslocal decl_ptn = (1 - function_ptn)^1 * (function_ptn - nosys_ptn) *
455c2921b0SApple OSS Distributions    lpeg.Cg(args_ptn, 'arguments')
465c2921b0SApple OSS Distributions
475c2921b0SApple OSS Distributions-- Matching an old breadcrumb, with empty arguments table.
485c2921b0SApple OSS Distributionslocal old_ptn = lpeg.P('old') * space * lpeg.Cg(identifier^1, 'name') *
495c2921b0SApple OSS Distributions    lpeg.Cg(lpeg.Cc(true), 'old') * lpeg.Cg(lpeg.Cc({}), 'arguments')
505c2921b0SApple OSS Distributionslocal old_decl_ptn = (1 - old_ptn)^1 * old_ptn
515c2921b0SApple OSS Distributions
525c2921b0SApple OSS Distributionslocal syscall_ptn = lpeg.Ct(lpeg.Cg(numeric, 'number') *
535c2921b0SApple OSS Distributions    (decl_ptn + old_decl_ptn))
545c2921b0SApple OSS Distributions
555c2921b0SApple OSS Distributionslocal bsd_syscalls = {}
565c2921b0SApple OSS Distributionsfor line in io.stdin:lines() do
575c2921b0SApple OSS Distributions  if in_valid_region(line) then
585c2921b0SApple OSS Distributions    bsd_syscalls[#bsd_syscalls + 1] = syscall_ptn:match(line)
595c2921b0SApple OSS Distributions  end
605c2921b0SApple OSS Distributionsend
615c2921b0SApple OSS Distributions
625c2921b0SApple OSS Distributionslocal syscalls = {
635c2921b0SApple OSS Distributions  bsd_syscalls = bsd_syscalls,
645c2921b0SApple OSS Distributions  mach_syscalls = {
655c2921b0SApple OSS Distributions    -- Duplicate the names from `mach_trap_table` here.
665c2921b0SApple OSS Distributions    { number = 10, name = 'mach_vm_allocate',
675c2921b0SApple OSS Distributions      arguments = {
685c2921b0SApple OSS Distributions        'mach_port_name_t target',
695c2921b0SApple OSS Distributions        'mach_vm_address_t *address',
705c2921b0SApple OSS Distributions        'mach_vm_size_t size',
715c2921b0SApple OSS Distributions        'int flags',
725c2921b0SApple OSS Distributions      },
735c2921b0SApple OSS Distributions    },
745c2921b0SApple OSS Distributions    { number = 11, name = 'mach_vm_purgable_control',
755c2921b0SApple OSS Distributions      arguments = {
765c2921b0SApple OSS Distributions        'mach_port_name_t target',
775c2921b0SApple OSS Distributions        'mach_vm_offset_t address',
785c2921b0SApple OSS Distributions        'vm_purgable_t control',
795c2921b0SApple OSS Distributions        'int *state',
805c2921b0SApple OSS Distributions      },
815c2921b0SApple OSS Distributions    },
825c2921b0SApple OSS Distributions    { number = 12, name = 'mach_vm_deallocate',
835c2921b0SApple OSS Distributions      arguments = {
845c2921b0SApple OSS Distributions        'mach_port_name_t target',
855c2921b0SApple OSS Distributions        'mach_vm_address_t address',
865c2921b0SApple OSS Distributions        'mach_vm_size_t size',
875c2921b0SApple OSS Distributions      },
885c2921b0SApple OSS Distributions    },
895c2921b0SApple OSS Distributions    { number = 13, name = 'task_dyld_process_info_notify_get',
905c2921b0SApple OSS Distributions      arguments = {
915c2921b0SApple OSS Distributions        'mach_port_name_array_t names_addr',
925c2921b0SApple OSS Distributions        'natural_t *names_count_addr',
935c2921b0SApple OSS Distributions      },
945c2921b0SApple OSS Distributions    },
955c2921b0SApple OSS Distributions    { number = 14, name = 'mach_vm_protect',
965c2921b0SApple OSS Distributions      arguments = {
975c2921b0SApple OSS Distributions        'mach_port_name_t task',
985c2921b0SApple OSS Distributions        'mach_vm_address_t address',
995c2921b0SApple OSS Distributions        'mach_vm_size_t size',
1005c2921b0SApple OSS Distributions        'boolean_t set_maximum',
1015c2921b0SApple OSS Distributions        'vm_prot_t new_protection',
1025c2921b0SApple OSS Distributions      }
1035c2921b0SApple OSS Distributions    },
1045c2921b0SApple OSS Distributions    { number = 15, name = 'mach_vm_map',
1055c2921b0SApple OSS Distributions      arguments = {
1065c2921b0SApple OSS Distributions        'mach_port_name_t target',
1075c2921b0SApple OSS Distributions        'mach_vm_address_t *address',
1085c2921b0SApple OSS Distributions        'mach_vm_size_t size',
1095c2921b0SApple OSS Distributions        'mach_vm_offset_t mask',
1105c2921b0SApple OSS Distributions        'int flags',
1115c2921b0SApple OSS Distributions        'mem_entry_name_port_t object',
1125c2921b0SApple OSS Distributions        'memory_object_offset_t offset',
1135c2921b0SApple OSS Distributions        'boolean_t copy',
1145c2921b0SApple OSS Distributions        'vm_prot_t cur_protection',
1155c2921b0SApple OSS Distributions        'vm_prot_t max_protection',
1165c2921b0SApple OSS Distributions        'vm_inherit_t inheritance',
1175c2921b0SApple OSS Distributions      },
1185c2921b0SApple OSS Distributions    },
1195c2921b0SApple OSS Distributions    { number = 16, name = 'mach_port_allocate',
1205c2921b0SApple OSS Distributions      arguments = {
1215c2921b0SApple OSS Distributions        'mach_port_name_t target',
1225c2921b0SApple OSS Distributions        'mach_port_right_t right',
1235c2921b0SApple OSS Distributions        'mach_port_name_t *name',
1245c2921b0SApple OSS Distributions      },
1255c2921b0SApple OSS Distributions    },
1265c2921b0SApple OSS Distributions
1275c2921b0SApple OSS Distributions    { number = 18, name = 'mach_port_deallocate',
1285c2921b0SApple OSS Distributions      arguments = {
1295c2921b0SApple OSS Distributions        'mach_port_name_t target',
1305c2921b0SApple OSS Distributions        'mach_port_name_t name',
1315c2921b0SApple OSS Distributions      },
1325c2921b0SApple OSS Distributions    },
1335c2921b0SApple OSS Distributions    { number = 19, name = 'mach_port_mod_refs',
1345c2921b0SApple OSS Distributions      arguments = {
1355c2921b0SApple OSS Distributions        'mach_port_name_t target',
1365c2921b0SApple OSS Distributions        'mach_port_name_t name',
1375c2921b0SApple OSS Distributions        'mach_port_right_t right',
1385c2921b0SApple OSS Distributions        'mach_port_delta_t delta',
1395c2921b0SApple OSS Distributions      },
1405c2921b0SApple OSS Distributions    },
1415c2921b0SApple OSS Distributions    { number = 20, name = 'mach_port_move_member',
1425c2921b0SApple OSS Distributions      arguments = {
1435c2921b0SApple OSS Distributions        'mach_port_name_t target',
1445c2921b0SApple OSS Distributions        'mach_port_name_t member',
1455c2921b0SApple OSS Distributions        'mach_port_name_t after',
1465c2921b0SApple OSS Distributions      },
1475c2921b0SApple OSS Distributions    },
1485c2921b0SApple OSS Distributions    { number = 21, name = 'mach_port_insert_right',
1495c2921b0SApple OSS Distributions      arguments = {
1505c2921b0SApple OSS Distributions        'mach_port_name_t target',
1515c2921b0SApple OSS Distributions        'mach_port_name_t name',
1525c2921b0SApple OSS Distributions        'mach_port_name_t poly',
1535c2921b0SApple OSS Distributions        'mach_msg_type_name_t polyPoly',
1545c2921b0SApple OSS Distributions      },
1555c2921b0SApple OSS Distributions    },
1565c2921b0SApple OSS Distributions    { number = 22, name = 'mach_port_insert_member',
1575c2921b0SApple OSS Distributions      arguments = {
1585c2921b0SApple OSS Distributions        'mach_port_name_t target',
1595c2921b0SApple OSS Distributions        'mach_port_name_t name',
1605c2921b0SApple OSS Distributions        'mach_port_name_t pset',
1615c2921b0SApple OSS Distributions      },
1625c2921b0SApple OSS Distributions    },
1635c2921b0SApple OSS Distributions    { number = 23, name = 'mach_port_extract_member',
1645c2921b0SApple OSS Distributions      arguments = {
1655c2921b0SApple OSS Distributions        'mach_port_name_t target',
1665c2921b0SApple OSS Distributions        'mach_port_name_t name',
1675c2921b0SApple OSS Distributions        'mach_port_name_t pset',
1685c2921b0SApple OSS Distributions      },
1695c2921b0SApple OSS Distributions    },
1705c2921b0SApple OSS Distributions    { number = 24, name = 'mach_port_construct',
1715c2921b0SApple OSS Distributions      arguments = {
1725c2921b0SApple OSS Distributions        'mach_port_name_t target',
1735c2921b0SApple OSS Distributions        'mach_port_options_t *options',
1745c2921b0SApple OSS Distributions        'uint64_t context',
1755c2921b0SApple OSS Distributions        'mach_port_name_t *name',
1765c2921b0SApple OSS Distributions      },
1775c2921b0SApple OSS Distributions    },
1785c2921b0SApple OSS Distributions    { number = 25, name = 'mach_port_destruct',
1795c2921b0SApple OSS Distributions      arguments = {
1805c2921b0SApple OSS Distributions        'mach_port_name_t target',
1815c2921b0SApple OSS Distributions        'mach_port_name_t name',
1825c2921b0SApple OSS Distributions        'mach_port_delta_t srdelta',
1835c2921b0SApple OSS Distributions        'uint64_t guard',
1845c2921b0SApple OSS Distributions      },
1855c2921b0SApple OSS Distributions    },
1865c2921b0SApple OSS Distributions    { number = 26, name = 'mach_reply_port',
1875c2921b0SApple OSS Distributions      arguments = { 'void' },
1885c2921b0SApple OSS Distributions    },
1895c2921b0SApple OSS Distributions    { number = 27, name = 'thread_self',
1905c2921b0SApple OSS Distributions      arguments = { 'void' },
1915c2921b0SApple OSS Distributions    },
1925c2921b0SApple OSS Distributions    { number = 28, name = 'task_self',
1935c2921b0SApple OSS Distributions      arguments = { 'void' },
1945c2921b0SApple OSS Distributions    },
1955c2921b0SApple OSS Distributions    { number = 29, name = 'host_self',
1965c2921b0SApple OSS Distributions      arguments = { 'void' },
1975c2921b0SApple OSS Distributions    },
1985c2921b0SApple OSS Distributions
1995c2921b0SApple OSS Distributions    { number = 31, name = 'mach_msg',
2005c2921b0SApple OSS Distributions      arguments = {
2015c2921b0SApple OSS Distributions        'mach_msg_header_t *msg',
2025c2921b0SApple OSS Distributions        'mach_msg_option_t option',
2035c2921b0SApple OSS Distributions        'mach_msg_size_t send_size',
2045c2921b0SApple OSS Distributions        'mach_msg_size_t rcv_size',
2055c2921b0SApple OSS Distributions        'mach_port_name_t rcv_name',
2065c2921b0SApple OSS Distributions        'mach_msg_timeout_t timeout',
2075c2921b0SApple OSS Distributions        'mach_port_name_t notify',
2085c2921b0SApple OSS Distributions      },
2095c2921b0SApple OSS Distributions    },
2105c2921b0SApple OSS Distributions    { number = 32, name = 'mach_msg_overwrite',
2115c2921b0SApple OSS Distributions      arguments = {
2125c2921b0SApple OSS Distributions        'mach_msg_header_t *msg',
2135c2921b0SApple OSS Distributions        'mach_msg_option_t option',
2145c2921b0SApple OSS Distributions        'mach_msg_size_t send_size',
2155c2921b0SApple OSS Distributions        'mach_msg_size_t rcv_size',
2165c2921b0SApple OSS Distributions        'mach_port_name_t rcv_name',
2175c2921b0SApple OSS Distributions        'mach_msg_timeout_t timeout',
2185c2921b0SApple OSS Distributions        'mach_port_name_t notify',
2195c2921b0SApple OSS Distributions        'mach_msg_header_t *rcv_msg',
2205c2921b0SApple OSS Distributions        'mach_msg_size_t rcv_limit',
2215c2921b0SApple OSS Distributions      },
2225c2921b0SApple OSS Distributions    },
2235c2921b0SApple OSS Distributions    { number = 33, name = 'semaphore_signal',
2245c2921b0SApple OSS Distributions      arguments = {
2255c2921b0SApple OSS Distributions        'mach_port_name_t signal_name',
2265c2921b0SApple OSS Distributions      },
2275c2921b0SApple OSS Distributions    },
2285c2921b0SApple OSS Distributions    { number = 34, name = 'semaphore_signal_all',
2295c2921b0SApple OSS Distributions      arguments = {
2305c2921b0SApple OSS Distributions        'mach_port_name_t signal_name',
2315c2921b0SApple OSS Distributions      },
2325c2921b0SApple OSS Distributions    },
2335c2921b0SApple OSS Distributions    { number = 35, name = 'semaphore_signal_thread',
2345c2921b0SApple OSS Distributions      arguments = {
2355c2921b0SApple OSS Distributions        'mach_port_name_t signal_name',
2365c2921b0SApple OSS Distributions        'mach_port_name_t thread_name',
2375c2921b0SApple OSS Distributions      },
2385c2921b0SApple OSS Distributions    },
2395c2921b0SApple OSS Distributions    { number = 36, name = 'semaphore_wait',
2405c2921b0SApple OSS Distributions      arguments = {
2415c2921b0SApple OSS Distributions        'mach_port_name_t wait_name',
2425c2921b0SApple OSS Distributions      },
2435c2921b0SApple OSS Distributions    },
2445c2921b0SApple OSS Distributions    { number = 37, name = 'semaphore_wait_signal',
2455c2921b0SApple OSS Distributions      arguments = {
2465c2921b0SApple OSS Distributions        'mach_port_name_t wait_name',
2475c2921b0SApple OSS Distributions        'mach_port_name_t signal_name',
2485c2921b0SApple OSS Distributions      },
2495c2921b0SApple OSS Distributions    },
2505c2921b0SApple OSS Distributions    { number = 38, name = 'semaphore_timedwait',
2515c2921b0SApple OSS Distributions      arguments = {
2525c2921b0SApple OSS Distributions        'mach_port_name_t wait_name',
2535c2921b0SApple OSS Distributions        'unsigned int sec',
2545c2921b0SApple OSS Distributions        'clock_res_t nsec',
2555c2921b0SApple OSS Distributions      },
2565c2921b0SApple OSS Distributions    },
2575c2921b0SApple OSS Distributions    { number = 39, name = 'semaphore_timedwait_signal',
2585c2921b0SApple OSS Distributions      arguments = {
2595c2921b0SApple OSS Distributions        'mach_port_name_t wait_name',
2605c2921b0SApple OSS Distributions        'mach_port_name_t signal_name',
2615c2921b0SApple OSS Distributions        'unsigned int sec',
2625c2921b0SApple OSS Distributions        'clock_res_t nsec',
2635c2921b0SApple OSS Distributions      },
2645c2921b0SApple OSS Distributions    },
2655c2921b0SApple OSS Distributions    { number = 40, name = 'mach_port_get_attributes',
2665c2921b0SApple OSS Distributions      arguments = {
2675c2921b0SApple OSS Distributions        'mach_port_name_t target',
2685c2921b0SApple OSS Distributions        'mach_port_name_t name',
2695c2921b0SApple OSS Distributions        'mach_port_flavor_t flavor',
2705c2921b0SApple OSS Distributions        'mach_port_info_t port_info_out',
2715c2921b0SApple OSS Distributions        'mach_msg_type_number_t *port_info_outCnt',
2725c2921b0SApple OSS Distributions      },
2735c2921b0SApple OSS Distributions    },
2745c2921b0SApple OSS Distributions    { number = 41, name = 'mach_port_guard',
2755c2921b0SApple OSS Distributions      arguments = {
2765c2921b0SApple OSS Distributions        'mach_port_name_t target',
2775c2921b0SApple OSS Distributions        'mach_port_name_t name',
2785c2921b0SApple OSS Distributions        'uint64_t guard',
2795c2921b0SApple OSS Distributions        'boolean_t strict',
2805c2921b0SApple OSS Distributions      },
2815c2921b0SApple OSS Distributions    },
2825c2921b0SApple OSS Distributions    { number = 42, name = 'mach_port_unguard',
2835c2921b0SApple OSS Distributions      arguments = {
2845c2921b0SApple OSS Distributions        'mach_port_name_t target',
2855c2921b0SApple OSS Distributions        'mach_port_name_t name',
2865c2921b0SApple OSS Distributions        'uint64_t guard',
2875c2921b0SApple OSS Distributions      },
2885c2921b0SApple OSS Distributions    },
2895c2921b0SApple OSS Distributions    { number = 43, name = 'mach_generate_activity_id',
2905c2921b0SApple OSS Distributions      arguments = {
2915c2921b0SApple OSS Distributions        'mach_port_name_t target',
2925c2921b0SApple OSS Distributions        'int count',
2935c2921b0SApple OSS Distributions        'uint64_t *activity_id',
2945c2921b0SApple OSS Distributions      },
2955c2921b0SApple OSS Distributions    },
2965c2921b0SApple OSS Distributions    { number = 44, name = 'task_name_for_pid',
2975c2921b0SApple OSS Distributions      arguments = {
2985c2921b0SApple OSS Distributions        'mach_port_name_t target_tport',
2995c2921b0SApple OSS Distributions        'int pid',
3005c2921b0SApple OSS Distributions        'mach_port_name_t *tn',
3015c2921b0SApple OSS Distributions      },
3025c2921b0SApple OSS Distributions    },
3035c2921b0SApple OSS Distributions    { number = 45, name = 'task_for_pid',
3045c2921b0SApple OSS Distributions      arguments = {
3055c2921b0SApple OSS Distributions        'mach_port_name_t target_tport',
3065c2921b0SApple OSS Distributions        'int pid',
3075c2921b0SApple OSS Distributions        'mach_port_name_t *t',
3085c2921b0SApple OSS Distributions      },
3095c2921b0SApple OSS Distributions    },
3105c2921b0SApple OSS Distributions    { number = 46, name = 'pid_for_task',
3115c2921b0SApple OSS Distributions      arguments = {
3125c2921b0SApple OSS Distributions        'mach_port_name_t t',
3135c2921b0SApple OSS Distributions        'int *x',
3145c2921b0SApple OSS Distributions      },
3155c2921b0SApple OSS Distributions    },
3165c2921b0SApple OSS Distributions    { number = 47, name = 'mach_msg2',
3175c2921b0SApple OSS Distributions      arguments = {
3185c2921b0SApple OSS Distributions        'void *data',
3195c2921b0SApple OSS Distributions        'mach_msg_option64_t option64',
3205c2921b0SApple OSS Distributions        'mach_msg_header_t header',
3215c2921b0SApple OSS Distributions        'mach_msg_size_t send_size',
3225c2921b0SApple OSS Distributions        'mach_msg_size_t rcv_size',
3235c2921b0SApple OSS Distributions        'mach_port_t rcv_name',
3245c2921b0SApple OSS Distributions        'uint64_t timeout',
3255c2921b0SApple OSS Distributions        'uint32_t priority',
3265c2921b0SApple OSS Distributions      },
3275c2921b0SApple OSS Distributions    },
3285c2921b0SApple OSS Distributions    { number = 48, name = 'macx_swapon',
3295c2921b0SApple OSS Distributions      arguments = {
3305c2921b0SApple OSS Distributions        'uint64_t filename',
3315c2921b0SApple OSS Distributions        'int flags',
3325c2921b0SApple OSS Distributions        'int size',
3335c2921b0SApple OSS Distributions        'int priority',
3345c2921b0SApple OSS Distributions      },
3355c2921b0SApple OSS Distributions    },
3365c2921b0SApple OSS Distributions    { number = 49, name = 'macx_swapoff',
3375c2921b0SApple OSS Distributions      arguments = {
3385c2921b0SApple OSS Distributions        'uint64_t filename',
3395c2921b0SApple OSS Distributions        'int flags',
3405c2921b0SApple OSS Distributions      },
3415c2921b0SApple OSS Distributions    },
3425c2921b0SApple OSS Distributions    { number = 50, name = 'thread_get_special_reply_port',
3435c2921b0SApple OSS Distributions      arguments = { 'void' },
3445c2921b0SApple OSS Distributions    },
3455c2921b0SApple OSS Distributions    { number = 51, name = 'macx_triggers',
3465c2921b0SApple OSS Distributions      arguments = {
3475c2921b0SApple OSS Distributions        'int hi_water',
3485c2921b0SApple OSS Distributions        'int low_water',
3495c2921b0SApple OSS Distributions        'int flags',
3505c2921b0SApple OSS Distributions        'mach_port_t alert_port',
3515c2921b0SApple OSS Distributions      },
3525c2921b0SApple OSS Distributions    },
3535c2921b0SApple OSS Distributions    { number = 52, name = 'macx_backing_store_suspend',
3545c2921b0SApple OSS Distributions      arguments = {
3555c2921b0SApple OSS Distributions        'boolean_t suspend',
3565c2921b0SApple OSS Distributions      },
3575c2921b0SApple OSS Distributions    },
3585c2921b0SApple OSS Distributions    { number = 53, name = 'macx_backing_store_recovery',
3595c2921b0SApple OSS Distributions      arguments = {
3605c2921b0SApple OSS Distributions        'int pid',
3615c2921b0SApple OSS Distributions      },
3625c2921b0SApple OSS Distributions    },
3635c2921b0SApple OSS Distributions
3645c2921b0SApple OSS Distributions    { number = 58, name = 'pfz_exit',
3655c2921b0SApple OSS Distributions      arguments = { 'void' },
3665c2921b0SApple OSS Distributions    },
3675c2921b0SApple OSS Distributions    { number = 59, name = 'swtch_pri',
3685c2921b0SApple OSS Distributions      arguments = {
3695c2921b0SApple OSS Distributions        'int pri',
3705c2921b0SApple OSS Distributions      },
3715c2921b0SApple OSS Distributions    },
3725c2921b0SApple OSS Distributions    { number = 60, name = 'swtch',
3735c2921b0SApple OSS Distributions      arguments = { 'void' },
3745c2921b0SApple OSS Distributions    },
3755c2921b0SApple OSS Distributions    { number = 61, name = 'thread_switch',
3765c2921b0SApple OSS Distributions      arguments = {
3775c2921b0SApple OSS Distributions        'mach_port_name_t thread_name',
3785c2921b0SApple OSS Distributions        'int option',
3795c2921b0SApple OSS Distributions        'mach_msg_timeout_t option_time',
3805c2921b0SApple OSS Distributions      },
3815c2921b0SApple OSS Distributions    },
3825c2921b0SApple OSS Distributions    { number = 62, name = 'clock_sleep',
3835c2921b0SApple OSS Distributions      arguments = {
3845c2921b0SApple OSS Distributions        'mach_port_name_t clock_name',
3855c2921b0SApple OSS Distributions        'sleep_type_t sleep_type',
3865c2921b0SApple OSS Distributions        'int sleep_sec',
3875c2921b0SApple OSS Distributions        'int sleep_nsec',
3885c2921b0SApple OSS Distributions        'mach_timespec_t *wakeup_time',
3895c2921b0SApple OSS Distributions      },
3905c2921b0SApple OSS Distributions    },
3915c2921b0SApple OSS Distributions
3925c2921b0SApple OSS Distributions    { number = 70, name = 'host_create_mach_voucher',
3935c2921b0SApple OSS Distributions      arguments = {
3945c2921b0SApple OSS Distributions        'mach_port_name_t host',
3955c2921b0SApple OSS Distributions        'mach_voucher_attr_raw_recipe_array_t recipes',
3965c2921b0SApple OSS Distributions        'int recipes_size',
3975c2921b0SApple OSS Distributions        'mach_port_name_t *voucher',
3985c2921b0SApple OSS Distributions      },
3995c2921b0SApple OSS Distributions    },
4005c2921b0SApple OSS Distributions
4015c2921b0SApple OSS Distributions    { number = 72, name = 'mach_voucher_extract_attr_recipe',
4025c2921b0SApple OSS Distributions      arguments = {
4035c2921b0SApple OSS Distributions        'mach_port_name_t voucher_name',
4045c2921b0SApple OSS Distributions        'mach_voucher_attr_key_t key',
4055c2921b0SApple OSS Distributions        'mach_voucher_attr_raw_recipe_t recipe',
4065c2921b0SApple OSS Distributions        'mach_msg_type_number_t *recipe_size',
4075c2921b0SApple OSS Distributions      },
4085c2921b0SApple OSS Distributions    },
4095c2921b0SApple OSS Distributions
4105c2921b0SApple OSS Distributions    { number = 76, name = 'mach_port_type',
4115c2921b0SApple OSS Distributions      arguments = {
4125c2921b0SApple OSS Distributions        'ipc_space_t task',
4135c2921b0SApple OSS Distributions        'mach_port_name_t name',
4145c2921b0SApple OSS Distributions        'mach_port_type_t *ptype',
4155c2921b0SApple OSS Distributions      },
4165c2921b0SApple OSS Distributions    },
4175c2921b0SApple OSS Distributions    { number = 77, name = 'mach_port_request_notification',
4185c2921b0SApple OSS Distributions      arguments = {
4195c2921b0SApple OSS Distributions        'ipc_space_t task',
4205c2921b0SApple OSS Distributions        'mach_port_name_t name',
4215c2921b0SApple OSS Distributions        'mach_msg_id_t msgid',
4225c2921b0SApple OSS Distributions        'mach_port_mscount_t sync',
4235c2921b0SApple OSS Distributions        'mach_port_name_t notify',
4245c2921b0SApple OSS Distributions        'mach_msg_type_name_t notifyPoly',
4255c2921b0SApple OSS Distributions        'mach_port_name_t *previous',
4265c2921b0SApple OSS Distributions      },
4275c2921b0SApple OSS Distributions    },
4281031c584SApple OSS Distributions    { number = 88, name = 'exclaves_ctl',
4291031c584SApple OSS Distributions      arguments = {
4301031c584SApple OSS Distributions        'mach_port_name_t name',
4311031c584SApple OSS Distributions        'uint32_t operation_and_flags',
4321031c584SApple OSS Distributions        'uint64_t identifier',
4331031c584SApple OSS Distributions        'mach_vm_address_t buffer',
4341031c584SApple OSS Distributions        'mach_vm_size_t size',
43594d3b452SApple OSS Distributions        'mach_vm_size_t size2',
43694d3b452SApple OSS Distributions        'mach_vm_size_t offset',
437*4f1223e8SApple OSS Distributions        'mach_vm_address_t status',
4381031c584SApple OSS Distributions      },
4391031c584SApple OSS Distributions    },
4405c2921b0SApple OSS Distributions
4415c2921b0SApple OSS Distributions    { number = 89, name = 'mach_timebase_info',
4425c2921b0SApple OSS Distributions      arguments = {
4435c2921b0SApple OSS Distributions        'mach_timebase_info_t info',
4445c2921b0SApple OSS Distributions      },
4455c2921b0SApple OSS Distributions    },
4465c2921b0SApple OSS Distributions    { number = 90, name = 'mach_wait_until',
4475c2921b0SApple OSS Distributions      arguments = {
4485c2921b0SApple OSS Distributions        'uint64_t deadline',
4495c2921b0SApple OSS Distributions      },
4505c2921b0SApple OSS Distributions    },
4515c2921b0SApple OSS Distributions    { number = 91, name = 'mk_timer_create',
4525c2921b0SApple OSS Distributions      arguments = { 'void' },
4535c2921b0SApple OSS Distributions    },
4545c2921b0SApple OSS Distributions    { number = 92, name = 'mk_timer_destroy',
4555c2921b0SApple OSS Distributions      arguments = {
4565c2921b0SApple OSS Distributions        'mach_port_name_t name',
4575c2921b0SApple OSS Distributions      },
4585c2921b0SApple OSS Distributions    },
4595c2921b0SApple OSS Distributions    { number = 93, name = 'mk_timer_arm',
4605c2921b0SApple OSS Distributions      arguments = {
4615c2921b0SApple OSS Distributions        'mach_port_name_t name',
4625c2921b0SApple OSS Distributions        'uint64_t expire_time',
4635c2921b0SApple OSS Distributions      },
4645c2921b0SApple OSS Distributions    },
4655c2921b0SApple OSS Distributions    { number = 94, name = 'mk_timer_cancel',
4665c2921b0SApple OSS Distributions      arguments = {
4675c2921b0SApple OSS Distributions        'mach_port_name_t name',
4685c2921b0SApple OSS Distributions        'uint64_t *result_time',
4695c2921b0SApple OSS Distributions      },
4705c2921b0SApple OSS Distributions    },
4715c2921b0SApple OSS Distributions    { number = 95, name = 'mk_timer_arm_leeway',
4725c2921b0SApple OSS Distributions      arguments = {
4735c2921b0SApple OSS Distributions        'mach_port_name_t name',
4745c2921b0SApple OSS Distributions        'uint64_t mk_timer_flags',
4755c2921b0SApple OSS Distributions        'uint64_t mk_timer_expire_time',
4765c2921b0SApple OSS Distributions        'uint64_t mk_timer_leeway',
4775c2921b0SApple OSS Distributions      },
4785c2921b0SApple OSS Distributions    },
4795c2921b0SApple OSS Distributions    { number = 96, name = 'debug_control_port_for_pid',
4805c2921b0SApple OSS Distributions      arguments = {
4815c2921b0SApple OSS Distributions        'mach_port_name_t target_tport',
4825c2921b0SApple OSS Distributions        'int pid',
4835c2921b0SApple OSS Distributions        'mach_port_name_t *t',
4845c2921b0SApple OSS Distributions      },
4855c2921b0SApple OSS Distributions    },
4865c2921b0SApple OSS Distributions
4875c2921b0SApple OSS Distributions    { number = 100, name = 'iokit_user_client',
4885c2921b0SApple OSS Distributions      arguments = {
4895c2921b0SApple OSS Distributions        'void *userClientRef',
4905c2921b0SApple OSS Distributions        'uint32_t index',
4915c2921b0SApple OSS Distributions        'void *p1',
4925c2921b0SApple OSS Distributions        'void *p2',
4935c2921b0SApple OSS Distributions        'void *p3',
4945c2921b0SApple OSS Distributions        'void *p4',
4955c2921b0SApple OSS Distributions        'void *p5',
4965c2921b0SApple OSS Distributions        'void *p6',
4975c2921b0SApple OSS Distributions      },
4985c2921b0SApple OSS Distributions    },
4995c2921b0SApple OSS Distributions  },
5005c2921b0SApple OSS Distributions}
5015c2921b0SApple OSS Distributions
5025c2921b0SApple OSS Distributions-- Basic sanity checking that the same number isn't claimed by two syscalls.
5035c2921b0SApple OSS Distributionsfor type, entries in pairs(syscalls) do
5045c2921b0SApple OSS Distributions  local numbers_seen = {}
5055c2921b0SApple OSS Distributions  for _, call in ipairs(entries) do
5065c2921b0SApple OSS Distributions    if numbers_seen[call.number] then
5075c2921b0SApple OSS Distributions      io.stderr:write(('error: %s: saw %d twice: %s and %s\n'):format(type,
5085c2921b0SApple OSS Distributions          call.number, call.name, numbers_seen[call.number]))
5095c2921b0SApple OSS Distributions      os.exit(1)
5105c2921b0SApple OSS Distributions    end
5115c2921b0SApple OSS Distributions    numbers_seen[call.number] = call.name
5125c2921b0SApple OSS Distributions  end
5135c2921b0SApple OSS Distributionsend
5145c2921b0SApple OSS Distributions
5155c2921b0SApple OSS Distributionsprint(cjson.encode(syscalls))
516