Files
my-os-project2/ulib/syscall/syscall.c

28 lines
689 B
C

#include <stdint.h>
uint64_t syscall(uint64_t num, uint64_t arg1, uint64_t arg2,
uint64_t arg3, uint64_t arg4, uint64_t arg5, uint64_t arg6) {
uint64_t ret = 0;
asm volatile (
"mov %[SYSNUM], %%rax\n"
"mov %[ARG1], %%rdi\n"
"mov %[ARG2], %%rsi\n"
"mov %[ARG3], %%rdx\n"
"mov %[ARG4], %%r10\n"
"mov %[ARG5], %%r8\n"
"mov %[ARG6], %%r9\n"
"int $0x80\n"
"mov %%rax, %[RESULT]\n"
: [RESULT]"=r"(ret)
: [SYSNUM]"r"(num),
[ARG1]"r"(arg1),
[ARG2]"r"(arg2),
[ARG3]"r"(arg3),
[ARG4]"r"(arg4),
[ARG5]"r"(arg5),
[ARG6]"r"(arg6)
: "rax", "rdi", "rsi", "rdx", "r10", "r8", "r9", "memory"
);
return ret;
}