#define __syscall_return(type, res) \ do { \ if ((unsigned long)(res) >= (unsigned long)(-125)) { \ errno = -(res); \ res = -1; \ } \ return (type) (res); \ } while (0) #define _syscall0(type,name) \ type name(void) \ { \ long __res; \ __asm__ volatile ("syscall" \ : "=a" (__res) \ : "0" (__NR_##name)); \ __syscall_return(type,__res); \ } #define _syscall1(type, name, type1, arg1) \ type name(type1 arg1) \ { \ register long int _a1 asm ("rdi") = (long int)arg1; \ long __res; \ __asm__ volatile ("syscall" \ : "=a" (__res) \ : "0" (__NR_##name), "r" (_a1) \ : "memory", "cc", "r11", "cx"); \ __syscall_return(type, __res); \ } #define _syscall2(type, name, type1, arg1, type2, arg2) \ type name(type1 arg1, type2 arg2) \ { \ register long int _a1 asm ("rdi") = (long int)arg1; \ register long int _a2 asm ("rsi") = (long int)arg2; \ long __res; \ __asm__ volatile ("syscall" \ : "=a" (__res) \ : "0" (__NR_##name), "r" (_a1), "r" (_a2) \ : "memory", "cc", "r11", "cx"); \ __syscall_return(type, __res); \ } #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \ type name(type1 arg1, type2 arg2, type3 arg3) \ { \ register long int _a1 asm ("rdi") = (long int)arg1; \ register long int _a2 asm ("rsi") = (long int)arg2; \ register long int _a3 asm ("rdx") = (long int)arg3; \ long __res; \ __asm__ volatile ("syscall" \ : "=a" (__res) \ : "0" (__NR_##name), "r" (_a1), "r" (_a2), "r" (_a3) \ : "memory", "cc", "r11", "cx"); \ __syscall_return(type, __res); \ } #define _syscall4(type, name, type1, arg1, type2, arg2, type3, arg3, \ type4, arg4) \ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ { \ register long int _a1 asm ("rdi") = (long int)arg1; \ register long int _a2 asm ("rsi") = (long int)arg2; \ register long int _a3 asm ("rdx") = (long int)arg3; \ register long int _a4 asm ("r10") = (long int)arg4; \ long __res; \ __asm__ volatile ("syscall" \ : "=a" (__res) \ : "0" (__NR_##name), "r" (_a1), "r" (_a2), "r" (_a3), \ "r" (_a4) \ : "memory", "cc", "r11", "cx"); \ __syscall_return(type, __res); \ } #define _syscall5(type, name, type1, arg1, type2, arg2, type3, arg3, \ type4, arg4, type5, arg5) \ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ { \ register long int _a1 asm ("rdi") = (long int)arg1; \ register long int _a2 asm ("rsi") = (long int)arg2; \ register long int _a3 asm ("rdx") = (long int)arg3; \ register long int _a4 asm ("r10") = (long int)arg4; \ register long int _a5 asm ("r8") = (long int)arg5; \ long __res; \ __asm__ volatile ("syscall" \ : "=a" (__res) \ : "0" (__NR_##name), "r" (_a1), "r" (_a2), "r" (_a3), \ "r" (_a4), "r" (_a5) \ : "memory", "cc", "r11", "cx"); \ __syscall_return(type, __res); \ } #define _syscall6(type, name, type1, arg1, type2, arg2, type3, arg3, \ type4, arg4, type5, arg5, type6, arg6) \ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, \ type6 arg6) \ { \ register long int _a1 asm ("rdi") = (long int)arg1; \ register long int _a2 asm ("rsi") = (long int)arg2; \ register long int _a3 asm ("rdx") = (long int)arg3; \ register long int _a4 asm ("r10") = (long int)arg4; \ register long int _a5 asm ("r8") = (long int)arg5; \ register long int _a6 asm ("r9") = (long int)arg6; \ long __res; \ __asm__ volatile ("syscall" \ : "=a" (__res) \ : "0" (__NR_##name), "r" (_a1), "r" (_a2), "r" (_a3), \ "r" (_a4), "r" (_a5), "r" (_a6) \ : "memory", "cc", "r11", "cx"); \ __syscall_return(type, __res); \ }