]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: move loong64 library entry point to os-agnostic file
authorqmuntal <quimmuntal@gmail.com>
Wed, 24 Sep 2025 08:34:25 +0000 (10:34 +0200)
committerQuim Muntal <quimmuntal@gmail.com>
Wed, 1 Oct 2025 06:52:53 +0000 (23:52 -0700)
The library entry point for loong64 is agnostic to the OS, so move it to
asm_loong64.s. This is similar to what we do for other architectures.

Cq-Include-Trybots: luci.golang.try:gotip-linux-loong64
Change-Id: I6915eb76d3ea72a779e05e78d85f24793169c61f
Reviewed-on: https://go-review.googlesource.com/c/go/+/706416
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Keith Randall <khr@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/runtime/asm_loong64.s
src/runtime/rt0_linux_loong64.s

index ee7f825e1f6681a9fd2a2b8041745812e9e15e1f..586bf89a5d37298d65280d6cb1a8da1c50c7f693 100644 (file)
@@ -6,6 +6,57 @@
 #include "go_tls.h"
 #include "funcdata.h"
 #include "textflag.h"
+#include "cgo/abi_loong64.h"
+
+// When building with -buildmode=c-shared, this symbol is called when the shared
+// library is loaded.
+TEXT _rt0_loong64_lib(SB),NOSPLIT,$168
+       // Preserve callee-save registers.
+       SAVE_R22_TO_R31(3*8)
+       SAVE_F24_TO_F31(13*8)
+
+       // Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
+       MOVV    R0, g
+
+       MOVV    R4, _rt0_loong64_lib_argc<>(SB)
+       MOVV    R5, _rt0_loong64_lib_argv<>(SB)
+
+       // Synchronous initialization.
+       MOVV    $runtime·libpreinit(SB), R19
+       JAL     (R19)
+
+       // Create a new thread to do the runtime initialization and return.
+       MOVV    _cgo_sys_thread_create(SB), R19
+       BEQ     R19, nocgo
+       MOVV    $_rt0_loong64_lib_go(SB), R4
+       MOVV    $0, R5
+       JAL     (R19)
+       JMP     restore
+
+nocgo:
+       MOVV    $0x800000, R4                     // stacksize = 8192KB
+       MOVV    $_rt0_loong64_lib_go(SB), R5
+       MOVV    R4, 8(R3)
+       MOVV    R5, 16(R3)
+       MOVV    $runtime·newosproc0(SB), R19
+       JAL     (R19)
+
+restore:
+       // Restore callee-save registers.
+       RESTORE_R22_TO_R31(3*8)
+       RESTORE_F24_TO_F31(13*8)
+       RET
+
+TEXT _rt0_loong64_lib_go(SB),NOSPLIT,$0
+       MOVV    _rt0_loong64_lib_argc<>(SB), R4
+       MOVV    _rt0_loong64_lib_argv<>(SB), R5
+       MOVV    $runtime·rt0_go(SB),R19
+       JMP     (R19)
+
+DATA _rt0_loong64_lib_argc<>(SB)/8, $0
+GLOBL _rt0_loong64_lib_argc<>(SB),NOPTR, $8
+DATA _rt0_loong64_lib_argv<>(SB)/8, $0
+GLOBL _rt0_loong64_lib_argv<>(SB),NOPTR, $8
 
 #define        REGCTXT R29
 
index b52f7d530a6a9806143c46ffd3bc9d903fa7f06e..d8da4461a2f56d69a40b029bd622b4b7960e943f 100644 (file)
@@ -3,7 +3,6 @@
 // license that can be found in the LICENSE file.
 
 #include "textflag.h"
-#include "cgo/abi_loong64.h"
 
 TEXT _rt0_loong64_linux(SB),NOSPLIT|NOFRAME,$0
        // In a statically linked binary, the stack contains argc,
@@ -16,53 +15,8 @@ TEXT _rt0_loong64_linux(SB),NOSPLIT|NOFRAME,$0
 
 // When building with -buildmode=c-shared, this symbol is called when the shared
 // library is loaded.
-TEXT _rt0_loong64_linux_lib(SB),NOSPLIT,$168
-       // Preserve callee-save registers.
-       SAVE_R22_TO_R31(3*8)
-       SAVE_F24_TO_F31(13*8)
-
-       // Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
-       MOVV    R0, g
-
-       MOVV    R4, _rt0_loong64_linux_lib_argc<>(SB)
-       MOVV    R5, _rt0_loong64_linux_lib_argv<>(SB)
-
-       // Synchronous initialization.
-       MOVV    $runtime·libpreinit(SB), R19
-       JAL     (R19)
-
-       // Create a new thread to do the runtime initialization and return.
-       MOVV    _cgo_sys_thread_create(SB), R19
-       BEQ     R19, nocgo
-       MOVV    $_rt0_loong64_linux_lib_go(SB), R4
-       MOVV    $0, R5
-       JAL     (R19)
-       JMP     restore
-
-nocgo:
-       MOVV    $0x800000, R4                     // stacksize = 8192KB
-       MOVV    $_rt0_loong64_linux_lib_go(SB), R5
-       MOVV    R4, 8(R3)
-       MOVV    R5, 16(R3)
-       MOVV    $runtime·newosproc0(SB), R19
-       JAL     (R19)
-
-restore:
-       // Restore callee-save registers.
-       RESTORE_R22_TO_R31(3*8)
-       RESTORE_F24_TO_F31(13*8)
-       RET
-
-TEXT _rt0_loong64_linux_lib_go(SB),NOSPLIT,$0
-       MOVV    _rt0_loong64_linux_lib_argc<>(SB), R4
-       MOVV    _rt0_loong64_linux_lib_argv<>(SB), R5
-       MOVV    $runtime·rt0_go(SB),R19
-       JMP     (R19)
-
-DATA _rt0_loong64_linux_lib_argc<>(SB)/8, $0
-GLOBL _rt0_loong64_linux_lib_argc<>(SB),NOPTR, $8
-DATA _rt0_loong64_linux_lib_argv<>(SB)/8, $0
-GLOBL _rt0_loong64_linux_lib_argv<>(SB),NOPTR, $8
+TEXT _rt0_loong64_linux_lib(SB),NOSPLIT,$0
+       JMP     _rt0_loong64_lib(SB)
 
 TEXT main(SB),NOSPLIT|NOFRAME,$0
        // in external linking, glibc jumps to main with argc in R4