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