32 lines
688 B
C
32 lines
688 B
C
|
#ifndef X86_64_SYSCALL
|
|||
|
#define X86_64_SYSCALL 1
|
|||
|
|
|||
|
#include <types.h>
|
|||
|
|
|||
|
extern void *system_calls_table[256];
|
|||
|
|
|||
|
// 系统调用使用的寄存器:
|
|||
|
// rax - 调用号
|
|||
|
// rbx - 系统调用程序保留
|
|||
|
// rcx - rip寄存器缓存
|
|||
|
// rdi - 系统调用程序保留
|
|||
|
// rdx - 参数1
|
|||
|
// r8 - 参数2
|
|||
|
// r9 - 参数3
|
|||
|
// r10 - 参数4
|
|||
|
// r11 - rflags寄存器缓存
|
|||
|
// r12 - 参数5
|
|||
|
// r13 - 参数6
|
|||
|
// r14 - 参数7
|
|||
|
// r15 - 参数8
|
|||
|
|
|||
|
// 系统调用时,使用内核主堆栈
|
|||
|
// 故设置一组函数,用于在sysret前保存和在syscall后加载
|
|||
|
// rbp, rsp的函数
|
|||
|
extern void save_kernel_stack();
|
|||
|
extern void load_kernel_stack();
|
|||
|
|
|||
|
extern void set_kernel_stack_cache(usize stack);
|
|||
|
|
|||
|
#endif
|