summaryrefslogtreecommitdiff
path: root/src/pkg/syscall/asm_linux_386.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/syscall/asm_linux_386.s')
-rw-r--r--src/pkg/syscall/asm_linux_386.s47
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