os_darwin.c raw
1 //go:build none
2
3 // This file is included in the build, despite the //go:build line above.
4
5 #include <fcntl.h>
6
7 // Wrapper function because 'open' is a variadic function and variadic functions
8 // use a different (incompatible) calling convention on darwin/arm64.
9 // This function is referenced from the compiler, when it sees a
10 // syscall.libc_open_trampoline function.
11 int syscall_libc_open(const char *pathname, int flags, mode_t mode) {
12 return open(pathname, flags, mode);
13 }
14
15 // The following functions are called by the runtime because Go can't call
16 // function pointers directly.
17
18 int moxie_syscall(int (*fn)(uintptr_t a1, uintptr_t a2, uintptr_t a3), uintptr_t a1, uintptr_t a2, uintptr_t a3) {
19 return fn(a1, a2, a3);
20 }
21
22 uintptr_t moxie_syscallX(uintptr_t (*fn)(uintptr_t a1, uintptr_t a2, uintptr_t a3), uintptr_t a1, uintptr_t a2, uintptr_t a3) {
23 return fn(a1, a2, a3);
24 }
25
26 int moxie_syscall6(int (*fn)(uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6), uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6) {
27 return fn(a1, a2, a3, a4, a5, a6);
28 }
29
30 uintptr_t moxie_syscall6X(uintptr_t (*fn)(uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6), uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6) {
31 return fn(a1, a2, a3, a4, a5, a6);
32 }
33