diff options
Diffstat (limited to 'lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp')
-rw-r--r-- | lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp b/lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp deleted file mode 100644 index 35fc8aa..0000000 --- a/lib/mlibc/sysdeps/linux/x86/arch-syscall.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include <bits/syscall.h> -#include <sys/syscall.h> - -using sc_word_t = __sc_word_t; - -// Note: ebx is used for PIC (it holds a reference to the GOT), so we can't clobber it with gcc apparently, -// and also need to make sure to restore it after a syscall - -sc_word_t __do_syscall0(long sc) { - sc_word_t ret; - asm volatile("int $0x80" : "=a"(ret) : "a"(sc) : "memory"); - return ret; -} - -sc_word_t __do_syscall1(long sc, sc_word_t arg1) { - sc_word_t ret; - asm volatile("xchg %%ebx, %%edi;" - "int $0x80;" - "xchg %%edi, %%ebx;" - : "=a"(ret) - : "a"(sc), "D"(arg1) - : "memory"); - return ret; -} - -sc_word_t __do_syscall2(long sc, sc_word_t arg1, sc_word_t arg2) { - sc_word_t ret; - asm volatile("xchg %%ebx, %%edi;" - "int $0x80;" - "xchg %%edi, %%ebx;" - : "=a"(ret) - : "a"(sc), "D"(arg1), "c"(arg2) - : "memory"); - return ret; -} - -sc_word_t __do_syscall3(long sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3) { - sc_word_t ret; - asm volatile("xchg %%ebx, %%edi;" - "int $0x80;" - "xchg %%edi, %%ebx;" - : "=a"(ret) - : "a"(sc), "D"(arg1), "c"(arg2), "d"(arg3) - : "memory"); - return ret; -} - -sc_word_t __do_syscall4(long sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3, sc_word_t arg4) { - sc_word_t ret; - asm volatile("xchg %%ebx, %%edi;" - "int $0x80;" - "xchg %%edi, %%ebx;" - : "=a"(ret) - : "a"(sc), "D"(arg1), "c"(arg2), "d"(arg3), "S"(arg4) - : "memory"); - return ret; -} - -sc_word_t __do_syscall5(long sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3, sc_word_t arg4, - sc_word_t arg5) { - sc_word_t ret; - asm volatile("pushl %2;" - "push %%ebx;" - "mov 4(%%esp), %%ebx;" - "int $0x80;" - "pop %%ebx;" - "add $4, %%esp;" - : "=a"(ret) - : "a"(sc), "g"(arg1), "c"(arg2), "d"(arg3), "S"(arg4), "D"(arg5) - : "memory"); - return ret; -} - -sc_word_t __do_syscall6(long sc, sc_word_t arg1, sc_word_t arg2, sc_word_t arg3, sc_word_t arg4, - sc_word_t arg5, sc_word_t arg6) { - sc_word_t ret; - sc_word_t a1a6[2] = { arg1, arg6 }; - asm volatile ("pushl %1;" - "push %%ebx;" - "push %%ebp;" - "mov 8(%%esp),%%ebx;" - "mov 4(%%ebx),%%ebp;" - "mov (%%ebx),%%ebx;" - "int $0x80;" - "pop %%ebp;" - "pop %%ebx;" - "add $4,%%esp;" - : "=a"(ret) : "g"(&a1a6), "a"(sc), "c"(arg2), "d"(arg3), "S"(arg4), "D"(arg5) : "memory"); - return ret; -} |