]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: check error codes for arm64 system calls
authorKeith Randall <khr@golang.org>
Tue, 21 Apr 2015 22:47:58 +0000 (15:47 -0700)
committerKeith Randall <khr@golang.org>
Wed, 22 Apr 2015 02:30:22 +0000 (02:30 +0000)
Unlike linux arm32, linux arm64 does not set the condition codes to indicate
whether a system call failed or not.  We must check if the return value
is in the error code range (the same as amd64 does).

Fixes runtime.TestBadOpen test.

Change-Id: I97a8b0a17b5f002a3215c535efa91d199cee3309
Reviewed-on: https://go-review.googlesource.com/9220
Reviewed-by: Russ Cox <rsc@golang.org>
src/runtime/sys_linux_arm64.s

index 32404570fe845969d8e3c3a2e2659fb293f04921..52b34e8f410670719bbd8e80a036c3afd9b83e00 100644 (file)
@@ -72,6 +72,7 @@ TEXT runtime·closefd(SB),NOSPLIT,$-8-12
        MOVW    fd+0(FP), R0
        MOVD    $SYS_close, R8
        SVC
+       CMN     $4095, R0
        BCC     done
        MOVW    $-1, R0
 done:
@@ -84,6 +85,7 @@ TEXT runtime·write(SB),NOSPLIT,$-8-28
        MOVW    n+16(FP), R2
        MOVD    $SYS_write, R8
        SVC
+       CMN     $4095, R0
        BCC     done
        MOVW    $-1, R0
 done:
@@ -96,6 +98,7 @@ TEXT runtime·read(SB),NOSPLIT,$-8-28
        MOVW    n+16(FP), R2
        MOVD    $SYS_read, R8
        SVC
+       CMN     $4095, R0
        BCC     done
        MOVW    $-1, R0
 done: