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