github.com/hbdrawn/golang@v0.0.0-20141214014649-6b835209aba2/src/syscall/asm_linux_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 "textflag.h" 9 #include "funcdata.h" 10 11 // 12 // System calls for AMD64, Linux 13 // 14 15 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); 16 // Trap # in AX, args in DI SI DX R10 R8 R9, return in AX DX 17 // Note that this differs from "standard" ABI convention, which 18 // would pass 4th arg in CX, not R10. 19 20 TEXT ·Syscall(SB),NOSPLIT,$0-56 21 CALL runtime·entersyscall(SB) 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 MOVQ 8(SP), AX // syscall entry 29 SYSCALL 30 CMPQ AX, $0xfffffffffffff001 31 JLS ok 32 MOVQ $-1, 40(SP) // r1 33 MOVQ $0, 48(SP) // r2 34 NEGQ AX 35 MOVQ AX, 56(SP) // errno 36 CALL runtime·exitsyscall(SB) 37 RET 38 ok: 39 MOVQ AX, 40(SP) // r1 40 MOVQ DX, 48(SP) // r2 41 MOVQ $0, 56(SP) // errno 42 CALL runtime·exitsyscall(SB) 43 RET 44 45 TEXT ·Syscall6(SB),NOSPLIT,$0-80 46 CALL runtime·entersyscall(SB) 47 MOVQ 16(SP), DI 48 MOVQ 24(SP), SI 49 MOVQ 32(SP), DX 50 MOVQ 40(SP), R10 51 MOVQ 48(SP), R8 52 MOVQ 56(SP), R9 53 MOVQ 8(SP), AX // syscall entry 54 SYSCALL 55 CMPQ AX, $0xfffffffffffff001 56 JLS ok6 57 MOVQ $-1, 64(SP) // r1 58 MOVQ $0, 72(SP) // r2 59 NEGQ AX 60 MOVQ AX, 80(SP) // errno 61 CALL runtime·exitsyscall(SB) 62 RET 63 ok6: 64 MOVQ AX, 64(SP) // r1 65 MOVQ DX, 72(SP) // r2 66 MOVQ $0, 80(SP) // errno 67 CALL runtime·exitsyscall(SB) 68 RET 69 70 TEXT ·RawSyscall(SB),NOSPLIT,$0-56 71 MOVQ 16(SP), DI 72 MOVQ 24(SP), SI 73 MOVQ 32(SP), DX 74 MOVQ $0, R10 75 MOVQ $0, R8 76 MOVQ $0, R9 77 MOVQ 8(SP), AX // syscall entry 78 SYSCALL 79 CMPQ AX, $0xfffffffffffff001 80 JLS ok1 81 MOVQ $-1, 40(SP) // r1 82 MOVQ $0, 48(SP) // r2 83 NEGQ AX 84 MOVQ AX, 56(SP) // errno 85 RET 86 ok1: 87 MOVQ AX, 40(SP) // r1 88 MOVQ DX, 48(SP) // r2 89 MOVQ $0, 56(SP) // errno 90 RET 91 92 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 93 MOVQ 16(SP), DI 94 MOVQ 24(SP), SI 95 MOVQ 32(SP), DX 96 MOVQ 40(SP), R10 97 MOVQ 48(SP), R8 98 MOVQ 56(SP), R9 99 MOVQ 8(SP), AX // syscall entry 100 SYSCALL 101 CMPQ AX, $0xfffffffffffff001 102 JLS ok2 103 MOVQ $-1, 64(SP) // r1 104 MOVQ $0, 72(SP) // r2 105 NEGQ AX 106 MOVQ AX, 80(SP) // errno 107 RET 108 ok2: 109 MOVQ AX, 64(SP) // r1 110 MOVQ DX, 72(SP) // r2 111 MOVQ $0, 80(SP) // errno 112 RET 113 114 TEXT ·gettimeofday(SB),NOSPLIT,$0-16 115 MOVQ 8(SP), DI 116 MOVQ $0, SI 117 MOVQ runtime·__vdso_gettimeofday_sym(SB), AX 118 CALL AX 119 120 CMPQ AX, $0xfffffffffffff001 121 JLS ok7 122 NEGQ AX 123 MOVQ AX, 16(SP) // errno 124 RET 125 ok7: 126 MOVQ $0, 16(SP) // errno 127 RET