]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: correct assembly for openbsd/arm64
authorJoel Sing <joel@sing.id.au>
Mon, 6 Jan 2020 17:25:57 +0000 (04:25 +1100)
committerJoel Sing <joel@sing.id.au>
Tue, 7 Jan 2020 16:24:34 +0000 (16:24 +0000)
Correct the pipe and pipe2 implementations by using the correct RSP offsets,
used to store and return the file descriptor array.

Fix setNonblock by using the correct immediate value for O_NONBLOCK and
replace EOR (exclusive OR) with ORR.

Also correct the write1 implementation, which has a uintptr value for the fd
argument.

Change-Id: Ibca77af44b649e8bb330ca54f9c36a7a8b0f9cea
Reviewed-on: https://go-review.googlesource.com/c/go/+/212765
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/runtime/sys_openbsd_arm64.s

index 8e1a5bc5424a30c472b39a31bd2848c93bbace6d..839aa5706275bc5b2fbf1700319df13ff6e8e8c2 100644 (file)
@@ -65,7 +65,7 @@ TEXT runtime·read(SB),NOSPLIT|NOFRAME,$0
 
 // func pipe() (r, w int32, errno int32)
 TEXT runtime·pipe(SB),NOSPLIT|NOFRAME,$0-12
-       MOVD    RSP, R0
+       MOVD    $r+0(FP), R0
        MOVW    $0, R1
        MOVD    $101, R8                // sys_pipe2
        SVC
@@ -76,7 +76,7 @@ TEXT runtime·pipe(SB),NOSPLIT|NOFRAME,$0-12
 
 // func pipe2(flags int32) (r, w int32, errno int32)
 TEXT runtime·pipe2(SB),NOSPLIT|NOFRAME,$0-20
-       ADD     $8, RSP, R0
+       MOVD    $r+8(FP), R0
        MOVW    flags+0(FP), R1
        MOVD    $101, R8                // sys_pipe2
        SVC
@@ -86,7 +86,7 @@ TEXT runtime·pipe2(SB),NOSPLIT|NOFRAME,$0-20
        RET
 
 TEXT runtime·write1(SB),NOSPLIT|NOFRAME,$0
-       MOVW    fd+0(FP), R0            // arg 1 - fd
+       MOVD    fd+0(FP), R0            // arg 1 - fd
        MOVD    p+8(FP), R1             // arg 2 - buf
        MOVW    n+16(FP), R2            // arg 3 - nbyte
        MOVD    $4, R8                  // sys_write
@@ -428,8 +428,8 @@ TEXT runtime·setNonblock(SB),NOSPLIT|NOFRAME,$0-4
        MOVD    $0, R2                  // arg 3
        MOVD    $92, R8                 // sys_fcntl
        SVC
-       MOVD    $0x800, R2              // O_NONBLOCK
-       EOR     R0, R2                  // arg 3 - flags
+       MOVD    $4, R2                  // O_NONBLOCK
+       ORR     R0, R2                  // arg 3 - flags
        MOVW    fd+0(FP), R0            // arg 1 - fd
        MOVD    $4, R1                  // arg 2 - cmd (F_SETFL)
        MOVD    $92, R8                 // sys_fcntl