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