#include #include #include #include #include #include #include const struct syscall syscall_table[256] = { [0] = {sys_exit, 0}, [1] = {sys_syslog, 0}, [2] = {sys_getuname, 0}, [3] = {sys_setuname, 0}, [4] = {sys_archctl, 0}, [5] = {sys_reboot, 0}, [6] = {sys_mmap, 0}, [7] = {sys_munmap, 0}, [8] = {sys_mprotect, 0}, [9] = {sys_madvise, 0}, [10] = {sys_sigprocmask, 0}, [11] = {sys_sigsuspend, 0}, [12] = {sys_sigpending, 0}, [13] = {sys_sigaction, 0}, [14] = {sys_sigtimedwait, 0}, [15] = {sys_sigaltstack, 0}, [16] = {sys_sigreturn, 0}, [17] = {sys_sigqueue, 0}, [18] = {sys_execve, 0}, [19] = {sys_fexecve, 0}, [20] = {sys_fork, SYSKIND_CONTEXT}, [21] = {sys_kill, 0}, [22] = {sys_gettid, 0}, [23] = {sys_getpid, 0}, [24] = {sys_getppid, 0}, [25] = {sys_waitid, 0}, [26] = {sys_waitpid, 0}, [27] = {sys_pread, 0}, [28] = {sys_readv, 0}, [29] = {sys_pwrite, 0}, [30] = {sys_writev, 0}, [31] = {sys_seek, 0}, [32] = {sys_ioctl, 0}, [33] = {sys_openat, 0}, [34] = {sys_close, 0}, [35] = {sys_fstat, 0}, [36] = {sys_fstatat, 0}, [37] = {sys_statvfs, 0}, [38] = {sys_fstatvfs, 0}, [39] = {sys_faccessat, 0}, [40] = {sys_fcntl, 0}, [41] = {sys_ftruncate, 0}, [42] = {sys_truncate, 0}, [43] = {sys_fallocate, 0}, [44] = {sys_fadvise, 0}, [45] = {sys_utimensat, 0}, [46] = {sys_mknodat, 0}, [47] = {sys_getcwd, 0}, [48] = {sys_chdir, 0}, [49] = {sys_fchdir, 0}, [50] = {sys_mkdirat, 0}, [51] = {sys_rmdirat, 0}, [52] = {sys_getdents, 0}, [53] = {sys_renameat, 0}, [54] = {sys_fchmod, 0}, [55] = {sys_fchmodat, 0}, [56] = {sys_fchownat, 0}, [57] = {sys_linkat, 0}, [58] = {sys_symlinkat, 0}, [59] = {sys_unlinkat, 0}, [60] = {sys_readlinkat, 0}, [61] = {sys_flock, 0}, [62] = {sys_ppoll, 0}, [63] = {sys_dup, 0}, [64] = {sys_dup3, 0}, [65] = {sys_sync, 0}, [66] = {sys_fsync, 0}, [67] = {sys_fdatasync, 0}, [68] = {sys_getgroups, 0}, [69] = {sys_setgroups, 0}, [70] = {sys_getsid, 0}, [71] = {sys_setsid, 0}, [72] = {sys_setuid, 0}, [73] = {sys_getuid, 0}, [74] = {sys_setgid, 0}, [75] = {sys_getgid, 0}, [76] = {sys_geteuid, 0}, [77] = {sys_seteuid, 0}, [78] = {sys_getegid, 0}, [79] = {sys_setegid, 0}, [80] = {sys_getpgid, 0}, [81] = {sys_setpgid, 0}, [82] = {sys_getresuid, 0}, [83] = {sys_setresuid, 0}, [84] = {sys_getresgid, 0}, [85] = {sys_setresgid, 0}, [86] = {sys_setreuid, 0}, [87] = {sys_setregid, 0}, [88] = {sys_umask, 0}, [89] = {sys_pipe, 0}, [90] = {sys_futex_wait, 0}, [91] = {sys_futex_wake, 0}, [92] = {sys_thread_create, 0}, [93] = {sys_thread_kill, 0}, [94] = {sys_thread_exit, 0}, [95] = {sys_thread_setname, 0}, [96] = {sys_thread_getname, 0}, [97] = {sys_timer_create, 0}, [98] = {sys_timer_set, 0}, [99] = {sys_timer_get, 0}, [100] = {sys_timer_getoverrun, 0}, [101] = {sys_timer_delete, 0}, [102] = {sys_itimer_get, 0}, [103] = {sys_itimer_set, 0}, [104] = {sys_clock_get, 0}, [105] = {sys_clock_getres, 0}, [106] = {sys_clock_set, 0}, [107] = {sys_sleep, 0}, [108] = {sys_yield, 0}, [109] = {sys_chroot, 0}, [110] = {sys_mount, 0}, [111] = {sys_umount, 0}, [112] = {sys_socket, 0}, [113] = {sys_socketpair, 0}, [114] = {sys_shutdown, 0}, [115] = {sys_bind, 0}, [116] = {sys_connect, 0}, [117] = {sys_accept, 0}, [118] = {sys_listen, 0}, [119] = {sys_getpeername, 0}, [120] = {sys_getsockname, 0}, [121] = {sys_getsockopt, 0}, [122] = {sys_setsockopt, 0}, [123] = {sys_sendmsg, 0}, [124] = {sys_recvmsg, 0}, [125] = {sys_getentropy, 0}, [126] = {sys_getrusage, 0}, [127] = {sys_getrlimit, 0}, [128] = {sys_setrlimit, 0}, [129] = {sys_getpriority, 0}, [130] = {sys_setpriority, 0}, [131] = {sys_sched_getparam, 0}, [132] = {sys_sched_setparam, 0}, [133] = {sys_module_insert, 0}, [134] = {sys_module_remove, 0}, [135] = {sys_epoll_create, 0}, [136] = {sys_epoll_ctl, 0}, [137] = {sys_epoll_pwait, 0}, [138] = {sys_timerfd_create, 0}, [139] = {sys_timerfd_gettime, 0}, [140] = {sys_timerfd_settime, 0}, [141] = {sys_signalfd_create, 0}, [142] = {sys_eventfd_create, 0}, [143] = {sys_msync, 0}, [144] = {sys_sysconf, 0}, }; void syscall_dispatch(struct arch_context* ctx) { const size_t num = ctx->ARCH_CTX_NUM; if (num >= ARRAY_SIZE(syscall_table) || syscall_table[num].handler == nullptr) { ctx->ARCH_CTX_RET0 = ENOSYS; return; } syscall_table[num].handler(ctx); }