github.com/x04/go/src@v0.0.0-20200202162449-3d481ceb3525/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 a1+4(FP), SI 23 LEAL trap+0(FP), 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 a1+4(FP), SI 47 LEAL trap+0(FP), 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 a1+4(FP), SI 74 LEAL num+0(FP), 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 a1+4(FP), SI 103 LEAL trap+0(FP), 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 a1+4(FP), SI 124 LEAL trap+0(FP), 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