]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: unify riscv64 library entry point
authorqmuntal <quimmuntal@gmail.com>
Wed, 24 Sep 2025 08:13:44 +0000 (10:13 +0200)
committerQuim Muntal <quimmuntal@gmail.com>
Fri, 17 Oct 2025 08:07:59 +0000 (01:07 -0700)
Cq-Include-Trybots: luci.golang.try:gotip-linux-riscv64
Change-Id: I6470dfc5c9e03dfe5fc535605fdd7d861b9ba2f3
Reviewed-on: https://go-review.googlesource.com/c/go/+/706415
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Joel Sing <joel@sing.id.au>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/runtime/asm_riscv64.s
src/runtime/rt0_freebsd_riscv64.s
src/runtime/rt0_linux_riscv64.s

index 6b16d03c9a8070455d3929623888dbb8ef52bedd..efe6047419e8b32602267ca843ea6af6b1410d39 100644 (file)
@@ -6,6 +6,104 @@
 #include "funcdata.h"
 #include "textflag.h"
 
+
+// When building with -buildmode=c-shared, this symbol is called when the shared
+// library is loaded.
+TEXT _rt0_riscv64_lib(SB),NOSPLIT,$224
+       // Preserve callee-save registers, along with X1 (LR).
+       MOV     X1, (8*3)(X2)
+       MOV     X8, (8*4)(X2)
+       MOV     X9, (8*5)(X2)
+       MOV     X18, (8*6)(X2)
+       MOV     X19, (8*7)(X2)
+       MOV     X20, (8*8)(X2)
+       MOV     X21, (8*9)(X2)
+       MOV     X22, (8*10)(X2)
+       MOV     X23, (8*11)(X2)
+       MOV     X24, (8*12)(X2)
+       MOV     X25, (8*13)(X2)
+       MOV     X26, (8*14)(X2)
+       MOV     g, (8*15)(X2)
+       MOVD    F8, (8*16)(X2)
+       MOVD    F9, (8*17)(X2)
+       MOVD    F18, (8*18)(X2)
+       MOVD    F19, (8*19)(X2)
+       MOVD    F20, (8*20)(X2)
+       MOVD    F21, (8*21)(X2)
+       MOVD    F22, (8*22)(X2)
+       MOVD    F23, (8*23)(X2)
+       MOVD    F24, (8*24)(X2)
+       MOVD    F25, (8*25)(X2)
+       MOVD    F26, (8*26)(X2)
+       MOVD    F27, (8*27)(X2)
+
+       // Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
+       MOV     X0, g
+
+       MOV     A0, _rt0_riscv64_lib_argc<>(SB)
+       MOV     A1, _rt0_riscv64_lib_argv<>(SB)
+
+       // Synchronous initialization.
+       MOV     $runtime·libpreinit(SB), T0
+       JALR    RA, T0
+
+       // Create a new thread to do the runtime initialization and return.
+       MOV     _cgo_sys_thread_create(SB), T0
+       BEQZ    T0, nocgo
+       MOV     $_rt0_riscv64_lib_go(SB), A0
+       MOV     $0, A1
+       JALR    RA, T0
+       JMP     restore
+
+nocgo:
+       MOV     $0x800000, A0                     // stacksize = 8192KB
+       MOV     $_rt0_riscv64_lib_go(SB), A1
+       MOV     A0, 8(X2)
+       MOV     A1, 16(X2)
+       MOV     $runtime·newosproc0(SB), T0
+       JALR    RA, T0
+
+restore:
+       // Restore callee-save registers, along with X1 (LR).
+       MOV     (8*3)(X2), X1
+       MOV     (8*4)(X2), X8
+       MOV     (8*5)(X2), X9
+       MOV     (8*6)(X2), X18
+       MOV     (8*7)(X2), X19
+       MOV     (8*8)(X2), X20
+       MOV     (8*9)(X2), X21
+       MOV     (8*10)(X2), X22
+       MOV     (8*11)(X2), X23
+       MOV     (8*12)(X2), X24
+       MOV     (8*13)(X2), X25
+       MOV     (8*14)(X2), X26
+       MOV     (8*15)(X2), g
+       MOVD    (8*16)(X2), F8
+       MOVD    (8*17)(X2), F9
+       MOVD    (8*18)(X2), F18
+       MOVD    (8*19)(X2), F19
+       MOVD    (8*20)(X2), F20
+       MOVD    (8*21)(X2), F21
+       MOVD    (8*22)(X2), F22
+       MOVD    (8*23)(X2), F23
+       MOVD    (8*24)(X2), F24
+       MOVD    (8*25)(X2), F25
+       MOVD    (8*26)(X2), F26
+       MOVD    (8*27)(X2), F27
+
+       RET
+
+TEXT _rt0_riscv64_lib_go(SB),NOSPLIT,$0
+       MOV     _rt0_riscv64_lib_argc<>(SB), A0
+       MOV     _rt0_riscv64_lib_argv<>(SB), A1
+       MOV     $runtime·rt0_go(SB), T0
+       JALR    ZERO, T0
+
+DATA _rt0_riscv64_lib_argc<>(SB)/8, $0
+GLOBL _rt0_riscv64_lib_argc<>(SB),NOPTR, $8
+DATA _rt0_riscv64_lib_argv<>(SB)/8, $0
+GLOBL _rt0_riscv64_lib_argv<>(SB),NOPTR, $8
+
 // func rt0_go()
 TEXT runtime·rt0_go(SB),NOSPLIT|TOPFRAME,$0
        // X2 = stack; A0 = argc; A1 = argv
