ulib Make syscall() safe (add "cc" to clobbers)
This commit is contained in:
@ -2,26 +2,16 @@
|
|||||||
|
|
||||||
uint64_t syscall(uint64_t num, uint64_t arg1, uint64_t arg2,
|
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 arg3, uint64_t arg4, uint64_t arg5, uint64_t arg6) {
|
||||||
uint64_t ret = 0;
|
uint64_t ret;
|
||||||
asm volatile (
|
asm volatile(
|
||||||
"mov %[SYSNUM], %%rax\n"
|
"mov %[a4], %%r10\n"
|
||||||
"mov %[ARG1], %%rdi\n"
|
"mov %[a5], %%r8\n"
|
||||||
"mov %[ARG2], %%rsi\n"
|
"mov %[a6], %%r9\n"
|
||||||
"mov %[ARG3], %%rdx\n"
|
|
||||||
"mov %[ARG4], %%r10\n"
|
|
||||||
"mov %[ARG5], %%r8\n"
|
|
||||||
"mov %[ARG6], %%r9\n"
|
|
||||||
"int $0x80\n"
|
"int $0x80\n"
|
||||||
"mov %%rax, %[RESULT]\n"
|
: "=a"(ret)
|
||||||
: [RESULT]"=r"(ret)
|
: "a"(num), "D"(arg1), "S"(arg2), "d"(arg3),
|
||||||
: [SYSNUM]"r"(num),
|
[a4]"r"(arg4), [a5]"r"(arg5), [a6]"r"(arg6)
|
||||||
[ARG1]"r"(arg1),
|
: "r10", "r8", "r9", "memory", "cc"
|
||||||
[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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user