the function libc_errno returns a pointer to a signed-32 bit quantity,
not a 64-bit quantity.
Fixes #27004
Change-Id: I0623835ee34fd9655532251f096022a5accb58cd
Reviewed-on: https://go-review.googlesource.com/129475
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
CMPQ AX, $-1
JNE ok
CALL libc_error(SB)
- MOVQ (AX), DX // errno
+ MOVLQSX (AX), DX // errno
XORL AX, AX
ok:
MOVQ AX, 32(BX)
CMPQ AX, $-1
JNE ok
CALL libc_error(SB)
- MOVQ (AX), AX // errno
+ MOVLQSX (AX), AX // errno
NEGQ AX // caller wants it as a negative error code
ok:
POPQ BP
CMP R0, R2
BNE ok
BL libc_error(SB)
- MOVD (R0), R1
+ MOVW (R0), R1
MOVD $0, R0
ok:
MOVD R0, 32(R19) // ret 1 p
CMP R0, R2
BNE ok
BL libc_error(SB)
- MOVD (R0), R0 // errno
+ MOVW (R0), R0 // errno
NEG R0, R0 // caller wants it as a negative error code
ok:
RET