| // Copyright 2022 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| #include "textflag.h" | |
| // See ../sys_linux_386.s for the reason why we always use int 0x80 | |
| // instead of the glibc-specific "CALL 0x10(GS)". | |
| #define INVOKE_SYSCALL INT $0x80 | |
| // func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr) | |
| // | |
| // Syscall # in AX, args in BX CX DX SI DI BP, return in AX | |
| TEXT ·Syscall6(SB),NOSPLIT,$0-40 | |
| MOVL num+0(FP), AX // syscall entry | |
| MOVL a1+4(FP), BX | |
| MOVL a2+8(FP), CX | |
| MOVL a3+12(FP), DX | |
| MOVL a4+16(FP), SI | |
| MOVL a5+20(FP), DI | |
| MOVL a6+24(FP), BP | |
| INVOKE_SYSCALL | |
| CMPL AX, $0xfffff001 | |
| JLS ok | |
| MOVL $-1, r1+28(FP) | |
| MOVL $0, r2+32(FP) | |
| NEGL AX | |
| MOVL AX, errno+36(FP) | |
| RET | |
| ok: | |
| MOVL AX, r1+28(FP) | |
| MOVL DX, r2+32(FP) | |
| MOVL $0, errno+36(FP) | |
| RET | |