OSDN Git Service

Take advantage of the new syscall stuff on x86 and arm to kill
authorEric Andersen <andersen@codepoet.org>
Thu, 25 Jul 2002 03:31:20 +0000 (03:31 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 25 Jul 2002 03:31:20 +0000 (03:31 -0000)
the ldso specific syscalls and use the generic ones instead.
 -Erik

ldso/ldso/arm/dl-syscalls.h
ldso/ldso/arm/ld_syscalls.h
ldso/ldso/i386/dl-syscalls.h
ldso/ldso/i386/ld_syscalls.h

index 016eb09..df14f34 100644 (file)
@@ -1,123 +1,7 @@
-/*
- * This file contains the system call macros and syscall 
- * numbers used by the shared library loader.
- */
+/* Define the __set_errno macro as nothing so that INLINE_SYSCALL
+ * won't set errno, which is important since we make system calls
+ * before the errno symbol is dynamicly linked. */
 
-#define __NR_SYSCALL_BASE      0x900000
-
-#define __NR_exit                      (__NR_SYSCALL_BASE+  1)
-#define __NR_read                      (__NR_SYSCALL_BASE+  3)
-#define __NR_write                     (__NR_SYSCALL_BASE+  4)
-#define __NR_open                      (__NR_SYSCALL_BASE+  5)
-#define __NR_close                     (__NR_SYSCALL_BASE+  6)
-#define __NR_getuid                    (__NR_SYSCALL_BASE+ 24)
-#define __NR_geteuid                   (__NR_SYSCALL_BASE+ 49)
-#define __NR_getgid                    (__NR_SYSCALL_BASE+ 47)
-#define __NR_getegid                   (__NR_SYSCALL_BASE+ 50)
-#define __NR_readlink                  (__NR_SYSCALL_BASE+ 85)
-#define __NR_mmap                      (__NR_SYSCALL_BASE+ 90)
-#define __NR_munmap                    (__NR_SYSCALL_BASE+ 91)
-#define __NR_stat                      (__NR_SYSCALL_BASE+106)
-#define __NR_mprotect                  (__NR_SYSCALL_BASE+125)
-
-
-/* Here are the macros which define how this platform makes
- * system calls.  This particular variant does _not_ set 
- * errno (note how it is disabled in __syscall_return) since
- * these will get called before the errno symbol is dynamicly 
- * linked. */
-
-/* These are Erik's versions of the syscall routines.  His were
- * cleaner than mine, so I adopted them instead with some
- * reformating.  Shane Nay.
- */
-
-#define __sys2(x) #x
-#define __sys1(x) __sys2(x)
-
-#ifndef __syscall
-#define __syscall(name) "swi\t" __sys1(__NR_##name) "\n\t"
-#endif
-
-#undef __syscall_return
-#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(name)                                                      \
-  "mov %0,r0"                                                          \
-  :"=r" (__res) : : "r0","lr");                                                \
-  __syscall_return(type,__res);                                                \
-}
-
-#define _syscall1(type,name,type1,arg1)                                        \
-type name(type1 arg1) {                                                        \
-  long __res;                                                          \
-  __asm__ __volatile__ (                                               \
-  "mov\tr0,%1\n\t"                                                     \
-  __syscall(name)                                                      \
-  "mov %0,r0"                                                          \
-        : "=r" (__res)                                                 \
-        : "r" ((long)(arg1))                                           \
-       : "r0","lr");                                                   \
-  __syscall_return(type,__res);                                                \
-}
-
-#define _syscall2(type,name,type1,arg1,type2,arg2)                     \
-type name(type1 arg1,type2 arg2) {                                     \
-  long __res;                                                          \
-  __asm__ __volatile__ (                                               \
-  "mov\tr0,%1\n\t"                                                     \
-  "mov\tr1,%2\n\t"                                                     \
-  __syscall(name)                                                      \
-  "mov\t%0,r0"                                                         \
-        : "=r" (__res)                                                 \
-        : "r" ((long)(arg1)),"r" ((long)(arg2))                                \
-       : "r0","r1","lr");                                              \
-  __syscall_return(type,__res);                                                \
-}
-
-
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)          \
-type name(type1 arg1,type2 arg2,type3 arg3) {                          \
-  long __res;                                                          \
-  __asm__ __volatile__ (                                               \
-  "mov\tr0,%1\n\t"                                                     \
-  "mov\tr1,%2\n\t"                                                     \
-  "mov\tr2,%3\n\t"                                                     \
-  __syscall(name)                                                      \
-  "mov\t%0,r0"                                                         \
-        : "=r" (__res)                                                 \
-        : "r" ((long)(arg1)),"r" ((long)(arg2)),"r" ((long)(arg3))     \
-        : "r0","r1","r2","lr");                                                \
-  __syscall_return(type,__res);                                                \
-}
-
-#undef _syscall4
-#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\
-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {            \
-  long __res;                                                          \
-  __asm__ __volatile__ (                                               \
-  "mov\tr0,%1\n\t"                                                     \
-  "mov\tr1,%2\n\t"                                                     \
-  "mov\tr2,%3\n\t"                                                     \
-  "mov\tr3,%4\n\t"                                                     \
-  __syscall(name)                                                      \
-  "mov\t%0,r0"                                                         \
-       : "=r" (__res)                                                  \
-       : "r" ((long)(arg1)),"r" ((long)(arg2)),                        \
-         "r" ((long)(arg3)),"r" ((long)(arg4))                         \
-       : "r0","r1","r2","r3","lr");                                    \
-  __syscall_return(type,__res);                                                \
-}
-  
+#define __set_errno(X)
+#include "sys/syscall.h"
 
index 016eb09..df14f34 100644 (file)
@@ -1,123 +1,7 @@
-/*
- * This file contains the system call macros and syscall 
- * numbers used by the shared library loader.
- */
+/* Define the __set_errno macro as nothing so that INLINE_SYSCALL
+ * won't set errno, which is important since we make system calls
+ * before the errno symbol is dynamicly linked. */
 
-#define __NR_SYSCALL_BASE      0x900000
-
-#define __NR_exit                      (__NR_SYSCALL_BASE+  1)
-#define __NR_read                      (__NR_SYSCALL_BASE+  3)
-#define __NR_write                     (__NR_SYSCALL_BASE+  4)
-#define __NR_open                      (__NR_SYSCALL_BASE+  5)
-#define __NR_close                     (__NR_SYSCALL_BASE+  6)
-#define __NR_getuid                    (__NR_SYSCALL_BASE+ 24)
-#define __NR_geteuid                   (__NR_SYSCALL_BASE+ 49)
-#define __NR_getgid                    (__NR_SYSCALL_BASE+ 47)
-#define __NR_getegid                   (__NR_SYSCALL_BASE+ 50)
-#define __NR_readlink                  (__NR_SYSCALL_BASE+ 85)
-#define __NR_mmap                      (__NR_SYSCALL_BASE+ 90)
-#define __NR_munmap                    (__NR_SYSCALL_BASE+ 91)
-#define __NR_stat                      (__NR_SYSCALL_BASE+106)
-#define __NR_mprotect                  (__NR_SYSCALL_BASE+125)
-
-
-/* Here are the macros which define how this platform makes
- * system calls.  This particular variant does _not_ set 
- * errno (note how it is disabled in __syscall_return) since
- * these will get called before the errno symbol is dynamicly 
- * linked. */
-
-/* These are Erik's versions of the syscall routines.  His were
- * cleaner than mine, so I adopted them instead with some
- * reformating.  Shane Nay.
- */
-
-#define __sys2(x) #x
-#define __sys1(x) __sys2(x)
-
-#ifndef __syscall
-#define __syscall(name) "swi\t" __sys1(__NR_##name) "\n\t"
-#endif
-
-#undef __syscall_return
-#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(name)                                                      \
-  "mov %0,r0"                                                          \
-  :"=r" (__res) : : "r0","lr");                                                \
-  __syscall_return(type,__res);                                                \
-}
-
-#define _syscall1(type,name,type1,arg1)                                        \
-type name(type1 arg1) {                                                        \
-  long __res;                                                          \
-  __asm__ __volatile__ (                                               \
-  "mov\tr0,%1\n\t"                                                     \
-  __syscall(name)                                                      \
-  "mov %0,r0"                                                          \
-        : "=r" (__res)                                                 \
-        : "r" ((long)(arg1))                                           \
-       : "r0","lr");                                                   \
-  __syscall_return(type,__res);                                                \
-}
-
-#define _syscall2(type,name,type1,arg1,type2,arg2)                     \
-type name(type1 arg1,type2 arg2) {                                     \
-  long __res;                                                          \
-  __asm__ __volatile__ (                                               \
-  "mov\tr0,%1\n\t"                                                     \
-  "mov\tr1,%2\n\t"                                                     \
-  __syscall(name)                                                      \
-  "mov\t%0,r0"                                                         \
-        : "=r" (__res)                                                 \
-        : "r" ((long)(arg1)),"r" ((long)(arg2))                                \
-       : "r0","r1","lr");                                              \
-  __syscall_return(type,__res);                                                \
-}
-
-
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)          \
-type name(type1 arg1,type2 arg2,type3 arg3) {                          \
-  long __res;                                                          \
-  __asm__ __volatile__ (                                               \
-  "mov\tr0,%1\n\t"                                                     \
-  "mov\tr1,%2\n\t"                                                     \
-  "mov\tr2,%3\n\t"                                                     \
-  __syscall(name)                                                      \
-  "mov\t%0,r0"                                                         \
-        : "=r" (__res)                                                 \
-        : "r" ((long)(arg1)),"r" ((long)(arg2)),"r" ((long)(arg3))     \
-        : "r0","r1","r2","lr");                                                \
-  __syscall_return(type,__res);                                                \
-}
-
-#undef _syscall4
-#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\
-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {            \
-  long __res;                                                          \
-  __asm__ __volatile__ (                                               \
-  "mov\tr0,%1\n\t"                                                     \
-  "mov\tr1,%2\n\t"                                                     \
-  "mov\tr2,%3\n\t"                                                     \
-  "mov\tr3,%4\n\t"                                                     \
-  __syscall(name)                                                      \
-  "mov\t%0,r0"                                                         \
-       : "=r" (__res)                                                  \
-       : "r" ((long)(arg1)),"r" ((long)(arg2)),                        \
-         "r" ((long)(arg3)),"r" ((long)(arg4))                         \
-       : "r0","r1","r2","r3","lr");                                    \
-  __syscall_return(type,__res);                                                \
-}
-  
+#define __set_errno(X)
+#include "sys/syscall.h"
 
