Commit 36951a9f authored by Tobias Klauser's avatar Tobias Klauser Committed by Tobias Klauser

syscall: support syscalls without error return on Linux

Add the rawSyscallNoError wrapper function which is used for Linux
syscalls that don't return an error and convert all applicable
occurences of RawSyscall to use it instead.

Fixes #22924

Change-Id: Iff1eddb54573d459faa01471f10398b3d38528dd
Reviewed-on: https://go-review.googlesource.com/84485
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent acd17e9b
...@@ -9,21 +9,20 @@ ...@@ -9,21 +9,20 @@
// System calls for 386, Linux // System calls for 386, Linux
// //
// func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
// Trap # in AX, args in BX CX DX SI DI, return in AX
// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80 // See ../runtime/sys_linux_386.s for the reason why we always use int 0x80
// instead of the glibc-specific "CALL 0x10(GS)". // instead of the glibc-specific "CALL 0x10(GS)".
#define INVOKE_SYSCALL INT $0x80 #define INVOKE_SYSCALL INT $0x80
TEXT ·Syscall(SB),NOSPLIT,$0-28 // func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
// Trap # in AX, args in BX CX DX SI DI, return in AX
TEXT ·Syscall(SB),NOSPLIT,$0-28
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL trap+0(FP), AX // syscall entry MOVL trap+0(FP), AX // syscall entry
MOVL a1+4(FP), BX MOVL a1+4(FP), BX
MOVL a2+8(FP), CX MOVL a2+8(FP), CX
MOVL a3+12(FP), DX MOVL a3+12(FP), DX
MOVL $0, SI MOVL $0, SI
MOVL $0, DI MOVL $0, DI
INVOKE_SYSCALL INVOKE_SYSCALL
CMPL AX, $0xfffff001 CMPL AX, $0xfffff001
JLS ok JLS ok
...@@ -41,7 +40,7 @@ ok: ...@@ -41,7 +40,7 @@ ok:
RET RET
// func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); // func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
TEXT ·Syscall6(SB),NOSPLIT,$0-40 TEXT ·Syscall6(SB),NOSPLIT,$0-40
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL trap+0(FP), AX // syscall entry MOVL trap+0(FP), AX // syscall entry
MOVL a1+4(FP), BX MOVL a1+4(FP), BX
...@@ -73,7 +72,7 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-28 ...@@ -73,7 +72,7 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVL a2+8(FP), CX MOVL a2+8(FP), CX
MOVL a3+12(FP), DX MOVL a3+12(FP), DX
MOVL $0, SI MOVL $0, SI
MOVL $0, DI MOVL $0, DI
INVOKE_SYSCALL INVOKE_SYSCALL
CMPL AX, $0xfffff001 CMPL AX, $0xfffff001
JLS ok1 JLS ok1
...@@ -89,7 +88,7 @@ ok1: ...@@ -89,7 +88,7 @@ ok1:
RET RET
// func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); // func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVL trap+0(FP), AX // syscall entry MOVL trap+0(FP), AX // syscall entry
MOVL a1+4(FP), BX MOVL a1+4(FP), BX
MOVL a2+8(FP), CX MOVL a2+8(FP), CX
...@@ -111,6 +110,19 @@ ok2: ...@@ -111,6 +110,19 @@ ok2:
MOVL $0, err+36(FP) MOVL $0, err+36(FP)
RET RET
// func rawSyscallNoError(trap uintptr, a1, a2, a3 uintptr) (r1, r2 uintptr);
TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-24
MOVL trap+0(FP), AX // syscall entry
MOVL a1+4(FP), BX
MOVL a2+8(FP), CX
MOVL a3+12(FP), DX
MOVL $0, SI
MOVL $0, DI
INVOKE_SYSCALL
MOVL AX, r1+16(FP)
MOVL DX, r2+20(FP)
RET
#define SYS_SOCKETCALL 102 /* from zsysnum_linux_386.go */ #define SYS_SOCKETCALL 102 /* from zsysnum_linux_386.go */
// func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int) // func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int)
...@@ -119,10 +131,10 @@ TEXT ·socketcall(SB),NOSPLIT,$0-36 ...@@ -119,10 +131,10 @@ TEXT ·socketcall(SB),NOSPLIT,$0-36
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVL $SYS_SOCKETCALL, AX // syscall entry MOVL $SYS_SOCKETCALL, AX // syscall entry
MOVL call+0(FP), BX // socket call number MOVL call+0(FP), BX // socket call number
LEAL a0+4(FP), CX // pointer to call arguments LEAL a0+4(FP), CX // pointer to call arguments
MOVL $0, DX MOVL $0, DX
MOVL $0, SI MOVL $0, SI
MOVL $0, DI MOVL $0, DI
INVOKE_SYSCALL INVOKE_SYSCALL
CMPL AX, $0xfffff001 CMPL AX, $0xfffff001
JLS oksock JLS oksock
...@@ -145,7 +157,7 @@ TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 ...@@ -145,7 +157,7 @@ TEXT ·rawsocketcall(SB),NOSPLIT,$0-36
LEAL a0+4(FP), CX // pointer to call arguments LEAL a0+4(FP), CX // pointer to call arguments
MOVL $0, DX MOVL $0, DX
MOVL $0, SI MOVL $0, SI
MOVL $0, DI MOVL $0, DI
INVOKE_SYSCALL INVOKE_SYSCALL
CMPL AX, $0xfffff001 CMPL AX, $0xfffff001
JLS oksock1 JLS oksock1
...@@ -171,7 +183,7 @@ TEXT ·seek(SB),NOSPLIT,$0-28 ...@@ -171,7 +183,7 @@ TEXT ·seek(SB),NOSPLIT,$0-28
MOVL offset_hi+8(FP), CX MOVL offset_hi+8(FP), CX
MOVL offset_lo+4(FP), DX MOVL offset_lo+4(FP), DX
LEAL newoffset_lo+16(FP), SI // result pointer LEAL newoffset_lo+16(FP), SI // result pointer
MOVL whence+12(FP), DI MOVL whence+12(FP), DI
INVOKE_SYSCALL INVOKE_SYSCALL
CMPL AX, $0xfffff001 CMPL AX, $0xfffff001
JLS okseek JLS okseek
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
// System calls for AMD64, Linux // System calls for AMD64, Linux
// //
// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); // func Syscall(trap int64, a1, a2, a3 uintptr) (r1, r2, err uintptr);
// Trap # in AX, args in DI SI DX R10 R8 R9, return in AX DX // Trap # in AX, args in DI SI DX R10 R8 R9, return in AX DX
// Note that this differs from "standard" ABI convention, which // Note that this differs from "standard" ABI convention, which
// would pass 4th arg in CX, not R10. // would pass 4th arg in CX, not R10.
TEXT ·Syscall(SB),NOSPLIT,$0-56 TEXT ·Syscall(SB),NOSPLIT,$0-56
CALL runtime·entersyscall(SB) CALL runtime·entersyscall(SB)
MOVQ a1+8(FP), DI MOVQ a1+8(FP), DI
MOVQ a2+16(FP), SI MOVQ a2+16(FP), SI
...@@ -134,6 +134,20 @@ ok2: ...@@ -134,6 +134,20 @@ ok2:
MOVQ $0, err+24(FP) MOVQ $0, err+24(FP)
RET RET
// func rawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
MOVQ a1+8(FP), DI
MOVQ a2+16(FP), SI
MOVQ a3+24(FP), DX
MOVQ $0, R10
MOVQ $0, R8
MOVQ $0, R9
MOVQ trap+0(FP), AX // syscall entry
SYSCALL
MOVQ AX, r1+32(FP)
MOVQ DX, r2+40(FP)
RET
// func gettimeofday(tv *Timeval) (err uintptr) // func gettimeofday(tv *Timeval) (err uintptr)
TEXT ·gettimeofday(SB),NOSPLIT,$0-16 TEXT ·gettimeofday(SB),NOSPLIT,$0-16
MOVQ tv+0(FP), DI MOVQ tv+0(FP), DI
......
...@@ -12,9 +12,8 @@ ...@@ -12,9 +12,8 @@
// TODO(kaib): handle error returns // TODO(kaib): handle error returns
// func Syscall(syscall uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr); // func Syscall(syscall uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
TEXT ·Syscall(SB),NOSPLIT,$0-28
TEXT ·Syscall(SB),NOSPLIT,$0-28 BL runtime·entersyscall(SB)
BL runtime·entersyscall(SB)
MOVW trap+0(FP), R7 MOVW trap+0(FP), R7
MOVW a1+4(FP), R0 MOVW a1+4(FP), R0
MOVW a2+8(FP), R1 MOVW a2+8(FP), R1
...@@ -22,30 +21,30 @@ TEXT ·Syscall(SB),NOSPLIT,$0-28 ...@@ -22,30 +21,30 @@ TEXT ·Syscall(SB),NOSPLIT,$0-28
MOVW $0, R3 MOVW $0, R3
MOVW $0, R4 MOVW $0, R4
MOVW $0, R5 MOVW $0, R5
SWI $0 SWI $0
MOVW $0xfffff001, R1 MOVW $0xfffff001, R1
CMP R1, R0 CMP R1, R0
BLS ok BLS ok
MOVW $-1, R1 MOVW $-1, R1
MOVW R1, r1+16(FP) MOVW R1, r1+16(FP)
MOVW $0, R2 MOVW $0, R2
MOVW R2, r2+20(FP) MOVW R2, r2+20(FP)
RSB $0, R0, R0 RSB $0, R0, R0
MOVW R0, err+24(FP) MOVW R0, err+24(FP)
BL runtime·exitsyscall(SB) BL runtime·exitsyscall(SB)
RET RET
ok: ok:
MOVW R0, r1+16(FP) MOVW R0, r1+16(FP)
MOVW $0, R0 MOVW $0, R0
MOVW R0, r2+20(FP) MOVW R0, r2+20(FP)
MOVW R0, err+24(FP) MOVW R0, err+24(FP)
BL runtime·exitsyscall(SB) BL runtime·exitsyscall(SB)
RET RET
// func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); // 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. // Actually Syscall5 but the rest of the code expects it to be named Syscall6.
TEXT ·Syscall6(SB),NOSPLIT,$0-40 TEXT ·Syscall6(SB),NOSPLIT,$0-40
BL runtime·entersyscall(SB) BL runtime·entersyscall(SB)
MOVW trap+0(FP), R7 // syscall entry MOVW trap+0(FP), R7 // syscall entry
MOVW a1+4(FP), R0 MOVW a1+4(FP), R0
MOVW a2+8(FP), R1 MOVW a2+8(FP), R1
...@@ -53,24 +52,24 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-40 ...@@ -53,24 +52,24 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-40
MOVW a4+16(FP), R3 MOVW a4+16(FP), R3
MOVW a5+20(FP), R4 MOVW a5+20(FP), R4
MOVW a6+24(FP), R5 MOVW a6+24(FP), R5
SWI $0 SWI $0
MOVW $0xfffff001, R6 MOVW $0xfffff001, R6
CMP R6, R0 CMP R6, R0
BLS ok6 BLS ok6
MOVW $-1, R1 MOVW $-1, R1
MOVW R1, r1+28(FP) MOVW R1, r1+28(FP)
MOVW $0, R2 MOVW $0, R2
MOVW R2, r2+32(FP) MOVW R2, r2+32(FP)
RSB $0, R0, R0 RSB $0, R0, R0
MOVW R0, err+36(FP) MOVW R0, err+36(FP)
BL runtime·exitsyscall(SB) BL runtime·exitsyscall(SB)
RET RET
ok6: ok6:
MOVW R0, r1+28(FP) MOVW R0, r1+28(FP)
MOVW R1, r2+32(FP) MOVW R1, r2+32(FP)
MOVW $0, R0 MOVW $0, R0
MOVW R0, err+36(FP) MOVW R0, err+36(FP)
BL runtime·exitsyscall(SB) BL runtime·exitsyscall(SB)
RET RET
// func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); // func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
...@@ -83,15 +82,15 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 ...@@ -83,15 +82,15 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
MOVW a4+16(FP), R3 MOVW a4+16(FP), R3
MOVW a5+20(FP), R4 MOVW a5+20(FP), R4
MOVW a6+24(FP), R5 MOVW a6+24(FP), R5
SWI $0 SWI $0
MOVW $0xfffff001, R6 MOVW $0xfffff001, R6
CMP R6, R0 CMP R6, R0
BLS ok2 BLS ok2
MOVW $-1, R1 MOVW $-1, R1
MOVW R1, r1+28(FP) MOVW R1, r1+28(FP)
MOVW $0, R2 MOVW $0, R2
MOVW R2, r2+32(FP) MOVW R2, r2+32(FP)
RSB $0, R0, R0 RSB $0, R0, R0
MOVW R0, err+36(FP) MOVW R0, err+36(FP)
RET RET
ok2: ok2:
...@@ -131,7 +130,7 @@ okseek: ...@@ -131,7 +130,7 @@ okseek:
MOVW $0, R0 MOVW $0, R0
MOVW R0, err+24(FP) MOVW R0, err+24(FP)
BL runtime·exitsyscall(SB) BL runtime·exitsyscall(SB)
RET RET
// func RawSyscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr); // func RawSyscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
TEXT ·RawSyscall(SB),NOSPLIT,$0-28 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
...@@ -139,15 +138,15 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-28 ...@@ -139,15 +138,15 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-28
MOVW a1+4(FP), R0 MOVW a1+4(FP), R0
MOVW a2+8(FP), R1 MOVW a2+8(FP), R1
MOVW a3+12(FP), R2 MOVW a3+12(FP), R2
SWI $0 SWI $0
MOVW $0xfffff001, R1 MOVW $0xfffff001, R1
CMP R1, R0 CMP R1, R0
BLS ok1 BLS ok1
MOVW $-1, R1 MOVW $-1, R1
MOVW R1, r1+16(FP) MOVW R1, r1+16(FP)
MOVW $0, R2 MOVW $0, R2
MOVW R2, r2+20(FP) MOVW R2, r2+20(FP)
RSB $0, R0, R0 RSB $0, R0, R0
MOVW R0, err+24(FP) MOVW R0, err+24(FP)
RET RET
ok1: ok1:
...@@ -157,3 +156,14 @@ ok1: ...@@ -157,3 +156,14 @@ ok1:
MOVW R0, err+24(FP) MOVW R0, err+24(FP)
RET RET
// func rawSyscallNoError(trap uintptr, a1, a2, a3 uintptr) (r1, r2 uintptr);
TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-24
MOVW trap+0(FP), R7 // syscall entry
MOVW a1+4(FP), R0
MOVW a2+8(FP), R1
MOVW a3+12(FP), R2
SWI $0
MOVW R0, r1+16(FP)
MOVW $0, R0
MOVW R0, r2+20(FP)
RET
...@@ -5,8 +5,7 @@ ...@@ -5,8 +5,7 @@
#include "textflag.h" #include "textflag.h"
// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
TEXT ·Syscall(SB),NOSPLIT,$0-56
TEXT ·Syscall(SB),NOSPLIT,$0-56
BL runtime·entersyscall(SB) BL runtime·entersyscall(SB)
MOVD a1+8(FP), R0 MOVD a1+8(FP), R0
MOVD a2+16(FP), R1 MOVD a2+16(FP), R1
...@@ -103,3 +102,17 @@ ok: ...@@ -103,3 +102,17 @@ ok:
MOVD R1, r2+64(FP) // r2 MOVD R1, r2+64(FP) // r2
MOVD ZR, err+72(FP) // errno MOVD ZR, err+72(FP) // errno
RET RET
// func rawSyscallNoError(trap uintptr, a1, a2, a3 uintptr) (r1, r2 uintptr);
TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
MOVD a1+8(FP), R0
MOVD a2+16(FP), R1
MOVD a3+24(FP), R2
MOVD $0, R3
MOVD $0, R4
MOVD $0, R5
MOVD trap+0(FP), R8 // syscall entry
SVC
MOVD R0, r1+32(FP)
MOVD R1, r2+40(FP)
RET
...@@ -12,8 +12,7 @@ ...@@ -12,8 +12,7 @@
// //
// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
TEXT ·Syscall(SB),NOSPLIT,$0-56
TEXT ·Syscall(SB),NOSPLIT,$0-56
JAL runtime·entersyscall(SB) JAL runtime·entersyscall(SB)
MOVV a1+8(FP), R4 MOVV a1+8(FP), R4
MOVV a2+16(FP), R5 MOVV a2+16(FP), R5
...@@ -102,3 +101,16 @@ ok2: ...@@ -102,3 +101,16 @@ ok2:
MOVV R3, r2+64(FP) // r2 MOVV R3, r2+64(FP) // r2
MOVV R0, err+72(FP) // errno MOVV R0, err+72(FP) // errno
RET RET
TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
MOVV a1+8(FP), R4
MOVV a2+16(FP), R5
MOVV a3+24(FP), R6
MOVV R0, R7
MOVV R0, R8
MOVV R0, R9
MOVV trap+0(FP), R2 // syscall entry
SYSCALL
MOVV R2, r1+32(FP)
MOVV R3, r2+40(FP)
RET
...@@ -13,8 +13,7 @@ ...@@ -13,8 +13,7 @@
// //
// func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr); // func Syscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
TEXT ·Syscall(SB),NOSPLIT,$0-28
TEXT ·Syscall(SB),NOSPLIT,$0-28
JAL runtime·entersyscall(SB) JAL runtime·entersyscall(SB)
MOVW a1+4(FP), R4 MOVW a1+4(FP), R4
MOVW a2+8(FP), R5 MOVW a2+8(FP), R5
...@@ -36,7 +35,6 @@ ok: ...@@ -36,7 +35,6 @@ ok:
JAL runtime·exitsyscall(SB) JAL runtime·exitsyscall(SB)
RET RET
// func Syscall6(trap trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); // func Syscall6(trap trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
// 5th and 6th arg go at sp+16, sp+20. // 5th and 6th arg go at sp+16, sp+20.
// Note that frame size of 20 means that 24 bytes gets reserved on stack. // Note that frame size of 20 means that 24 bytes gets reserved on stack.
...@@ -140,3 +138,13 @@ ok2: ...@@ -140,3 +138,13 @@ ok2:
MOVW R3, r2+32(FP) // r2 MOVW R3, r2+32(FP) // r2
MOVW R0, err+36(FP) // errno MOVW R0, err+36(FP) // errno
RET RET
TEXT ·rawSyscallNoError(SB),NOSPLIT,$20-24
MOVW a1+4(FP), R4
MOVW a2+8(FP), R5
MOVW a3+12(FP), R6
MOVW trap+0(FP), R2 // syscall entry
SYSCALL
MOVW R2, r1+16(FP) // r1
MOVW R3, r2+20(FP) // r2
RET
...@@ -12,8 +12,7 @@ ...@@ -12,8 +12,7 @@
// //
// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
TEXT ·Syscall(SB),NOSPLIT,$0-56
TEXT ·Syscall(SB),NOSPLIT,$0-56
BL runtime·entersyscall(SB) BL runtime·entersyscall(SB)
MOVD a1+8(FP), R3 MOVD a1+8(FP), R3
MOVD a2+16(FP), R4 MOVD a2+16(FP), R4
...@@ -102,3 +101,16 @@ ok2: ...@@ -102,3 +101,16 @@ ok2:
MOVD R4, r2+64(FP) // r2 MOVD R4, r2+64(FP) // r2
MOVD R0, err+72(FP) // errno MOVD R0, err+72(FP) // errno
RET RET
TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
MOVD a1+8(FP), R3
MOVD a2+16(FP), R4
MOVD a3+24(FP), R5
MOVD R0, R6
MOVD R0, R7
MOVD R0, R8
MOVD trap+0(FP), R9 // syscall entry
SYSCALL R9
MOVD R3, r1+32(FP)
MOVD R4, r2+40(FP)
RET
...@@ -106,6 +106,20 @@ ok2: ...@@ -106,6 +106,20 @@ ok2:
MOVD $0, err+72(FP) // errno MOVD $0, err+72(FP) // errno
RET RET
// func rawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
MOVD a1+8(FP), R2
MOVD a2+16(FP), R3
MOVD a3+24(FP), R4
MOVD $0, R5
MOVD $0, R6
MOVD $0, R7
MOVD trap+0(FP), R1 // syscall entry
SYSCALL
MOVD R2, r1+32(FP)
MOVD R3, r2+40(FP)
RET
#define SYS_SOCKETCALL 102 /* from zsysnum_linux_s390x.go */ #define SYS_SOCKETCALL 102 /* from zsysnum_linux_s390x.go */
// func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int) // func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err int)
......
...@@ -122,7 +122,7 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att ...@@ -122,7 +122,7 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att
) )
// Record parent PID so child can test if it has died. // Record parent PID so child can test if it has died.
ppid, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) ppid, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
// Guard against side effects of shuffling fds below. // Guard against side effects of shuffling fds below.
// Make sure that nextfd is beyond any currently open files so // Make sure that nextfd is beyond any currently open files so
...@@ -219,10 +219,7 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att ...@@ -219,10 +219,7 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att
if sys.Foreground { if sys.Foreground {
pgrp := int32(sys.Pgid) pgrp := int32(sys.Pgid)
if pgrp == 0 { if pgrp == 0 {
r1, _, err1 = RawSyscall(SYS_GETPID, 0, 0, 0) r1, _ = rawSyscallNoError(SYS_GETPID, 0, 0, 0)
if err1 != 0 {
goto childerror
}
pgrp = int32(r1) pgrp = int32(r1)
} }
...@@ -311,9 +308,9 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att ...@@ -311,9 +308,9 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att
// Signal self if parent is already dead. This might cause a // Signal self if parent is already dead. This might cause a
// duplicate signal in rare cases, but it won't matter when // duplicate signal in rare cases, but it won't matter when
// using SIGKILL. // using SIGKILL.
r1, _, _ = RawSyscall(SYS_GETPPID, 0, 0, 0) r1, _ = rawSyscallNoError(SYS_GETPPID, 0, 0, 0)
if r1 != ppid { if r1 != ppid {
pid, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) pid, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
_, _, err1 := RawSyscall(SYS_KILL, pid, uintptr(sys.Pdeathsig), 0) _, _, err1 := RawSyscall(SYS_KILL, pid, uintptr(sys.Pdeathsig), 0)
if err1 != 0 { if err1 != 0 {
goto childerror goto childerror
......
// Copyright 2018 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.
package syscall
var RawSyscallNoError = rawSyscallNoError
const Sys_GETEUID = sys_GETEUID
...@@ -205,7 +205,11 @@ while(<>) { ...@@ -205,7 +205,11 @@ while(<>) {
# Determine which form to use; pad args with zeros. # Determine which form to use; pad args with zeros.
my $asm = "Syscall"; my $asm = "Syscall";
if ($nonblock) { if ($nonblock) {
$asm = "RawSyscall"; if ($errvar eq "" && $ENV{'GOOS'} eq "linux") {
$asm = "rawSyscallNoError";
} else {
$asm = "RawSyscall";
}
} }
if(@args <= 3) { if(@args <= 3) {
while(@args < 3) { while(@args < 3) {
...@@ -282,7 +286,12 @@ while(<>) { ...@@ -282,7 +286,12 @@ while(<>) {
if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") {
$text .= "\t$call\n"; $text .= "\t$call\n";
} else { } else {
$text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; if ($errvar eq "" && $ENV{'GOOS'} eq "linux") {
# raw syscall without error on Linux, see golang.org/issue/22924
$text .= "\t$ret[0], $ret[1] := $call\n";
} else {
$text .= "\t$ret[0], $ret[1], $ret[2] := $call\n";
}
} }
$text .= $body; $text .= $body;
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
package syscall package syscall
const ( const (
sys_GETEUID = SYS_GETEUID32
sys_SETGID = SYS_SETGID32 sys_SETGID = SYS_SETGID32
sys_SETUID = SYS_SETUID32 sys_SETUID = SYS_SETUID32
) )
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
package syscall package syscall
const ( const (
sys_GETEUID = SYS_GETEUID
sys_SETGID = SYS_SETGID sys_SETGID = SYS_SETGID
sys_SETUID = SYS_SETUID sys_SETUID = SYS_SETUID
) )
...@@ -13,6 +13,8 @@ package syscall ...@@ -13,6 +13,8 @@ package syscall
import "unsafe" import "unsafe"
func rawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
/* /*
* Wrapped * Wrapped
*/ */
......
...@@ -13,6 +13,9 @@ import ( ...@@ -13,6 +13,9 @@ import (
"os/exec" "os/exec"
"os/signal" "os/signal"
"path/filepath" "path/filepath"
"runtime"
"strconv"
"strings"
"syscall" "syscall"
"testing" "testing"
"time" "time"
...@@ -23,6 +26,8 @@ func TestMain(m *testing.M) { ...@@ -23,6 +26,8 @@ func TestMain(m *testing.M) {
deathSignalParent() deathSignalParent()
} else if os.Getenv("GO_DEATHSIG_CHILD") == "1" { } else if os.Getenv("GO_DEATHSIG_CHILD") == "1" {
deathSignalChild() deathSignalChild()
} else if os.Getenv("GO_SYSCALL_NOERROR") == "1" {
syscallNoError()
} }
os.Exit(m.Run()) os.Exit(m.Run())
...@@ -166,3 +171,84 @@ func TestParseNetlinkMessage(t *testing.T) { ...@@ -166,3 +171,84 @@ func TestParseNetlinkMessage(t *testing.T) {
} }
} }
} }
func TestSyscallNoError(t *testing.T) {
// On Linux there are currently no syscalls which don't fail and return
// a value larger than 0xfffffffffffff001 so we could test RawSyscall
// vs. RawSyscallNoError on 64bit architectures.
if runtime.GOARCH != "386" && runtime.GOARCH != "arm" {
t.Skip("skipping on non-32bit architecture")
}
// TODO(tklauser) is this check enough? Otherwise test for being in a non-k8s
// Linux VM via testenv.Builder().
if os.Getuid() != 0 {
t.Skip("skipping root only test")
}
// Copy the test binary to a location that a non-root user can read/execute
// after we drop privileges
tempDir, err := ioutil.TempDir("", "TestSyscallNoError")
if err != nil {
t.Fatalf("cannot create temporary directory: %v", err)
}
defer os.RemoveAll(tempDir)
os.Chmod(tempDir, 0755)
tmpBinary := filepath.Join(tempDir, filepath.Base(os.Args[0]))
src, err := os.Open(os.Args[0])
if err != nil {
t.Fatalf("cannot open binary %q, %v", os.Args[0], err)
}
defer src.Close()
dst, err := os.OpenFile(tmpBinary, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
if err != nil {
t.Fatalf("cannot create temporary binary %q, %v", tmpBinary, err)
}
if _, err := io.Copy(dst, src); err != nil {
t.Fatalf("failed to copy test binary to %q, %v", tmpBinary, err)
}
err = dst.Close()
if err != nil {
t.Fatalf("failed to close test binary %q, %v", tmpBinary, err)
}
uid := uint32(0xfffffffe)
err = os.Chown(tmpBinary, int(uid), -1)
if err != nil {
t.Fatalf("failed to chown test binary %q, %v", tmpBinary, err)
}
err = os.Chmod(tmpBinary, 0755|os.ModeSetuid)
if err != nil {
t.Fatalf("failed to set setuid bit on test binary %q, %v", tmpBinary, err)
}
cmd := exec.Command(tmpBinary)
cmd.Env = []string{"GO_SYSCALL_NOERROR=1"}
out, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("failed to start first child process: %v", err)
}
got := strings.TrimSpace(string(out))
want := strconv.FormatUint(uint64(uid)+1, 10) + " / " +
strconv.FormatUint(uint64(-uid), 10) + " / " +
strconv.FormatUint(uint64(uid), 10)
if got != want {
t.Errorf("expected %s, got %s", want, got)
}
}
func syscallNoError() {
// Test that the return value from SYS_GETEUID32 (which cannot fail)
// doesn't get treated as an error (see https://golang.org/issue/22924)
euid1, _, e := syscall.RawSyscall(syscall.Sys_GETEUID, 0, 0, 0)
euid2, _ := syscall.RawSyscallNoError(syscall.Sys_GETEUID, 0, 0, 0)
fmt.Println(uintptr(euid1), "/", int(e), "/", uintptr(euid2))
os.Exit(0)
}
...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) { ...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) { func Getpid() (pid int) {
r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
pid = int(r0) pid = int(r0)
return return
} }
...@@ -509,7 +509,7 @@ func Getpid() (pid int) { ...@@ -509,7 +509,7 @@ func Getpid() (pid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) { func Getppid() (ppid int) {
r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPPID, 0, 0, 0)
ppid = int(r0) ppid = int(r0)
return return
} }
...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) { ...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Gettid() (tid int) { func Gettid() (tid int) {
r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETTID, 0, 0, 0)
tid = int(r0) tid = int(r0)
return return
} }
...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { ...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(mask int) (oldmask int) { func Umask(mask int) (oldmask int) {
r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) r0, _ := rawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
oldmask = int(r0) oldmask = int(r0)
return return
} }
...@@ -1216,7 +1216,7 @@ func Ftruncate(fd int, length int64) (err error) { ...@@ -1216,7 +1216,7 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) { func Getegid() (egid int) {
r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEGID32, 0, 0, 0)
egid = int(r0) egid = int(r0)
return return
} }
...@@ -1224,7 +1224,7 @@ func Getegid() (egid int) { ...@@ -1224,7 +1224,7 @@ func Getegid() (egid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (euid int) { func Geteuid() (euid int) {
r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEUID32, 0, 0, 0)
euid = int(r0) euid = int(r0)
return return
} }
...@@ -1232,7 +1232,7 @@ func Geteuid() (euid int) { ...@@ -1232,7 +1232,7 @@ func Geteuid() (euid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) { func Getgid() (gid int) {
r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETGID32, 0, 0, 0)
gid = int(r0) gid = int(r0)
return return
} }
...@@ -1240,7 +1240,7 @@ func Getgid() (gid int) { ...@@ -1240,7 +1240,7 @@ func Getgid() (gid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) { func Getuid() (uid int) {
r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETUID32, 0, 0, 0)
uid = int(r0) uid = int(r0)
return return
} }
......
...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) { ...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) { func Getpid() (pid int) {
r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
pid = int(r0) pid = int(r0)
return return
} }
...@@ -509,7 +509,7 @@ func Getpid() (pid int) { ...@@ -509,7 +509,7 @@ func Getpid() (pid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) { func Getppid() (ppid int) {
r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPPID, 0, 0, 0)
ppid = int(r0) ppid = int(r0)
return return
} }
...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) { ...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Gettid() (tid int) { func Gettid() (tid int) {
r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETTID, 0, 0, 0)
tid = int(r0) tid = int(r0)
return return
} }
...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { ...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(mask int) (oldmask int) { func Umask(mask int) (oldmask int) {
r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) r0, _ := rawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
oldmask = int(r0) oldmask = int(r0)
return return
} }
...@@ -1206,7 +1206,7 @@ func Ftruncate(fd int, length int64) (err error) { ...@@ -1206,7 +1206,7 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) { func Getegid() (egid int) {
r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEGID, 0, 0, 0)
egid = int(r0) egid = int(r0)
return return
} }
...@@ -1214,7 +1214,7 @@ func Getegid() (egid int) { ...@@ -1214,7 +1214,7 @@ func Getegid() (egid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (euid int) { func Geteuid() (euid int) {
r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEUID, 0, 0, 0)
euid = int(r0) euid = int(r0)
return return
} }
...@@ -1222,7 +1222,7 @@ func Geteuid() (euid int) { ...@@ -1222,7 +1222,7 @@ func Geteuid() (euid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) { func Getgid() (gid int) {
r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETGID, 0, 0, 0)
gid = int(r0) gid = int(r0)
return return
} }
...@@ -1240,7 +1240,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { ...@@ -1240,7 +1240,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) { func Getuid() (uid int) {
r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETUID, 0, 0, 0)
uid = int(r0) uid = int(r0)
return return
} }
......
...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) { ...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) { func Getpid() (pid int) {
r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
pid = int(r0) pid = int(r0)
return return
} }
...@@ -509,7 +509,7 @@ func Getpid() (pid int) { ...@@ -509,7 +509,7 @@ func Getpid() (pid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) { func Getppid() (ppid int) {
r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPPID, 0, 0, 0)
ppid = int(r0) ppid = int(r0)
return return
} }
...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) { ...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Gettid() (tid int) { func Gettid() (tid int) {
r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETTID, 0, 0, 0)
tid = int(r0) tid = int(r0)
return return
} }
...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { ...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(mask int) (oldmask int) { func Umask(mask int) (oldmask int) {
r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) r0, _ := rawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
oldmask = int(r0) oldmask = int(r0)
return return
} }
...@@ -1375,7 +1375,7 @@ func Fstat(fd int, stat *Stat_t) (err error) { ...@@ -1375,7 +1375,7 @@ func Fstat(fd int, stat *Stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) { func Getegid() (egid int) {
r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEGID32, 0, 0, 0)
egid = int(r0) egid = int(r0)
return return
} }
...@@ -1383,7 +1383,7 @@ func Getegid() (egid int) { ...@@ -1383,7 +1383,7 @@ func Getegid() (egid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (euid int) { func Geteuid() (euid int) {
r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEUID32, 0, 0, 0)
euid = int(r0) euid = int(r0)
return return
} }
...@@ -1391,7 +1391,7 @@ func Geteuid() (euid int) { ...@@ -1391,7 +1391,7 @@ func Geteuid() (euid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) { func Getgid() (gid int) {
r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETGID32, 0, 0, 0)
gid = int(r0) gid = int(r0)
return return
} }
...@@ -1399,7 +1399,7 @@ func Getgid() (gid int) { ...@@ -1399,7 +1399,7 @@ func Getgid() (gid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) { func Getuid() (uid int) {
r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETUID32, 0, 0, 0)
uid = int(r0) uid = int(r0)
return return
} }
......
...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) { ...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) { func Getpid() (pid int) {
r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
pid = int(r0) pid = int(r0)
return return
} }
...@@ -509,7 +509,7 @@ func Getpid() (pid int) { ...@@ -509,7 +509,7 @@ func Getpid() (pid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) { func Getppid() (ppid int) {
r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPPID, 0, 0, 0)
ppid = int(r0) ppid = int(r0)
return return
} }
...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) { ...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Gettid() (tid int) { func Gettid() (tid int) {
r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETTID, 0, 0, 0)
tid = int(r0) tid = int(r0)
return return
} }
...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { ...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(mask int) (oldmask int) { func Umask(mask int) (oldmask int) {
r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) r0, _ := rawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
oldmask = int(r0) oldmask = int(r0)
return return
} }
...@@ -1211,7 +1211,7 @@ func Ftruncate(fd int, length int64) (err error) { ...@@ -1211,7 +1211,7 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) { func Getegid() (egid int) {
r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEGID, 0, 0, 0)
egid = int(r0) egid = int(r0)
return return
} }
...@@ -1219,7 +1219,7 @@ func Getegid() (egid int) { ...@@ -1219,7 +1219,7 @@ func Getegid() (egid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (euid int) { func Geteuid() (euid int) {
r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEUID, 0, 0, 0)
euid = int(r0) euid = int(r0)
return return
} }
...@@ -1227,7 +1227,7 @@ func Geteuid() (euid int) { ...@@ -1227,7 +1227,7 @@ func Geteuid() (euid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) { func Getgid() (gid int) {
r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETGID, 0, 0, 0)
gid = int(r0) gid = int(r0)
return return
} }
...@@ -1245,7 +1245,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { ...@@ -1245,7 +1245,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) { func Getuid() (uid int) {
r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETUID, 0, 0, 0)
uid = int(r0) uid = int(r0)
return return
} }
......
...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) { ...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) { func Getpid() (pid int) {
r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
pid = int(r0) pid = int(r0)
return return
} }
...@@ -509,7 +509,7 @@ func Getpid() (pid int) { ...@@ -509,7 +509,7 @@ func Getpid() (pid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) { func Getppid() (ppid int) {
r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPPID, 0, 0, 0)
ppid = int(r0) ppid = int(r0)
return return
} }
...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) { ...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Gettid() (tid int) { func Gettid() (tid int) {
r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETTID, 0, 0, 0)
tid = int(r0) tid = int(r0)
return return
} }
...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { ...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(mask int) (oldmask int) { func Umask(mask int) (oldmask int) {
r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) r0, _ := rawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
oldmask = int(r0) oldmask = int(r0)
return return
} }
...@@ -1206,7 +1206,7 @@ func Ftruncate(fd int, length int64) (err error) { ...@@ -1206,7 +1206,7 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) { func Getegid() (egid int) {
r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEGID, 0, 0, 0)
egid = int(r0) egid = int(r0)
return return
} }
...@@ -1214,7 +1214,7 @@ func Getegid() (egid int) { ...@@ -1214,7 +1214,7 @@ func Getegid() (egid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (euid int) { func Geteuid() (euid int) {
r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEUID, 0, 0, 0)
euid = int(r0) euid = int(r0)
return return
} }
...@@ -1222,7 +1222,7 @@ func Geteuid() (euid int) { ...@@ -1222,7 +1222,7 @@ func Geteuid() (euid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) { func Getgid() (gid int) {
r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETGID, 0, 0, 0)
gid = int(r0) gid = int(r0)
return return
} }
...@@ -1240,7 +1240,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { ...@@ -1240,7 +1240,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) { func Getuid() (uid int) {
r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETUID, 0, 0, 0)
uid = int(r0) uid = int(r0)
return return
} }
......
...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) { ...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) { func Getpid() (pid int) {
r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
pid = int(r0) pid = int(r0)
return return
} }
...@@ -509,7 +509,7 @@ func Getpid() (pid int) { ...@@ -509,7 +509,7 @@ func Getpid() (pid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) { func Getppid() (ppid int) {
r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPPID, 0, 0, 0)
ppid = int(r0) ppid = int(r0)
return return
} }
...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) { ...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Gettid() (tid int) { func Gettid() (tid int) {
r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETTID, 0, 0, 0)
tid = int(r0) tid = int(r0)
return return
} }
...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { ...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(mask int) (oldmask int) { func Umask(mask int) (oldmask int) {
r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) r0, _ := rawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
oldmask = int(r0) oldmask = int(r0)
return return
} }
...@@ -1206,7 +1206,7 @@ func Ftruncate(fd int, length int64) (err error) { ...@@ -1206,7 +1206,7 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) { func Getegid() (egid int) {
r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEGID, 0, 0, 0)
egid = int(r0) egid = int(r0)
return return
} }
...@@ -1214,7 +1214,7 @@ func Getegid() (egid int) { ...@@ -1214,7 +1214,7 @@ func Getegid() (egid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (euid int) { func Geteuid() (euid int) {
r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEUID, 0, 0, 0)
euid = int(r0) euid = int(r0)
return return
} }
...@@ -1222,7 +1222,7 @@ func Geteuid() (euid int) { ...@@ -1222,7 +1222,7 @@ func Geteuid() (euid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) { func Getgid() (gid int) {
r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETGID, 0, 0, 0)
gid = int(r0) gid = int(r0)
return return
} }
...@@ -1240,7 +1240,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { ...@@ -1240,7 +1240,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) { func Getuid() (uid int) {
r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETUID, 0, 0, 0)
uid = int(r0) uid = int(r0)
return return
} }
......
...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) { ...@@ -501,7 +501,7 @@ func Getpgid(pid int) (pgid int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) { func Getpid() (pid int) {
r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPID, 0, 0, 0)
pid = int(r0) pid = int(r0)
return return
} }
...@@ -509,7 +509,7 @@ func Getpid() (pid int) { ...@@ -509,7 +509,7 @@ func Getpid() (pid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) { func Getppid() (ppid int) {
r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETPPID, 0, 0, 0)
ppid = int(r0) ppid = int(r0)
return return
} }
...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) { ...@@ -538,7 +538,7 @@ func Getrusage(who int, rusage *Rusage) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Gettid() (tid int) { func Gettid() (tid int) {
r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETTID, 0, 0, 0)
tid = int(r0) tid = int(r0)
return return
} }
...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { ...@@ -945,7 +945,7 @@ func Times(tms *Tms) (ticks uintptr, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(mask int) (oldmask int) { func Umask(mask int) (oldmask int) {
r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) r0, _ := rawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
oldmask = int(r0) oldmask = int(r0)
return return
} }
...@@ -1206,7 +1206,7 @@ func Ftruncate(fd int, length int64) (err error) { ...@@ -1206,7 +1206,7 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) { func Getegid() (egid int) {
r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEGID, 0, 0, 0)
egid = int(r0) egid = int(r0)
return return
} }
...@@ -1214,7 +1214,7 @@ func Getegid() (egid int) { ...@@ -1214,7 +1214,7 @@ func Getegid() (egid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (euid int) { func Geteuid() (euid int) {
r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETEUID, 0, 0, 0)
euid = int(r0) euid = int(r0)
return return
} }
...@@ -1222,7 +1222,7 @@ func Geteuid() (euid int) { ...@@ -1222,7 +1222,7 @@ func Geteuid() (euid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) { func Getgid() (gid int) {
r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETGID, 0, 0, 0)
gid = int(r0) gid = int(r0)
return return
} }
...@@ -1240,7 +1240,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { ...@@ -1240,7 +1240,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) { func Getuid() (uid int) {
r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) r0, _ := rawSyscallNoError(SYS_GETUID, 0, 0, 0)
uid = int(r0) uid = int(r0)
return return
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment