mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: Update open/close/read/write to return -1 on error.
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>
This commit is contained in:
parent
74e88dfdee
commit
f584c05fcc
21 changed files with 187 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue