From 4c3a928424d249a1013e789cf5e458d480bcba16 Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Sat, 18 May 2019 18:17:00 +1000 Subject: [PATCH] unix: provide linux/riscv64 assembly for syscalls While the linux/riscv64 port is not yet upstream, most of the syscalls package already has linux/riscv64 support and this will make testing and development easier. Updates golang/go#27532 Change-Id: I6e505be55fdbb2942fb6e4f34c040e7b82809630 Reviewed-on: https://go-review.googlesource.com/c/sys/+/177799 Reviewed-by: Brad Fitzpatrick --- unix/asm_linux_riscv64.s | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 unix/asm_linux_riscv64.s diff --git a/unix/asm_linux_riscv64.s b/unix/asm_linux_riscv64.s new file mode 100644 index 000000000..6db717de5 --- /dev/null +++ b/unix/asm_linux_riscv64.s @@ -0,0 +1,54 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build riscv64,!gccgo + +#include "textflag.h" + +// +// System calls for linux/riscv64. +// +// Where available, just jump to package syscall's implementation of +// these functions. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + CALL runtime·entersyscall(SB) + MOV a1+8(FP), A0 + MOV a2+16(FP), A1 + MOV a3+24(FP), A2 + MOV $0, A3 + MOV $0, A4 + MOV $0, A5 + MOV $0, A6 + MOV trap+0(FP), A7 // syscall entry + ECALL + MOV A0, r1+32(FP) // r1 + MOV A1, r2+40(FP) // r2 + CALL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOV a1+8(FP), A0 + MOV a2+16(FP), A1 + MOV a3+24(FP), A2 + MOV ZERO, A3 + MOV ZERO, A4 + MOV ZERO, A5 + MOV trap+0(FP), A7 // syscall entry + ECALL + MOV A0, r1+32(FP) + MOV A1, r2+40(FP) + RET