summaryrefslogtreecommitdiffstats
path: root/contrib/go/_std_1.25/src/runtime/sys_darwin_arm64.s
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/go/_std_1.25/src/runtime/sys_darwin_arm64.s')
-rw-r--r--contrib/go/_std_1.25/src/runtime/sys_darwin_arm64.s798
1 files changed, 0 insertions, 798 deletions
diff --git a/contrib/go/_std_1.25/src/runtime/sys_darwin_arm64.s b/contrib/go/_std_1.25/src/runtime/sys_darwin_arm64.s
deleted file mode 100644
index 788fdf87b77..00000000000
--- a/contrib/go/_std_1.25/src/runtime/sys_darwin_arm64.s
+++ /dev/null
@@ -1,798 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// System calls and other sys.stuff for ARM64, Darwin
-// System calls are implemented in libSystem, this file contains
-// trampolines that convert from Go to C calling convention.
-
-#include "go_asm.h"
-#include "go_tls.h"
-#include "textflag.h"
-#include "cgo/abi_arm64.h"
-
-#define CLOCK_REALTIME 0
-
-TEXT notok<>(SB),NOSPLIT,$0
- MOVD $0, R8
- MOVD R8, (R8)
- B 0(PC)
-
-TEXT runtime·open_trampoline(SB),NOSPLIT,$0
- SUB $16, RSP
- MOVW 8(R0), R1 // arg 2 flags
- MOVW 12(R0), R2 // arg 3 mode
- MOVW R2, (RSP) // arg 3 is variadic, pass on stack
- MOVD 0(R0), R0 // arg 1 pathname
- BL libc_open(SB)
- ADD $16, RSP
- RET
-
-TEXT runtime·close_trampoline(SB),NOSPLIT,$0
- MOVW 0(R0), R0 // arg 1 fd
- BL libc_close(SB)
- RET
-
-TEXT runtime·write_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 buf
- MOVW 16(R0), R2 // arg 3 count
- MOVW 0(R0), R0 // arg 1 fd
- BL libc_write(SB)
- MOVD $-1, R1
- CMP R0, R1
- BNE noerr
- BL libc_error(SB)
- MOVW (R0), R0
- NEG R0, R0 // caller expects negative errno value
-noerr:
- RET
-
-TEXT runtime·read_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 buf
- MOVW 16(R0), R2 // arg 3 count
- MOVW 0(R0), R0 // arg 1 fd
- BL libc_read(SB)
- MOVD $-1, R1
- CMP R0, R1
- BNE noerr
- BL libc_error(SB)
- MOVW (R0), R0
- NEG R0, R0 // caller expects negative errno value
-noerr:
- RET
-
-TEXT runtime·pipe_trampoline(SB),NOSPLIT,$0
- BL libc_pipe(SB) // pointer already in R0
- CMP $0, R0
- BEQ 3(PC)
- BL libc_error(SB) // return negative errno value
- NEG R0, R0
- RET
-
-TEXT runtime·exit_trampoline(SB),NOSPLIT|NOFRAME,$0
- MOVW 0(R0), R0
- BL libc_exit(SB)
- MOVD $1234, R0
- MOVD $1002, R1
- MOVD R0, (R1) // fail hard
-
-TEXT runtime·raiseproc_trampoline(SB),NOSPLIT,$0
- MOVD 0(R0), R19 // signal
- BL libc_getpid(SB)
- // arg 1 pid already in R0 from getpid
- MOVD R19, R1 // arg 2 signal
- BL libc_kill(SB)
- RET
-
-TEXT runtime·mmap_trampoline(SB),NOSPLIT,$0
- MOVD R0, R19
- MOVD 0(R19), R0 // arg 1 addr
- MOVD 8(R19), R1 // arg 2 len
- MOVW 16(R19), R2 // arg 3 prot
- MOVW 20(R19), R3 // arg 4 flags
- MOVW 24(R19), R4 // arg 5 fd
- MOVW 28(R19), R5 // arg 6 off
- BL libc_mmap(SB)
- MOVD $0, R1
- MOVD $-1, R2
- CMP R0, R2
- BNE ok
- BL libc_error(SB)
- MOVW (R0), R1
- MOVD $0, R0
-ok:
- MOVD R0, 32(R19) // ret 1 p
- MOVD R1, 40(R19) // ret 2 err
- RET
-
-TEXT runtime·munmap_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 len
- MOVD 0(R0), R0 // arg 1 addr
- BL libc_munmap(SB)
- CMP $0, R0
- BEQ 2(PC)
- BL notok<>(SB)
- RET
-
-TEXT runtime·madvise_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 len
- MOVW 16(R0), R2 // arg 3 advice
- MOVD 0(R0), R0 // arg 1 addr
- BL libc_madvise(SB)
- RET
-
-TEXT runtime·mlock_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 len
- MOVD 0(R0), R0 // arg 1 addr
- BL libc_mlock(SB)
- RET
-
-TEXT runtime·setitimer_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 new
- MOVD 16(R0), R2 // arg 3 old
- MOVW 0(R0), R0 // arg 1 which
- BL libc_setitimer(SB)
- RET
-
-TEXT runtime·walltime_trampoline(SB),NOSPLIT,$0
- MOVD R0, R1 // arg 2 timespec
- MOVW $CLOCK_REALTIME, R0 // arg 1 clock_id
- BL libc_clock_gettime(SB)
- RET
-
-GLOBL timebase<>(SB),NOPTR,$(machTimebaseInfo__size)
-
-TEXT runtime·nanotime_trampoline(SB),NOSPLIT,$40
- MOVD R0, R19
- BL libc_mach_absolute_time(SB)
- MOVD R0, 0(R19)
- MOVW timebase<>+machTimebaseInfo_numer(SB), R20
- MOVD $timebase<>+machTimebaseInfo_denom(SB), R21
- LDARW (R21), R21 // atomic read
- CMP $0, R21
- BNE initialized
-
- SUB $(machTimebaseInfo__size+15)/16*16, RSP
- MOVD RSP, R0
- BL libc_mach_timebase_info(SB)
- MOVW machTimebaseInfo_numer(RSP), R20
- MOVW machTimebaseInfo_denom(RSP), R21
- ADD $(machTimebaseInfo__size+15)/16*16, RSP
-
- MOVW R20, timebase<>+machTimebaseInfo_numer(SB)
- MOVD $timebase<>+machTimebaseInfo_denom(SB), R22
- STLRW R21, (R22) // atomic write
-
-initialized:
- MOVW R20, 8(R19)
- MOVW R21, 12(R19)
- RET
-
-TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
- MOVW sig+8(FP), R0
- MOVD info+16(FP), R1
- MOVD ctx+24(FP), R2
- MOVD fn+0(FP), R11
- BL (R11)
- RET
-
-TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$176
- // Save callee-save registers in the case of signal forwarding.
- // Please refer to https://golang.org/issue/31827 .
- SAVE_R19_TO_R28(8*4)
- SAVE_F8_TO_F15(8*14)
-
- // Save arguments.
- MOVW R0, (8*1)(RSP) // sig
- MOVD R1, (8*2)(RSP) // info
- MOVD R2, (8*3)(RSP) // ctx
-
- // this might be called in external code context,
- // where g is not set.
- BL runtime·load_g(SB)
-
-#ifdef GOOS_ios
- MOVD RSP, R6
- CMP $0, g
- BEQ nog
- // iOS always use the main stack to run the signal handler.
- // We need to switch to gsignal ourselves.
- MOVD g_m(g), R11
- MOVD m_gsignal(R11), R5
- MOVD (g_stack+stack_hi)(R5), R6
-
-nog:
- // Restore arguments.
- MOVW (8*1)(RSP), R0
- MOVD (8*2)(RSP), R1
- MOVD (8*3)(RSP), R2
-
- // Reserve space for args and the stack pointer on the
- // gsignal stack.
- SUB $48, R6
- // Save stack pointer.
- MOVD RSP, R4
- MOVD R4, (8*4)(R6)
- // Switch to gsignal stack.
- MOVD R6, RSP
-
- // Save arguments.
- MOVW R0, (8*1)(RSP)
- MOVD R1, (8*2)(RSP)
- MOVD R2, (8*3)(RSP)
-#endif
-
- // Call sigtrampgo.
- MOVD $runtime·sigtrampgo(SB), R11
- BL (R11)
-
-#ifdef GOOS_ios
- // Switch to old stack.
- MOVD (8*4)(RSP), R5
- MOVD R5, RSP
-#endif
-
- // Restore callee-save registers.
- RESTORE_R19_TO_R28(8*4)
- RESTORE_F8_TO_F15(8*14)
-
- RET
-
-TEXT runtime·cgoSigtramp(SB),NOSPLIT,$0
- JMP runtime·sigtramp(SB)
-
-TEXT runtime·sigprocmask_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 new
- MOVD 16(R0), R2 // arg 3 old
- MOVW 0(R0), R0 // arg 1 how
- BL libc_pthread_sigmask(SB)
- CMP $0, R0
- BEQ 2(PC)
- BL notok<>(SB)
- RET
-
-TEXT runtime·sigaction_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 new
- MOVD 16(R0), R2 // arg 3 old
- MOVW 0(R0), R0 // arg 1 how
- BL libc_sigaction(SB)
- CMP $0, R0
- BEQ 2(PC)
- BL notok<>(SB)
- RET
-
-TEXT runtime·usleep_trampoline(SB),NOSPLIT,$0
- MOVW 0(R0), R0 // arg 1 usec
- BL libc_usleep(SB)
- RET
-
-TEXT runtime·sysctl_trampoline(SB),NOSPLIT,$0
- MOVW 8(R0), R1 // arg 2 miblen
- MOVD 16(R0), R2 // arg 3 oldp
- MOVD 24(R0), R3 // arg 4 oldlenp
- MOVD 32(R0), R4 // arg 5 newp
- MOVD 40(R0), R5 // arg 6 newlen
- MOVD 0(R0), R0 // arg 1 mib
- BL libc_sysctl(SB)
- RET
-
-TEXT runtime·sysctlbyname_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 oldp
- MOVD 16(R0), R2 // arg 3 oldlenp
- MOVD 24(R0), R3 // arg 4 newp
- MOVD 32(R0), R4 // arg 5 newlen
- MOVD 0(R0), R0 // arg 1 name
- BL libc_sysctlbyname(SB)
- RET
-
-
-TEXT runtime·kqueue_trampoline(SB),NOSPLIT,$0
- BL libc_kqueue(SB)
- RET
-
-TEXT runtime·kevent_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 keventt
- MOVW 16(R0), R2 // arg 3 nch
- MOVD 24(R0), R3 // arg 4 ev
- MOVW 32(R0), R4 // arg 5 nev
- MOVD 40(R0), R5 // arg 6 ts
- MOVW 0(R0), R0 // arg 1 kq
- BL libc_kevent(SB)
- MOVD $-1, R2
- CMP R0, R2
- BNE ok
- BL libc_error(SB)
- MOVW (R0), R0 // errno
- NEG R0, R0 // caller wants it as a negative error code
-ok:
- RET
-
-TEXT runtime·fcntl_trampoline(SB),NOSPLIT,$0
- SUB $16, RSP
- MOVD R0, R19
- MOVW 0(R19), R0 // arg 1 fd
- MOVW 4(R19), R1 // arg 2 cmd
- MOVW 8(R19), R2 // arg 3 arg
- MOVW R2, (RSP) // arg 3 is variadic, pass on stack
- BL libc_fcntl(SB)
- MOVD $0, R1
- MOVD $-1, R2
- CMP R0, R2
- BNE noerr
- BL libc_error(SB)
- MOVW (R0), R1
- MOVW $-1, R0
-noerr:
- MOVW R0, 12(R19)
- MOVW R1, 16(R19)
- ADD $16, RSP
- RET
-
-TEXT runtime·sigaltstack_trampoline(SB),NOSPLIT,$0
-#ifdef GOOS_ios
- // sigaltstack on iOS is not supported and will always
- // run the signal handler on the main stack, so our sigtramp has
- // to do the stack switch ourselves.
- MOVW $43, R0
- BL libc_exit(SB)
-#else
- MOVD 8(R0), R1 // arg 2 old
- MOVD 0(R0), R0 // arg 1 new
- CALL libc_sigaltstack(SB)
- CBZ R0, 2(PC)
- BL notok<>(SB)
-#endif
- RET
-
-// Thread related functions
-
-// mstart_stub is the first function executed on a new thread started by pthread_create.
-// It just does some low-level setup and then calls mstart.
-// Note: called with the C calling convention.
-TEXT runtime·mstart_stub(SB),NOSPLIT,$160
- // R0 points to the m.
- // We are already on m's g0 stack.
-
- // Save callee-save registers.
- SAVE_R19_TO_R28(8)
- SAVE_F8_TO_F15(88)
-
- MOVD m_g0(R0), g
- BL ·save_g(SB)
-
- BL runtime·mstart(SB)
-
- // Restore callee-save registers.
- RESTORE_R19_TO_R28(8)
- RESTORE_F8_TO_F15(88)
-
- // Go is all done with this OS thread.
- // Tell pthread everything is ok (we never join with this thread, so
- // the value here doesn't really matter).
- MOVD $0, R0
-
- RET
-
-TEXT runtime·pthread_attr_init_trampoline(SB),NOSPLIT,$0
- MOVD 0(R0), R0 // arg 1 attr
- BL libc_pthread_attr_init(SB)
- RET
-
-TEXT runtime·pthread_attr_getstacksize_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 size
- MOVD 0(R0), R0 // arg 1 attr
- BL libc_pthread_attr_getstacksize(SB)
- RET
-
-TEXT runtime·pthread_attr_setdetachstate_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 state
- MOVD 0(R0), R0 // arg 1 attr
- BL libc_pthread_attr_setdetachstate(SB)
- RET
-
-TEXT runtime·pthread_create_trampoline(SB),NOSPLIT,$0
- SUB $16, RSP
- MOVD 0(R0), R1 // arg 2 state
- MOVD 8(R0), R2 // arg 3 start
- MOVD 16(R0), R3 // arg 4 arg
- MOVD RSP, R0 // arg 1 &threadid (which we throw away)
- BL libc_pthread_create(SB)
- ADD $16, RSP
- RET
-
-TEXT runtime·raise_trampoline(SB),NOSPLIT,$0
- MOVW 0(R0), R0 // arg 1 sig
- BL libc_raise(SB)
- RET
-
-TEXT runtime·pthread_mutex_init_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 attr
- MOVD 0(R0), R0 // arg 1 mutex
- BL libc_pthread_mutex_init(SB)
- RET
-
-TEXT runtime·pthread_mutex_lock_trampoline(SB),NOSPLIT,$0
- MOVD 0(R0), R0 // arg 1 mutex
- BL libc_pthread_mutex_lock(SB)
- RET
-
-TEXT runtime·pthread_mutex_unlock_trampoline(SB),NOSPLIT,$0
- MOVD 0(R0), R0 // arg 1 mutex
- BL libc_pthread_mutex_unlock(SB)
- RET
-
-TEXT runtime·pthread_cond_init_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 attr
- MOVD 0(R0), R0 // arg 1 cond
- BL libc_pthread_cond_init(SB)
- RET
-
-TEXT runtime·pthread_cond_wait_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 mutex
- MOVD 0(R0), R0 // arg 1 cond
- BL libc_pthread_cond_wait(SB)
- RET
-
-TEXT runtime·pthread_cond_timedwait_relative_np_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 mutex
- MOVD 16(R0), R2 // arg 3 timeout
- MOVD 0(R0), R0 // arg 1 cond
- BL libc_pthread_cond_timedwait_relative_np(SB)
- RET
-
-TEXT runtime·pthread_cond_signal_trampoline(SB),NOSPLIT,$0
- MOVD 0(R0), R0 // arg 1 cond
- BL libc_pthread_cond_signal(SB)
- RET
-
-TEXT runtime·pthread_self_trampoline(SB),NOSPLIT,$0
- MOVD R0, R19 // R19 is callee-save
- BL libc_pthread_self(SB)
- MOVD R0, 0(R19) // return value
- RET
-
-TEXT runtime·pthread_kill_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 sig
- MOVD 0(R0), R0 // arg 1 thread
- BL libc_pthread_kill(SB)
- RET
-
-TEXT runtime·pthread_key_create_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 destructor
- MOVD 0(R0), R0 // arg 1 *key
- BL libc_pthread_key_create(SB)
- RET
-
-TEXT runtime·pthread_setspecific_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // arg 2 value
- MOVD 0(R0), R0 // arg 1 key
- BL libc_pthread_setspecific(SB)
- RET
-
-TEXT runtime·osinit_hack_trampoline(SB),NOSPLIT,$0
- MOVD $0, R0 // arg 1 val
- BL libc_notify_is_valid_token(SB)
- BL libc_xpc_date_create_from_current(SB)
- RET
-
-TEXT runtime·arc4random_buf_trampoline(SB),NOSPLIT,$0
- MOVW 8(R0), R1 // arg 2 nbytes
- MOVD 0(R0), R0 // arg 1 buf
- BL libc_arc4random_buf(SB)
- RET
-
-// syscall calls a function in libc on behalf of the syscall package.
-// syscall takes a pointer to a struct like:
-// struct {
-// fn uintptr
-// a1 uintptr
-// a2 uintptr
-// a3 uintptr
-// r1 uintptr
-// r2 uintptr
-// err uintptr
-// }
-// syscall must be called on the g0 stack with the
-// C calling convention (use libcCall).
-TEXT runtime·syscall(SB),NOSPLIT,$0
- SUB $16, RSP // push structure pointer
- MOVD R0, 8(RSP)
-
- MOVD 0(R0), R12 // fn
- MOVD 16(R0), R1 // a2
- MOVD 24(R0), R2 // a3
- MOVD 8(R0), R0 // a1
-
- // If fn is declared as vararg, we have to pass the vararg arguments on the stack.
- // (Because ios decided not to adhere to the standard arm64 calling convention, sigh...)
- // The only libSystem calls we support that are vararg are open, fcntl, and ioctl,
- // which are all of the form fn(x, y, ...). So we just need to put the 3rd arg
- // on the stack as well.
- // If we ever have other vararg libSystem calls, we might need to handle more cases.
- MOVD R2, (RSP)
-
- BL (R12)
-
- MOVD 8(RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 32(R2) // save r1
- MOVD R1, 40(R2) // save r2
- CMPW $-1, R0
- BNE ok
- SUB $16, RSP // push structure pointer
- MOVD R2, 8(RSP)
- BL libc_error(SB)
- MOVW (R0), R0
- MOVD 8(RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 48(R2) // save err
-ok:
- RET
-
-// syscallX calls a function in libc on behalf of the syscall package.
-// syscallX takes a pointer to a struct like:
-// struct {
-// fn uintptr
-// a1 uintptr
-// a2 uintptr
-// a3 uintptr
-// r1 uintptr
-// r2 uintptr
-// err uintptr
-// }
-// syscallX must be called on the g0 stack with the
-// C calling convention (use libcCall).
-TEXT runtime·syscallX(SB),NOSPLIT,$0
- SUB $16, RSP // push structure pointer
- MOVD R0, (RSP)
-
- MOVD 0(R0), R12 // fn
- MOVD 16(R0), R1 // a2
- MOVD 24(R0), R2 // a3
- MOVD 8(R0), R0 // a1
- BL (R12)
-
- MOVD (RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 32(R2) // save r1
- MOVD R1, 40(R2) // save r2
- CMP $-1, R0
- BNE ok
- SUB $16, RSP // push structure pointer
- MOVD R2, (RSP)
- BL libc_error(SB)
- MOVW (R0), R0
- MOVD (RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 48(R2) // save err
-ok:
- RET
-
-// syscallPtr is like syscallX except that the libc function reports an
-// error by returning NULL and setting errno.
-TEXT runtime·syscallPtr(SB),NOSPLIT,$0
- SUB $16, RSP // push structure pointer
- MOVD R0, (RSP)
-
- MOVD 0(R0), R12 // fn
- MOVD 16(R0), R1 // a2
- MOVD 24(R0), R2 // a3
- MOVD 8(R0), R0 // a1
- BL (R12)
-
- MOVD (RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 32(R2) // save r1
- MOVD R1, 40(R2) // save r2
- CMP $0, R0
- BNE ok
- SUB $16, RSP // push structure pointer
- MOVD R2, (RSP)
- BL libc_error(SB)
- MOVW (R0), R0
- MOVD (RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 48(R2) // save err
-ok:
- RET
-
-// syscall6 calls a function in libc on behalf of the syscall package.
-// syscall6 takes a pointer to a struct like:
-// struct {
-// fn uintptr
-// a1 uintptr
-// a2 uintptr
-// a3 uintptr
-// a4 uintptr
-// a5 uintptr
-// a6 uintptr
-// r1 uintptr
-// r2 uintptr
-// err uintptr
-// }
-// syscall6 must be called on the g0 stack with the
-// C calling convention (use libcCall).
-TEXT runtime·syscall6(SB),NOSPLIT,$0
- SUB $16, RSP // push structure pointer
- MOVD R0, 8(RSP)
-
- MOVD 0(R0), R12 // fn
- MOVD 16(R0), R1 // a2
- MOVD 24(R0), R2 // a3
- MOVD 32(R0), R3 // a4
- MOVD 40(R0), R4 // a5
- MOVD 48(R0), R5 // a6
- MOVD 8(R0), R0 // a1
-
- // If fn is declared as vararg, we have to pass the vararg arguments on the stack.
- // See syscall above. The only function this applies to is openat, for which the 4th
- // arg must be on the stack.
- MOVD R3, (RSP)
-
- BL (R12)
-
- MOVD 8(RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 56(R2) // save r1
- MOVD R1, 64(R2) // save r2
- CMPW $-1, R0
- BNE ok
- SUB $16, RSP // push structure pointer
- MOVD R2, 8(RSP)
- BL libc_error(SB)
- MOVW (R0), R0
- MOVD 8(RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 72(R2) // save err
-ok:
- RET
-
-// syscall6X calls a function in libc on behalf of the syscall package.
-// syscall6X takes a pointer to a struct like:
-// struct {
-// fn uintptr
-// a1 uintptr
-// a2 uintptr
-// a3 uintptr
-// a4 uintptr
-// a5 uintptr
-// a6 uintptr
-// r1 uintptr
-// r2 uintptr
-// err uintptr
-// }
-// syscall6X must be called on the g0 stack with the
-// C calling convention (use libcCall).
-TEXT runtime·syscall6X(SB),NOSPLIT,$0
- SUB $16, RSP // push structure pointer
- MOVD R0, (RSP)
-
- MOVD 0(R0), R12 // fn
- MOVD 16(R0), R1 // a2
- MOVD 24(R0), R2 // a3
- MOVD 32(R0), R3 // a4
- MOVD 40(R0), R4 // a5
- MOVD 48(R0), R5 // a6
- MOVD 8(R0), R0 // a1
- BL (R12)
-
- MOVD (RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 56(R2) // save r1
- MOVD R1, 64(R2) // save r2
- CMP $-1, R0
- BNE ok
- SUB $16, RSP // push structure pointer
- MOVD R2, (RSP)
- BL libc_error(SB)
- MOVW (R0), R0
- MOVD (RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 72(R2) // save err
-ok:
- RET
-
-// syscall9 calls a function in libc on behalf of the syscall package.
-// syscall9 takes a pointer to a struct like:
-// struct {
-// fn uintptr
-// a1 uintptr
-// a2 uintptr
-// a3 uintptr
-// a4 uintptr
-// a5 uintptr
-// a6 uintptr
-// a7 uintptr
-// a8 uintptr
-// a9 uintptr
-// r1 uintptr
-// r2 uintptr
-// err uintptr
-// }
-// syscall9 must be called on the g0 stack with the
-// C calling convention (use libcCall).
-TEXT runtime·syscall9(SB),NOSPLIT,$0
- SUB $16, RSP // push structure pointer
- MOVD R0, 8(RSP)
-
- MOVD 0(R0), R12 // fn
- MOVD 16(R0), R1 // a2
- MOVD 24(R0), R2 // a3
- MOVD 32(R0), R3 // a4
- MOVD 40(R0), R4 // a5
- MOVD 48(R0), R5 // a6
- MOVD 56(R0), R6 // a7
- MOVD 64(R0), R7 // a8
- MOVD 72(R0), R8 // a9
- MOVD 8(R0), R0 // a1
-
- // If fn is declared as vararg, we have to pass the vararg arguments on the stack.
- // See syscall above. The only function this applies to is openat, for which the 4th
- // arg must be on the stack.
- MOVD R3, (RSP)
-
- BL (R12)
-
- MOVD 8(RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 80(R2) // save r1
- MOVD R1, 88(R2) // save r2
- CMPW $-1, R0
- BNE ok
- SUB $16, RSP // push structure pointer
- MOVD R2, 8(RSP)
- BL libc_error(SB)
- MOVW (R0), R0
- MOVD 8(RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 96(R2) // save err
-ok:
- RET
-
-// syscall_x509 is for crypto/x509. It is like syscall6 but does not check for errors,
-// takes 5 uintptrs and 1 float64, and only returns one value,
-// for use with standard C ABI functions.
-TEXT runtime·syscall_x509(SB),NOSPLIT,$0
- SUB $16, RSP // push structure pointer
- MOVD R0, (RSP)
-
- MOVD 0(R0), R12 // fn
- MOVD 16(R0), R1 // a2
- MOVD 24(R0), R2 // a3
- MOVD 32(R0), R3 // a4
- MOVD 40(R0), R4 // a5
- FMOVD 48(R0), F0 // f1
- MOVD 8(R0), R0 // a1
- BL (R12)
-
- MOVD (RSP), R2 // pop structure pointer
- ADD $16, RSP
- MOVD R0, 56(R2) // save r1
- RET
-
-TEXT runtime·issetugid_trampoline(SB),NOSPLIT,$0
- BL libc_issetugid(SB)
- RET
-
-// mach_vm_region_trampoline calls mach_vm_region from libc.
-TEXT runtime·mach_vm_region_trampoline(SB),NOSPLIT,$0
- MOVD 0(R0), R1 // address
- MOVD 8(R0), R2 // size
- MOVW 16(R0), R3 // flavor
- MOVD 24(R0), R4 // info
- MOVD 32(R0), R5 // count
- MOVD 40(R0), R6 // object_name
- MOVD $libc_mach_task_self_(SB), R0
- MOVW 0(R0), R0
- BL libc_mach_vm_region(SB)
- RET
-
-// proc_regionfilename_trampoline calls proc_regionfilename for
-// the current process.
-TEXT runtime·proc_regionfilename_trampoline(SB),NOSPLIT,$0
- MOVD 8(R0), R1 // address
- MOVD 16(R0), R2 // buffer
- MOVD 24(R0), R3 // buffer_size
- MOVD 0(R0), R0 // pid
- BL libc_proc_regionfilename(SB)
- RET