]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: support rawVforkSyscall on linux/riscv64
authorJoel Sing <joel@sing.id.au>
Sun, 24 May 2020 17:23:30 +0000 (03:23 +1000)
committerJoel Sing <joel@sing.id.au>
Sun, 16 Aug 2020 14:23:50 +0000 (14:23 +0000)
Updates #31936

Change-Id: I7dcb8987d4c306ccc97704b9c1b12313ba8bf242
Reviewed-on: https://go-review.googlesource.com/c/go/+/234960
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/syscall/asm_linux_riscv64.s
src/syscall/exec_linux.go
src/syscall/syscall_linux_riscv64.go

index ad0b6b17d99e1deeb720fc96d9d9bc48d391d2d5..f172dd3d9b139c6b530c92053df577d613855ae5 100644 (file)
@@ -104,6 +104,28 @@ err:
        MOV     A0, err+72(FP)  // errno
        RET
 
+// func rawVforkSyscall(trap, a1 uintptr) (r1, err uintptr)
+TEXT ·rawVforkSyscall(SB),NOSPLIT|NOFRAME,$0-32
+       MOV     a1+8(FP), A0
+       MOV     ZERO, A1
+       MOV     ZERO, A2
+       MOV     ZERO, A3
+       MOV     ZERO, A4
+       MOV     ZERO, A5
+       MOV     trap+0(FP), A7  // syscall entry
+       ECALL
+       MOV     $-4096, T0
+       BLTU    T0, A0, err
+       MOV     A0, r1+16(FP)   // r1
+       MOV     ZERO, err+24(FP)        // errno
+       RET
+err:
+       MOV     $-1, T0
+       MOV     T0, r1+16(FP)   // r1
+       SUB     A0, ZERO, A0
+       MOV     A0, err+24(FP)  // errno
+       RET
+
 TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
        MOV     a1+8(FP), A0
        MOV     a2+16(FP), A1
index b7351cda82377eae7e77096575b730298435f994..b6acad96ea450614b5cd51df968de30128ad4749 100644 (file)
@@ -207,7 +207,11 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att
                }
        }
 
-       hasRawVforkSyscall := runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "s390x" || runtime.GOARCH == "arm64"
+       var hasRawVforkSyscall bool
+       switch runtime.GOARCH {
+       case "amd64", "arm64", "ppc64", "riscv64", "s390x":
+               hasRawVforkSyscall = true
+       }
 
        // About to call fork.
        // No more allocation or calls of non-assembly functions.
index d54bd38510eee50d65ba9f5c935d64f753680e1c..088e23439fd0884657e9192a10e3fe548d8cdc37 100644 (file)
@@ -199,6 +199,4 @@ func Pause() error {
        return err
 }
 
-func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno) {
-       panic("not implemented")
-}
+func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno)