github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/pkg/syscall/asm_openbsd_amd64.s (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) 6 // so that go vet can check that they are correct. 7 8 #include "../../cmd/ld/textflag.h" 9 10 // 11 // System call support for AMD64, OpenBSD 12 // 13 14 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); 15 // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64); 16 // func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); 17 // Trap # in AX, args in DI SI DX, return in AX DX 18 19 TEXT ·Syscall(SB),NOSPLIT,$0-56 20 CALL runtime·entersyscall(SB) 21 MOVQ 8(SP), AX // syscall entry 22 MOVQ 16(SP), DI 23 MOVQ 24(SP), SI 24 MOVQ 32(SP), DX 25 MOVQ $0, R10 26 MOVQ $0, R8 27 MOVQ $0, R9 28 SYSCALL 29 JCC ok 30 MOVQ $-1, 40(SP) // r1 31 MOVQ $0, 48(SP) // r2 32 MOVQ AX, 56(SP) // errno 33 CALL runtime·exitsyscall(SB) 34 RET 35 ok: 36 MOVQ AX, 40(SP) // r1 37 MOVQ DX, 48(SP) // r2 38 MOVQ $0, 56(SP) // errno 39 CALL runtime·exitsyscall(SB) 40 RET 41 42 TEXT ·Syscall6(SB),NOSPLIT,$0-80 43 CALL runtime·entersyscall(SB) 44 MOVQ 8(SP), AX // syscall entry 45 MOVQ 16(SP), DI 46 MOVQ 24(SP), SI 47 MOVQ 32(SP), DX 48 MOVQ 40(SP), R10 49 MOVQ 48(SP), R8 50 MOVQ 56(SP), R9 51 SYSCALL 52 JCC ok6 53 MOVQ $-1, 64(SP) // r1 54 MOVQ $0, 72(SP) // r2 55 MOVQ AX, 80(SP) // errno 56 CALL runtime·exitsyscall(SB) 57 RET 58 ok6: 59 MOVQ AX, 64(SP) // r1 60 MOVQ DX, 72(SP) // r2 61 MOVQ $0, 80(SP) // errno 62 CALL runtime·exitsyscall(SB) 63 RET 64 65 TEXT ·Syscall9(SB),NOSPLIT,$0-104 66 CALL runtime·entersyscall(SB) 67 MOVQ 8(SP), AX // syscall entry 68 MOVQ 16(SP), DI 69 MOVQ 24(SP), SI 70 MOVQ 32(SP), DX 71 MOVQ 40(SP), R10 72 MOVQ 48(SP), R8 73 MOVQ 56(SP), R9 74 MOVQ 64(SP), R11 75 MOVQ 72(SP), R12 76 MOVQ 80(SP), R13 77 SUBQ $32, SP 78 MOVQ R11, 8(SP) // arg 7 79 MOVQ R12, 16(SP) // arg 8 80 MOVQ R13, 24(SP) // arg 9 81 SYSCALL 82 JCC ok9 83 ADDQ $32, SP 84 MOVQ $-1, 88(SP) // r1 85 MOVQ $0, 96(SP) // r2 86 MOVQ AX, 104(SP) // errno 87 CALL runtime·exitsyscall(SB) 88 RET 89 ok9: 90 ADDQ $32, SP 91 MOVQ AX, 88(SP) // r1 92 MOVQ DX, 96(SP) // r2 93 MOVQ $0, 104(SP) // errno 94 CALL runtime·exitsyscall(SB) 95 RET 96 97 TEXT ·RawSyscall(SB),NOSPLIT,$0-56 98 MOVQ 16(SP), DI 99 MOVQ 24(SP), SI 100 MOVQ 32(SP), DX 101 MOVQ $0, R10 102 MOVQ $0, R8 103 MOVQ $0, R9 104 MOVQ 8(SP), AX // syscall entry 105 SYSCALL 106 JCC ok1 107 MOVQ $-1, 40(SP) // r1 108 MOVQ $0, 48(SP) // r2 109 MOVQ AX, 56(SP) // errno 110 RET 111 ok1: 112 MOVQ AX, 40(SP) // r1 113 MOVQ DX, 48(SP) // r2 114 MOVQ $0, 56(SP) // errno 115 RET 116 117 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 118 MOVQ 16(SP), DI 119 MOVQ 24(SP), SI 120 MOVQ 32(SP), DX 121 MOVQ 40(SP), R10 122 MOVQ 48(SP), R8 123 MOVQ 56(SP), R9 124 MOVQ 8(SP), AX // syscall entry 125 SYSCALL 126 JCC ok2 127 MOVQ $-1, 64(SP) // r1 128 MOVQ $0, 72(SP) // r2 129 MOVQ AX, 80(SP) // errno 130 RET 131 ok2: 132 MOVQ AX, 64(SP) // r1 133 MOVQ DX, 72(SP) // r2 134 MOVQ $0, 80(SP) // errno 135 RET