#include "sys/syscall.hpp"
#include "sys/sysentry.hpp"
#include "sys/sysproto.hpp"
#include "thread/Thread.hpp"
#include "thread/Process.hpp"
#include <algorithm>
#include <unordered_map>

enum { PSL_C = 0x1 };

void orbis::syscall_entry(Thread *thread) {
  uint64_t regstbl[] = {
      readRegister(thread->context, RegisterId::rdi),
      readRegister(thread->context, RegisterId::rsi),
      readRegister(thread->context, RegisterId::rdx),
      readRegister(thread->context, RegisterId::r10),
      readRegister(thread->context, RegisterId::r8),
      readRegister(thread->context, RegisterId::r9),
  };

  uint64_t *regsptr = regstbl;
  sint regcnt = 6;

  int syscall_num = readRegister(thread->context, RegisterId::rax);
  if (syscall_num == kSYS_syscall || syscall_num == kSYS___syscall) {
    syscall_num = *regsptr++;
    --regcnt;
  }

  thread->retval[0] = 0;
  thread->retval[1] = readRegister(thread->context, RegisterId::rdx);

  int error = 0;
  auto p = thread->tproc;

  if (syscall_num >= p->sysent->size) {
    error = int(ErrorCode::NOSYS);
  } else {
    auto sysent = p->sysent->table[syscall_num];
    uint64_t args[8];
    std::memcpy(args, regsptr,
                std::min(regcnt, sysent.narg) * sizeof(uint64_t));
    if (sysent.narg > regcnt) {
      if (sysent.narg > std::ssize(args)) {
        std::abort();
      }

      error = int(
          ureadRaw(args + regcnt,
                   ptr<void>(readRegister(thread->context, RegisterId::rsp) +
                             sizeof(uint64_t)),
                   (sysent.narg - regcnt) * sizeof(uint64_t)));
    }

    if (error == 0) {
      if (thread->tproc->onSysEnter != nullptr) {
        thread->tproc->onSysEnter(thread, syscall_num, args, sysent.narg);
      }

      auto result = sysent.call(thread, args);

      thread = orbis::g_currentThread;

      if (thread->tproc->onSysExit != nullptr) {
        thread->tproc->onSysExit(thread, syscall_num, args, sysent.narg,
                                 result);
      }

      error = result.value();
    }
  }

  auto rflags = readRegister(thread->context, RegisterId::rflags);

  if (error == 0) {
    writeRegister(thread->context, RegisterId::rax, thread->retval[0]);
    writeRegister(thread->context, RegisterId::rdx, thread->retval[1]);
    writeRegister(thread->context, RegisterId::rflags, rflags & ~PSL_C);
  } else {
    writeRegister(thread->context, RegisterId::rax, error);
    writeRegister(thread->context, RegisterId::rflags, rflags | PSL_C);
  }
}

namespace orbis {
namespace detail {
template <auto Fn> struct WrapImpl;

template <typename... Args, SysResult (*Fn)(Thread *, Args...)>
  requires(sizeof...(Args) < 8)
struct WrapImpl<Fn> {
  constexpr sysent operator()() {
    sysent result;
    result.narg = sizeof...(Args);
    result.call = &WrapImpl::call;

    return result;
  }

private:
  static SysResult call(Thread *thread, uint64_t *args) {
    return callImpl(thread, args, std::index_sequence_for<Args...>{});
  }

