]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: Update open/close/read/write to return -1 on error.
authorKeith Randall <khr@golang.org>
Tue, 3 Mar 2015 04:16:48 +0000 (20:16 -0800)
committerKeith Randall <khr@golang.org>
Tue, 3 Mar 2015 17:46:36 +0000 (17:46 +0000)
Error detection code copied from syscall, where presumably
we actually do it right.

Note that we throw the errno away.  The runtime doesn't use it.

Fixes #10052

Change-Id: I8de77dda6bf287276b137646c26b84fa61554ec8
Reviewed-on: https://go-review.googlesource.com/6571
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
21 files changed:
src/runtime/export_test.go
src/runtime/os_nacl.go
src/runtime/os_windows.go
src/runtime/runtime_test.go
src/runtime/sys_darwin_386.s
src/runtime/sys_darwin_amd64.s
src/runtime/sys_darwin_arm.s
src/runtime/sys_dragonfly_386.s
src/runtime/sys_dragonfly_amd64.s
src/runtime/sys_freebsd_386.s
src/runtime/sys_freebsd_amd64.s
src/runtime/sys_freebsd_arm.s
src/runtime/sys_linux_386.s
src/runtime/sys_linux_amd64.s
src/runtime/sys_linux_arm.s
src/runtime/sys_linux_ppc64x.s
src/runtime/sys_netbsd_386.s
src/runtime/sys_netbsd_amd64.s
src/runtime/sys_netbsd_arm.s
src/runtime/sys_openbsd_386.s
src/runtime/sys_openbsd_amd64.s

index a5d923e860fc122c37367a8461463c99dde8c5d9..d5068ba81d872e956eca6b3299eae50062ff271b 100644 (file)
@@ -117,3 +117,8 @@ var Gostringnocopy = gostringnocopy
 var Maxstring = &maxstring
 
 type Uintreg uintreg
+
+var Open = open
+var Close = close
+var Read = read
+var Write = write
index 138b9846250d7fe006dc0dde1aaf2a8ca96d1f3e..a6a796cd76ff55bf5ac9ea41602d18ce64d2f536 100644 (file)
@@ -52,3 +52,8 @@ func sigpanic() {
 
 func raiseproc(sig int32) {
 }
+
+// Stubs so tests can link correctly.  These should never be called.
+func open(name *byte, mode, perm int32) int32
+func close(fd int32) int32
+func read(fd int32, p unsafe.Pointer, n int32) int32
index 3cce67f5a77cd092f6587b42bd93796b9284deff..744dc66ccc9853065c4b949edf4e0f06c735c7d5 100644 (file)
@@ -4,7 +4,7 @@
 
 package runtime
 
-import _ "unsafe" // for go:linkname
+import "unsafe"
 
 type stdFunction *byte
 
@@ -39,3 +39,17 @@ func sigpanic() {
        }
        throw("fault")
 }
+
+// Stubs so tests can link correctly.  These should never be called.
+func open(name *byte, mode, perm int32) int32 {
+       throw("unimplemented")
+       return -1
+}
+func close(fd int32) int32 {
+       throw("unimplemented")
+       return -1
+}
+func read(fd int32, p unsafe.Pointer, n int32) int32 {
+       throw("unimplemented")
+       return -1
+}
index 09884200e421d2ba440789e991cdfbe89cb18b70..983442f1db60127048989da53482a1b72997f505 100644 (file)
@@ -292,3 +292,29 @@ func TestTrailingZero(t *testing.T) {
                t.Errorf("sizeof(%#v)==%d, want 0", T5{}, unsafe.Sizeof(T5{}))
        }
 }
+
+func TestBadOpen(t *testing.T) {
+       if GOOS == "windows" || GOOS == "nacl" {
+               t.Skip("skipping OS that doesn't have open/read/write/close")
+       }
+       // make sure we get the correct error code if open fails.  Same for
+       // read/write/close on the resulting -1 fd.  See issue 10052.
+       nonfile := []byte("/notreallyafile")
+       fd := Open(&nonfile[0], 0, 0)
+       if fd != -1 {
+               t.Errorf("open(\"%s\")=%d, want -1", string(nonfile), fd)
+       }
+       var buf [32]byte
+       r := Read(-1, unsafe.Pointer(&buf[0]), int32(len(buf)))
+       if r != -1 {
+               t.Errorf("read()=%d, want -1", r)
+       }
+       w := Write(^uintptr(0), unsafe.Pointer(&buf[0]), int32(len(buf)))
+       if w != -1 {
+               t.Errorf("write()=%d, want -1", w)
+       }
+       c := Close(-1)
+       if c != -1 {
+               t.Errorf("close()=%d, want -1", c)
+       }
+}
index 46857a6e1b62934f34af892e29a9c6ea5ae86fdc..20d6b72f62444519d8a7bf8b4289cfdbd8837c63 100644 (file)
@@ -29,24 +29,32 @@ TEXT runtime·exit1(SB),NOSPLIT,$0
 TEXT runtime·open(SB),NOSPLIT,$0
        MOVL    $5, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·close(SB),NOSPLIT,$0
        MOVL    $6, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+4(FP)
        RET
 
 TEXT runtime·read(SB),NOSPLIT,$0
        MOVL    $3, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·write(SB),NOSPLIT,$0
        MOVL    $4, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
