]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix errno sign for epollctl on mips, mips64 and ppc64
authorWèi Cōngruì <crvv.mail@gmail.com>
Tue, 23 Jan 2018 07:56:24 +0000 (15:56 +0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 24 Apr 2018 14:10:43 +0000 (14:10 +0000)
The caller of epollctl expects it to return a negative errno value,
but it returns a positive errno value on mips, mips64 and ppc64.
The change fixes this.

Updates #23446

Change-Id: Ie6372eca6c23de21964caaaa433c9a45ef93531e
Reviewed-on: https://go-review.googlesource.com/89235
Reviewed-by: Carlos Eduardo Seo <cseo@linux.vnet.ibm.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/export_linux_test.go
src/runtime/runtime_linux_test.go
src/runtime/sys_linux_mips64x.s
src/runtime/sys_linux_mipsx.s
src/runtime/sys_linux_ppc64x.s

index ef0c111677e3023fd0c204fcbbf983766d294e1f..c73f2f33d1fda77f86600ff433e32f38aad9287e 100644 (file)
@@ -6,5 +6,11 @@
 
 package runtime
 
+import "unsafe"
+
 var NewOSProc0 = newosproc0
 var Mincore = mincore
+
+func Epollctl(epfd, op, fd int32, ev unsafe.Pointer) int32 {
+       return epollctl(epfd, op, fd, (*epollevent)(ev))
+}
index 612397293fafe42601da86ff71aed0a409621aed..17d6fbde467686986abcda94645aa28b6db595bb 100644 (file)
@@ -52,3 +52,12 @@ func TestMincoreErrorSign(t *testing.T) {
                t.Errorf("mincore = %v, want %v", v, -EINVAL)
        }
 }
+
+func TestEpollctlErrorSign(t *testing.T) {
+       v := Epollctl(-1, 1, -1, unsafe.Pointer(&struct{}{}))
+
+       const EBADF = 0x09
+       if v != -EBADF {
+               t.Errorf("epollctl = %v, want %v", v, -EBADF)
+       }
+}
index 7632e06fbd39b618185979b8705d4477c5c95baf..9ce810a6b6c5ea9aebae3a37fbfb290bb57348df 100644 (file)
@@ -410,6 +410,7 @@ TEXT runtime·epollctl(SB),NOSPLIT|NOFRAME,$0
        MOVV    ev+16(FP), R7
        MOVV    $SYS_epoll_ctl, R2
        SYSCALL
+       SUBVU   R2, R0, R2      // caller expects negative errno
        MOVW    R2, ret+24(FP)
        RET
 
index 52eccca0931bf07896a74dbdec96115c285f8d84..95f63678933336df0b418aba67e3968815eed279 100644 (file)
@@ -444,6 +444,7 @@ TEXT runtime·epollctl(SB),NOSPLIT,$0-20
        MOVW    ev+12(FP), R7
        MOVW    $SYS_epoll_ctl, R2
        SYSCALL
+       SUBU    R2, R0, R2      // caller expects negative errno
        MOVW    R2, ret+16(FP)
        RET
 
index b8fe5cc31bf811c62ade16c37d30b469af465e5b..b7d34b00daaf7ec1f4180dc68d0d1538ff97b333 100644 (file)
@@ -496,6 +496,7 @@ TEXT runtime·epollctl(SB),NOSPLIT|NOFRAME,$0
        MOVW    fd+8(FP), R5
        MOVD    ev+16(FP), R6
        SYSCALL $SYS_epoll_ctl
+       NEG     R3      // caller expects negative errno
        MOVW    R3, ret+24(FP)
        RET