index dc46b7047669ad9e67f485457f189b382d3ee2e6..f3fb4ffbe75ffd8c7617bec485c828403277cc95 100644 (file)
@@ -12,100 +12,8 @@ TEXT _rt0_riscv64_freebsd(SB),NOSPLIT|NOFRAME,$0
 
 // When building with -buildmode=c-shared, this symbol is called when the shared
 // library is loaded.
-TEXT _rt0_riscv64_freebsd_lib(SB),NOSPLIT,$224
-       // Preserve callee-save registers, along with X1 (LR).
-       MOV     X1, (8*3)(X2)
-       MOV     X8, (8*4)(X2)
-       MOV     X9, (8*5)(X2)
-       MOV     X18, (8*6)(X2)
-       MOV     X19, (8*7)(X2)
-       MOV     X20, (8*8)(X2)
-       MOV     X21, (8*9)(X2)
-       MOV     X22, (8*10)(X2)
-       MOV     X23, (8*11)(X2)
-       MOV     X24, (8*12)(X2)
-       MOV     X25, (8*13)(X2)
-       MOV     X26, (8*14)(X2)
-       MOV     g, (8*15)(X2)
-       MOVD    F8, (8*16)(X2)
-       MOVD    F9, (8*17)(X2)
-       MOVD    F18, (8*18)(X2)
-       MOVD    F19, (8*19)(X2)
-       MOVD    F20, (8*20)(X2)
-       MOVD    F21, (8*21)(X2)
-       MOVD    F22, (8*22)(X2)
-       MOVD    F23, (8*23)(X2)
-       MOVD    F24, (8*24)(X2)
-       MOVD    F25, (8*25)(X2)
-       MOVD    F26, (8*26)(X2)
-       MOVD    F27, (8*27)(X2)
-
-       // Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
-       MOV     X0, g
-
-       MOV     A0, _rt0_riscv64_freebsd_lib_argc<>(SB)
-       MOV     A1, _rt0_riscv64_freebsd_lib_argv<>(SB)
-
-       // Synchronous initialization.
-       MOV     $runtime·libpreinit(SB), T0
-       JALR    RA, T0
-
-       // Create a new thread to do the runtime initialization and return.
-       MOV     _cgo_sys_thread_create(SB), T0
-       BEQZ    T0, nocgo
-       MOV     $_rt0_riscv64_freebsd_lib_go(SB), A0
-       MOV     $0, A1
-       JALR    RA, T0
-       JMP     restore
-
-nocgo:
-       MOV     $0x800000, A0                     // stacksize = 8192KB
-       MOV     $_rt0_riscv64_freebsd_lib_go(SB), A1
-       MOV     A0, 8(X2)
-       MOV     A1, 16(X2)
-       MOV     $runtime·newosproc0(SB), T0
-       JALR    RA, T0
-
-restore:
-       // Restore callee-save registers, along with X1 (LR).
-       MOV     (8*3)(X2), X1
-       MOV     (8*4)(X2), X8
-       MOV     (8*5)(X2), X9
-       MOV     (8*6)(X2), X18
-       MOV     (8*7)(X2), X19
-       MOV     (8*8)(X2), X20
-       MOV     (8*9)(X2), X21
-       MOV     (8*10)(X2), X22
-       MOV     (8*11)(X2), X23
-       MOV     (8*12)(X2), X24
-       MOV     (8*13)(X2), X25
-       MOV     (8*14)(X2), X26
-       MOV     (8*15)(X2), g
-       MOVD    (8*16)(X2), F8
-       MOVD    (8*17)(X2), F9
-       MOVD    (8*18)(X2), F18
-       MOVD    (8*19)(X2), F19
-       MOVD    (8*20)(X2), F20
-       MOVD    (8*21)(X2), F21
-       MOVD    (8*22)(X2), F22
-       MOVD    (8*23)(X2), F23
-       MOVD    (8*24)(X2), F24
-       MOVD    (8*25)(X2), F25
-       MOVD    (8*26)(X2), F26
-       MOVD    (8*27)(X2), F27
-
-       RET
-
-TEXT _rt0_riscv64_freebsd_lib_go(SB),NOSPLIT,$0
-       MOV     _rt0_riscv64_freebsd_lib_argc<>(SB), A0
-       MOV     _rt0_riscv64_freebsd_lib_argv<>(SB), A1
-       MOV     $runtime·rt0_go(SB), T0
-       JALR    ZERO, T0
-
-DATA _rt0_riscv64_freebsd_lib_argc<>(SB)/8, $0
-GLOBL _rt0_riscv64_freebsd_lib_argc<>(SB),NOPTR, $8
-DATA _rt0_riscv64_freebsd_lib_argv<>(SB)/8, $0
-GLOBL _rt0_riscv64_freebsd_lib_argv<>(SB),NOPTR, $8
+TEXT _rt0_riscv64_freebsd_lib(SB),NOSPLIT,$0
+       JMP     _rt0_riscv64_lib(SB)
 
 TEXT main(SB),NOSPLIT|NOFRAME,$0
        MOV     $runtime·rt0_go(SB), T0