index 572d9bf..df14f34 100644 (file)
@@ -1,165 +1,7 @@
-/*
- * This file contains the system call macros and syscall 
- * numbers used by the shared library loader.
- */
-
-#define __NR_exit                1
-#define __NR_read                3
-#define __NR_write               4
-#define __NR_open                5
-#define __NR_close               6
-#define __NR_getuid             24
-#define __NR_geteuid            49
-#define __NR_getgid             47
-#define __NR_getegid            50
-#define __NR_readlink           85
-#define __NR_mmap               90
-#define __NR_munmap             91
-#define __NR_stat              106
-#define __NR_mprotect          125
-
-/* Here are the macros which define how this platform makes
- * system calls.  This particular variant does _not_ set 
- * errno (note how it is disabled in __syscall_return) since
- * these will get called before the errno symbol is dynamicly 
- * linked. */
-
-#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 ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name)); \
-__syscall_return(type,__res); \
-}
-
-#if defined(__PIC__)
-
-/*
- * PIC uses %ebx, so we need to save it during system calls
- */
-
-#define _syscall1(type,name,type1,arg1) \
-type name(type1 arg1) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"r" ((long)(arg1))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall2(type,name,type1,arg1,type2,arg2) \
-type name(type1 arg1,type2 arg2) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
-type name(type1 arg1,type2 arg2,type3 arg3) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2)), \
-               "d" ((long)(arg3))); \
-__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) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4))); \
-__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) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"m" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
-__syscall_return(type,__res); \
-}
-
-#else  /* not doing __PIC__ */
-
-#define _syscall1(type,name,type1,arg1) \
-type name(type1 arg1) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall2(type,name,type1,arg1,type2,arg2) \
-type name(type1 arg1,type2 arg2) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
-type name(type1 arg1,type2 arg2,type3 arg3) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-                 "d" ((long)(arg3))); \
-__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) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4))); \
-__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) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
-__syscall_return(type,__res); \
-}
-
-
-#endif /* __PIC__ */
+/* Define the __set_errno macro as nothing so that INLINE_SYSCALL
+ * won't set errno, which is important since we make system calls
+ * before the errno symbol is dynamicly linked. */
 
