1#ifndef _INTERNAL_SYSCALL_H 2#define _INTERNAL_SYSCALL_H 3 4#include <sys/syscall.h> 5#include "syscall_arch.h" 6 7#ifndef SYSCALL_RLIM_INFINITY 8#define SYSCALL_RLIM_INFINITY (~0ULL) 9#endif 10 11#ifndef SYSCALL_MMAP2_UNIT 12#define SYSCALL_MMAP2_UNIT 4096ULL 13#endif 14 15#ifndef __SYSCALL_LL_PRW 16#define __SYSCALL_LL_PRW(x) __SYSCALL_LL_O(x) 17#endif 18 19#ifndef __scc 20#define __scc(X) ((long) (X)) 21typedef long syscall_arg_t; 22#endif 23 24__attribute__((visibility("hidden"))) 25long __syscall_ret(unsigned long), __syscall(syscall_arg_t, ...), 26 __syscall_cp(syscall_arg_t, syscall_arg_t, syscall_arg_t, syscall_arg_t, 27 syscall_arg_t, syscall_arg_t, syscall_arg_t); 28 29#ifdef SYSCALL_NO_INLINE 30#define __syscall0(n) (__syscall)(n) 31#define __syscall1(n,a) (__syscall)(n,__scc(a)) 32#define __syscall2(n,a,b) (__syscall)(n,__scc(a),__scc(b)) 33#define __syscall3(n,a,b,c) (__syscall)(n,__scc(a),__scc(b),__scc(c)) 34#define __syscall4(n,a,b,c,d) (__syscall)(n,__scc(a),__scc(b),__scc(c),__scc(d)) 35#define __syscall5(n,a,b,c,d,e) (__syscall)(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e)) 36#define __syscall6(n,a,b,c,d,e,f) (__syscall)(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),__scc(f)) 37#else 38#define __syscall1(n,a) __syscall1(n,__scc(a)) 39#define __syscall2(n,a,b) __syscall2(n,__scc(a),__scc(b)) 40#define __syscall3(n,a,b,c) __syscall3(n,__scc(a),__scc(b),__scc(c)) 41#define __syscall4(n,a,b,c,d) __syscall4(n,__scc(a),__scc(b),__scc(c),__scc(d)) 42#define __syscall5(n,a,b,c,d,e) __syscall5(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e)) 43#define __syscall6(n,a,b,c,d,e,f) __syscall6(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),__scc(f)) 44#endif 45#define __syscall7(n,a,b,c,d,e,f,g) (__syscall)(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),__scc(f),__scc(g)) 46 47#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n 48#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0,) 49#define __SYSCALL_CONCAT_X(a,b) a##b 50#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X(a,b) 51#define __SYSCALL_DISP(b,...) __SYSCALL_CONCAT(b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) 52 53#define __syscall(...) __SYSCALL_DISP(__syscall,__VA_ARGS__) 54#define syscall(...) __syscall_ret(__syscall(__VA_ARGS__)) 55 56#define socketcall __socketcall 57#define socketcall_cp __socketcall_cp 58 59#define __syscall_cp0(n) (__syscall_cp)(n,0,0,0,0,0,0) 60#define __syscall_cp1(n,a) (__syscall_cp)(n,__scc(a),0,0,0,0,0) 61#define __syscall_cp2(n,a,b) (__syscall_cp)(n,__scc(a),__scc(b),0,0,0,0) 62#define __syscall_cp3(n,a,b,c) (__syscall_cp)(n,__scc(a),__scc(b),__scc(c),0,0,0) 63#define __syscall_cp4(n,a,b,c,d) (__syscall_cp)(n,__scc(a),__scc(b),__scc(c),__scc(d),0,0) 64#define __syscall_cp5(n,a,b,c,d,e) (__syscall_cp)(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),0) 65#define __syscall_cp6(n,a,b,c,d,e,f) (__syscall_cp)(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),__scc(f)) 66 67#define __syscall_cp(...) __SYSCALL_DISP(__syscall_cp,__VA_ARGS__) 68#define syscall_cp(...) __syscall_ret(__syscall_cp(__VA_ARGS__)) 69 70#ifndef SYSCALL_USE_SOCKETCALL 71#define __socketcall(nm,a,b,c,d,e,f) syscall(SYS_##nm, a, b, c, d, e, f) 72#define __socketcall_cp(nm,a,b,c,d,e,f) syscall_cp(SYS_##nm, a, b, c, d, e, f) 73#else 74#define __socketcall(nm,a,b,c,d,e,f) syscall(SYS_socketcall, __SC_##nm, \ 75 ((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })) 76#define __socketcall_cp(nm,a,b,c,d,e,f) syscall_cp(SYS_socketcall, __SC_##nm, \ 77 ((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })) 78#endif 79 80/* fixup legacy 16-bit junk */ 81 82#ifdef SYS_getuid32 83#undef SYS_lchown 84#undef SYS_getuid 85#undef SYS_getgid 86#undef SYS_geteuid 87#undef SYS_getegid 88#undef SYS_setreuid 89#undef SYS_setregid 90#undef SYS_getgroups 91#undef SYS_setgroups 92#undef SYS_fchown 93#undef SYS_setresuid 94#undef SYS_getresuid 95#undef SYS_setresgid 96#undef SYS_getresgid 97#undef SYS_chown 98#undef SYS_setuid 99#undef SYS_setgid 100#undef SYS_setfsuid 101#undef SYS_setfsgid 102#define SYS_lchown SYS_lchown32 103#define SYS_getuid SYS_getuid32 104#define SYS_getgid SYS_getgid32 105#define SYS_geteuid SYS_geteuid32 106#define SYS_getegid SYS_getegid32 107#define SYS_setreuid SYS_setreuid32 108#define SYS_setregid SYS_setregid32 109#define SYS_getgroups SYS_getgroups32 110#define SYS_setgroups SYS_setgroups32 111#define SYS_fchown SYS_fchown32 112#define SYS_setresuid SYS_setresuid32 113#define SYS_getresuid SYS_getresuid32 114#define SYS_setresgid SYS_setresgid32 115#define SYS_getresgid SYS_getresgid32 116#define SYS_chown SYS_chown32 117#define SYS_setuid SYS_setuid32 118#define SYS_setgid SYS_setgid32 119#define SYS_setfsuid SYS_setfsuid32 120#define SYS_setfsgid SYS_setfsgid32 121#endif 122 123 124/* fixup legacy 32-bit-vs-lfs64 junk */ 125 126#ifdef SYS_fcntl64 127#undef SYS_fcntl 128#define SYS_fcntl SYS_fcntl64 129#endif 130 131#ifdef SYS_getdents64 132#undef SYS_getdents 133#define SYS_getdents SYS_getdents64 134#endif 135 136#ifdef SYS_ftruncate64 137#undef SYS_ftruncate 138#undef SYS_truncate 139#define SYS_ftruncate SYS_ftruncate64 140#define SYS_truncate SYS_truncate64 141#endif 142 143#ifdef SYS_stat64 144#undef SYS_stat 145#define SYS_stat SYS_stat64 146#endif 147 148#ifdef SYS_fstat64 149#undef SYS_fstat 150#define SYS_fstat SYS_fstat64 151#endif 152 153#ifdef SYS_lstat64 154#undef SYS_lstat 155#define SYS_lstat SYS_lstat64 156#endif 157 158#ifdef SYS_statfs64 159#undef SYS_statfs 160#define SYS_statfs SYS_statfs64 161#endif 162 163#ifdef SYS_fstatfs64 164#undef SYS_fstatfs 165#define SYS_fstatfs SYS_fstatfs64 166#endif 167 168#if defined(SYS_newfstatat) 169#undef SYS_fstatat 170#define SYS_fstatat SYS_newfstatat 171#elif defined(SYS_fstatat64) 172#undef SYS_fstatat 173#define SYS_fstatat SYS_fstatat64 174#endif 175 176#ifdef SYS_ugetrlimit 177#undef SYS_getrlimit 178#define SYS_getrlimit SYS_ugetrlimit 179#endif 180 181#ifdef SYS__newselect 182#undef SYS_select 183#define SYS_select SYS__newselect 184#endif 185 186#ifdef SYS_pread64 187#undef SYS_pread 188#undef SYS_pwrite 189#define SYS_pread SYS_pread64 190#define SYS_pwrite SYS_pwrite64 191#endif 192 193#ifdef SYS_fadvise64_64 194#undef SYS_fadvise 195#define SYS_fadvise SYS_fadvise64_64 196#elif defined(SYS_fadvise64) 197#undef SYS_fadvise 198#define SYS_fadvise SYS_fadvise64 199#endif 200 201#ifdef SYS_sendfile64 202#undef SYS_sendfile 203#define SYS_sendfile SYS_sendfile64 204#endif 205 206/* socketcall calls */ 207 208#define __SC_socket 1 209#define __SC_bind 2 210#define __SC_connect 3 211#define __SC_listen 4 212#define __SC_accept 5 213#define __SC_getsockname 6 214#define __SC_getpeername 7 215#define __SC_socketpair 8 216#define __SC_send 9 217#define __SC_recv 10 218#define __SC_sendto 11 219#define __SC_recvfrom 12 220#define __SC_shutdown 13 221#define __SC_setsockopt 14 222#define __SC_getsockopt 15 223#define __SC_sendmsg 16 224#define __SC_recvmsg 17 225#define __SC_accept4 18 226#define __SC_recvmmsg 19 227#define __SC_sendmmsg 20 228 229#ifdef SYS_open 230#define __sys_open2(x,pn,fl) __syscall2(SYS_open, pn, (fl)|O_LARGEFILE) 231#define __sys_open3(x,pn,fl,mo) __syscall3(SYS_open, pn, (fl)|O_LARGEFILE, mo) 232#define __sys_open_cp2(x,pn,fl) __syscall_cp2(SYS_open, pn, (fl)|O_LARGEFILE) 233#define __sys_open_cp3(x,pn,fl,mo) __syscall_cp3(SYS_open, pn, (fl)|O_LARGEFILE, mo) 234#else 235#define __sys_open2(x,pn,fl) __syscall3(SYS_openat, AT_FDCWD, pn, (fl)|O_LARGEFILE) 236#define __sys_open3(x,pn,fl,mo) __syscall4(SYS_openat, AT_FDCWD, pn, (fl)|O_LARGEFILE, mo) 237#define __sys_open_cp2(x,pn,fl) __syscall_cp3(SYS_openat, AT_FDCWD, pn, (fl)|O_LARGEFILE) 238#define __sys_open_cp3(x,pn,fl,mo) __syscall_cp4(SYS_openat, AT_FDCWD, pn, (fl)|O_LARGEFILE, mo) 239#endif 240 241#define __sys_open(...) __SYSCALL_DISP(__sys_open,,__VA_ARGS__) 242#define sys_open(...) __syscall_ret(__sys_open(__VA_ARGS__)) 243 244#define __sys_open_cp(...) __SYSCALL_DISP(__sys_open_cp,,__VA_ARGS__) 245#define sys_open_cp(...) __syscall_ret(__sys_open_cp(__VA_ARGS__)) 246 247#endif 248