/*
- * Copyright (c) 1999-2007 Apple Inc. All rights reserved.
+ * Copyright (c) 1999-2011 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
#include <sys/syscall.h>
+/* Binary compatibility stubs for syscalls that no longer exist */
+
#ifndef SYS_setquota
#define SYS_setquota 148
#endif
#define SYS_quota 149
#endif
-#if defined(__ppc__) || defined(__ppc64__)
-
-#include <architecture/ppc/mode_independent_asm.h>
-
-/*
- * Macros.
- */
-
-#define SYSCALL(name, nargs) \
- .globl cerror @\
- MI_ENTRY_POINT(_##name) @\
- li r0,SYS_##name @\
- sc @\
- b 1f @\
- blr @\
-1: MI_BRANCH_EXTERNAL(cerror)
-
-
-#define SYSCALL_NONAME(name, nargs) \
- .globl cerror @\
- li r0,SYS_##name @\
- sc @\
- b 1f @\
- b 2f @\
-1: MI_BRANCH_EXTERNAL(cerror) @\
-2:
-
-
-#define PSEUDO(pseudo, name, nargs) \
- .private_extern _##pseudo @\
- .text @\
- .align 2 @\
-_##pseudo: @\
- SYSCALL_NONAME(name, nargs)
-
-#define __SYSCALL(pseudo, name, nargs) \
- PSEUDO(pseudo, name, nargs) @\
- blr
-
-#elif defined(__i386__)
+#if defined(__i386__)
#include <architecture/i386/asm_help.h>
#include <mach/i386/syscall_sw.h>
#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) \
-LEAF(_##pseudo, 0) ;\
- UNIX_SYSCALL_NONAME(name, nargs)
+#define PSEUDO(pseudo, name, nargs, cerror) \
+LEAF(pseudo, 0) ;\
+ UNIX_SYSCALL_NONAME(name, nargs, cerror)
-#define PSEUDO_INT(pseudo, name, nargs) \
-LEAF(_##pseudo, 0) ;\
+#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) \
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) \
-LEAF(_##pseudo, 0) ;\
- UNIX_SYSCALL_NONAME(name, nargs)
+#define PSEUDO(pseudo, name, nargs, cerror) \
+LEAF(pseudo, 0) ;\
+ 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
+