index a6ab6bcf2dec8173c3c8010232587c4b01c05b84..f856e959057bff3cb10cbb30f6b1d29308d7de0b 100644 (file)
@@ -38,6 +38,8 @@ TEXT runtime·open(SB),NOSPLIT,$0
        MOVL    perm+12(FP), DX         // arg 3 mode
        MOVL    $(0x2000000+5), AX      // syscall entry
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+16(FP)
        RET
 
@@ -45,6 +47,8 @@ TEXT runtime·close(SB),NOSPLIT,$0
        MOVL    fd+0(FP), DI            // arg 1 fd
        MOVL    $(0x2000000+6), AX      // syscall entry
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+8(FP)
        RET
 
@@ -54,6 +58,8 @@ TEXT runtime·read(SB),NOSPLIT,$0
        MOVL    n+16(FP), DX            // arg 3 count
        MOVL    $(0x2000000+3), AX      // syscall entry
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
@@ -63,6 +69,8 @@ TEXT runtime·write(SB),NOSPLIT,$0
        MOVL    n+16(FP), DX            // arg 3 count
        MOVL    $(0x2000000+4), AX      // syscall entry
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
index 0ca42626e8543c451ba26abfc09c5febb0ee1a6c..5cb8601a6b5935c4ea666f4bacbd2174ea3365f7 100644 (file)
@@ -48,6 +48,7 @@ TEXT runtime·open(SB),NOSPLIT,$0
        MOVW    perm+8(FP), R2
        MOVW    $SYS_open, R12
        SWI     $0x80
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
@@ -55,6 +56,7 @@ TEXT runtime·close(SB),NOSPLIT,$0
        MOVW    fd+0(FP), R0
        MOVW    $SYS_close, R12
        SWI     $0x80
+       MOVW.CS $-1, R0
        MOVW    R0, ret+4(FP)
        RET
 
@@ -64,6 +66,7 @@ TEXT runtime·write(SB),NOSPLIT,$0
        MOVW    n+8(FP), R2
        MOVW    $SYS_write, R12
        SWI     $0x80
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
@@ -73,6 +76,7 @@ TEXT runtime·read(SB),NOSPLIT,$0
        MOVW    n+8(FP), R2
        MOVW    $SYS_read, R12
        SWI     $0x80
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
index bb4903ef6795eeaefc34ad2b77c6252be70e2d80..fa215daf261cdca0fbdd50096a34d3df9092f37f 100644 (file)
@@ -85,24 +85,32 @@ TEXT runtime·exit1(SB),NOSPLIT,$16
 TEXT runtime·open(SB),NOSPLIT,$-4
        MOVL    $5, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·close(SB),NOSPLIT,$-4
        MOVL    $6, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+4(FP)
        RET
 
 TEXT runtime·read(SB),NOSPLIT,$-4
        MOVL    $3, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·write(SB),NOSPLIT,$-4
        MOVL    $4, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
index 2f2942ae190569225bfb39e42ce15367db52fdef..9b4e057b62f4255077a60c0cbd6c224f9631941a 100644 (file)
@@ -77,6 +77,8 @@ TEXT runtime·open(SB),NOSPLIT,$-8
        MOVL    perm+12(FP), DX         // arg 3 mode
        MOVL    $5, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+16(FP)
        RET
 
@@ -84,6 +86,8 @@ TEXT runtime·close(SB),NOSPLIT,$-8
        MOVL    fd+0(FP), DI            // arg 1 fd
        MOVL    $6, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+8(FP)
        RET
 
@@ -93,6 +97,8 @@ TEXT runtime·read(SB),NOSPLIT,$-8
        MOVL    n+16(FP), DX            // arg 3 count
        MOVL    $3, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
