144#define SYSCALL_DEFINE(num, returnType, ...) \
145 returnType syscall_handler_##num(__VA_ARGS__); \
146 const syscall_descriptor_t __syscall_##num __attribute__((used, section(".syscall_table"))) = { \
148 .handler = (void*)syscall_handler_##num, \
150 returnType syscall_handler_##num(__VA_ARGS__)
syscall_descriptor_t _syscallTableEnd[]
Linker defined end of the syscall table.
void syscall_ctx_init(syscall_ctx_t *ctx, const stack_pointer_t *syscallStack)
Initialize a syscall context.
void syscall_table_init(void)
Sort the syscall table and verify that all syscalls are present.
syscall_number_t
System Call Numbers.
syscall_descriptor_t _syscallTableStart[]
Linker defined start of the syscall table.
void syscalls_cpu_init(void)
Initialize syscalls on the current CPU.
void syscall_ctx_load(syscall_ctx_t *ctx)
Load the syscall context into the MSR_KERNEL_GS_BASE MSR.
void syscall_entry(void)
Assembly entry point for syscalls.
uint64_t syscall_handler(uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4, uint64_t arg5, uint64_t arg6, uint64_t number)
Main C syscall handler.
__UINTPTR_TYPE__ uintptr_t
Structure to define a stack in memory.
Per thread syscall context.
uintptr_t userRsp
Used to avoid clobbering registers when switching stacks.
uintptr_t syscallRsp
The stack pointer to use when handling syscalls.