unify non-inline version of syscall code across archs
authorRich Felker <dalias@aerifal.cx>
Sun, 23 Nov 2014 02:50:13 +0000 (21:50 -0500)
committerRich Felker <dalias@aerifal.cx>
Sun, 23 Nov 2014 02:50:13 +0000 (21:50 -0500)
except powerpc, which still lacks inline syscalls simply because
nobody has written the code, these are all fallbacks used to work
around a clang bug that probably does not exist in versions of clang
that can compile musl. however, it's useful to have the generic
non-inline code anyway, as it eases the task of porting to new archs:
writing inline syscall code is now optional. this approach could also
help support compilers which don't understand inline asm or lack
support for the needed register constraints.

mips could not be unified because it has special fixup code for broken
layout of the kernel's struct stat.

arch/microblaze/syscall_arch.h
arch/or1k/syscall_arch.h
arch/powerpc/syscall_arch.h
src/internal/syscall.h

index cab4607d0e5328f77e6d2fbfd8b60b69fc59db93..79f98340354ab180f553654d9f8d5bf7a14a560a 100644 (file)
@@ -100,39 +100,7 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
 
 #else
 
-static inline long __syscall0(long n)
-{
-       return (__syscall)(n);
-}
-
-static inline long __syscall1(long n, long a)
-{
-       return (__syscall)(n, a);
-}
-
-static inline long __syscall2(long n, long a, long b)
-{
-       return (__syscall)(n, a, b);
-}
-
-static inline long __syscall3(long n, long a, long b, long c)
-{
-       return (__syscall)(n, a, b, c);
-}
-
-static inline long __syscall4(long n, long a, long b, long c, long d)
-{
-       return (__syscall)(n, a, b, c, d);
-}
-
-static inline long __syscall5(long n, long a, long b, long c, long d, long e)
-{
-       return (__syscall)(n, a, b, c, d, e);
-}
-
-static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
-{
-       return (__syscall)(n, a, b, c, d, e, f);
-}
+#undef SYSCALL_NO_INLINE
+#define SYSCALL_NO_INLINE
 
 #endif
index fe6645591a1e5689f65be6731460bdd812fb718c..3e4650cc3877fc8ac934a88c847751d4d49264b7 100644 (file)
@@ -118,39 +118,7 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
 
 #else
 
-static inline long __syscall0(long n)
-{
-       return (__syscall)(n);
-}
-
-static inline long __syscall1(long n, long a)
-{
-       return (__syscall)(n, a);
-}
-
-static inline long __syscall2(long n, long a, long b)
-{
-       return (__syscall)(n, a, b);
-}
-
-static inline long __syscall3(long n, long a, long b, long c)
-{
-       return (__syscall)(n, a, b, c);
-}
-
-static inline long __syscall4(long n, long a, long b, long c, long d)
-{
-       return (__syscall)(n, a, b, c, d);
-}
-
-static inline long __syscall5(long n, long a, long b, long c, long d, long e)
-{
-       return (__syscall)(n, a, b, c, d, e);
-}
-
-static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
-{
-       return (__syscall)(n, a, b, c, d, e, f);
-}
+#undef SYSCALL_NO_INLINE
+#define SYSCALL_NO_INLINE
 
 #endif
index 7a6b6b7b0b304dda3ff2d82090fc3ce87f31c864..e7cb1a26d62505a7c27d3d0bab7bde3f986ea682 100644 (file)
@@ -3,39 +3,5 @@
 ((union { long long ll; long l[2]; }){ .ll = x }).l[1]
 #define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x))
 
-long (__syscall)(long, ...);
-
-static inline long __syscall0(long n)
-{
-       return (__syscall)(n, 0, 0, 0, 0, 0, 0);
-}
-
-static inline long __syscall1(long n, long a)
-{
-       return (__syscall)(n, a, 0, 0, 0, 0, 0);
-}
-
-static inline long __syscall2(long n, long a, long b)
-{
-       return (__syscall)(n, a, b, 0, 0, 0, 0);
-}
-
-static inline long __syscall3(long n, long a, long b, long c)
-{
-       return (__syscall)(n, a, b, c, 0, 0, 0);
-}
-
-static inline long __syscall4(long n, long a, long b, long c, long d)
-{
-       return (__syscall)(n, a, b, c, d, 0, 0);
-}
-
-static inline long __syscall5(long n, long a, long b, long c, long d, long e)
-{
-       return (__syscall)(n, a, b, c, d, e, 0);
-}
-
-static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
-{
-       return (__syscall)(n, a, b, c, d, e, f);
-}
+#undef SYSCALL_NO_INLINE
+#define SYSCALL_NO_INLINE
index bb96c26e7f2dee21055f0b45c7eb020e3b1f6029..b3fe7c01c8f49b25330c7577d8500c0a9ef5a2d9 100644 (file)
@@ -24,12 +24,22 @@ long __syscall_ret(unsigned long), __syscall(syscall_arg_t, ...),
        __syscall_cp(syscall_arg_t, syscall_arg_t, syscall_arg_t, syscall_arg_t,
                     syscall_arg_t, syscall_arg_t, syscall_arg_t);
 
+#ifdef SYSCALL_NO_INLINE
+#define __syscall0(n) (__syscall)(n)
+#define __syscall1(n,a) (__syscall)(n,__scc(a))
+#define __syscall2(n,a,b) (__syscall)(n,__scc(a),__scc(b))
+#define __syscall3(n,a,b,c) (__syscall)(n,__scc(a),__scc(b),__scc(c))
+#define __syscall4(n,a,b,c,d) (__syscall)(n,__scc(a),__scc(b),__scc(c),__scc(d))
+#define __syscall5(n,a,b,c,d,e) (__syscall)(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e))
+#define __syscall6(n,a,b,c,d,e,f) (__syscall)(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),__scc(f))
+#else
 #define __syscall1(n,a) __syscall1(n,__scc(a))
 #define __syscall2(n,a,b) __syscall2(n,__scc(a),__scc(b))
 #define __syscall3(n,a,b,c) __syscall3(n,__scc(a),__scc(b),__scc(c))
 #define __syscall4(n,a,b,c,d) __syscall4(n,__scc(a),__scc(b),__scc(c),__scc(d))
 #define __syscall5(n,a,b,c,d,e) __syscall5(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e))
 #define __syscall6(n,a,b,c,d,e,f) __syscall6(n,__scc(a),__scc(b),__scc(c),__scc(d),__scc(e),__scc(f))
+#endif
 #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))
 
 #define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n