summaryrefslogtreecommitdiff
path: root/src/internal/syscall.h
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-09-09 14:53:06 -0400
committerRich Felker <dalias@aerifal.cx>2012-09-09 14:53:06 -0400
commit9a3bbce447403d735282586786dc436ec1ffbad4 (patch)
tree5dc2b8d273b394fd8554d15f79aab34dd2d2dd11 /src/internal/syscall.h
parent5e3c243d8df6b1504db9c1e6442d47ed38937e02 (diff)
downloadmusl-9a3bbce447403d735282586786dc436ec1ffbad4.tar.gz
add 7-arg syscall support for mips
no syscalls actually use that many arguments; the issue is that some syscalls with 64-bit arguments have them ordered badly so that breaking them into aligned 32-bit half-arguments wastes slots with padding, and a 7th slot is needed for the last argument.
Diffstat (limited to 'src/internal/syscall.h')
-rw-r--r--src/internal/syscall.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/internal/syscall.h b/src/internal/syscall.h
index ffaf640a..50409ef8 100644
--- a/src/internal/syscall.h
+++ b/src/internal/syscall.h
@@ -14,9 +14,10 @@ long __syscall_cp(long, long, long, long, long, long, long);
#define __syscall4(n,a,b,c,d) __syscall4(n,(long)(a),(long)(b),(long)(c),(long)(d))
#define __syscall5(n,a,b,c,d,e) __syscall5(n,(long)(a),(long)(b),(long)(c),(long)(d),(long)(e))
#define __syscall6(n,a,b,c,d,e,f) __syscall6(n,(long)(a),(long)(b),(long)(c),(long)(d),(long)(e),(long)(f))
+#define __syscall7(n,a,b,c,d,e,f,g) (__syscall)(n,(long)(a),(long)(b),(long)(c),(long)(d),(long)(e),(long)(f),(long)g)
-#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,n,...) n
-#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,6,5,4,3,2,1,0)
+#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n
+#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0)
#define __SYSCALL_CONCAT_X(a,b) a##b
#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X(a,b)
#define __SYSCALL_DISP(b,...) __SYSCALL_CONCAT(b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__)