  template <std::size_t... I>
  static SysResult callImpl(Thread *thread, uint64_t *args,
                            std::index_sequence<I...>) {
    return Fn(thread, Args(args[I])...);
  }
};
} // namespace detail

template <auto Fn> constexpr auto wrap() -> decltype(detail::WrapImpl<Fn>()()) {
  return detail::WrapImpl<Fn>()();
}

template <auto Fn>
constexpr auto sysImplPointer() -> SysResult (*)(Thread *, uint64_t *) {
  return wrap<Fn>().call;
}

static constexpr std::pair<SysResult (*)(Thread *, uint64_t *), const char *>
    gImplToName[] = {
        {sysImplPointer<nosys>(), "nosys"},
        {sysImplPointer<sys_exit>(), "sys_exit"},
        {sysImplPointer<sys_fork>(), "sys_fork"},
        {sysImplPointer<sys_read>(), "sys_read"},
        {sysImplPointer<sys_write>(), "sys_write"},
        {sysImplPointer<sys_open>(), "sys_open"},
        {sysImplPointer<sys_close>(), "sys_close"},
        {sysImplPointer<sys_wait4>(), "sys_wait4"},
        {sysImplPointer<sys_link>(), "sys_link"},
        {sysImplPointer<sys_unlink>(), "sys_unlink"},
        {sysImplPointer<sys_chdir>(), "sys_chdir"},
        {sysImplPointer<sys_fchdir>(), "sys_fchdir"},
        {sysImplPointer<sys_mknod>(), "sys_mknod"},
        {sysImplPointer<sys_chmod>(), "sys_chmod"},
        {sysImplPointer<sys_chown>(), "sys_chown"},
        {sysImplPointer<sys_obreak>(), "sys_obreak"},
        {sysImplPointer<sys_getpid>(), "sys_getpid"},
        {sysImplPointer<sys_mount>(), "sys_mount"},
        {sysImplPointer<sys_unmount>(), "sys_unmount"},
        {sysImplPointer<sys_setuid>(), "sys_setuid"},
        {sysImplPointer<sys_getuid>(), "sys_getuid"},
        {sysImplPointer<sys_geteuid>(), "sys_geteuid"},
        {sysImplPointer<sys_ptrace>(), "sys_ptrace"},
        {sysImplPointer<sys_recvmsg>(), "sys_recvmsg"},
        {sysImplPointer<sys_sendmsg>(), "sys_sendmsg"},
        {sysImplPointer<sys_recvfrom>(), "sys_recvfrom"},
        {sysImplPointer<sys_accept>(), "sys_accept"},
        {sysImplPointer<sys_getpeername>(), "sys_getpeername"},
        {sysImplPointer<sys_getsockname>(), "sys_getsockname"},
        {sysImplPointer<sys_access>(), "sys_access"},
        {sysImplPointer<sys_chflags>(), "sys_chflags"},
        {sysImplPointer<sys_fchflags>(), "sys_fchflags"},
        {sysImplPointer<sys_sync>(), "sys_sync"},
        {sysImplPointer<sys_kill>(), "sys_kill"},
        {sysImplPointer<sys_getppid>(), "sys_getppid"},
        {sysImplPointer<sys_dup>(), "sys_dup"},
        {sysImplPointer<sys_pipe>(), "sys_pipe"},
        {sysImplPointer<sys_getegid>(), "sys_getegid"},
        {sysImplPointer<sys_profil>(), "sys_profil"},
        {sysImplPointer<sys_ktrace>(), "sys_ktrace"},
        {sysImplPointer<sys_getgid>(), "sys_getgid"},
        {sysImplPointer<sys_getlogin>(), "sys_getlogin"},
        {sysImplPointer<sys_setlogin>(), "sys_setlogin"},
        {sysImplPointer<sys_acct>(), "sys_acct"},
        {sysImplPointer<sys_sigaltstack>(), "sys_sigaltstack"},
        {sysImplPointer<sys_ioctl>(), "sys_ioctl"},
        {sysImplPointer<sys_reboot>(), "sys_reboot"},
        {sysImplPointer<sys_revoke>(), "sys_revoke"},
        {sysImplPointer<sys_symlink>(), "sys_symlink"},
        {sysImplPointer<sys_readlink>(), "sys_readlink"},
        {sysImplPointer<sys_execve>(), "sys_execve"},
        {sysImplPointer<sys_umask>(), "sys_umask"},
        {sysImplPointer<sys_chroot>(), "sys_chroot"},
        {sysImplPointer<sys_msync>(), "sys_msync"},
        {sysImplPointer<sys_vfork>(), "sys_vfork"},
        {sysImplPointer<sys_sbrk>(), "sys_sbrk"},
        {sysImplPointer<sys_sstk>(), "sys_sstk"},
        {sysImplPointer<sys_ovadvise>(), "sys_ovadvise"},
        {sysImplPointer<sys_munmap>(), "sys_munmap"},
        {sysImplPointer<sys_mprotect>(), "sys_mprotect"},
        {sysImplPointer<sys_madvise>(), "sys_madvise"},
        {sysImplPointer<sys_mincore>(), "sys_mincore"},
        {sysImplPointer<sys_getgroups>(), "sys_getgroups"},
        {sysImplPointer<sys_setgroups>(), "sys_setgroups"},
        {sysImplPointer<sys_getpgrp>(), "sys_getpgrp"},
        {sysImplPointer<sys_setpgid>(), "sys_setpgid"},
        {sysImplPointer<sys_setitimer>(), "sys_setitimer"},
        {sysImplPointer<sys_swapon>(), "sys_swapon"},
        {sysImplPointer<sys_getitimer>(), "sys_getitimer"},
        {sysImplPointer<sys_getdtablesize>(), "sys_getdtablesize"},
        {sysImplPointer<sys_dup2>(), "sys_dup2"},
        {sysImplPointer<sys_fcntl>(), "sys_fcntl"},
        {sysImplPointer<sys_select>(), "sys_select"},
        {sysImplPointer<sys_fsync>(), "sys_fsync"},
        {sysImplPointer<sys_setpriority>(), "sys_setpriority"},
        {sysImplPointer<sys_socket>(), "sys_socket"},
        {sysImplPointer<sys_connect>(), "sys_connect"},
        {sysImplPointer<sys_getpriority>(), "sys_getpriority"},
        {sysImplPointer<sys_bind>(), "sys_bind"},
        {sysImplPointer<sys_setsockopt>(), "sys_setsockopt"},
        {sysImplPointer<sys_listen>(), "sys_listen"},
        {sysImplPointer<sys_gettimeofday>(), "sys_gettimeofday"},
        {sysImplPointer<sys_getrusage>(), "sys_getrusage"},
        {sysImplPointer<sys_getsockopt>(), "sys_getsockopt"},
        {sysImplPointer<sys_readv>(), "sys_readv"},
        {sysImplPointer<sys_writev>(), "sys_writev"},
        {sysImplPointer<sys_settimeofday>(), "sys_settimeofday"},
        {sysImplPointer<sys_fchown>(), "sys_fchown"},
        {sysImplPointer<sys_fchmod>(), "sys_fchmod"},
        {sysImplPointer<sys_setreuid>(), "sys_setreuid"},
        {sysImplPointer<sys_setregid>(), "sys_setregid"},
        {sysImplPointer<sys_rename>(), "sys_rename"},
        {sysImplPointer<sys_flock>(), "sys_flock"},
        {sysImplPointer<sys_mkfifo>(), "sys_mkfifo"},
        {sysImplPointer<sys_sendto>(), "sys_sendto"},
        {sysImplPointer<sys_shutdown>(), "sys_shutdown"},
        {sysImplPointer<sys_socketpair>(), "sys_socketpair"},
        {sysImplPointer<sys_mkdir>(), "sys_mkdir"},
        {sysImplPointer<sys_rmdir>(), "sys_rmdir"},
        {sysImplPointer<sys_utimes>(), "sys_utimes"},
        {sysImplPointer<sys_adjtime>(), "sys_adjtime"},
        {sysImplPointer<sys_setsid>(), "sys_setsid"},
        {sysImplPointer<sys_quotactl>(), "sys_quotactl"},
        {sysImplPointer<sys_nlm_syscall>(), "sys_nlm_syscall"},
        {sysImplPointer<sys_nfssvc>(), "sys_nfssvc"},
        {sysImplPointer<sys_lgetfh>(), "sys_lgetfh"},
        {sysImplPointer<sys_getfh>(), "sys_getfh"},
        {sysImplPointer<sys_sysarch>(), "sys_sysarch"},
        {sysImplPointer<sys_rtprio>(), "sys_rtprio"},
        {sysImplPointer<sys_semsys>(), "sys_semsys"},
        {sysImplPointer<sys_msgsys>(), "sys_msgsys"},
        {sysImplPointer<sys_shmsys>(), "sys_shmsys"},
        {sysImplPointer<sys_freebsd6_pread>(), "sys_freebsd6_pread"},
        {sysImplPointer<sys_freebsd6_pwrite>(), "sys_freebsd6_pwrite"},
        {sysImplPointer<sys_setfib>(), "sys_setfib"},
        {sysImplPointer<sys_ntp_adjtime>(), "sys_ntp_adjtime"},
        {sysImplPointer<sys_setgid>(), "sys_setgid"},
        {sysImplPointer<sys_setegid>(), "sys_setegid"},
        {sysImplPointer<sys_seteuid>(), "sys_seteuid"},
        {sysImplPointer<sys_stat>(), "sys_stat"},
        {sysImplPointer<sys_fstat>(), "sys_fstat"},
        {sysImplPointer<sys_lstat>(), "sys_lstat"},
        {sysImplPointer<sys_pathconf>(), "sys_pathconf"},
        {sysImplPointer<sys_fpathconf>(), "sys_fpathconf"},
        {sysImplPointer<sys_getrlimit>(), "sys_getrlimit"},
        {sysImplPointer<sys_setrlimit>(), "sys_setrlimit"},
        {sysImplPointer<sys_getdirentries>(), "sys_getdirentries"},
        {sysImplPointer<sys_freebsd6_mmap>(), "sys_freebsd6_mmap"},
        {sysImplPointer<sys_freebsd6_lseek>(), "sys_freebsd6_lseek"},
        {sysImplPointer<sys_freebsd6_truncate>(), "sys_freebsd6_truncate"},
        {sysImplPointer<sys_freebsd6_ftruncate>(), "sys_freebsd6_ftruncate"},
        {sysImplPointer<sys___sysctl>(), "sys___sysctl"},
        {sysImplPointer<sys_mlock>(), "sys_mlock"},
        {sysImplPointer<sys_munlock>(), "sys_munlock"},
        {sysImplPointer<sys_undelete>(), "sys_undelete"},
        {sysImplPointer<sys_futimes>(), "sys_futimes"},
        {sysImplPointer<sys_getpgid>(), "sys_getpgid"},
        {sysImplPointer<sys_poll>(), "sys_poll"},
        {sysImplPointer<sys_semget>(), "sys_semget"},
        {sysImplPointer<sys_semop>(), "sys_semop"},
        {sysImplPointer<sys_msgget>(), "sys_msgget"},
        {sysImplPointer<sys_msgsnd>(), "sys_msgsnd"},
        {sysImplPointer<sys_msgrcv>(), "sys_msgrcv"},
        {sysImplPointer<sys_shmat>(), "sys_shmat"},
        {sysImplPointer<sys_shmdt>(), "sys_shmdt"},
        {sysImplPointer<sys_shmget>(), "sys_shmget"},
        {sysImplPointer<sys_clock_gettime>(), "sys_clock_gettime"},
        {sysImplPointer<sys_clock_settime>(), "sys_clock_settime"},
        {sysImplPointer<sys_clock_getres>(), "sys_clock_getres"},
        {sysImplPointer<sys_ktimer_create>(), "sys_ktimer_create"},
        {sysImplPointer<sys_ktimer_delete>(), "sys_ktimer_delete"},
        {sysImplPointer<sys_ktimer_settime>(), "sys_ktimer_settime"},
        {sysImplPointer<sys_ktimer_gettime>(), "sys_ktimer_gettime"},
        {sysImplPointer<sys_ktimer_getoverrun>(), "sys_ktimer_getoverrun"},
        {sysImplPointer<sys_nanosleep>(), "sys_nanosleep"},
        {sysImplPointer<sys_ntp_gettime>(), "sys_ntp_gettime"},
        {sysImplPointer<sys_minherit>(), "sys_minherit"},
        {sysImplPointer<sys_rfork>(), "sys_rfork"},
        {sysImplPointer<sys_openbsd_poll>(), "sys_openbsd_poll"},
        {sysImplPointer<sys_issetugid>(), "sys_issetugid"},
        {sysImplPointer<sys_lchown>(), "sys_lchown"},
        {sysImplPointer<sys_aio_read>(), "sys_aio_read"},
        {sysImplPointer<sys_aio_write>(), "sys_aio_write"},
        {sysImplPointer<sys_lio_listio>(), "sys_lio_listio"},
        {sysImplPointer<sys_getdents>(), "sys_getdents"},
        {sysImplPointer<sys_lchmod>(), "sys_lchmod"},
        {sysImplPointer<sys_lutimes>(), "sys_lutimes"},
        {sysImplPointer<sys_nstat>(), "sys_nstat"},
        {sysImplPointer<sys_nfstat>(), "sys_nfstat"},
        {sysImplPointer<sys_nlstat>(), "sys_nlstat"},
        {sysImplPointer<sys_preadv>(), "sys_preadv"},
        {sysImplPointer<sys_pwritev>(), "sys_pwritev"},
        {sysImplPointer<sys_fhopen>(), "sys_fhopen"},
        {sysImplPointer<sys_fhstat>(), "sys_fhstat"},
        {sysImplPointer<sys_modnext>(), "sys_modnext"},
        {sysImplPointer<sys_modstat>(), "sys_modstat"},
        {sysImplPointer<sys_modfnext>(), "sys_modfnext"},
        {sysImplPointer<sys_modfind>(), "sys_modfind"},
        {sysImplPointer<sys_kldload>(), "sys_kldload"},
        {sysImplPointer<sys_kldunload>(), "sys_kldunload"},
        {sysImplPointer<sys_kldfind>(), "sys_kldfind"},
        {sysImplPointer<sys_kldnext>(), "sys_kldnext"},
        {sysImplPointer<sys_kldstat>(), "sys_kldstat"},
        {sysImplPointer<sys_kldfirstmod>(), "sys_kldfirstmod"},
        {sysImplPointer<sys_getsid>(), "sys_getsid"},
        {sysImplPointer<sys_setresuid>(), "sys_setresuid"},
        {sysImplPointer<sys_setresgid>(), "sys_setresgid"},
        {sysImplPointer<sys_aio_return>(), "sys_aio_return"},
        {sysImplPointer<sys_aio_suspend>(), "sys_aio_suspend"},
        {sysImplPointer<sys_aio_cancel>(), "sys_aio_cancel"},
        {sysImplPointer<sys_aio_error>(), "sys_aio_error"},
        {sysImplPointer<sys_oaio_read>(), "sys_oaio_read"},
        {sysImplPointer<sys_oaio_write>(), "sys_oaio_write"},
        {sysImplPointer<sys_olio_listio>(), "sys_olio_listio"},
        {sysImplPointer<sys_yield>(), "sys_yield"},
        {sysImplPointer<sys_mlockall>(), "sys_mlockall"},
        {sysImplPointer<sys_munlockall>(), "sys_munlockall"},
        {sysImplPointer<sys___getcwd>(), "sys___getcwd"},
        {sysImplPointer<sys_sched_setparam>(), "sys_sched_setparam"},
        {sysImplPointer<sys_sched_getparam>(), "sys_sched_getparam"},
        {sysImplPointer<sys_sched_setscheduler>(), "sys_sched_setscheduler"},
        {sysImplPointer<sys_sched_getscheduler>(), "sys_sched_getscheduler"},
        {sysImplPointer<sys_sched_yield>(), "sys_sched_yield"},
        {sysImplPointer<sys_sched_get_priority_max>(),
         "sys_sched_get_priority_max"},
        {sysImplPointer<sys_sched_get_priority_min>(),
         "sys_sched_get_priority_min"},
        {sysImplPointer<sys_sched_rr_get_interval>(),
         "sys_sched_rr_get_interval"},
        {sysImplPointer<sys_utrace>(), "sys_utrace"},
        {sysImplPointer<sys_kldsym>(), "sys_kldsym"},
        {sysImplPointer<sys_jail>(), "sys_jail"},
        {sysImplPointer<sys_nnpfs_syscall>(), "sys_nnpfs_syscall"},
        {sysImplPointer<sys_sigprocmask>(), "sys_sigprocmask"},
        {sysImplPointer<sys_sigsuspend>(), "sys_sigsuspend"},
        {sysImplPointer<sys_sigpending>(), "sys_sigpending"},
        {sysImplPointer<sys_sigtimedwait>(), "sys_sigtimedwait"},
        {sysImplPointer<sys_sigwaitinfo>(), "sys_sigwaitinfo"},
        {sysImplPointer<sys___acl_get_file>(), "sys___acl_get_file"},
        {sysImplPointer<sys___acl_set_file>(), "sys___acl_set_file"},
        {sysImplPointer<sys___acl_get_fd>(), "sys___acl_get_fd"},
        {sysImplPointer<sys___acl_set_fd>(), "sys___acl_set_fd"},
        {sysImplPointer<sys___acl_delete_file>(), "sys___acl_delete_file"},
        {sysImplPointer<sys___acl_delete_fd>(), "sys___acl_delete_fd"},
        {sysImplPointer<sys___acl_aclcheck_file>(), "sys___acl_aclcheck_file"},
        {sysImplPointer<sys___acl_aclcheck_fd>(), "sys___acl_aclcheck_fd"},
        {sysImplPointer<sys_extattrctl>(), "sys_extattrctl"},
        {sysImplPointer<sys_extattr_set_file>(), "sys_extattr_set_file"},
        {sysImplPointer<sys_extattr_get_file>(), "sys_extattr_get_file"},
        {sysImplPointer<sys_extattr_delete_file>(), "sys_extattr_delete_file"},
        {sysImplPointer<sys_aio_waitcomplete>(), "sys_aio_waitcomplete"},
        {sysImplPointer<sys_getresuid>(), "sys_getresuid"},
        {sysImplPointer<sys_getresgid>(), "sys_getresgid"},
        {sysImplPointer<sys_kqueue>(), "sys_kqueue"},
        {sysImplPointer<sys_kevent>(), "sys_kevent"},
        {sysImplPointer<sys_extattr_set_fd>(), "sys_extattr_set_fd"},
        {sysImplPointer<sys_extattr_get_fd>(), "sys_extattr_get_fd"},
        {sysImplPointer<sys_extattr_delete_fd>(), "sys_extattr_delete_fd"},
        {sysImplPointer<sys___setugid>(), "sys___setugid"},
        {sysImplPointer<sys_eaccess>(), "sys_eaccess"},
        {sysImplPointer<sys_afs3_syscall>(), "sys_afs3_syscall"},
        {sysImplPointer<sys_nmount>(), "sys_nmount"},
        {sysImplPointer<sys___mac_get_proc>(), "sys___mac_get_proc"},
        {sysImplPointer<sys___mac_set_proc>(), "sys___mac_set_proc"},
        {sysImplPointer<sys___mac_get_fd>(), "sys___mac_get_fd"},
        {sysImplPointer<sys___mac_get_file>(), "sys___mac_get_file"},
        {sysImplPointer<sys___mac_set_fd>(), "sys___mac_set_fd"},
        {sysImplPointer<sys___mac_set_file>(), "sys___mac_set_file"},
        {sysImplPointer<sys_kenv>(), "sys_kenv"},
        {sysImplPointer<sys_lchflags>(), "sys_lchflags"},
        {sysImplPointer<sys_uuidgen>(), "sys_uuidgen"},
        {sysImplPointer<sys_sendfile>(), "sys_sendfile"},
        {sysImplPointer<sys_mac_syscall>(), "sys_mac_syscall"},
        {sysImplPointer<sys_getfsstat>(), "sys_getfsstat"},
        {sysImplPointer<sys_statfs>(), "sys_statfs"},
        {sysImplPointer<sys_fstatfs>(), "sys_fstatfs"},
        {sysImplPointer<sys_fhstatfs>(), "sys_fhstatfs"},
        {sysImplPointer<sys_ksem_close>(), "sys_ksem_close"},
        {sysImplPointer<sys_ksem_post>(), "sys_ksem_post"},
        {sysImplPointer<sys_ksem_wait>(), "sys_ksem_wait"},
        {sysImplPointer<sys_ksem_trywait>(), "sys_ksem_trywait"},
        {sysImplPointer<sys_ksem_init>(), "sys_ksem_init"},
        {sysImplPointer<sys_ksem_open>(), "sys_ksem_open"},
        {sysImplPointer<sys_ksem_unlink>(), "sys_ksem_unlink"},
        {sysImplPointer<sys_ksem_getvalue>(), "sys_ksem_getvalue"},
        {sysImplPointer<sys_ksem_destroy>(), "sys_ksem_destroy"},
        {sysImplPointer<sys___mac_get_pid>(), "sys___mac_get_pid"},
        {sysImplPointer<sys___mac_get_link>(), "sys___mac_get_link"},
        {sysImplPointer<sys___mac_set_link>(), "sys___mac_set_link"},
        {sysImplPointer<sys_extattr_set_link>(), "sys_extattr_set_link"},
        {sysImplPointer<sys_extattr_get_link>(), "sys_extattr_get_link"},
        {sysImplPointer<sys_extattr_delete_link>(), "sys_extattr_delete_link"},
        {sysImplPointer<sys___mac_execve>(), "sys___mac_execve"},
        {sysImplPointer<sys_sigaction>(), "sys_sigaction"},
        {sysImplPointer<sys_sigreturn>(), "sys_sigreturn"},
        {sysImplPointer<sys_getcontext>(), "sys_getcontext"},
        {sysImplPointer<sys_setcontext>(), "sys_setcontext"},
        {sysImplPointer<sys_swapcontext>(), "sys_swapcontext"},
        {sysImplPointer<sys_swapoff>(), "sys_swapoff"},
        {sysImplPointer<sys___acl_get_link>(), "sys___acl_get_link"},
        {sysImplPointer<sys___acl_set_link>(), "sys___acl_set_link"},
        {sysImplPointer<sys___acl_delete_link>(), "sys___acl_delete_link"},
        {sysImplPointer<sys___acl_aclcheck_link>(), "sys___acl_aclcheck_link"},
        {sysImplPointer<sys_sigwait>(), "sys_sigwait"},
        {sysImplPointer<sys_thr_create>(), "sys_thr_create"},
        {sysImplPointer<sys_thr_exit>(), "sys_thr_exit"},
        {sysImplPointer<sys_thr_self>(), "sys_thr_self"},
        {sysImplPointer<sys_thr_kill>(), "sys_thr_kill"},
        {sysImplPointer<sys__umtx_lock>(), "sys__umtx_lock"},
        {sysImplPointer<sys__umtx_unlock>(), "sys__umtx_unlock"},
        {sysImplPointer<sys_jail_attach>(), "sys_jail_attach"},
        {sysImplPointer<sys_extattr_list_fd>(), "sys_extattr_list_fd"},
        {sysImplPointer<sys_extattr_list_file>(), "sys_extattr_list_file"},
        {sysImplPointer<sys_extattr_list_link>(), "sys_extattr_list_link"},
        {sysImplPointer<sys_ksem_timedwait>(), "sys_ksem_timedwait"},
        {sysImplPointer<sys_thr_suspend>(), "sys_thr_suspend"},
        {sysImplPointer<sys_thr_wake>(), "sys_thr_wake"},
        {sysImplPointer<sys_kldunloadf>(), "sys_kldunloadf"},
        {sysImplPointer<sys_audit>(), "sys_audit"},
        {sysImplPointer<sys_auditon>(), "sys_auditon"},
        {sysImplPointer<sys_getauid>(), "sys_getauid"},
        {sysImplPointer<sys_setauid>(), "sys_setauid"},
        {sysImplPointer<sys_getaudit>(), "sys_getaudit"},
        {sysImplPointer<sys_setaudit>(), "sys_setaudit"},
        {sysImplPointer<sys_getaudit_addr>(), "sys_getaudit_addr"},
        {sysImplPointer<sys_setaudit_addr>(), "sys_setaudit_addr"},
        {sysImplPointer<sys_auditctl>(), "sys_auditctl"},
        {sysImplPointer<sys__umtx_op>(), "sys__umtx_op"},
        {sysImplPointer<sys_thr_new>(), "sys_thr_new"},
        {sysImplPointer<sys_sigqueue>(), "sys_sigqueue"},
        {sysImplPointer<sys_kmq_open>(), "sys_kmq_open"},
        {sysImplPointer<sys_kmq_setattr>(), "sys_kmq_setattr"},
        {sysImplPointer<sys_kmq_timedreceive>(), "sys_kmq_timedreceive"},
        {sysImplPointer<sys_kmq_timedsend>(), "sys_kmq_timedsend"},
        {sysImplPointer<sys_kmq_notify>(), "sys_kmq_notify"},
        {sysImplPointer<sys_kmq_unlink>(), "sys_kmq_unlink"},
        {sysImplPointer<sys_abort2>(), "sys_abort2"},
        {sysImplPointer<sys_thr_set_name>(), "sys_thr_set_name"},
        {sysImplPointer<sys_aio_fsync>(), "sys_aio_fsync"},
        {sysImplPointer<sys_rtprio_thread>(), "sys_rtprio_thread"},
        {sysImplPointer<sys_sctp_peeloff>(), "sys_sctp_peeloff"},
        {sysImplPointer<sys_sctp_generic_sendmsg>(),
         "sys_sctp_generic_sendmsg"},
        {sysImplPointer<sys_sctp_generic_sendmsg_iov>(),
         "sys_sctp_generic_sendmsg_iov"},
        {sysImplPointer<sys_sctp_generic_recvmsg>(),
         "sys_sctp_generic_recvmsg"},
        {sysImplPointer<sys_pread>(), "sys_pread"},
        {sysImplPointer<sys_pwrite>(), "sys_pwrite"},
        {sysImplPointer<sys_mmap>(), "sys_mmap"},
        {sysImplPointer<sys_lseek>(), "sys_lseek"},
        {sysImplPointer<sys_truncate>(), "sys_truncate"},
        {sysImplPointer<sys_ftruncate>(), "sys_ftruncate"},
        {sysImplPointer<sys_thr_kill2>(), "sys_thr_kill2"},
        {sysImplPointer<sys_shm_open>(), "sys_shm_open"},
        {sysImplPointer<sys_shm_unlink>(), "sys_shm_unlink"},
        {sysImplPointer<sys_cpuset>(), "sys_cpuset"},
        {sysImplPointer<sys_cpuset_setid>(), "sys_cpuset_setid"},
        {sysImplPointer<sys_cpuset_getid>(), "sys_cpuset_getid"},
        {sysImplPointer<sys_cpuset_getaffinity>(), "sys_cpuset_getaffinity"},
        {sysImplPointer<sys_cpuset_setaffinity>(), "sys_cpuset_setaffinity"},
        {sysImplPointer<sys_faccessat>(), "sys_faccessat"},
        {sysImplPointer<sys_fchmodat>(), "sys_fchmodat"},
        {sysImplPointer<sys_fchownat>(), "sys_fchownat"},
        {sysImplPointer<sys_fexecve>(), "sys_fexecve"},
        {sysImplPointer<sys_fstatat>(), "sys_fstatat"},
        {sysImplPointer<sys_futimesat>(), "sys_futimesat"},
        {sysImplPointer<sys_linkat>(), "sys_linkat"},
        {sysImplPointer<sys_mkdirat>(), "sys_mkdirat"},
        {sysImplPointer<sys_mkfifoat>(), "sys_mkfifoat"},
        {sysImplPointer<sys_mknodat>(), "sys_mknodat"},
        {sysImplPointer<sys_openat>(), "sys_openat"},
        {sysImplPointer<sys_readlinkat>(), "sys_readlinkat"},
        {sysImplPointer<sys_renameat>(), "sys_renameat"},
        {sysImplPointer<sys_symlinkat>(), "sys_symlinkat"},
        {sysImplPointer<sys_unlinkat>(), "sys_unlinkat"},
        {sysImplPointer<sys_posix_openpt>(), "sys_posix_openpt"},
        {sysImplPointer<sys_gssd_syscall>(), "sys_gssd_syscall"},
        {sysImplPointer<sys_jail_get>(), "sys_jail_get"},
        {sysImplPointer<sys_jail_set>(), "sys_jail_set"},
        {sysImplPointer<sys_jail_remove>(), "sys_jail_remove"},
        {sysImplPointer<sys_closefrom>(), "sys_closefrom"},
        {sysImplPointer<sys___semctl>(), "sys___semctl"},
        {sysImplPointer<sys_msgctl>(), "sys_msgctl"},
        {sysImplPointer<sys_shmctl>(), "sys_shmctl"},
        {sysImplPointer<sys_lpathconf>(), "sys_lpathconf"},
        {sysImplPointer<sys_cap_new>(), "sys_cap_new"},
        {sysImplPointer<sys_cap_getrights>(), "sys_cap_getrights"},
        {sysImplPointer<sys_cap_enter>(), "sys_cap_enter"},
        {sysImplPointer<sys_cap_getmode>(), "sys_cap_getmode"},
        {sysImplPointer<sys_pdfork>(), "sys_pdfork"},
        {sysImplPointer<sys_pdkill>(), "sys_pdkill"},
        {sysImplPointer<sys_pdgetpid>(), "sys_pdgetpid"},
        {sysImplPointer<sys_pselect>(), "sys_pselect"},
        {sysImplPointer<sys_getloginclass>(), "sys_getloginclass"},
        {sysImplPointer<sys_setloginclass>(), "sys_setloginclass"},
        {sysImplPointer<sys_rctl_get_racct>(), "sys_rctl_get_racct"},
        {sysImplPointer<sys_rctl_get_rules>(), "sys_rctl_get_rules"},
        {sysImplPointer<sys_rctl_get_limits>(), "sys_rctl_get_limits"},
        {sysImplPointer<sys_rctl_add_rule>(), "sys_rctl_add_rule"},
        {sysImplPointer<sys_rctl_remove_rule>(), "sys_rctl_remove_rule"},
        {sysImplPointer<sys_posix_fallocate>(), "sys_posix_fallocate"},
        {sysImplPointer<sys_posix_fadvise>(), "sys_posix_fadvise"},
        {sysImplPointer<sys_netcontrol>(), "sys_netcontrol"},
        {sysImplPointer<sys_netabort>(), "sys_netabort"},
        {sysImplPointer<sys_netgetsockinfo>(), "sys_netgetsockinfo"},
        {sysImplPointer<sys_socketex>(), "sys_socketex"},
        {sysImplPointer<sys_socketclose>(), "sys_socketclose"},
        {sysImplPointer<sys_netgetiflist>(), "sys_netgetiflist"},
        {sysImplPointer<sys_kqueueex>(), "sys_kqueueex"},
        {sysImplPointer<sys_mtypeprotect>(), "sys_mtypeprotect"},
        {sysImplPointer<sys_regmgr_call>(), "sys_regmgr_call"},
        {sysImplPointer<sys_jitshm_create>(), "sys_jitshm_create"},
        {sysImplPointer<sys_jitshm_alias>(), "sys_jitshm_alias"},
        {sysImplPointer<sys_dl_get_list>(), "sys_dl_get_list"},
        {sysImplPointer<sys_dl_get_info>(), "sys_dl_get_info"},
        {sysImplPointer<sys_dl_notify_event>(), "sys_dl_notify_event"},
        {sysImplPointer<sys_evf_create>(), "sys_evf_create"},
        {sysImplPointer<sys_evf_delete>(), "sys_evf_delete"},
        {sysImplPointer<sys_evf_open>(), "sys_evf_open"},
        {sysImplPointer<sys_evf_close>(), "sys_evf_close"},
        {sysImplPointer<sys_evf_wait>(), "sys_evf_wait"},
        {sysImplPointer<sys_evf_trywait>(), "sys_evf_trywait"},
        {sysImplPointer<sys_evf_set>(), "sys_evf_set"},
        {sysImplPointer<sys_evf_clear>(), "sys_evf_clear"},
        {sysImplPointer<sys_evf_cancel>(), "sys_evf_cancel"},
        {sysImplPointer<sys_query_memory_protection>(),
         "sys_query_memory_protection"},
        {sysImplPointer<sys_batch_map>(), "sys_batch_map"},
        {sysImplPointer<sys_osem_create>(), "sys_osem_create"},
        {sysImplPointer<sys_osem_delete>(), "sys_osem_delete"},
        {sysImplPointer<sys_osem_open>(), "sys_osem_open"},
        {sysImplPointer<sys_osem_close>(), "sys_osem_close"},
        {sysImplPointer<sys_osem_wait>(), "sys_osem_wait"},
        {sysImplPointer<sys_osem_trywait>(), "sys_osem_trywait"},
        {sysImplPointer<sys_osem_post>(), "sys_osem_post"},
        {sysImplPointer<sys_osem_cancel>(), "sys_osem_cancel"},
        {sysImplPointer<sys_namedobj_create>(), "sys_namedobj_create"},
        {sysImplPointer<sys_namedobj_delete>(), "sys_namedobj_delete"},
        {sysImplPointer<sys_set_vm_container>(), "sys_set_vm_container"},
        {sysImplPointer<sys_debug_init>(), "sys_debug_init"},
        {sysImplPointer<sys_suspend_process>(), "sys_suspend_process"},
        {sysImplPointer<sys_resume_process>(), "sys_resume_process"},
        {sysImplPointer<sys_opmc_enable>(), "sys_opmc_enable"},
        {sysImplPointer<sys_opmc_disable>(), "sys_opmc_disable"},
        {sysImplPointer<sys_opmc_set_ctl>(), "sys_opmc_set_ctl"},
        {sysImplPointer<sys_opmc_set_ctr>(), "sys_opmc_set_ctr"},
        {sysImplPointer<sys_opmc_get_ctr>(), "sys_opmc_get_ctr"},
        {sysImplPointer<sys_budget_create>(), "sys_budget_create"},
        {sysImplPointer<sys_budget_delete>(), "sys_budget_delete"},
        {sysImplPointer<sys_budget_get>(), "sys_budget_get"},
        {sysImplPointer<sys_budget_set>(), "sys_budget_set"},
        {sysImplPointer<sys_virtual_query>(), "sys_virtual_query"},
        {sysImplPointer<sys_mdbg_call>(), "sys_mdbg_call"},
        {sysImplPointer<sys_obs_sblock_create>(), "sys_obs_sblock_create"},
        {sysImplPointer<sys_obs_sblock_delete>(), "sys_obs_sblock_delete"},
        {sysImplPointer<sys_obs_sblock_enter>(), "sys_obs_sblock_enter"},
        {sysImplPointer<sys_obs_sblock_exit>(), "sys_obs_sblock_exit"},
        {sysImplPointer<sys_obs_sblock_xenter>(), "sys_obs_sblock_xenter"},
        {sysImplPointer<sys_obs_sblock_xexit>(), "sys_obs_sblock_xexit"},
        {sysImplPointer<sys_obs_eport_create>(), "sys_obs_eport_create"},
        {sysImplPointer<sys_obs_eport_delete>(), "sys_obs_eport_delete"},
        {sysImplPointer<sys_obs_eport_trigger>(), "sys_obs_eport_trigger"},
        {sysImplPointer<sys_obs_eport_open>(), "sys_obs_eport_open"},
        {sysImplPointer<sys_obs_eport_close>(), "sys_obs_eport_close"},
        {sysImplPointer<sys_is_in_sandbox>(), "sys_is_in_sandbox"},
        {sysImplPointer<sys_dmem_container>(), "sys_dmem_container"},
        {sysImplPointer<sys_get_authinfo>(), "sys_get_authinfo"},
        {sysImplPointer<sys_mname>(), "sys_mname"},
        {sysImplPointer<sys_dynlib_dlopen>(), "sys_dynlib_dlopen"},
        {sysImplPointer<sys_dynlib_dlclose>(), "sys_dynlib_dlclose"},
        {sysImplPointer<sys_dynlib_dlsym>(), "sys_dynlib_dlsym"},
        {sysImplPointer<sys_dynlib_get_list>(), "sys_dynlib_get_list"},
        {sysImplPointer<sys_dynlib_get_info>(), "sys_dynlib_get_info"},
        {sysImplPointer<sys_dynlib_load_prx>(), "sys_dynlib_load_prx"},
        {sysImplPointer<sys_dynlib_unload_prx>(), "sys_dynlib_unload_prx"},
        {sysImplPointer<sys_dynlib_do_copy_relocations>(),
         "sys_dynlib_do_copy_relocations"},
        {sysImplPointer<sys_dynlib_prepare_dlclose>(),
         "sys_dynlib_prepare_dlclose"},
        {sysImplPointer<sys_dynlib_get_proc_param>(),
         "sys_dynlib_get_proc_param"},
        {sysImplPointer<sys_dynlib_process_needed_and_relocate>(),
         "sys_dynlib_process_needed_and_relocate"},
        {sysImplPointer<sys_sandbox_path>(), "sys_sandbox_path"},
        {sysImplPointer<sys_mdbg_service>(), "sys_mdbg_service"},
        {sysImplPointer<sys_randomized_path>(), "sys_randomized_path"},
        {sysImplPointer<sys_rdup>(), "sys_rdup"},
        {sysImplPointer<sys_dl_get_metadata>(), "sys_dl_get_metadata"},
        {sysImplPointer<sys_workaround8849>(), "sys_workaround8849"},
        {sysImplPointer<sys_is_development_mode>(), "sys_is_development_mode"},
        {sysImplPointer<sys_get_self_auth_info>(), "sys_get_self_auth_info"},
        {sysImplPointer<sys_dynlib_get_info_ex>(), "sys_dynlib_get_info_ex"},
        {sysImplPointer<sys_budget_getid>(), "sys_budget_getid"},
        {sysImplPointer<sys_budget_get_ptype>(), "sys_budget_get_ptype"},
        {sysImplPointer<sys_get_paging_stats_of_all_threads>(),
         "sys_get_paging_stats_of_all_threads"},
        {sysImplPointer<sys_get_proc_type_info>(), "sys_get_proc_type_info"},
        {sysImplPointer<sys_get_resident_count>(), "sys_get_resident_count"},
        {sysImplPointer<sys_prepare_to_suspend_process>(),
         "sys_prepare_to_suspend_process"},
        {sysImplPointer<sys_get_resident_fmem_count>(),
         "sys_get_resident_fmem_count"},
        {sysImplPointer<sys_thr_get_name>(), "sys_thr_get_name"},
        {sysImplPointer<sys_set_gpo>(), "sys_set_gpo"},
        {sysImplPointer<sys_get_paging_stats_of_all_objects>(),
         "sys_get_paging_stats_of_all_objects"},
        {sysImplPointer<sys_test_debug_rwmem>(), "sys_test_debug_rwmem"},
        {sysImplPointer<sys_free_stack>(), "sys_free_stack"},
        {sysImplPointer<sys_suspend_system>(), "sys_suspend_system"},
        {sysImplPointer<sys_ipmimgr_call>(), "sys_ipmimgr_call"},
        {sysImplPointer<sys_get_gpo>(), "sys_get_gpo"},
        {sysImplPointer<sys_get_vm_map_timestamp>(),
         "sys_get_vm_map_timestamp"},
        {sysImplPointer<sys_opmc_set_hw>(), "sys_opmc_set_hw"},
        {sysImplPointer<sys_opmc_get_hw>(), "sys_opmc_get_hw"},
        {sysImplPointer<sys_get_cpu_usage_all>(), "sys_get_cpu_usage_all"},
        {sysImplPointer<sys_mmap_dmem>(), "sys_mmap_dmem"},
        {sysImplPointer<sys_physhm_open>(), "sys_physhm_open"},
        {sysImplPointer<sys_physhm_unlink>(), "sys_physhm_unlink"},
        {sysImplPointer<sys_resume_internal_hdd>(), "sys_resume_internal_hdd"},
        {sysImplPointer<sys_thr_suspend_ucontext>(),
         "sys_thr_suspend_ucontext"},
        {sysImplPointer<sys_thr_resume_ucontext>(), "sys_thr_resume_ucontext"},
        {sysImplPointer<sys_thr_get_ucontext>(), "sys_thr_get_ucontext"},
        {sysImplPointer<sys_thr_set_ucontext>(), "sys_thr_set_ucontext"},
        {sysImplPointer<sys_set_timezone_info>(), "sys_set_timezone_info"},
        {sysImplPointer<sys_set_phys_fmem_limit>(), "sys_set_phys_fmem_limit"},
        {sysImplPointer<sys_utc_to_localtime>(), "sys_utc_to_localtime"},
        {sysImplPointer<sys_localtime_to_utc>(), "sys_localtime_to_utc"},
        {sysImplPointer<sys_set_uevt>(), "sys_set_uevt"},
        {sysImplPointer<sys_get_cpu_usage_proc>(), "sys_get_cpu_usage_proc"},
        {sysImplPointer<sys_get_map_statistics>(), "sys_get_map_statistics"},
        {sysImplPointer<sys_set_chicken_switches>(),
         "sys_set_chicken_switches"},
        {sysImplPointer<sys_extend_page_table_pool>(),
         "sys_extend_page_table_pool"},
        {sysImplPointer<sys_extend_page_table_pool2>(),
         "sys_extend_page_table_pool2"},
        {sysImplPointer<sys_get_kernel_mem_statistics>(),
         "sys_get_kernel_mem_statistics"},
        {sysImplPointer<sys_get_sdk_compiled_version>(),
         "sys_get_sdk_compiled_version"},
        {sysImplPointer<sys_app_state_change>(), "sys_app_state_change"},
        {sysImplPointer<sys_dynlib_get_obj_member>(),
         "sys_dynlib_get_obj_member"},
        {sysImplPointer<sys_budget_get_ptype_of_budget>(),
         "sys_budget_get_ptype_of_budget"},
        {sysImplPointer<sys_prepare_to_resume_process>(),
         "sys_prepare_to_resume_process"},
        {sysImplPointer<sys_process_terminate>(), "sys_process_terminate"},
        {sysImplPointer<sys_blockpool_open>(), "sys_blockpool_open"},
        {sysImplPointer<sys_blockpool_map>(), "sys_blockpool_map"},
        {sysImplPointer<sys_blockpool_unmap>(), "sys_blockpool_unmap"},
        {sysImplPointer<sys_dynlib_get_info_for_libdbg>(),
         "sys_dynlib_get_info_for_libdbg"},
        {sysImplPointer<sys_blockpool_batch>(), "sys_blockpool_batch"},
        {sysImplPointer<sys_fdatasync>(), "sys_fdatasync"},
        {sysImplPointer<sys_dynlib_get_list2>(), "sys_dynlib_get_list2"},
        {sysImplPointer<sys_dynlib_get_info2>(), "sys_dynlib_get_info2"},
        {sysImplPointer<sys_aio_submit>(), "sys_aio_submit"},
        {sysImplPointer<sys_aio_multi_delete>(), "sys_aio_multi_delete"},
        {sysImplPointer<sys_aio_multi_wait>(), "sys_aio_multi_wait"},
        {sysImplPointer<sys_aio_multi_poll>(), "sys_aio_multi_poll"},
        {sysImplPointer<sys_aio_get_data>(), "sys_aio_get_data"},
        {sysImplPointer<sys_aio_multi_cancel>(), "sys_aio_multi_cancel"},
        {sysImplPointer<sys_get_bio_usage_all>(), "sys_get_bio_usage_all"},
        {sysImplPointer<sys_aio_create>(), "sys_aio_create"},
        {sysImplPointer<sys_aio_submit_cmd>(), "sys_aio_submit_cmd"},
        {sysImplPointer<sys_aio_init>(), "sys_aio_init"},
        {sysImplPointer<sys_get_page_table_stats>(),
         "sys_get_page_table_stats"},
        {sysImplPointer<sys_dynlib_get_list_for_libdbg>(),
         "sys_dynlib_get_list_for_libdbg"},
        {sysImplPointer<sys_blockpool_move>(), "sys_blockpool_move"},
        {sysImplPointer<sys_virtual_query_all>(), "sys_virtual_query_all"},
        {sysImplPointer<sys_reserve_2mb_page>(), "sys_reserve_2mb_page"},
        {sysImplPointer<sys_cpumode_yield>(), "sys_cpumode_yield"},
        {sysImplPointer<sys_wait6>(), "sys_wait6"},
        {sysImplPointer<sys_cap_rights_limit>(), "sys_cap_rights_limit"},
        {sysImplPointer<sys_cap_ioctls_limit>(), "sys_cap_ioctls_limit"},
        {sysImplPointer<sys_cap_ioctls_get>(), "sys_cap_ioctls_get"},
        {sysImplPointer<sys_cap_fcntls_limit>(), "sys_cap_fcntls_limit"},
        {sysImplPointer<sys_cap_fcntls_get>(), "sys_cap_fcntls_get"},
        {sysImplPointer<sys_bindat>(), "sys_bindat"},
        {sysImplPointer<sys_connectat>(), "sys_connectat"},
        {sysImplPointer<sys_chflagsat>(), "sys_chflagsat"},
        {sysImplPointer<sys_accept4>(), "sys_accept4"},
        {sysImplPointer<sys_pipe2>(), "sys_pipe2"},
        {sysImplPointer<sys_aio_mlock>(), "sys_aio_mlock"},
        {sysImplPointer<sys_procctl>(), "sys_procctl"},
        {sysImplPointer<sys_ppoll>(), "sys_ppoll"},
        {sysImplPointer<sys_futimens>(), "sys_futimens"},
        {sysImplPointer<sys_utimensat>(), "sys_utimensat"},
        {sysImplPointer<sys_numa_getaffinity>(), "sys_numa_getaffinity"},
        {sysImplPointer<sys_numa_setaffinity>(), "sys_numa_setaffinity"},
        {sysImplPointer<sys_apr_submit>(), "sys_apr_submit"},
        {sysImplPointer<sys_apr_resolve>(), "sys_apr_resolve"},
        {sysImplPointer<sys_apr_stat>(), "sys_apr_stat"},
        {sysImplPointer<sys_apr_wait>(), "sys_apr_wait"},
        {sysImplPointer<sys_apr_ctrl>(), "sys_apr_ctrl"},
        {sysImplPointer<sys_get_phys_page_size>(), "sys_get_phys_page_size"},
        {sysImplPointer<sys_begin_app_mount>(), "sys_begin_app_mount"},
        {sysImplPointer<sys_end_app_mount>(), "sys_end_app_mount"},
        {sysImplPointer<sys_fsc2h_ctrl>(), "sys_fsc2h_ctrl"},
        {sysImplPointer<sys_streamwrite>(), "sys_streamwrite"},
        {sysImplPointer<sys_app_save>(), "sys_app_save"},
        {sysImplPointer<sys_app_restore>(), "sys_app_restore"},
        {sysImplPointer<sys_saved_app_delete>(), "sys_saved_app_delete"},
        {sysImplPointer<sys_get_ppr_sdk_compiled_version>(),
         "sys_get_ppr_sdk_compiled_version"},
        {sysImplPointer<sys_notify_app_event>(), "sys_notify_app_event"},
        {sysImplPointer<sys_ioreq>(), "sys_ioreq"},
        {sysImplPointer<sys_openintr>(), "sys_openintr"},
        {sysImplPointer<sys_dl_get_info_2>(), "sys_dl_get_info_2"},
        {sysImplPointer<sys_acinfo_add>(), "sys_acinfo_add"},
        {sysImplPointer<sys_acinfo_delete>(), "sys_acinfo_delete"},
        {sysImplPointer<sys_acinfo_get_all_for_coredump>(),
         "sys_acinfo_get_all_for_coredump"},
        {sysImplPointer<sys_ampr_ctrl_debug>(), "sys_ampr_ctrl_debug"},
        {sysImplPointer<sys_workspace_ctrl>(), "sys_workspace_ctrl"},
};

const char *getSysentName(SysResult (*sysent)(Thread *, uint64_t *)) {
  auto it = std::find_if(
      std::begin(gImplToName), std::end(gImplToName),
      [=](std::pair<SysResult (*)(Thread *, uint64_t *), const char *> elem) {
        return sysent == elem.first;
      });

  if (it == std::end(gImplToName)) {
    return nullptr;
  }

  return it->second;
}

static constexpr sysent freebsd9_sysent[] = {
    wrap<nosys>(),
    wrap<sys_exit>(),
    wrap<sys_fork>(),
    wrap<sys_read>(),
    wrap<sys_write>(),
    wrap<sys_open>(),
    wrap<sys_close>(),
    wrap<sys_wait4>(),
    wrap<nosys>(),
    wrap<sys_link>(),
    wrap<sys_unlink>(),
    wrap<nosys>(),
    wrap<sys_chdir>(),
    wrap<sys_fchdir>(),
    wrap<sys_mknod>(),
    wrap<sys_chmod>(),
    wrap<sys_chown>(),
    wrap<sys_obreak>(),
    wrap<sys_getfsstat>(),
    wrap<nosys>(),
    wrap<sys_getpid>(),
    wrap<sys_mount>(),
    wrap<sys_unmount>(),
    wrap<sys_setuid>(),
    wrap<sys_getuid>(),
    wrap<sys_geteuid>(),
    wrap<sys_ptrace>(),
    wrap<sys_recvmsg>(),
    wrap<sys_sendmsg>(),
    wrap<sys_recvfrom>(),
    wrap<sys_accept>(),
    wrap<sys_getpeername>(),
    wrap<sys_getsockname>(),
    wrap<sys_access>(),
    wrap<sys_chflags>(),
    wrap<sys_fchflags>(),
    wrap<sys_sync>(),
    wrap<sys_kill>(),
    wrap<nosys>(),
    wrap<sys_getppid>(),
    wrap<nosys>(),
    wrap<sys_dup>(),
    wrap<sys_pipe>(),
    wrap<sys_getegid>(),
    wrap<sys_profil>(),
    wrap<sys_ktrace>(),
    wrap<nosys>(),
    wrap<sys_getgid>(),
    wrap<nosys>(),
    wrap<sys_getlogin>(),
    wrap<sys_setlogin>(),
    wrap<sys_acct>(),
    wrap<nosys>(),
    wrap<sys_sigaltstack>(),
    wrap<sys_ioctl>(),
    wrap<sys_reboot>(),
    wrap<sys_revoke>(),
    wrap<sys_symlink>(),
    wrap<sys_readlink>(),
    wrap<sys_execve>(),
    wrap<sys_umask>(),
    wrap<sys_chroot>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_msync>(),
    wrap<sys_vfork>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sbrk>(),
    wrap<sys_sstk>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_munmap>(),
    wrap<sys_mprotect>(),
    wrap<sys_madvise>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_mincore>(),
    wrap<sys_getgroups>(),
    wrap<sys_setgroups>(),
    wrap<sys_getpgrp>(),
    wrap<sys_setpgid>(),
    wrap<sys_setitimer>(),
    wrap<nosys>(),
    wrap<sys_swapon>(),
    wrap<sys_getitimer>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getdtablesize>(),
    wrap<sys_dup2>(),
    wrap<nosys>(),
    wrap<sys_fcntl>(),
    wrap<sys_select>(),
    wrap<nosys>(),
    wrap<sys_fsync>(),
    wrap<sys_setpriority>(),
    wrap<sys_socket>(),
    wrap<sys_connect>(),
    wrap<nosys>(),
    wrap<sys_getpriority>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_bind>(),
    wrap<sys_setsockopt>(),
    wrap<sys_listen>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_gettimeofday>(),
    wrap<sys_getrusage>(),
    wrap<sys_getsockopt>(),
    wrap<nosys>(),
    wrap<sys_readv>(),
    wrap<sys_writev>(),
    wrap<sys_settimeofday>(),
    wrap<sys_fchown>(),
    wrap<sys_fchmod>(),
    wrap<nosys>(),
    wrap<sys_setreuid>(),
    wrap<sys_setregid>(),
    wrap<sys_rename>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_flock>(),
    wrap<sys_mkfifo>(),
    wrap<sys_sendto>(),
    wrap<sys_shutdown>(),
    wrap<sys_socketpair>(),
    wrap<sys_mkdir>(),
    wrap<sys_rmdir>(),
    wrap<sys_utimes>(),
    wrap<nosys>(),
    wrap<sys_adjtime>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_setsid>(),
    wrap<sys_quotactl>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_nlm_syscall>(),
    wrap<sys_nfssvc>(),
    wrap<nosys>(),
    wrap<sys_statfs>(),
    wrap<sys_fstatfs>(),
    wrap<nosys>(),
    wrap<sys_lgetfh>(),
    wrap<sys_getfh>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sysarch>(),
    wrap<sys_rtprio>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_semsys>(),
    wrap<sys_msgsys>(),
    wrap<sys_shmsys>(),
    wrap<nosys>(),
    wrap<sys_freebsd6_pread>(),
    wrap<sys_freebsd6_pwrite>(),
    wrap<sys_setfib>(),
    wrap<sys_ntp_adjtime>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_setgid>(),
    wrap<sys_setegid>(),
    wrap<sys_seteuid>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_stat>(),
    wrap<sys_fstat>(),
    wrap<sys_lstat>(),
    wrap<sys_pathconf>(),
    wrap<sys_fpathconf>(),
    wrap<nosys>(),
    wrap<sys_getrlimit>(),
    wrap<sys_setrlimit>(),
    wrap<sys_getdirentries>(),
    wrap<sys_freebsd6_mmap>(),
    wrap<nosys>(),
    wrap<sys_freebsd6_lseek>(),
    wrap<sys_freebsd6_truncate>(),
    wrap<sys_freebsd6_ftruncate>(),
    wrap<sys___sysctl>(),
    wrap<sys_mlock>(),
    wrap<sys_munlock>(),
    wrap<sys_undelete>(),
    wrap<sys_futimes>(),
    wrap<sys_getpgid>(),
    wrap<nosys>(),
    wrap<sys_poll>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys___semctl>(),
    wrap<sys_semget>(),
    wrap<sys_semop>(),
    wrap<nosys>(),
    wrap<sys_msgctl>(),
    wrap<sys_msgget>(),
    wrap<sys_msgsnd>(),
    wrap<sys_msgrcv>(),
    wrap<sys_shmat>(),
    wrap<sys_shmctl>(),
    wrap<sys_shmdt>(),
    wrap<sys_shmget>(),
    wrap<sys_clock_gettime>(),
    wrap<sys_clock_settime>(),
    wrap<sys_clock_getres>(),
    wrap<sys_ktimer_create>(),
    wrap<sys_ktimer_delete>(),
    wrap<sys_ktimer_settime>(),
    wrap<sys_ktimer_gettime>(),
    wrap<sys_ktimer_getoverrun>(),
    wrap<sys_nanosleep>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_ntp_gettime>(),
    wrap<nosys>(),
    wrap<sys_minherit>(),
    wrap<sys_rfork>(),
    wrap<sys_openbsd_poll>(),
    wrap<sys_issetugid>(),
    wrap<sys_lchown>(),
    wrap<sys_aio_read>(),
    wrap<sys_aio_write>(),
    wrap<sys_lio_listio>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getdents>(),
    wrap<nosys>(),
    wrap<sys_lchmod>(),
    wrap<sys_lchown>(),
    wrap<sys_lutimes>(),
    wrap<sys_msync>(),
    wrap<sys_nstat>(),
    wrap<sys_nfstat>(),
    wrap<sys_nlstat>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_preadv>(),
    wrap<sys_pwritev>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_fhstatfs>(),
    wrap<sys_fhopen>(),
    wrap<sys_fhstat>(),
    wrap<sys_modnext>(),
    wrap<sys_modstat>(),
    wrap<sys_modfnext>(),
    wrap<sys_modfind>(),
    wrap<sys_kldload>(),
    wrap<sys_kldunload>(),
    wrap<sys_kldfind>(),
    wrap<sys_kldnext>(),
    wrap<sys_kldstat>(),
    wrap<sys_kldfirstmod>(),
    wrap<sys_getsid>(),
    wrap<sys_setresuid>(),
    wrap<sys_setresgid>(),
    wrap<nosys>(),
    wrap<sys_aio_return>(),
    wrap<sys_aio_suspend>(),
    wrap<sys_aio_cancel>(),
    wrap<sys_aio_error>(),
    wrap<sys_oaio_read>(),
    wrap<sys_oaio_write>(),
    wrap<sys_olio_listio>(),
    wrap<sys_yield>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_mlockall>(),
    wrap<sys_munlockall>(),
    wrap<sys___getcwd>(),
    wrap<sys_sched_setparam>(),
    wrap<sys_sched_getparam>(),
    wrap<sys_sched_setscheduler>(),
    wrap<sys_sched_getscheduler>(),
    wrap<sys_sched_yield>(),
    wrap<sys_sched_get_priority_max>(),
    wrap<sys_sched_get_priority_min>(),
    wrap<sys_sched_rr_get_interval>(),
    wrap<sys_utrace>(),
    wrap<sys_sendfile>(),
    wrap<sys_kldsym>(),
    wrap<sys_jail>(),
    wrap<sys_nnpfs_syscall>(),
    wrap<sys_sigprocmask>(),
    wrap<sys_sigsuspend>(),
    wrap<sys_sigaction>(),
    wrap<sys_sigpending>(),
    wrap<sys_sigreturn>(),
    wrap<sys_sigtimedwait>(),
    wrap<sys_sigwaitinfo>(),
    wrap<sys___acl_get_file>(),
    wrap<sys___acl_set_file>(),
    wrap<sys___acl_get_fd>(),
    wrap<sys___acl_set_fd>(),
    wrap<sys___acl_delete_file>(),
    wrap<sys___acl_delete_fd>(),
    wrap<sys___acl_aclcheck_file>(),
    wrap<sys___acl_aclcheck_fd>(),
    wrap<sys_extattrctl>(),
    wrap<sys_extattr_set_file>(),
    wrap<sys_extattr_get_file>(),
    wrap<sys_extattr_delete_file>(),
    wrap<sys_aio_waitcomplete>(),
    wrap<sys_getresuid>(),
    wrap<sys_getresgid>(),
    wrap<sys_kqueue>(),
    wrap<sys_kevent>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_extattr_set_fd>(),
    wrap<sys_extattr_get_fd>(),
    wrap<sys_extattr_delete_fd>(),
    wrap<sys___setugid>(),
    wrap<nosys>(),
    wrap<sys_eaccess>(),
    wrap<sys_afs3_syscall>(),
    wrap<sys_nmount>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys___mac_get_proc>(),
    wrap<sys___mac_set_proc>(),
    wrap<sys___mac_get_fd>(),
    wrap<sys___mac_get_file>(),
    wrap<sys___mac_set_fd>(),
    wrap<sys___mac_set_file>(),
    wrap<sys_kenv>(),
    wrap<sys_lchflags>(),
    wrap<sys_uuidgen>(),
    wrap<sys_sendfile>(),
    wrap<sys_mac_syscall>(),
    wrap<sys_getfsstat>(),
    wrap<sys_statfs>(),
    wrap<sys_fstatfs>(),
    wrap<sys_fhstatfs>(),
    wrap<nosys>(),
    wrap<sys_ksem_close>(),
    wrap<sys_ksem_post>(),
    wrap<sys_ksem_wait>(),
    wrap<sys_ksem_trywait>(),
    wrap<sys_ksem_init>(),
    wrap<sys_ksem_open>(),
    wrap<sys_ksem_unlink>(),
    wrap<sys_ksem_getvalue>(),
    wrap<sys_ksem_destroy>(),
    wrap<sys___mac_get_pid>(),
    wrap<sys___mac_get_link>(),
    wrap<sys___mac_set_link>(),
    wrap<sys_extattr_set_link>(),
    wrap<sys_extattr_get_link>(),
    wrap<sys_extattr_delete_link>(),
    wrap<sys___mac_execve>(),
    wrap<sys_sigaction>(),
    wrap<sys_sigreturn>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getcontext>(),
    wrap<sys_setcontext>(),
    wrap<sys_swapcontext>(),
    wrap<sys_swapoff>(),
    wrap<sys___acl_get_link>(),
    wrap<sys___acl_set_link>(),
    wrap<sys___acl_delete_link>(),
    wrap<sys___acl_aclcheck_link>(),
    wrap<sys_sigwait>(),
    wrap<sys_thr_create>(),
    wrap<sys_thr_exit>(),
    wrap<sys_thr_self>(),
    wrap<sys_thr_kill>(),
    wrap<sys__umtx_lock>(),
    wrap<sys__umtx_unlock>(),
    wrap<sys_jail_attach>(),
    wrap<sys_extattr_list_fd>(),
    wrap<sys_extattr_list_file>(),
    wrap<sys_extattr_list_link>(),
    wrap<nosys>(),
    wrap<sys_ksem_timedwait>(),
    wrap<sys_thr_suspend>(),
    wrap<sys_thr_wake>(),
    wrap<sys_kldunloadf>(),
    wrap<sys_audit>(),
    wrap<sys_auditon>(),
    wrap<sys_getauid>(),
    wrap<sys_setauid>(),
    wrap<sys_getaudit>(),
    wrap<sys_setaudit>(),
    wrap<sys_getaudit_addr>(),
    wrap<sys_setaudit_addr>(),
    wrap<sys_auditctl>(),
    wrap<sys__umtx_op>(),
    wrap<sys_thr_new>(),
    wrap<sys_sigqueue>(),
    wrap<sys_kmq_open>(),
    wrap<sys_kmq_setattr>(),
    wrap<sys_kmq_timedreceive>(),
    wrap<sys_kmq_timedsend>(),
    wrap<sys_kmq_notify>(),
    wrap<sys_kmq_unlink>(),
    wrap<sys_abort2>(),
    wrap<sys_thr_set_name>(),
    wrap<sys_aio_fsync>(),
    wrap<sys_rtprio_thread>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sctp_peeloff>(),
    wrap<sys_sctp_generic_sendmsg>(),
    wrap<sys_sctp_generic_sendmsg_iov>(),
    wrap<sys_sctp_generic_recvmsg>(),
    wrap<sys_pread>(),
    wrap<sys_pwrite>(),
    wrap<sys_mmap>(),
    wrap<sys_lseek>(),
    wrap<sys_truncate>(),
    wrap<sys_ftruncate>(),
    wrap<sys_thr_kill2>(),
    wrap<sys_shm_open>(),
    wrap<sys_shm_unlink>(),
    wrap<sys_cpuset>(),
    wrap<sys_cpuset_setid>(),
    wrap<sys_cpuset_getid>(),
    wrap<sys_cpuset_getaffinity>(),
    wrap<sys_cpuset_setaffinity>(),
    wrap<sys_faccessat>(),
    wrap<sys_fchmodat>(),
    wrap<sys_fchownat>(),
    wrap<sys_fexecve>(),
    wrap<sys_fstatat>(),
    wrap<sys_futimesat>(),
    wrap<sys_linkat>(),
    wrap<sys_mkdirat>(),
    wrap<sys_mkfifoat>(),
    wrap<sys_mknodat>(),
    wrap<sys_openat>(),
    wrap<sys_readlinkat>(),
    wrap<sys_renameat>(),
    wrap<sys_symlinkat>(),
    wrap<sys_unlinkat>(),
    wrap<sys_posix_openpt>(),
    wrap<sys_gssd_syscall>(),
    wrap<sys_jail_get>(),
    wrap<sys_jail_set>(),
    wrap<sys_jail_remove>(),
    wrap<sys_closefrom>(),
    wrap<sys___semctl>(),
    wrap<sys_msgctl>(),
    wrap<sys_shmctl>(),
    wrap<sys_lpathconf>(),
    wrap<sys_cap_new>(),
    wrap<sys_cap_getrights>(),
    wrap<sys_cap_enter>(),
    wrap<sys_cap_getmode>(),
    wrap<sys_pdfork>(),
    wrap<sys_pdkill>(),
    wrap<sys_pdgetpid>(),
    wrap<nosys>(),
    wrap<sys_pselect>(),
    wrap<sys_getloginclass>(),
    wrap<sys_setloginclass>(),
    wrap<sys_rctl_get_racct>(),
    wrap<sys_rctl_get_rules>(),
    wrap<sys_rctl_get_limits>(),
    wrap<sys_rctl_add_rule>(),
    wrap<sys_rctl_remove_rule>(),
    wrap<sys_posix_fallocate>(),
    wrap<sys_posix_fadvise>(),
};

// TODO
static constexpr sysent freebsd11_sysent[] = {
    wrap<nosys>(),
    wrap<sys_exit>(),
    wrap<sys_fork>(),
    wrap<sys_read>(),
    wrap<sys_write>(),
    wrap<sys_open>(),
    wrap<sys_close>(),
    wrap<sys_wait4>(),
    wrap<nosys>(),
    wrap<sys_link>(),
    wrap<sys_unlink>(),
    wrap<nosys>(),
    wrap<sys_chdir>(),
    wrap<sys_fchdir>(),
    wrap<sys_mknod>(),
    wrap<sys_chmod>(),
    wrap<sys_chown>(),
    wrap<sys_obreak>(),
    wrap<sys_getfsstat>(),
    wrap<nosys>(),
    wrap<sys_getpid>(),
    wrap<sys_mount>(),
    wrap<sys_unmount>(),
    wrap<sys_setuid>(),
    wrap<sys_getuid>(),
    wrap<sys_geteuid>(),
    wrap<sys_ptrace>(),
    wrap<sys_recvmsg>(),
    wrap<sys_sendmsg>(),
    wrap<sys_recvfrom>(),
    wrap<sys_accept>(),
    wrap<sys_getpeername>(),
    wrap<sys_getsockname>(),
    wrap<sys_access>(),
    wrap<sys_chflags>(),
    wrap<sys_fchflags>(),
    wrap<sys_sync>(),
    wrap<sys_kill>(),
    wrap<nosys>(),
    wrap<sys_getppid>(),
    wrap<nosys>(),
    wrap<sys_dup>(),
    wrap<sys_pipe>(),
    wrap<sys_getegid>(),
    wrap<sys_profil>(),
    wrap<sys_ktrace>(),
    wrap<nosys>(),
    wrap<sys_getgid>(),
    wrap<nosys>(),
    wrap<sys_getlogin>(),
    wrap<sys_setlogin>(),
    wrap<sys_acct>(),
    wrap<nosys>(),
    wrap<sys_sigaltstack>(),
    wrap<sys_ioctl>(),
    wrap<sys_reboot>(),
    wrap<sys_revoke>(),
    wrap<sys_symlink>(),
    wrap<sys_readlink>(),
    wrap<sys_execve>(),
    wrap<sys_umask>(),
    wrap<sys_chroot>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_msync>(),
    wrap<sys_vfork>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sbrk>(),
    wrap<sys_sstk>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_munmap>(),
    wrap<sys_mprotect>(),
    wrap<sys_madvise>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_mincore>(),
    wrap<sys_getgroups>(),
    wrap<sys_setgroups>(),
    wrap<sys_getpgrp>(),
    wrap<sys_setpgid>(),
    wrap<sys_setitimer>(),
    wrap<nosys>(),
    wrap<sys_swapon>(),
    wrap<sys_getitimer>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getdtablesize>(),
    wrap<sys_dup2>(),
    wrap<nosys>(),
    wrap<sys_fcntl>(),
    wrap<sys_select>(),
    wrap<nosys>(),
    wrap<sys_fsync>(),
    wrap<sys_setpriority>(),
    wrap<sys_socket>(),
    wrap<sys_connect>(),
    wrap<nosys>(),
    wrap<sys_getpriority>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_bind>(),
    wrap<sys_setsockopt>(),
    wrap<sys_listen>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_gettimeofday>(),
    wrap<sys_getrusage>(),
    wrap<sys_getsockopt>(),
    wrap<nosys>(),
    wrap<sys_readv>(),
    wrap<sys_writev>(),
    wrap<sys_settimeofday>(),
    wrap<sys_fchown>(),
    wrap<sys_fchmod>(),
    wrap<nosys>(),
    wrap<sys_setreuid>(),
    wrap<sys_setregid>(),
    wrap<sys_rename>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_flock>(),
    wrap<sys_mkfifo>(),
    wrap<sys_sendto>(),
    wrap<sys_shutdown>(),
    wrap<sys_socketpair>(),
    wrap<sys_mkdir>(),
    wrap<sys_rmdir>(),
    wrap<sys_utimes>(),
    wrap<nosys>(),
    wrap<sys_adjtime>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_setsid>(),
    wrap<sys_quotactl>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_nlm_syscall>(),
    wrap<sys_nfssvc>(),
    wrap<nosys>(),
    wrap<sys_statfs>(),
    wrap<sys_fstatfs>(),
    wrap<nosys>(),
    wrap<sys_lgetfh>(),
    wrap<sys_getfh>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sysarch>(),
    wrap<sys_rtprio>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_semsys>(),
    wrap<sys_msgsys>(),
    wrap<sys_shmsys>(),
    wrap<nosys>(),
    wrap<sys_freebsd6_pread>(),
    wrap<sys_freebsd6_pwrite>(),
    wrap<sys_setfib>(),
    wrap<sys_ntp_adjtime>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_setgid>(),
    wrap<sys_setegid>(),
    wrap<sys_seteuid>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_stat>(),
    wrap<sys_fstat>(),
    wrap<sys_lstat>(),
    wrap<sys_pathconf>(),
    wrap<sys_fpathconf>(),
    wrap<nosys>(),
    wrap<sys_getrlimit>(),
    wrap<sys_setrlimit>(),
    wrap<sys_getdirentries>(),
    wrap<sys_freebsd6_mmap>(),
    wrap<nosys>(),
    wrap<sys_freebsd6_lseek>(),
    wrap<sys_freebsd6_truncate>(),
    wrap<sys_freebsd6_ftruncate>(),
    wrap<sys___sysctl>(),
    wrap<sys_mlock>(),
    wrap<sys_munlock>(),
    wrap<sys_undelete>(),
    wrap<sys_futimes>(),
    wrap<sys_getpgid>(),
    wrap<nosys>(),
    wrap<sys_poll>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys___semctl>(),
    wrap<sys_semget>(),
    wrap<sys_semop>(),
    wrap<nosys>(),
    wrap<sys_msgctl>(),
    wrap<sys_msgget>(),
    wrap<sys_msgsnd>(),
    wrap<sys_msgrcv>(),
    wrap<sys_shmat>(),
    wrap<sys_shmctl>(),
    wrap<sys_shmdt>(),
    wrap<sys_shmget>(),
    wrap<sys_clock_gettime>(),
    wrap<sys_clock_settime>(),
    wrap<sys_clock_getres>(),
    wrap<sys_ktimer_create>(),
    wrap<sys_ktimer_delete>(),
    wrap<sys_ktimer_settime>(),
    wrap<sys_ktimer_gettime>(),
    wrap<sys_ktimer_getoverrun>(),
    wrap<sys_nanosleep>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_ntp_gettime>(),
    wrap<nosys>(),
    wrap<sys_minherit>(),
    wrap<sys_rfork>(),
    wrap<sys_openbsd_poll>(),
    wrap<sys_issetugid>(),
    wrap<sys_lchown>(),
    wrap<sys_aio_read>(),
    wrap<sys_aio_write>(),
    wrap<sys_lio_listio>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getdents>(),
    wrap<nosys>(),
    wrap<sys_lchmod>(),
    wrap<sys_lchown>(),
    wrap<sys_lutimes>(),
    wrap<sys_msync>(),
    wrap<sys_nstat>(),
    wrap<sys_nfstat>(),
    wrap<sys_nlstat>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_preadv>(),
    wrap<sys_pwritev>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_fhstatfs>(),
    wrap<sys_fhopen>(),
    wrap<sys_fhstat>(),
    wrap<sys_modnext>(),
    wrap<sys_modstat>(),
    wrap<sys_modfnext>(),
    wrap<sys_modfind>(),
    wrap<sys_kldload>(),
    wrap<sys_kldunload>(),
    wrap<sys_kldfind>(),
    wrap<sys_kldnext>(),
    wrap<sys_kldstat>(),
    wrap<sys_kldfirstmod>(),
    wrap<sys_getsid>(),
    wrap<sys_setresuid>(),
    wrap<sys_setresgid>(),
    wrap<nosys>(),
    wrap<sys_aio_return>(),
    wrap<sys_aio_suspend>(),
    wrap<sys_aio_cancel>(),
    wrap<sys_aio_error>(),
    wrap<sys_oaio_read>(),
    wrap<sys_oaio_write>(),
    wrap<sys_olio_listio>(),
    wrap<sys_yield>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_mlockall>(),
    wrap<sys_munlockall>(),
    wrap<sys___getcwd>(),
    wrap<sys_sched_setparam>(),
    wrap<sys_sched_getparam>(),
    wrap<sys_sched_setscheduler>(),
    wrap<sys_sched_getscheduler>(),
    wrap<sys_sched_yield>(),
    wrap<sys_sched_get_priority_max>(),
    wrap<sys_sched_get_priority_min>(),
    wrap<sys_sched_rr_get_interval>(),
    wrap<sys_utrace>(),
    wrap<sys_sendfile>(),
    wrap<sys_kldsym>(),
    wrap<sys_jail>(),
    wrap<sys_nnpfs_syscall>(),
    wrap<sys_sigprocmask>(),
    wrap<sys_sigsuspend>(),
    wrap<sys_sigaction>(),
    wrap<sys_sigpending>(),
    wrap<sys_sigreturn>(),
    wrap<sys_sigtimedwait>(),
    wrap<sys_sigwaitinfo>(),
    wrap<sys___acl_get_file>(),
    wrap<sys___acl_set_file>(),
    wrap<sys___acl_get_fd>(),
    wrap<sys___acl_set_fd>(),
    wrap<sys___acl_delete_file>(),
    wrap<sys___acl_delete_fd>(),
    wrap<sys___acl_aclcheck_file>(),
    wrap<sys___acl_aclcheck_fd>(),
    wrap<sys_extattrctl>(),
    wrap<sys_extattr_set_file>(),
    wrap<sys_extattr_get_file>(),
    wrap<sys_extattr_delete_file>(),
    wrap<sys_aio_waitcomplete>(),
    wrap<sys_getresuid>(),
    wrap<sys_getresgid>(),
    wrap<sys_kqueue>(),
    wrap<sys_kevent>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_extattr_set_fd>(),
    wrap<sys_extattr_get_fd>(),
    wrap<sys_extattr_delete_fd>(),
    wrap<sys___setugid>(),
    wrap<nosys>(),
    wrap<sys_eaccess>(),
    wrap<sys_afs3_syscall>(),
    wrap<sys_nmount>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys___mac_get_proc>(),
    wrap<sys___mac_set_proc>(),
    wrap<sys___mac_get_fd>(),
    wrap<sys___mac_get_file>(),
    wrap<sys___mac_set_fd>(),
    wrap<sys___mac_set_file>(),
    wrap<sys_kenv>(),
    wrap<sys_lchflags>(),
    wrap<sys_uuidgen>(),
    wrap<sys_sendfile>(),
    wrap<sys_mac_syscall>(),
    wrap<sys_getfsstat>(),
    wrap<sys_statfs>(),
    wrap<sys_fstatfs>(),
    wrap<sys_fhstatfs>(),
    wrap<nosys>(),
    wrap<sys_ksem_close>(),
    wrap<sys_ksem_post>(),
    wrap<sys_ksem_wait>(),
    wrap<sys_ksem_trywait>(),
    wrap<sys_ksem_init>(),
    wrap<sys_ksem_open>(),
    wrap<sys_ksem_unlink>(),
    wrap<sys_ksem_getvalue>(),
    wrap<sys_ksem_destroy>(),
    wrap<sys___mac_get_pid>(),
    wrap<sys___mac_get_link>(),
    wrap<sys___mac_set_link>(),
    wrap<sys_extattr_set_link>(),
    wrap<sys_extattr_get_link>(),
    wrap<sys_extattr_delete_link>(),
    wrap<sys___mac_execve>(),
    wrap<sys_sigaction>(),
    wrap<sys_sigreturn>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getcontext>(),
    wrap<sys_setcontext>(),
    wrap<sys_swapcontext>(),
    wrap<sys_swapoff>(),
    wrap<sys___acl_get_link>(),
    wrap<sys___acl_set_link>(),
    wrap<sys___acl_delete_link>(),
    wrap<sys___acl_aclcheck_link>(),
    wrap<sys_sigwait>(),
    wrap<sys_thr_create>(),
    wrap<sys_thr_exit>(),
    wrap<sys_thr_self>(),
    wrap<sys_thr_kill>(),
    wrap<sys__umtx_lock>(),
    wrap<sys__umtx_unlock>(),
    wrap<sys_jail_attach>(),
    wrap<sys_extattr_list_fd>(),
    wrap<sys_extattr_list_file>(),
    wrap<sys_extattr_list_link>(),
    wrap<nosys>(),
    wrap<sys_ksem_timedwait>(),
    wrap<sys_thr_suspend>(),
    wrap<sys_thr_wake>(),
    wrap<sys_kldunloadf>(),
    wrap<sys_audit>(),
    wrap<sys_auditon>(),
    wrap<sys_getauid>(),
    wrap<sys_setauid>(),
    wrap<sys_getaudit>(),
    wrap<sys_setaudit>(),
    wrap<sys_getaudit_addr>(),
    wrap<sys_setaudit_addr>(),
    wrap<sys_auditctl>(),
    wrap<sys__umtx_op>(),
    wrap<sys_thr_new>(),
    wrap<sys_sigqueue>(),
    wrap<sys_kmq_open>(),
    wrap<sys_kmq_setattr>(),
    wrap<sys_kmq_timedreceive>(),
    wrap<sys_kmq_timedsend>(),
    wrap<sys_kmq_notify>(),
    wrap<sys_kmq_unlink>(),
    wrap<sys_abort2>(),
    wrap<sys_thr_set_name>(),
    wrap<sys_aio_fsync>(),
    wrap<sys_rtprio_thread>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sctp_peeloff>(),
    wrap<sys_sctp_generic_sendmsg>(),
    wrap<sys_sctp_generic_sendmsg_iov>(),
    wrap<sys_sctp_generic_recvmsg>(),
    wrap<sys_pread>(),
    wrap<sys_pwrite>(),
    wrap<sys_mmap>(),
    wrap<sys_lseek>(),
    wrap<sys_truncate>(),
    wrap<sys_ftruncate>(),
    wrap<sys_thr_kill2>(),
    wrap<sys_shm_open>(),
    wrap<sys_shm_unlink>(),
    wrap<sys_cpuset>(),
    wrap<sys_cpuset_setid>(),
    wrap<sys_cpuset_getid>(),
    wrap<sys_cpuset_getaffinity>(),
    wrap<sys_cpuset_setaffinity>(),
    wrap<sys_faccessat>(),
    wrap<sys_fchmodat>(),
    wrap<sys_fchownat>(),
    wrap<sys_fexecve>(),
    wrap<sys_fstatat>(),
    wrap<sys_futimesat>(),
    wrap<sys_linkat>(),
    wrap<sys_mkdirat>(),
    wrap<sys_mkfifoat>(),
    wrap<sys_mknodat>(),
    wrap<sys_openat>(),
    wrap<sys_readlinkat>(),
    wrap<sys_renameat>(),
    wrap<sys_symlinkat>(),
    wrap<sys_unlinkat>(),
    wrap<sys_posix_openpt>(),
    wrap<sys_gssd_syscall>(),
    wrap<sys_jail_get>(),
    wrap<sys_jail_set>(),
    wrap<sys_jail_remove>(),
    wrap<sys_closefrom>(),
    wrap<sys___semctl>(),
    wrap<sys_msgctl>(),
    wrap<sys_shmctl>(),
    wrap<sys_lpathconf>(),
    wrap<sys_cap_new>(),
    wrap<sys_cap_getrights>(),
    wrap<sys_cap_enter>(),
    wrap<sys_cap_getmode>(),
    wrap<sys_pdfork>(),
    wrap<sys_pdkill>(),
    wrap<sys_pdgetpid>(),
    wrap<nosys>(),
    wrap<sys_pselect>(),
    wrap<sys_getloginclass>(),
    wrap<sys_setloginclass>(),
    wrap<sys_rctl_get_racct>(),
    wrap<sys_rctl_get_rules>(),
    wrap<sys_rctl_get_limits>(),
    wrap<sys_rctl_add_rule>(),
    wrap<sys_rctl_remove_rule>(),
    wrap<sys_posix_fallocate>(),
    wrap<sys_posix_fadvise>(),
};

static constexpr sysent ps4_sysent[] = {
    wrap<nosys>(),
    wrap<sys_exit>(),
    wrap<sys_fork>(),
    wrap<sys_read>(),
    wrap<sys_write>(),
    wrap<sys_open>(),
    wrap<sys_close>(),
    wrap<sys_wait4>(),
    wrap<nosys>(),
    wrap<sys_link>(),
    wrap<sys_unlink>(),
    wrap<nosys>(),
    wrap<sys_chdir>(),
    wrap<sys_fchdir>(),
    wrap<sys_mknod>(),
    wrap<sys_chmod>(),
    wrap<sys_chown>(),
    wrap<sys_obreak>(),
    wrap<sys_getfsstat>(),
    wrap<nosys>(),
    wrap<sys_getpid>(),
    wrap<sys_mount>(),
    wrap<sys_unmount>(),
    wrap<sys_setuid>(),
    wrap<sys_getuid>(),
    wrap<sys_geteuid>(),
    wrap<sys_ptrace>(),
    wrap<sys_recvmsg>(),
    wrap<sys_sendmsg>(),
    wrap<sys_recvfrom>(),
    wrap<sys_accept>(),
    wrap<sys_getpeername>(),
    wrap<sys_getsockname>(),
    wrap<sys_access>(),
    wrap<sys_chflags>(),
    wrap<sys_fchflags>(),
    wrap<sys_sync>(),
    wrap<sys_kill>(),
    wrap<nosys>(),
    wrap<sys_getppid>(),
    wrap<nosys>(),
    wrap<sys_dup>(),
    wrap<sys_pipe>(),
    wrap<sys_getegid>(),
    wrap<sys_profil>(),
    wrap<sys_ktrace>(),
    wrap<nosys>(),
    wrap<sys_getgid>(),
    wrap<nosys>(),
    wrap<sys_getlogin>(),
    wrap<sys_setlogin>(),
    wrap<sys_acct>(),
    wrap<nosys>(),
    wrap<sys_sigaltstack>(),
    wrap<sys_ioctl>(),
    wrap<sys_reboot>(),
    wrap<sys_revoke>(),
    wrap<sys_symlink>(),
    wrap<sys_readlink>(),
    wrap<sys_execve>(),
    wrap<sys_umask>(),
    wrap<sys_chroot>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_msync>(),
    wrap<sys_vfork>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sbrk>(),
    wrap<sys_sstk>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_munmap>(),
    wrap<sys_mprotect>(),
    wrap<sys_madvise>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_mincore>(),
    wrap<sys_getgroups>(),
    wrap<sys_setgroups>(),
    wrap<sys_getpgrp>(),
    wrap<sys_setpgid>(),
    wrap<sys_setitimer>(),
    wrap<nosys>(),
    wrap<sys_swapon>(),
    wrap<sys_getitimer>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getdtablesize>(),
    wrap<sys_dup2>(),
    wrap<nosys>(),
    wrap<sys_fcntl>(),
    wrap<sys_select>(),
    wrap<nosys>(),
    wrap<sys_fsync>(),
    wrap<sys_setpriority>(),
    wrap<sys_socket>(),
    wrap<sys_connect>(),
    wrap<sys_netcontrol>(),
    wrap<sys_getpriority>(),
    wrap<sys_netabort>(),
    wrap<sys_netgetsockinfo>(),
    wrap<nosys>(),
    wrap<sys_bind>(),
    wrap<sys_setsockopt>(),
    wrap<sys_listen>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_socketex>(),
    wrap<sys_socketclose>(),
    wrap<nosys>(),
    wrap<sys_gettimeofday>(),
    wrap<sys_getrusage>(),
    wrap<sys_getsockopt>(),
    wrap<nosys>(),
    wrap<sys_readv>(),
    wrap<sys_writev>(),
    wrap<sys_settimeofday>(),
    wrap<sys_fchown>(),
    wrap<sys_fchmod>(),
    wrap<sys_netgetiflist>(),
    wrap<sys_setreuid>(),
    wrap<sys_setregid>(),
    wrap<sys_rename>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_flock>(),
    wrap<sys_mkfifo>(),
    wrap<sys_sendto>(),
    wrap<sys_shutdown>(),
    wrap<sys_socketpair>(),
    wrap<sys_mkdir>(),
    wrap<sys_rmdir>(),
    wrap<sys_utimes>(),
    wrap<nosys>(),
    wrap<sys_adjtime>(),
    wrap<sys_kqueueex>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_setsid>(),
    wrap<sys_quotactl>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_nlm_syscall>(),
    wrap<sys_nfssvc>(),
    wrap<nosys>(),
    wrap<sys_statfs>(),
    wrap<sys_fstatfs>(),
    wrap<nosys>(),
    wrap<sys_lgetfh>(),
    wrap<sys_getfh>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sysarch>(),
    wrap<sys_rtprio>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_semsys>(),
    wrap<sys_msgsys>(),
    wrap<sys_shmsys>(),
    wrap<nosys>(),
    wrap<sys_freebsd6_pread>(),
    wrap<sys_freebsd6_pwrite>(),
    wrap<sys_setfib>(),
    wrap<sys_ntp_adjtime>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_setgid>(),
    wrap<sys_setegid>(),
    wrap<sys_seteuid>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_stat>(),
    wrap<sys_fstat>(),
    wrap<sys_lstat>(),
    wrap<sys_pathconf>(),
    wrap<sys_fpathconf>(),
    wrap<nosys>(),
    wrap<sys_getrlimit>(),
    wrap<sys_setrlimit>(),
    wrap<sys_getdirentries>(),
    wrap<sys_freebsd6_mmap>(),
    wrap<nosys>(),
    wrap<sys_freebsd6_lseek>(),
    wrap<sys_freebsd6_truncate>(),
    wrap<sys_freebsd6_ftruncate>(),
    wrap<sys___sysctl>(),
    wrap<sys_mlock>(),
    wrap<sys_munlock>(),
    wrap<sys_undelete>(),
    wrap<sys_futimes>(),
    wrap<sys_getpgid>(),
    wrap<nosys>(),
    wrap<sys_poll>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys___semctl>(),
    wrap<sys_semget>(),
    wrap<sys_semop>(),
    wrap<nosys>(),
    wrap<sys_msgctl>(),
    wrap<sys_msgget>(),
    wrap<sys_msgsnd>(),
    wrap<sys_msgrcv>(),
    wrap<sys_shmat>(),
    wrap<sys_shmctl>(),
    wrap<sys_shmdt>(),
    wrap<sys_shmget>(),
    wrap<sys_clock_gettime>(),
    wrap<sys_clock_settime>(),
    wrap<sys_clock_getres>(),
    wrap<sys_ktimer_create>(),
    wrap<sys_ktimer_delete>(),
    wrap<sys_ktimer_settime>(),
    wrap<sys_ktimer_gettime>(),
    wrap<sys_ktimer_getoverrun>(),
    wrap<sys_nanosleep>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_ntp_gettime>(),
    wrap<nosys>(),
    wrap<sys_minherit>(),
    wrap<sys_rfork>(),
    wrap<sys_openbsd_poll>(),
    wrap<sys_issetugid>(),
    wrap<sys_lchown>(),
    wrap<sys_aio_read>(),
    wrap<sys_aio_write>(),
    wrap<sys_lio_listio>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getdents>(),
    wrap<nosys>(),
    wrap<sys_lchmod>(),
    wrap<sys_lchown>(),
    wrap<sys_lutimes>(),
    wrap<sys_msync>(),
    wrap<sys_nstat>(),
    wrap<sys_nfstat>(),
    wrap<sys_nlstat>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_preadv>(),
    wrap<sys_pwritev>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_fhstatfs>(),
    wrap<sys_fhopen>(),
    wrap<sys_fhstat>(),
    wrap<sys_modnext>(),
    wrap<sys_modstat>(),
    wrap<sys_modfnext>(),
    wrap<sys_modfind>(),
    wrap<sys_kldload>(),
    wrap<sys_kldunload>(),
    wrap<sys_kldfind>(),
    wrap<sys_kldnext>(),
    wrap<sys_kldstat>(),
    wrap<sys_kldfirstmod>(),
    wrap<sys_getsid>(),
    wrap<sys_setresuid>(),
    wrap<sys_setresgid>(),
    wrap<nosys>(),
    wrap<sys_aio_return>(),
    wrap<sys_aio_suspend>(),
    wrap<sys_aio_cancel>(),
    wrap<sys_aio_error>(),
    wrap<sys_oaio_read>(),
    wrap<sys_oaio_write>(),
    wrap<sys_olio_listio>(),
    wrap<sys_yield>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_mlockall>(),
    wrap<sys_munlockall>(),
    wrap<sys___getcwd>(),
    wrap<sys_sched_setparam>(),
    wrap<sys_sched_getparam>(),
    wrap<sys_sched_setscheduler>(),
    wrap<sys_sched_getscheduler>(),
    wrap<sys_sched_yield>(),
    wrap<sys_sched_get_priority_max>(),
    wrap<sys_sched_get_priority_min>(),
    wrap<sys_sched_rr_get_interval>(),
    wrap<sys_utrace>(),
    wrap<sys_sendfile>(),
    wrap<sys_kldsym>(),
    wrap<sys_jail>(),
    wrap<sys_nnpfs_syscall>(),
    wrap<sys_sigprocmask>(),
    wrap<sys_sigsuspend>(),
    wrap<sys_sigaction>(),
    wrap<sys_sigpending>(),
    wrap<sys_sigreturn>(),
    wrap<sys_sigtimedwait>(),
    wrap<sys_sigwaitinfo>(),
    wrap<sys___acl_get_file>(),
    wrap<sys___acl_set_file>(),
    wrap<sys___acl_get_fd>(),
    wrap<sys___acl_set_fd>(),
    wrap<sys___acl_delete_file>(),
    wrap<sys___acl_delete_fd>(),
    wrap<sys___acl_aclcheck_file>(),
    wrap<sys___acl_aclcheck_fd>(),
    wrap<sys_extattrctl>(),
    wrap<sys_extattr_set_file>(),
    wrap<sys_extattr_get_file>(),
    wrap<sys_extattr_delete_file>(),
    wrap<sys_aio_waitcomplete>(),
    wrap<sys_getresuid>(),
    wrap<sys_getresgid>(),
    wrap<sys_kqueue>(),
    wrap<sys_kevent>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_extattr_set_fd>(),
    wrap<sys_extattr_get_fd>(),
    wrap<sys_extattr_delete_fd>(),
    wrap<sys___setugid>(),
    wrap<nosys>(),
    wrap<sys_eaccess>(),
    wrap<sys_afs3_syscall>(),
    wrap<sys_nmount>(),
    wrap<sys_mtypeprotect>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys___mac_get_proc>(),
    wrap<sys___mac_set_proc>(),
    wrap<sys___mac_get_fd>(),
    wrap<sys___mac_get_file>(),
    wrap<sys___mac_set_fd>(),
    wrap<sys___mac_set_file>(),
    wrap<sys_kenv>(),
    wrap<sys_lchflags>(),
    wrap<sys_uuidgen>(),
    wrap<sys_sendfile>(),
    wrap<sys_mac_syscall>(),
    wrap<sys_getfsstat>(),
    wrap<sys_statfs>(),
    wrap<sys_fstatfs>(),
    wrap<sys_fhstatfs>(),
    wrap<nosys>(),
    wrap<sys_ksem_close>(),
    wrap<sys_ksem_post>(),
    wrap<sys_ksem_wait>(),
    wrap<sys_ksem_trywait>(),
    wrap<sys_ksem_init>(),
    wrap<sys_ksem_open>(),
    wrap<sys_ksem_unlink>(),
    wrap<sys_ksem_getvalue>(),
    wrap<sys_ksem_destroy>(),
    wrap<sys___mac_get_pid>(),
    wrap<sys___mac_get_link>(),
    wrap<sys___mac_set_link>(),
    wrap<sys_extattr_set_link>(),
    wrap<sys_extattr_get_link>(),
    wrap<sys_extattr_delete_link>(),
    wrap<sys___mac_execve>(),
    wrap<sys_sigaction>(),
    wrap<sys_sigreturn>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_getcontext>(),
    wrap<sys_setcontext>(),
    wrap<sys_swapcontext>(),
    wrap<sys_swapoff>(),
    wrap<sys___acl_get_link>(),
    wrap<sys___acl_set_link>(),
    wrap<sys___acl_delete_link>(),
    wrap<sys___acl_aclcheck_link>(),
    wrap<sys_sigwait>(),
    wrap<sys_thr_create>(),
    wrap<sys_thr_exit>(),
    wrap<sys_thr_self>(),
    wrap<sys_thr_kill>(),
    wrap<sys__umtx_lock>(),
    wrap<sys__umtx_unlock>(),
    wrap<sys_jail_attach>(),
    wrap<sys_extattr_list_fd>(),
    wrap<sys_extattr_list_file>(),
    wrap<sys_extattr_list_link>(),
    wrap<nosys>(),
    wrap<sys_ksem_timedwait>(),
    wrap<sys_thr_suspend>(),
    wrap<sys_thr_wake>(),
    wrap<sys_kldunloadf>(),
    wrap<sys_audit>(),
    wrap<sys_auditon>(),
    wrap<sys_getauid>(),
    wrap<sys_setauid>(),
    wrap<sys_getaudit>(),
    wrap<sys_setaudit>(),
    wrap<sys_getaudit_addr>(),
    wrap<sys_setaudit_addr>(),
    wrap<sys_auditctl>(),
    wrap<sys__umtx_op>(),
    wrap<sys_thr_new>(),
    wrap<sys_sigqueue>(),
    wrap<sys_kmq_open>(),
    wrap<sys_kmq_setattr>(),
    wrap<sys_kmq_timedreceive>(),
    wrap<sys_kmq_timedsend>(),
    wrap<sys_kmq_notify>(),
    wrap<sys_kmq_unlink>(),
    wrap<sys_abort2>(),
    wrap<sys_thr_set_name>(),
    wrap<sys_aio_fsync>(),
    wrap<sys_rtprio_thread>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<nosys>(),
    wrap<sys_sctp_peeloff>(),
    wrap<sys_sctp_generic_sendmsg>(),
    wrap<sys_sctp_generic_sendmsg_iov>(),
    wrap<sys_sctp_generic_recvmsg>(),
    wrap<sys_pread>(),
    wrap<sys_pwrite>(),
    wrap<sys_mmap>(),
    wrap<sys_lseek>(),
    wrap<sys_truncate>(),
    wrap<sys_ftruncate>(),
    wrap<sys_thr_kill2>(),
    wrap<sys_shm_open>(),
    wrap<sys_shm_unlink>(),
    wrap<sys_cpuset>(),
    wrap<sys_cpuset_setid>(),
    wrap<sys_cpuset_getid>(),
    wrap<sys_cpuset_getaffinity>(),
    wrap<sys_cpuset_setaffinity>(),
    wrap<sys_faccessat>(),
    wrap<sys_fchmodat>(),
    wrap<sys_fchownat>(),
    wrap<sys_fexecve>(),
    wrap<sys_fstatat>(),
    wrap<sys_futimesat>(),
    wrap<sys_linkat>(),
    wrap<sys_mkdirat>(),
    wrap<sys_mkfifoat>(),
    wrap<sys_mknodat>(),
    wrap<sys_openat>(),
    wrap<sys_readlinkat>(),
    wrap<sys_renameat>(),
    wrap<sys_symlinkat>(),
    wrap<sys_unlinkat>(),
    wrap<sys_posix_openpt>(),
    wrap<sys_gssd_syscall>(),
    wrap<sys_jail_get>(),
    wrap<sys_jail_set>(),
    wrap<sys_jail_remove>(),
    wrap<sys_closefrom>(),
    wrap<sys___semctl>(),
    wrap<sys_msgctl>(),
    wrap<sys_shmctl>(),
    wrap<sys_lpathconf>(),
    wrap<sys_cap_new>(),
    wrap<sys_cap_getrights>(),
    wrap<sys_cap_enter>(),
    wrap<sys_cap_getmode>(),
    wrap<sys_pdfork>(),
    wrap<sys_pdkill>(),
    wrap<sys_pdgetpid>(),
    wrap<nosys>(),
    wrap<sys_pselect>(),
    wrap<sys_getloginclass>(),
    wrap<sys_setloginclass>(),
    wrap<sys_rctl_get_racct>(),
    wrap<sys_rctl_get_rules>(),
    wrap<sys_rctl_get_limits>(),
    wrap<sys_rctl_add_rule>(),
    wrap<sys_rctl_remove_rule>(),
    wrap<sys_posix_fallocate>(),
    wrap<sys_posix_fadvise>(),
    wrap<sys_regmgr_call>(),
    wrap<sys_jitshm_create>(),
    wrap<sys_jitshm_alias>(),
    wrap<sys_dl_get_list>(),
    wrap<sys_dl_get_info>(),
    wrap<sys_dl_notify_event>(),
    wrap<sys_evf_create>(),
    wrap<sys_evf_delete>(),
    wrap<sys_evf_open>(),
    wrap<sys_evf_close>(),
    wrap<sys_evf_wait>(),
    wrap<sys_evf_trywait>(),
    wrap<sys_evf_set>(),
    wrap<sys_evf_clear>(),
    wrap<sys_evf_cancel>(),
    wrap<sys_query_memory_protection>(),
    wrap<sys_batch_map>(),
    wrap<sys_osem_create>(),
    wrap<sys_osem_delete>(),
    wrap<sys_osem_open>(),
    wrap<sys_osem_close>(),
    wrap<sys_osem_wait>(),
    wrap<sys_osem_trywait>(),
    wrap<sys_osem_post>(),
    wrap<sys_osem_cancel>(),
    wrap<sys_namedobj_create>(),
    wrap<sys_namedobj_delete>(),
    wrap<sys_set_vm_container>(),
    wrap<sys_debug_init>(),
    wrap<sys_suspend_process>(),
    wrap<sys_resume_process>(),
    wrap<sys_opmc_enable>(),
    wrap<sys_opmc_disable>(),
    wrap<sys_opmc_set_ctl>(),
    wrap<sys_opmc_set_ctr>(),
    wrap<sys_opmc_get_ctr>(),
    wrap<sys_budget_create>(),
    wrap<sys_budget_delete>(),
    wrap<sys_budget_get>(),
    wrap<sys_budget_set>(),
    wrap<sys_virtual_query>(),
    wrap<sys_mdbg_call>(),
    wrap<sys_obs_sblock_create>(),
    wrap<sys_obs_sblock_delete>(),
    wrap<sys_obs_sblock_enter>(),
    wrap<sys_obs_sblock_exit>(),
    wrap<sys_obs_sblock_xenter>(),
    wrap<sys_obs_sblock_xexit>(),
    wrap<sys_obs_eport_create>(),
    wrap<sys_obs_eport_delete>(),
    wrap<sys_obs_eport_trigger>(),
    wrap<sys_obs_eport_open>(),
    wrap<sys_obs_eport_close>(),
    wrap<sys_is_in_sandbox>(),
    wrap<sys_dmem_container>(),
    wrap<sys_get_authinfo>(),
    wrap<sys_mname>(),
    wrap<sys_dynlib_dlopen>(),
    wrap<sys_dynlib_dlclose>(),
    wrap<sys_dynlib_dlsym>(),
    wrap<sys_dynlib_get_list>(),
    wrap<sys_dynlib_get_info>(),
    wrap<sys_dynlib_load_prx>(),
    wrap<sys_dynlib_unload_prx>(),
    wrap<sys_dynlib_do_copy_relocations>(),
    wrap<sys_dynlib_prepare_dlclose>(),
    wrap<sys_dynlib_get_proc_param>(),
    wrap<sys_dynlib_process_needed_and_relocate>(),
    wrap<sys_sandbox_path>(),
    wrap<sys_mdbg_service>(),
    wrap<sys_randomized_path>(),
    wrap<sys_rdup>(),
    wrap<sys_dl_get_metadata>(),
    wrap<sys_workaround8849>(),
    wrap<sys_is_development_mode>(),
    wrap<sys_get_self_auth_info>(),
    wrap<sys_dynlib_get_info_ex>(),
    wrap<sys_budget_getid>(),
    wrap<sys_budget_get_ptype>(),
    wrap<sys_get_paging_stats_of_all_threads>(),
    wrap<sys_get_proc_type_info>(),
    wrap<sys_get_resident_count>(),
    wrap<sys_prepare_to_suspend_process>(),
    wrap<sys_get_resident_fmem_count>(),
    wrap<sys_thr_get_name>(),
    wrap<sys_set_gpo>(),
    wrap<sys_get_paging_stats_of_all_objects>(),
    wrap<sys_test_debug_rwmem>(),
    wrap<sys_free_stack>(),
    wrap<sys_suspend_system>(),
    wrap<sys_ipmimgr_call>(),
    wrap<sys_get_gpo>(),
    wrap<sys_get_vm_map_timestamp>(),
    wrap<sys_opmc_set_hw>(),
    wrap<sys_opmc_get_hw>(),
    wrap<sys_get_cpu_usage_all>(),
    wrap<sys_mmap_dmem>(),
    wrap<sys_physhm_open>(),
    wrap<sys_physhm_unlink>(),
    wrap<sys_resume_internal_hdd>(),
    wrap<sys_thr_suspend_ucontext>(),
    wrap<sys_thr_resume_ucontext>(),
    wrap<sys_thr_get_ucontext>(),
    wrap<sys_thr_set_ucontext>(),
    wrap<sys_set_timezone_info>(),
    wrap<sys_set_phys_fmem_limit>(),
    wrap<sys_utc_to_localtime>(),
    wrap<sys_localtime_to_utc>(),
    wrap<sys_set_uevt>(),
    wrap<sys_get_cpu_usage_proc>(),
    wrap<sys_get_map_statistics>(),
    wrap<sys_set_chicken_switches>(),
    wrap<sys_extend_page_table_pool>(),
    wrap<sys_extend_page_table_pool2>(),
    wrap<sys_get_kernel_mem_statistics>(),
    wrap<sys_get_sdk_compiled_version>(),
    wrap<sys_app_state_change>(),
    wrap<sys_dynlib_get_obj_member>(),
    wrap<sys_budget_get_ptype_of_budget>(),
    wrap<sys_prepare_to_resume_process>(),
    wrap<sys_process_terminate>(),
    wrap<sys_blockpool_open>(),
    wrap<sys_blockpool_map>(),
    wrap<sys_blockpool_unmap>(),
    wrap<sys_dynlib_get_info_for_libdbg>(),
    wrap<sys_blockpool_batch>(),
    wrap<sys_fdatasync>(),
    wrap<sys_dynlib_get_list2>(),
    wrap<sys_dynlib_get_info2>(),
    wrap<sys_aio_submit>(),
    wrap<sys_aio_multi_delete>(),
    wrap<sys_aio_multi_wait>(),
    wrap<sys_aio_multi_poll>(),
    wrap<sys_aio_get_data>(),
    wrap<sys_aio_multi_cancel>(),
    wrap<sys_get_bio_usage_all>(),
    wrap<sys_aio_create>(),
    wrap<sys_aio_submit_cmd>(),
    wrap<sys_aio_init>(),
    wrap<sys_get_page_table_stats>(),
    wrap<sys_dynlib_get_list_for_libdbg>(),
    wrap<sys_blockpool_move>(),
    wrap<sys_virtual_query_all>(),
    wrap<sys_reserve_2mb_page>(),
    wrap<sys_cpumode_yield>(),
};

constinit sysentvec freebsd9_sysvec = {.size = std::size(freebsd9_sysent),
                                       .table = freebsd9_sysent};

constinit sysentvec freebsd11_sysvec = {.size = std::size(freebsd11_sysent),
                                        .table = freebsd11_sysent};

constinit sysentvec ps4_sysvec = {.size = std::size(ps4_sysent),
                                  .table = ps4_sysent};

constinit sysentvec ps5_sysvec = {.size = 0, .table = nullptr};
} // namespace orbis
