#include "arch/x86_64/processor.h" #include __attribute__((naked)) void _syscall_entry(void) { __asm__ volatile(" \ pushq %%r11; \ pushq %%rcx; \ swapgs; \ movq %%gs:%c[tcb], %%rax; \ movq %%rsp, %c[sp](%%rax); \ movq %c[ksp](%%rax), %%rsp; \ pushq %c[sp](%%rax); \ callq _syscall_handler; \ swapgs; \ popq %%rsp; \ popq %%rcx; \ popq %%r11; \ sysretq;" :: [tcb] "i"(offsetof(processor_t, tcb)), [sp] "i"(offsetof(tcb_t, sp)), [ksp] "i"(offsetof(tcb_t, ksp))); }