// SPDX-License-Identifier: MIT #include #include #include #include #include #include #include #include static const syscall_fn_t dispatch_table[] = { [ZN_SYSCALL_LOG] = syscall_log, [ZN_SYSCALL_ARCHCTL] = syscall_archctl, [ZN_SYSCALL_PAGE_SIZE] = syscall_page_size, [ZN_SYSCALL_TIME] = syscall_time, [ZN_SYSCALL_HANDLE_VALIDATE] = syscall_handle_validate, [ZN_SYSCALL_HANDLE_DROP] = syscall_handle_drop, [ZN_SYSCALL_HANDLE_CLONE] = syscall_handle_clone, [ZN_SYSCALL_VAS_CREATE] = syscall_vas_create, [ZN_SYSCALL_VMO_CREATE] = syscall_vmo_create, [ZN_SYSCALL_VMO_CREATE_PHYS] = syscall_vmo_create_phys, [ZN_SYSCALL_VMO_MAP] = syscall_vmo_map, [ZN_SYSCALL_CHANNEL_CREATE] = syscall_channel_create, [ZN_SYSCALL_CHANNEL_WAIT] = syscall_channel_wait, [ZN_SYSCALL_CHANNEL_READ] = syscall_channel_read, [ZN_SYSCALL_CHANNEL_WRITE] = syscall_channel_write, [ZN_SYSCALL_THREAD_CREATE] = syscall_thread_create, [ZN_SYSCALL_THREAD_START] = syscall_thread_start, [ZN_SYSCALL_THREAD_EXIT] = syscall_thread_exit, [ZN_SYSCALL_RANDOM_GET] = syscall_random_get, [ZN_SYSCALL_RANDOM_ENTROPY] = syscall_random_entropy, [ZN_SYSCALL_FUTEX_WAIT] = syscall_futex_wait, [ZN_SYSCALL_FUTEX_WAKE] = syscall_futex_wake, }; void syscall_dispatch(struct arch_context* ctx) { const size_t num = ctx->num; if (num >= ARRAY_SIZE(dispatch_table)) { ctx->ret0 = ZN_ERR_BAD_SYSCALL; return; } ctx->ret0 = dispatch_table[num](ctx); }