X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=arch%2Fi386%2Fbits%2Fsyscall.h;h=16565eee1e56a5cd0e90a68c10d12f20ae21e680;hb=1c76683cb4377a481dc1085b63170bb276512267;hp=b38f09e9f6c2d3022c8364dacf3402a7937d0de0;hpb=d00ff2950eacc375d57e44d65c7697f636c67625;p=musl diff --git a/arch/i386/bits/syscall.h b/arch/i386/bits/syscall.h index b38f09e9..16565eee 100644 --- a/arch/i386/bits/syscall.h +++ b/arch/i386/bits/syscall.h @@ -1,3 +1,132 @@ +#define __SYSCALL_LL(x) \ +((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ +((union { long long ll; long l[2]; }){ .ll = x }).l[1] + +static inline long __syscall0(long __n) +{ + unsigned long __ret; + __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n) : "memory"); + return __ret; +} + +#ifndef __PIC__ + +static inline long __syscall1(long __n, long __a1) +{ + unsigned long __ret; + __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1) : "memory"); + return __ret; +} + +static inline long __syscall2(long __n, long __a1, long __a2) +{ + unsigned long __ret; + __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2) : "memory"); + return __ret; +} + +static inline long __syscall3(long __n, long __a1, long __a2, long __a3) +{ + unsigned long __ret; + __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3) : "memory"); + return __ret; +} + +static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4) +{ + unsigned long __ret; + __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3), "S"(__a4) : "memory"); + return __ret; +} + +static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) +{ + unsigned long __ret; + __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3), "S"(__a4), "D"(__a5) : "memory"); + return __ret; +} + +static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6) +{ + unsigned long __ret; + __asm__ __volatile__ ("pushl %7 ; pushl %%ebp ; mov 4(%%esp),%%ebp ; int $128 ; popl %%ebp ; popl %%ecx" + : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3), "S"(__a4), "D"(__a5), "g"(__a6) : "memory"); + return __ret; +} + +#else + +static inline long __syscall1(long __n, long __a1) +{ + unsigned long __ret; + __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx" + : "=a"(__ret) : "a"(__n), "r"(__a1) : "memory"); + return __ret; +} + +static inline long __syscall2(long __n, long __a1, long __a2) +{ + unsigned long __ret; + __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx" + : "=a"(__ret) : "a"(__n), "r"(__a1), "c"(__a2) : "memory"); + return __ret; +} + +static inline long __syscall3(long __n, long __a1, long __a2, long __a3) +{ + unsigned long __ret; + __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx" + : "=a"(__ret) : "a"(__n), "r"(__a1), "c"(__a2), "d"(__a3) : "memory"); + return __ret; +} + +static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4) +{ + unsigned long __ret; + __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx" + : "=a"(__ret) : "a"(__n), "r"(__a1), "c"(__a2), "d"(__a3), "S"(__a4) : "memory"); + return __ret; +} + +static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) +{ + unsigned long __ret; + __asm__ __volatile__ ("pushl %2 ; pushl %%ebx ; mov 4(%%esp),%%ebx ; int $128 ; popl %%ebx ; popl %%ecx" + : "=a"(__ret) : "a"(__n), "g"(__a1), "c"(__a2), "d"(__a3), "S"(__a4), "D"(__a5) : "memory"); + return __ret; +} + +static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6) +{ + return (__syscall)(__n, __a1, __a2, __a3, __a4, __a5, __a6); +} + +#endif + + +#define __SC_socket 1 +#define __SC_bind 2 +#define __SC_connect 3 +#define __SC_listen 4 +#define __SC_accept 5 +#define __SC_getsockname 6 +#define __SC_getpeername 7 +#define __SC_socketpair 8 +#define __SC_send 9 +#define __SC_recv 10 +#define __SC_sendto 11 +#define __SC_recvfrom 12 +#define __SC_shutdown 13 +#define __SC_setsockopt 14 +#define __SC_getsockopt 15 +#define __SC_sendmsg 16 +#define __SC_recvmsg 17 + +#define __socketcall(nm,a,b,c,d,e,f) syscall(SYS_socketcall, __SC_##nm, \ + ((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })) +#define __socketcall_cp(nm,a,b,c,d,e,f) syscall_cp(SYS_socketcall, __SC_##nm, \ + ((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })) + #define __NR_restart_syscall 0 #define __NR_exit 1 #define __NR_fork 2 @@ -376,6 +505,7 @@ /* fixup legacy 32-bit-vs-lfs64 junk */ +#undef __NR_fcntl #undef __NR_getdents #undef __NR_ftruncate #undef __NR_truncate @@ -384,6 +514,7 @@ #undef __NR_lstat #undef __NR_statfs #undef __NR_fstatfs +#define __NR_fcntl __NR_fcntl64 #define __NR_getdents __NR_getdents64 #define __NR_ftruncate __NR_ftruncate64 #define __NR_truncate __NR_truncate64 @@ -396,6 +527,8 @@ #define __NR_pread __NR_pread64 #define __NR_pwrite __NR_pwrite64 +#define __NR_fadvise __NR_fadvise64_64 + #undef __NR_getrlimit #define __NR_getrlimit __NR_ugetrlimit @@ -783,6 +916,7 @@ /* fixup legacy 32-bit-vs-lfs64 junk */ +#undef SYS_fcntl #undef SYS_getdents #undef SYS_ftruncate #undef SYS_truncate @@ -791,6 +925,7 @@ #undef SYS_lstat #undef SYS_statfs #undef SYS_fstatfs +#define SYS_fcntl SYS_fcntl64 #define SYS_getdents SYS_getdents64 #define SYS_ftruncate SYS_ftruncate64 #define SYS_truncate SYS_truncate64 @@ -803,6 +938,8 @@ #define SYS_pread SYS_pread64 #define SYS_pwrite SYS_pwrite64 +#define SYS_fadvise SYS_fadvise64_64 + #undef SYS_getrlimit #define SYS_getrlimit SYS_ugetrlimit