109 lines
2.6 KiB
C
109 lines
2.6 KiB
C
#include <stdint.h>
|
|
|
|
intptr_t __syscall0(uintptr_t id)
|
|
{
|
|
intptr_t ret = 0;
|
|
asm volatile("mov %1, %%rax; syscall; mov %%rax, %0"
|
|
: "=m" (ret)
|
|
: "m" (id));
|
|
return ret;
|
|
}
|
|
|
|
intptr_t __syscall1(uintptr_t id, uintptr_t p0)
|
|
{
|
|
intptr_t ret = 0;
|
|
asm volatile(
|
|
"mov %1, %%rax;"
|
|
"mov %2, %%rdi;"
|
|
"syscall;"
|
|
"mov %%rax, %0"
|
|
: "=m" (ret)
|
|
: "m" (id), "m" (p0));
|
|
return ret;
|
|
}
|
|
|
|
intptr_t __syscall2(uintptr_t id, uintptr_t p0, uintptr_t p1)
|
|
{
|
|
intptr_t ret = 0;
|
|
asm volatile(
|
|
"mov %1, %%rax;"
|
|
"mov %2, %%rdi;"
|
|
"mov %3, %%rsi;"
|
|
"syscall;"
|
|
"mov %%rax, %0"
|
|
: "=m" (ret)
|
|
: "m" (id), "m" (p0), "m" (p1));
|
|
return ret;
|
|
}
|
|
|
|
intptr_t __syscall3(uintptr_t id, uintptr_t p0, uintptr_t p1, uintptr_t p2)
|
|
{
|
|
intptr_t ret = 0;
|
|
asm volatile(
|
|
"movq %1, %%rax;"
|
|
"mov %2, %%rdi;"
|
|
"mov %3, %%rsi;"
|
|
"mov %4, %%rdx;"
|
|
"syscall;"
|
|
"mov %%rax, %0"
|
|
: "=m" (ret)
|
|
: "m" (id), "m" (p0), "m" (p1), "m" (p2));
|
|
return ret;
|
|
}
|
|
|
|
intptr_t __syscall4(uintptr_t id, uintptr_t p0, uintptr_t p1, uintptr_t p2,
|
|
uintptr_t p3)
|
|
{
|
|
intptr_t ret = 0;
|
|
asm volatile(
|
|
"mov %1, %%rax;"
|
|
"mov %2, %%rdi;"
|
|
"mov %3, %%rsi;"
|
|
"mov %4, %%rdx;"
|
|
"mov %5, %%r10;"
|
|
"syscall;"
|
|
"mov %%rax, %0"
|
|
: "=m" (ret)
|
|
: "m" (id), "m" (p0), "m" (p1), "m" (p2), "m" (p3));
|
|
return ret;
|
|
}
|
|
|
|
intptr_t __syscall5(uintptr_t id, uintptr_t p0, uintptr_t p1, uintptr_t p2,
|
|
uintptr_t p3, uintptr_t p4)
|
|
{
|
|
intptr_t ret = 0;
|
|
asm volatile(
|
|
"mov %1, %%rax;"
|
|
"mov %2, %%rdi;"
|
|
"mov %3, %%rsi;"
|
|
"mov %4, %%rdx;"
|
|
"mov %5, %%r10;"
|
|
"mov %6, %%r8;"
|
|
"syscall;"
|
|
"mov %%rax, %0"
|
|
: "=m" (ret)
|
|
: "m" (id), "m" (p0), "m" (p1), "m" (p2), "m" (p3), "m" (p4));
|
|
return ret;
|
|
}
|
|
|
|
intptr_t __syscall6(uintptr_t id, uintptr_t p0, uintptr_t p1, uintptr_t p2,
|
|
uintptr_t p3, uintptr_t p4, uintptr_t p5)
|
|
{
|
|
intptr_t ret = 0;
|
|
asm volatile(
|
|
"mov %1, %%rax;"
|
|
"mov %2, %%rdi;"
|
|
"mov %3, %%rsi;"
|
|
"mov %4, %%rdx;"
|
|
"mov %5, %%r10;"
|
|
"mov %6, %%r8;"
|
|
"mov %7, %%r9;"
|
|
"syscall;"
|
|
"mov %%rax, %0"
|
|
: "=m" (ret)
|
|
: "m" (id), "m" (p0), "m" (p1), "m" (p2), "m" (p3), "m" (p4),
|
|
"m" (p5));
|
|
return ret;
|
|
}
|
|
|