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