github.com/c9s/go@v0.0.0-20180120015821-984e81f64e0c/src/syscall/asm_unix_386.s (about) 1 // +build netbsd freebsd openbsd 2 3 // Copyright 2009 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 #include "textflag.h" 8 #include "funcdata.h" 9 10 // 11 // System call support for some 386 unixes 12 // 13 14 // func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32); 15 // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32); 16 // Trap # in AX, args on stack above caller pc. 17 18 TEXT ·Syscall(SB),NOSPLIT,$0-28 19 CALL runtime·entersyscall(SB) 20 MOVL trap+0(FP), AX // syscall entry 21 // slide args down on top of system call number 22 LEAL 8(SP), SI 23 LEAL 4(SP), DI 24 CLD 25 MOVSL 26 MOVSL 27 MOVSL 28 INT $0x80 29 JAE ok 30 MOVL $-1, r1+16(FP) // r1 31 MOVL $-1, r2+20(FP) // r2 32 MOVL AX, err+24(FP) // errno 33 CALL runtime·exitsyscall(SB) 34 RET 35 ok: 36 MOVL AX, r1+16(FP) // r1 37 MOVL DX, r2+20(FP) // r2 38 MOVL $0, err+24(FP) // errno 39 CALL runtime·exitsyscall(SB) 40 RET 41 42 TEXT ·Syscall6(SB),NOSPLIT,$0-40 43 CALL runtime·entersyscall(SB) 44 MOVL trap+0(FP), AX // syscall entry 45 // slide args down on top of system call number 46 LEAL 8(SP), SI 47 LEAL 4(SP), DI 48 CLD 49 MOVSL 50 MOVSL 51 MOVSL 52 MOVSL 53 MOVSL 54 MOVSL 55 INT $0x80 56 JAE ok6 57 MOVL $-1, r1+28(FP) // r1 58 MOVL $-1, r2+32(FP) // r2 59 MOVL AX, err+36(FP) // errno 60 CALL runtime·exitsyscall(SB) 61 RET 62 ok6: 63 MOVL AX, r1+28(FP) // r1 64 MOVL DX, r2+32(FP) // r2 65 MOVL $0, err+36(FP) // errno 66 CALL runtime·exitsyscall(SB) 67 RET 68 69 TEXT ·Syscall9(SB),NOSPLIT,$0-52 70 CALL runtime·entersyscall(SB) 71 MOVL num+0(FP), AX // syscall entry 72 // slide args down on top of system call number 73 LEAL 8(SP), SI 74 LEAL 4(SP), DI 75 CLD 76 MOVSL 77 MOVSL 78 MOVSL 79 MOVSL 80 MOVSL 81 MOVSL 82 MOVSL 83 MOVSL 84 MOVSL 85 INT $0x80 86 JAE ok9 87 MOVL $-1, r1+40(FP) // r1 88 MOVL $-1, r2+44(FP) // r2 89 MOVL AX, err+48(FP) // errno 90 CALL runtime·exitsyscall(SB) 91 RET 92 ok9: 93 MOVL AX, r1+40(FP) // r1 94 MOVL DX, r2+44(FP) // r2 95 MOVL $0, err+48(FP) // errno 96 CALL runtime·exitsyscall(SB) 97 RET 98 99 TEXT ·RawSyscall(SB),NOSPLIT,$0-28 100 MOVL trap+0(FP), AX // syscall entry 101 // slide args down on top of system call number 102 LEAL 8(SP), SI 103 LEAL 4(SP), DI 104 CLD 105 MOVSL 106 MOVSL 107 MOVSL 108 INT $0x80 109 JAE ok1 110 MOVL $-1, r1+16(FP) // r1 111 MOVL $-1, r2+20(FP) // r2 112 MOVL AX, err+24(FP) // errno 113 RET 114 ok1: 115 MOVL AX, r1+16(FP) // r1 116 MOVL DX, r2+20(FP) // r2 117 MOVL $0, err+24(FP) // errno 118 RET 119 120 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 121 MOVL trap+0(FP), AX // syscall entry 122 // slide args down on top of system call number 123 LEAL 8(SP), SI 124 LEAL 4(SP), DI 125 CLD 126 MOVSL 127 MOVSL 128 MOVSL 129 MOVSL 130 MOVSL 131 MOVSL 132 INT $0x80 133 JAE ok2 134 MOVL $-1, r1+28(FP) // r1 135 MOVL $-1, r2+32(FP) // r2 136 MOVL AX, err+36(FP) // errno 137 RET 138 ok2: 139 MOVL AX, r1+28(FP) // r1 140 MOVL DX, r2+32(FP) // r2 141 MOVL $0, err+36(FP) // errno 142 RET