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