index d6b8ac85dca6468065b71d11e831fca5c1722356..4139c9bcecdc628e3c7943c86657ec6fc091c52c 100644 (file)
@@ -11,100 +11,8 @@ TEXT _rt0_riscv64_linux(SB),NOSPLIT|NOFRAME,$0
 
 // When building with -buildmode=c-shared, this symbol is called when the shared
 // library is loaded.
-TEXT _rt0_riscv64_linux_lib(SB),NOSPLIT,$224
-       // Preserve callee-save registers, along with X1 (LR).
-       MOV     X1, (8*3)(X2)
-       MOV     X8, (8*4)(X2)
-       MOV     X9, (8*5)(X2)
-       MOV     X18, (8*6)(X2)
-       MOV     X19, (8*7)(X2)
-       MOV     X20, (8*8)(X2)
-       MOV     X21, (8*9)(X2)
-       MOV     X22, (8*10)(X2)
-       MOV     X23, (8*11)(X2)
-       MOV     X24, (8*12)(X2)
-       MOV     X25, (8*13)(X2)
-       MOV     X26, (8*14)(X2)
-       MOV     g, (8*15)(X2)
-       MOVD    F8, (8*16)(X2)
-       MOVD    F9, (8*17)(X2)
-       MOVD    F18, (8*18)(X2)
-       MOVD    F19, (8*19)(X2)
-       MOVD    F20, (8*20)(X2)
-       MOVD    F21, (8*21)(X2)
-       MOVD    F22, (8*22)(X2)
-       MOVD    F23, (8*23)(X2)
-       MOVD    F24, (8*24)(X2)
-       MOVD    F25, (8*25)(X2)
-       MOVD    F26, (8*26)(X2)
-       MOVD    F27, (8*27)(X2)
-
-       // Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
-       MOV     X0, g
-
-       MOV     A0, _rt0_riscv64_linux_lib_argc<>(SB)
-       MOV     A1, _rt0_riscv64_linux_lib_argv<>(SB)
-
-       // Synchronous initialization.
-       MOV     $runtime·libpreinit(SB), T0
-       JALR    RA, T0
-
-       // Create a new thread to do the runtime initialization and return.
-       MOV     _cgo_sys_thread_create(SB), T0
-       BEQZ    T0, nocgo
-       MOV     $_rt0_riscv64_linux_lib_go(SB), A0
-       MOV     $0, A1
-       JALR    RA, T0
-       JMP     restore
-
-nocgo:
-       MOV     $0x800000, A0                     // stacksize = 8192KB
-       MOV     $_rt0_riscv64_linux_lib_go(SB), A1
-       MOV     A0, 8(X2)
-       MOV     A1, 16(X2)
-       MOV     $runtime·newosproc0(SB), T0
-       JALR    RA, T0
-
-restore:
-       // Restore callee-save registers, along with X1 (LR).
-       MOV     (8*3)(X2), X1
-       MOV     (8*4)(X2), X8
-       MOV     (8*5)(X2), X9
-       MOV     (8*6)(X2), X18
-       MOV     (8*7)(X2), X19
-       MOV     (8*8)(X2), X20
-       MOV     (8*9)(X2), X21
-       MOV     (8*10)(X2), X22
-       MOV     (8*11)(X2), X23
-       MOV     (8*12)(X2), X24
-       MOV     (8*13)(X2), X25
-       MOV     (8*14)(X2), X26
-       MOV     (8*15)(X2), g
-       MOVD    (8*16)(X2), F8
-       MOVD    (8*17)(X2), F9
-       MOVD    (8*18)(X2), F18
-       MOVD    (8*19)(X2), F19
-       MOVD    (8*20)(X2), F20
-       MOVD    (8*21)(X2), F21
-       MOVD    (8*22)(X2), F22
-       MOVD    (8*23)(X2), F23
-       MOVD    (8*24)(X2), F24
-       MOVD    (8*25)(X2), F25
-       MOVD    (8*26)(X2), F26
-       MOVD    (8*27)(X2), F27
-
-       RET
-
-TEXT _rt0_riscv64_linux_lib_go(SB),NOSPLIT,$0
-       MOV     _rt0_riscv64_linux_lib_argc<>(SB), A0
-       MOV     _rt0_riscv64_linux_lib_argv<>(SB), A1
-       MOV     $runtime·rt0_go(SB), T0
-       JALR    ZERO, T0
-
-DATA _rt0_riscv64_linux_lib_argc<>(SB)/8, $0
-GLOBL _rt0_riscv64_linux_lib_argc<>(SB),NOPTR, $8
-DATA _rt0_riscv64_linux_lib_argv<>(SB)/8, $0
-GLOBL _rt0_riscv64_linux_lib_argv<>(SB),NOPTR, $8
+TEXT _rt0_riscv64_linux_lib(SB),NOSPLIT,$0
+       JMP     _rt0_riscv64_lib(SB)
 
 
 TEXT main(SB),NOSPLIT|NOFRAME,$0