]> git.saurik.com Git - apple/xnu.git/blobdiff - libsyscall/custom/SYS.h
xnu-2422.115.4.tar.gz
[apple/xnu.git] / libsyscall / custom / SYS.h
index a16f358d8ce0c9fc45d66ee5d6520991238fbd53..46e3735d9fb5ae74449d0edb9e83c1ae9df125ca 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999-2007 Apple Inc. All rights reserved.
+ * Copyright (c) 1999-2011 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -48,6 +48,8 @@
 
 #include <sys/syscall.h>
 
+/* Binary compatibility stubs for syscalls that no longer exist */
+
 #ifndef SYS_setquota
 #define SYS_setquota   148
 #endif
 
 #define UNIX_SYSCALL_SYSENTER          call __sysenter_trap
 #define UNIX_SYSCALL(name, nargs)                      \
-       .globl  cerror                                  ;\
+       .globl  tramp_cerror                            ;\
 LEAF(_##name, 0)                                       ;\
        movl    $ SYS_##name, %eax                      ;\
        UNIX_SYSCALL_SYSENTER                           ;\
        jnb     2f                                      ;\
-       BRANCH_EXTERN(cerror)                           ;\
+       BRANCH_EXTERN(tramp_cerror)                     ;\
 2:
 
 #define UNIX_SYSCALL_INT(name, nargs)                  \
-       .globl  cerror                                  ;\
+       .globl  tramp_cerror                            ;\
 LEAF(_##name, 0)                                       ;\
        movl    $ SYS_##name, %eax                      ;\
        UNIX_SYSCALL_TRAP                               ;\
        jnb     2f                                      ;\
-       BRANCH_EXTERN(cerror)                           ;\
+       BRANCH_EXTERN(tramp_cerror)                     ;\
 2:
 
 #if defined(__SYSCALL_32BIT_ARG_BYTES) && ((__SYSCALL_32BIT_ARG_BYTES >= 4) && (__SYSCALL_32BIT_ARG_BYTES <= 20))
-#define UNIX_SYSCALL_NONAME(name, nargs)                       \
+#define UNIX_SYSCALL_NONAME(name, nargs, cerror)                       \
        movl    $(SYS_##name | (__SYSCALL_32BIT_ARG_BYTES << I386_SYSCALL_ARG_BYTES_SHIFT)), %eax               ;\
        UNIX_SYSCALL_SYSENTER                                   ;\
        jnb     2f                                              ;\
-       BRANCH_EXTERN(cerror)                                   ;\
+       BRANCH_EXTERN(tramp_##cerror)                           ;\
 2:
 #else /* __SYSCALL_32BIT_ARG_BYTES < 4 || > 20 */
-#define UNIX_SYSCALL_NONAME(name, nargs)               \
-       .globl  cerror                                  ;\
+#define UNIX_SYSCALL_NONAME(name, nargs, cerror)       \
        movl    $ SYS_##name, %eax                      ;\
        UNIX_SYSCALL_SYSENTER                           ;\
        jnb     2f                                      ;\
-       BRANCH_EXTERN(cerror)                           ;\
+       BRANCH_EXTERN(tramp_##cerror)                   ;\
 2:
 #endif
 
 #define UNIX_SYSCALL_INT_NONAME(name, nargs)           \
-       .globl  cerror                                  ;\
+       .globl  tramp_cerror_nocancel                   ;\
        movl    $ SYS_##name, %eax                      ;\
        UNIX_SYSCALL_TRAP                               ;\
        jnb     2f                                      ;\
-       BRANCH_EXTERN(cerror)                           ;\
+       BRANCH_EXTERN(tramp_cerror_nocancel)            ;\
 2:
 
-#define PSEUDO(pseudo, name, nargs)                    \
+#define PSEUDO(pseudo, name, nargs, cerror)    \
 LEAF(pseudo, 0)                                        ;\
-       UNIX_SYSCALL_NONAME(name, nargs)
+       UNIX_SYSCALL_NONAME(name, nargs, cerror)
 
-#define PSEUDO_INT(pseudo, name, nargs)                        \
+#define PSEUDO_INT(pseudo, name, nargs)                \
 LEAF(pseudo, 0)                                        ;\
        UNIX_SYSCALL_INT_NONAME(name, nargs)
 
+#define __SYSCALL2(pseudo, name, nargs, cerror)                        \
+       PSEUDO(pseudo, name, nargs, cerror)                     ;\
+       ret
+
 #define __SYSCALL(pseudo, name, nargs)                 \
-       PSEUDO(pseudo, name, nargs)                     ;\
+       PSEUDO(pseudo, name, nargs, cerror)             ;\
        ret
 
 #define __SYSCALL_INT(pseudo, name, nargs)             \
@@ -135,31 +140,38 @@ LEAF(pseudo, 0)                                   ;\
        movq    %rcx, %r10              ;\
        syscall
 
-#define UNIX_SYSCALL(name, nargs)                      \
-       .globl  cerror                                  ;\
-LEAF(_##name, 0)                                       ;\
-       movl    $ SYSCALL_CONSTRUCT_UNIX(SYS_##name), %eax      ;\
-       UNIX_SYSCALL_SYSCALL                            ;\
-       jnb     2f                                      ;\
-       BRANCH_EXTERN(cerror)                           ;\
+#define UNIX_SYSCALL(name, nargs)                                               \
+       .globl  cerror                                                          ;\
+LEAF(_##name, 0)                                                               ;\
+       movl    $ SYSCALL_CONSTRUCT_UNIX(SYS_##name), %eax                      ;\
+       UNIX_SYSCALL_SYSCALL                                                    ;\
+       jnb             2f                                                      ;\
+       movq    %rax, %rdi                                                      ;\
+       BRANCH_EXTERN(_cerror)                                                  ;\
 2:
 
-#define UNIX_SYSCALL_NONAME(name, nargs)               \
-       .globl  cerror                                  ;\
-       movl    $ SYSCALL_CONSTRUCT_UNIX(SYS_##name), %eax      ;\
-       UNIX_SYSCALL_SYSCALL                            ;\
-       jnb     2f                                      ;\
-       BRANCH_EXTERN(cerror)                           ;\
+#define UNIX_SYSCALL_NONAME(name, nargs, cerror)                \
+       .globl  cerror                                                          ;\
+       movl    $ SYSCALL_CONSTRUCT_UNIX(SYS_##name), %eax                      ;\
+       UNIX_SYSCALL_SYSCALL                                                    ;\
+       jnb             2f                                                      ;\
+       movq    %rax, %rdi                                                      ;\
+       BRANCH_EXTERN(_##cerror)                                                ;\
 2:
 
-#define PSEUDO(pseudo, name, nargs)                    \
+#define PSEUDO(pseudo, name, nargs, cerror)                    \
 LEAF(pseudo, 0)                                        ;\
-       UNIX_SYSCALL_NONAME(name, nargs)
+       UNIX_SYSCALL_NONAME(name, nargs, cerror)
+
+#define __SYSCALL2(pseudo, name, nargs, cerror) \
+       PSEUDO(pseudo, name, nargs, cerror)                     ;\
+       ret
 
 #define __SYSCALL(pseudo, name, nargs)                 \
-       PSEUDO(pseudo, name, nargs)                     ;\
+       PSEUDO(pseudo, name, nargs, cerror)                     ;\
        ret
 
 #else
 #error Unsupported architecture
 #endif
+