@@ -102,6 +108,8 @@ TEXT runtime·write(SB),NOSPLIT,$-8
        MOVL    n+16(FP), DX            // arg 3 count
        MOVL    $4, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
index d1f67c3fcc07af8823980f5c5bc71d18554262a7..bd2cc9438f09ee955538bd8797097c8d67b95e56 100644 (file)
@@ -62,24 +62,32 @@ TEXT runtime·exit1(SB),NOSPLIT,$-4
 TEXT runtime·open(SB),NOSPLIT,$-4
        MOVL    $5, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·close(SB),NOSPLIT,$-4
        MOVL    $6, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+4(FP)
        RET
 
 TEXT runtime·read(SB),NOSPLIT,$-4
        MOVL    $3, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·write(SB),NOSPLIT,$-4
        MOVL    $4, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
index eac0319d0b13ca12fc063678ad57eb7e861602a1..f2001f2560c04261679ccf4b8d763812ec571e7c 100644 (file)
@@ -67,6 +67,8 @@ TEXT runtime·open(SB),NOSPLIT,$-8
        MOVL    perm+12(FP), DX         // arg 3 mode
        MOVL    $5, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+16(FP)
        RET
 
@@ -74,6 +76,8 @@ TEXT runtime·close(SB),NOSPLIT,$-8
        MOVL    fd+0(FP), DI            // arg 1 fd
        MOVL    $6, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+8(FP)
        RET
 
@@ -83,6 +87,8 @@ TEXT runtime·read(SB),NOSPLIT,$-8
        MOVL    n+16(FP), DX            // arg 3 count
        MOVL    $3, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
@@ -92,6 +98,8 @@ TEXT runtime·write(SB),NOSPLIT,$-8
        MOVL    n+16(FP), DX            // arg 3 count
        MOVL    $4, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
index 6568738b3db99be8f57b947ffc4d4a9d71c378da..613c1dceed2ddb356e267738490044c2cbc9fd4e 100644 (file)
@@ -93,6 +93,7 @@ TEXT runtime·open(SB),NOSPLIT,$-8
        MOVW perm+8(FP), R2     // arg 3 perm
        MOVW $SYS_open, R7
        SWI $0
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
@@ -102,6 +103,7 @@ TEXT runtime·read(SB),NOSPLIT,$-8
        MOVW n+8(FP), R2        // arg 3 count
        MOVW $SYS_read, R7
        SWI $0
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
@@ -111,6 +113,7 @@ TEXT runtime·write(SB),NOSPLIT,$-8
        MOVW n+8(FP), R2        // arg 3 count
        MOVW $SYS_write, R7
        SWI $0
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
@@ -118,6 +121,7 @@ TEXT runtime·close(SB),NOSPLIT,$-8
        MOVW fd+0(FP), R0       // arg 1 fd
        MOVW $SYS_close, R7
        SWI $0
+       MOVW.CS $-1, R0
        MOVW    R0, ret+4(FP)
        RET
 
index 2acce484cce788feede655e92895a34c344109ec..7d53aad59a8d93ef94e3673c3399ef7bdcfdaa4c 100644 (file)
@@ -30,6 +30,9 @@ TEXT runtime·open(SB),NOSPLIT,$0
        MOVL    mode+4(FP), CX
        MOVL    perm+8(FP), DX
        CALL    *runtime·_vdso(SB)
+       CMPL    AX, $0xfffff001
+       JLS     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
@@ -37,6 +40,9 @@ TEXT runtime·close(SB),NOSPLIT,$0
        MOVL    $6, AX          // syscall - close
        MOVL    fd+0(FP), BX
        CALL    *runtime·_vdso(SB)
+       CMPL    AX, $0xfffff001
+       JLS     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+4(FP)
        RET
 
@@ -46,6 +52,9 @@ TEXT runtime·write(SB),NOSPLIT,$0
        MOVL    p+4(FP), CX
        MOVL    n+8(FP), DX
        CALL    *runtime·_vdso(SB)
+       CMPL    AX, $0xfffff001
+       JLS     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
@@ -55,6 +64,9 @@ TEXT runtime·read(SB),NOSPLIT,$0
        MOVL    p+4(FP), CX
        MOVL    n+8(FP), DX
        CALL    *runtime·_vdso(SB)
+       CMPL    AX, $0xfffff001
+       JLS     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
index aac741b7131f511665a651a5705087f0765b6860..134d649b06b61fdcc70a754cf44a205f327c4eb7 100644 (file)
@@ -28,6 +28,9 @@ TEXT runtime·open(SB),NOSPLIT,$0-20
        MOVL    perm+12(FP), DX
        MOVL    $2, AX                  // syscall entry
        SYSCALL
