diff options
Diffstat (limited to 'src/pkg/syscall/asm_linux_386.s')
-rw-r--r-- | src/pkg/syscall/asm_linux_386.s | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/src/pkg/syscall/asm_linux_386.s b/src/pkg/syscall/asm_linux_386.s index 68b5baa65..82f170b5b 100644 --- a/src/pkg/syscall/asm_linux_386.s +++ b/src/pkg/syscall/asm_linux_386.s @@ -34,7 +34,6 @@ ok: RET // func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); -// Actually Syscall5 but the rest of the code expects it to be named Syscall6. TEXT ·Syscall6(SB),7,$0 CALL runtime·entersyscall(SB) MOVL 4(SP), AX // syscall entry @@ -43,7 +42,7 @@ TEXT ·Syscall6(SB),7,$0 MOVL 16(SP), DX MOVL 20(SP), SI MOVL 24(SP), DI - // 28(SP) is ignored + MOVL 28(SP), BP INT $0x80 CMPL AX, $0xfffff001 JLS ok6 @@ -82,6 +81,29 @@ ok1: MOVL $0, 28(SP) // errno RET +// func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); +TEXT ·RawSyscall6(SB),7,$0 + MOVL 4(SP), AX // syscall entry + MOVL 8(SP), BX + MOVL 12(SP), CX + MOVL 16(SP), DX + MOVL 20(SP), SI + MOVL 24(SP), DI + MOVL 28(SP), BP + INT $0x80 + CMPL AX, $0xfffff001 + JLS ok2 + MOVL $-1, 32(SP) // r1 + MOVL $0, 36(SP) // r2 + NEGL AX + MOVL AX, 40(SP) // errno + RET +ok2: + MOVL AX, 32(SP) // r1 + MOVL DX, 36(SP) // r2 + MOVL $0, 40(SP) // errno + RET + #define SYS_SOCKETCALL 102 /* from zsysnum_linux_386.go */ // func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int) @@ -108,6 +130,27 @@ oksock: CALL runtime·exitsyscall(SB) RET +// func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int) +// Kernel interface gets call sub-number and pointer to a0. +TEXT ·rawsocketcall(SB),7,$0 + MOVL $SYS_SOCKETCALL, AX // syscall entry + MOVL 4(SP), BX // socket call number + LEAL 8(SP), CX // pointer to call arguments + MOVL $0, DX + MOVL $0, SI + MOVL $0, DI + INT $0x80 + CMPL AX, $0xfffff001 + JLS oksock1 + MOVL $-1, 32(SP) // n + NEGL AX + MOVL AX, 36(SP) // errno + RET +oksock1: + MOVL AX, 32(SP) // n + MOVL $0, 36(SP) // errno + RET + #define SYS__LLSEEK 140 /* from zsysnum_linux_386.go */ // func Seek(fd int, offset int64, whence int) (newoffset int64, errno int) // Implemented in assembly to avoid allocation when |