From fc5eee3c1d37131ca5887ed1d020f6cf83d20a92 Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Mon, 6 Jan 2020 00:18:56 +1100 Subject: [PATCH] syscall: fix riscv64 syscall assembly RISCV has no instruction to store an immediate value to memory, or to subtract an immediate value. An immediate needs to be moved to a register first, or in the case of $0, the zero value register (ZERO or R0) can be used instead. Restore the original riscv-go code so that it compiles. Updates #27532 Change-Id: I3c60e6f385c59679252a710dbba153357a367516 Reviewed-on: https://go-review.googlesource.com/c/go/+/212761 Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot Reviewed-by: Tobias Klauser --- src/syscall/asm_linux_riscv64.s | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/syscall/asm_linux_riscv64.s b/src/syscall/asm_linux_riscv64.s index 5700d4d005..ad0b6b17d9 100644 --- a/src/syscall/asm_linux_riscv64.s +++ b/src/syscall/asm_linux_riscv64.s @@ -20,14 +20,14 @@ TEXT ·Syscall(SB),NOSPLIT,$0-56 BLTU T0, A0, err MOV A0, r1+32(FP) // r1 MOV A1, r2+40(FP) // r2 - MOV $0, err+48(FP) // errno + MOV ZERO, err+48(FP) // errno CALL runtime·exitsyscall(SB) RET err: MOV $-1, T0 MOV T0, r1+32(FP) // r1 - MOV $0, r2+40(FP) // r2 - SUB A0, $0, A0 + MOV ZERO, r2+40(FP) // r2 + SUB A0, ZERO, A0 MOV A0, err+48(FP) // errno CALL runtime·exitsyscall(SB) RET @@ -47,14 +47,14 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-80 BLTU T0, A0, err MOV A0, r1+56(FP) // r1 MOV A1, r2+64(FP) // r2 - MOV $0, err+72(FP) // errno + MOV ZERO, err+72(FP) // errno CALL runtime·exitsyscall(SB) RET err: MOV $-1, T0 MOV T0, r1+56(FP) // r1 - MOV $0, r2+64(FP) // r2 - SUB A0, $0, A0 + MOV ZERO, r2+64(FP) // r2 + SUB A0, ZERO, A0 MOV A0, err+72(FP) // errno CALL runtime·exitsyscall(SB) RET @@ -70,13 +70,13 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-56 BLTU T0, A0, err MOV A0, r1+32(FP) // r1 MOV A1, r2+40(FP) // r2 - MOV $0, err+48(FP) // errno + MOV ZERO, err+48(FP) // errno RET err: MOV $-1, T0 MOV T0, r1+32(FP) // r1 - MOV $0, r2+40(FP) // r2 - SUB A0, $0, A0 + MOV ZERO, r2+40(FP) // r2 + SUB A0, ZERO, A0 MOV A0, err+48(FP) // errno RET @@ -94,13 +94,13 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 BLTU T0, A0, err MOV A0, r1+56(FP) // r1 MOV A1, r2+64(FP) // r2 - MOV $0, err+72(FP) // errno + MOV ZERO, err+72(FP) // errno RET err: MOV $-1, T0 MOV T0, r1+56(FP) // r1 - MOV $0, r2+64(FP) // r2 - SUB A0, $0, A0 + MOV ZERO, r2+64(FP) // r2 + SUB A0, ZERO, A0 MOV A0, err+72(FP) // errno RET -- 2.50.0