+       CMPQ    AX, $0xfffffffffffff001
+       JLS     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+16(FP)
        RET
 
@@ -35,6 +38,9 @@ TEXT runtime·close(SB),NOSPLIT,$0-12
        MOVL    fd+0(FP), DI
        MOVL    $3, AX                  // syscall entry
        SYSCALL
+       CMPQ    AX, $0xfffffffffffff001
+       JLS     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+8(FP)
        RET
 
@@ -44,6 +50,9 @@ TEXT runtime·write(SB),NOSPLIT,$0-28
        MOVL    n+16(FP), DX
        MOVL    $1, AX                  // syscall entry
        SYSCALL
+       CMPQ    AX, $0xfffffffffffff001
+       JLS     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
@@ -53,6 +62,9 @@ TEXT runtime·read(SB),NOSPLIT,$0-28
        MOVL    n+16(FP), DX
        MOVL    $0, AX                  // syscall entry
        SYSCALL
+       CMPQ    AX, $0xfffffffffffff001
+       JLS     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
index 844a02a297fcd98d0aa81673e70f0ac6e6a5957d..fa07ef88d6f5ed02131c16be834cda4401721857 100644 (file)
@@ -57,6 +57,9 @@ TEXT runtime·open(SB),NOSPLIT,$0
        MOVW    perm+8(FP), R2
        MOVW    $SYS_open, R7
        SWI     $0
+       MOVW    $0xfffff001, R1
+       CMP     R1, R0
+       MOVW.HI $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
@@ -64,6 +67,9 @@ TEXT runtime·close(SB),NOSPLIT,$0
        MOVW    fd+0(FP), R0
        MOVW    $SYS_close, R7
        SWI     $0
+       MOVW    $0xfffff001, R1
+       CMP     R1, R0
+       MOVW.HI $-1, R0
        MOVW    R0, ret+4(FP)
        RET
 
@@ -73,6 +79,9 @@ TEXT runtime·write(SB),NOSPLIT,$0
        MOVW    n+8(FP), R2
        MOVW    $SYS_write, R7
        SWI     $0
+       MOVW    $0xfffff001, R1
+       CMP     R1, R0
+       MOVW.HI $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
@@ -82,6 +91,9 @@ TEXT runtime·read(SB),NOSPLIT,$0
        MOVW    n+8(FP), R2
        MOVW    $SYS_read, R7
        SWI     $0
+       MOVW    $0xfffff001, R1
+       CMP     R1, R0
+       MOVW.HI $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
index 1f2a5af50a2058706993fd66edf66309b372c17f..307089325848d6c851ff284d6cca85e0de604e7e 100644 (file)
@@ -62,12 +62,16 @@ TEXT runtime·open(SB),NOSPLIT,$-8-20
        MOVW    mode+8(FP), R4
        MOVW    perm+12(FP), R5
        SYSCALL $SYS_open
+       BVC     2(PC)
+       MOVW    $-1, R3
        MOVW    R3, ret+16(FP)
        RETURN
 
 TEXT runtime·close(SB),NOSPLIT,$-8-12
        MOVW    fd+0(FP), R3
        SYSCALL $SYS_close
+       BVC     2(PC)
+       MOVW    $-1, R3
        MOVW    R3, ret+8(FP)
        RETURN
 
@@ -76,6 +80,8 @@ TEXT runtime·write(SB),NOSPLIT,$-8-28
        MOVD    p+8(FP), R4
        MOVW    n+16(FP), R5
        SYSCALL $SYS_write
+       BVC     2(PC)
+       MOVW    $-1, R3
        MOVW    R3, ret+24(FP)
        RETURN
 
@@ -84,6 +90,8 @@ TEXT runtime·read(SB),NOSPLIT,$-8-28
        MOVD    p+8(FP), R4
        MOVW    n+16(FP), R5
        SYSCALL $SYS_read
+       BVC     2(PC)
+       MOVW    $-1, R3
        MOVW    R3, ret+24(FP)
        RETURN
 
index 509d6d4a85706ae3620a657f453f3ef0db14e5d0..e0fc926fb9779b87cd00a3c446e70f2bd3c61694 100644 (file)
@@ -27,24 +27,32 @@ TEXT runtime·exit1(SB),NOSPLIT,$-4
 TEXT runtime·open(SB),NOSPLIT,$-4
        MOVL    $5, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·close(SB),NOSPLIT,$-4
        MOVL    $6, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+4(FP)
        RET
 
 TEXT runtime·read(SB),NOSPLIT,$-4
        MOVL    $3, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·write(SB),NOSPLIT,$-4
        MOVL    $4, AX                  // sys_write
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
index 83de9111dd76f5fd9a3e005063515ef409386c4d..88ca323aaf196066c0bf169c8dea57eefef9aff1 100644 (file)
@@ -91,6 +91,8 @@ TEXT runtime·open(SB),NOSPLIT,$-8
        MOVL    perm+12(FP), DX         // arg 3 mode
        MOVL    $5, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+16(FP)
        RET
 
@@ -98,6 +100,8 @@ TEXT runtime·close(SB),NOSPLIT,$-8
        MOVL    fd+0(FP), DI            // arg 1 fd
        MOVL    $6, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+8(FP)
        RET
 
@@ -107,6 +111,8 @@ TEXT runtime·read(SB),NOSPLIT,$-8
        MOVL    n+16(FP), DX            // arg 3 count
        MOVL    $3, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
@@ -116,6 +122,8 @@ TEXT runtime·write(SB),NOSPLIT,$-8
        MOVL    n+16(FP), DX            // arg 3 - nbyte
        MOVL    $4, AX                  // sys_write
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
index 5628967ee7a5c9d41b22d2358c6a7cec4adf0cc2..b4210228312bfc94bdd034e3758c711a92e75bb1 100644 (file)
@@ -29,12 +29,14 @@ TEXT runtime·open(SB),NOSPLIT,$-8
        MOVW mode+4(FP), R1
        MOVW perm+8(FP), R2
        SWI $0xa00005
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
 TEXT runtime·close(SB),NOSPLIT,$-8
        MOVW fd+0(FP), R0
        SWI $0xa00006
+       MOVW.CS $-1, R0
        MOVW    R0, ret+4(FP)
        RET
 
@@ -43,6 +45,7 @@ TEXT runtime·read(SB),NOSPLIT,$-8
        MOVW p+4(FP), R1
        MOVW n+8(FP), R2
        SWI $0xa00003
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
@@ -51,6 +54,7 @@ TEXT runtime·write(SB),NOSPLIT,$-4
        MOVW    p+4(FP), R1     // arg 2 - buf
        MOVW    n+8(FP), R2     // arg 3 - nbyte
        SWI $0xa00004   // sys_write
+       MOVW.CS $-1, R0
        MOVW    R0, ret+12(FP)
        RET
 
index 93907577ea87bdbebb2760ef993f79d797d5f656..86774de0033d8f337532c6326c2459dfdabd425d 100644 (file)
@@ -31,24 +31,32 @@ TEXT runtime·exit1(SB),NOSPLIT,$8
 TEXT runtime·open(SB),NOSPLIT,$-4
        MOVL    $5, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·close(SB),NOSPLIT,$-4
        MOVL    $6, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+4(FP)
        RET
 
 TEXT runtime·read(SB),NOSPLIT,$-4
        MOVL    $3, AX
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
 TEXT runtime·write(SB),NOSPLIT,$-4
        MOVL    $4, AX                  // sys_write
        INT     $0x80
+       JAE     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+12(FP)
        RET
 
index f1ee4a9ce1ada4dca224c5b8e37d662a01f8a690..1e809b7e80e14a33c33e9e2eae654a0f119fb4dc 100644 (file)
@@ -101,6 +101,8 @@ TEXT runtime·open(SB),NOSPLIT,$-8
        MOVL    perm+12(FP), DX         // arg 3 mode
        MOVL    $5, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+16(FP)
        RET
 
@@ -108,6 +110,8 @@ TEXT runtime·close(SB),NOSPLIT,$-8
        MOVL    fd+0(FP), DI            // arg 1 fd
        MOVL    $6, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+8(FP)
        RET
 
@@ -117,6 +121,8 @@ TEXT runtime·read(SB),NOSPLIT,$-8
        MOVL    n+16(FP), DX            // arg 3 count
        MOVL    $3, AX
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET
 
@@ -126,6 +132,8 @@ TEXT runtime·write(SB),NOSPLIT,$-8
        MOVL    n+16(FP), DX            // arg 3 - nbyte
        MOVL    $4, AX                  // sys_write
        SYSCALL
+       JCC     2(PC)
+       MOVL    $-1, AX
        MOVL    AX, ret+24(FP)
        RET