+#define __set_errno(X)
+#include "sys/syscall.h"
 
index 572d9bf..df14f34 100644 (file)
@@ -1,165 +1,7 @@
-/*
- * This file contains the system call macros and syscall 
- * numbers used by the shared library loader.
- */
-
-#define __NR_exit                1
-#define __NR_read                3
-#define __NR_write               4
-#define __NR_open                5
-#define __NR_close               6
-#define __NR_getuid             24
-#define __NR_geteuid            49
-#define __NR_getgid             47
-#define __NR_getegid            50
-#define __NR_readlink           85
-#define __NR_mmap               90
-#define __NR_munmap             91
-#define __NR_stat              106
-#define __NR_mprotect          125
-
-/* Here are the macros which define how this platform makes
- * system calls.  This particular variant does _not_ set 
- * errno (note how it is disabled in __syscall_return) since
- * these will get called before the errno symbol is dynamicly 
- * linked. */
-
-#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 ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name)); \
-__syscall_return(type,__res); \
-}
-
-#if defined(__PIC__)
-
-/*
- * PIC uses %ebx, so we need to save it during system calls
- */
-
-#define _syscall1(type,name,type1,arg1) \
-type name(type1 arg1) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"r" ((long)(arg1))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall2(type,name,type1,arg1,type2,arg2) \
-type name(type1 arg1,type2 arg2) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
-type name(type1 arg1,type2 arg2,type3 arg3) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2)), \
-               "d" ((long)(arg3))); \
-__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) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"r" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4))); \
-__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) \
-{ \
-long __res; \
-__asm__ volatile ("push %%ebx; movl %2,%%ebx; int $0x80; pop %%ebx" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"m" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
-__syscall_return(type,__res); \
-}
-
-#else  /* not doing __PIC__ */
-
-#define _syscall1(type,name,type1,arg1) \
-type name(type1 arg1) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall2(type,name,type1,arg1,type2,arg2) \
-type name(type1 arg1,type2 arg2) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
-__syscall_return(type,__res); \
-}
-
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
-type name(type1 arg1,type2 arg2,type3 arg3) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-                 "d" ((long)(arg3))); \
-__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) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4))); \
-__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) \
-{ \
-long __res; \
-__asm__ volatile ("int $0x80" \
-       : "=a" (__res) \
-       : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
-         "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
-__syscall_return(type,__res); \
-}
-
-
-#endif /* __PIC__ */
+/* Define the __set_errno macro as nothing so that INLINE_SYSCALL
+ * won't set errno, which is important since we make system calls
+ * before the errno symbol is dynamicly linked. */
 
+#define __set_errno(X)
+#include "sys/syscall.h"