]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: unify ppc64/ppc64le library entry point
authorqmuntal <quimmuntal@gmail.com>
Wed, 24 Sep 2025 06:58:30 +0000 (08:58 +0200)
committerGopher Robot <gobot@golang.org>
Tue, 30 Sep 2025 21:49:31 +0000 (14:49 -0700)
Cq-Include-Trybots: luci.golang.try:gotip-linux-ppc64le_power10
Change-Id: Ifd7861488b1b47a5d30163552b51838f2bef7248
Reviewed-on: https://go-review.googlesource.com/c/go/+/706395
Reviewed-by: Carlos Amedee <carlos@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Auto-Submit: Keith Randall <khr@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/runtime/asm_ppc64x.s
src/runtime/rt0_aix_ppc64.s
src/runtime/rt0_linux_ppc64le.s

index fc70fa82046056f790374e9604962554be6085b6..3fbf11b5e9a2ad2c452be043d708749847bed101 100644 (file)
@@ -9,6 +9,63 @@
 #include "funcdata.h"
 #include "textflag.h"
 #include "asm_ppc64x.h"
+#include "cgo/abi_ppc64x.h"
+
+
+TEXT _rt0_ppc64x_lib(SB),NOSPLIT|NOFRAME,$0
+       // This is called with ELFv2 calling conventions. Convert to Go.
+       // Allocate argument storage for call to newosproc0.
+       STACK_AND_SAVE_HOST_TO_GO_ABI(16)
+
+       MOVD    R3, _rt0_ppc64x_lib_argc<>(SB)
+       MOVD    R4, _rt0_ppc64x_lib_argv<>(SB)
+
+       // Synchronous initialization.
+       MOVD    $runtime·libpreinit(SB), R12
+       MOVD    R12, CTR
+       BL      (CTR)
+
+       // Create a new thread to do the runtime initialization and return.
+       MOVD    _cgo_sys_thread_create(SB), R12
+       CMP     $0, R12
+       BEQ     nocgo
+       MOVD    $_rt0_ppc64x_lib_go(SB), R3
+       MOVD    $0, R4
+       MOVD    R12, CTR
+       BL      (CTR)
+       BR      done
+
+nocgo:
+       MOVD    $0x800000, R12                     // stacksize = 8192KB
+       MOVD    R12, 8+FIXED_FRAME(R1)
+       MOVD    $_rt0_ppc64x_lib_go(SB), R12
+       MOVD    R12, 16+FIXED_FRAME(R1)
+       MOVD    $runtime·newosproc0(SB),R12
+       MOVD    R12, CTR
+       BL      (CTR)
+
+done:
+       // Restore and return to ELFv2 caller.
+       UNSTACK_AND_RESTORE_GO_TO_HOST_ABI(16)
+       RET
+
+#ifdef GO_PPC64X_HAS_FUNCDESC
+DEFINE_PPC64X_FUNCDESC(_rt0_ppc64x_lib_go, __rt0_ppc64x_lib_go)
+TEXT __rt0_ppc64x_lib_go(SB),NOSPLIT,$0
+#else
+TEXT _rt0_ppc64x_lib_go(SB),NOSPLIT,$0
+#endif
+       MOVD    _rt0_ppc64x_lib_argc<>(SB), R3
+       MOVD    _rt0_ppc64x_lib_argv<>(SB), R4
+       MOVD    $runtime·rt0_go(SB), R12
+       MOVD    R12, CTR
+       BR      (CTR)
+
+DATA _rt0_ppc64x_lib_argc<>(SB)/8, $0
+GLOBL _rt0_ppc64x_lib_argc<>(SB),NOPTR, $8
+DATA _rt0_ppc64x_lib_argv<>(SB)/8, $0
+GLOBL _rt0_ppc64x_lib_argv<>(SB),NOPTR, $8
+
 
 #ifdef GOOS_aix
 #define cgoCalleeStackSize 48
index 74c57bb1dc9136bc7317e579dd7bab8eb070efd9..32f8c72156c9ee0d3758a0547afe5232233e34f8 100644 (file)
@@ -41,152 +41,5 @@ TEXT _main(SB),NOSPLIT,$-8
        MOVD R12, CTR
        BR (CTR)
 
-// Paramater save space required to cross-call into _cgo_sys_thread_create
-#define PARAM_SPACE 16
-
-TEXT _rt0_ppc64_aix_lib(SB),NOSPLIT,$-8
-       // Start with standard C stack frame layout and linkage.
-       MOVD    LR, R0
-       MOVD    R0, 16(R1) // Save LR in caller's frame.
-       MOVW    CR, R0     // Save CR in caller's frame
-       MOVD    R0, 8(R1)
-
-       MOVDU   R1, -344-PARAM_SPACE(R1) // Allocate frame.
-
-       // Preserve callee-save registers.
-       MOVD    R14, 48+PARAM_SPACE(R1)
-       MOVD    R15, 56+PARAM_SPACE(R1)
-       MOVD    R16, 64+PARAM_SPACE(R1)
-       MOVD    R17, 72+PARAM_SPACE(R1)
-       MOVD    R18, 80+PARAM_SPACE(R1)
-       MOVD    R19, 88+PARAM_SPACE(R1)
-       MOVD    R20, 96+PARAM_SPACE(R1)
-       MOVD    R21,104+PARAM_SPACE(R1)
-       MOVD    R22, 112+PARAM_SPACE(R1)
-       MOVD    R23, 120+PARAM_SPACE(R1)
-       MOVD    R24, 128+PARAM_SPACE(R1)
-       MOVD    R25, 136+PARAM_SPACE(R1)
-       MOVD    R26, 144+PARAM_SPACE(R1)
-       MOVD    R27, 152+PARAM_SPACE(R1)
-       MOVD    R28, 160+PARAM_SPACE(R1)
-       MOVD    R29, 168+PARAM_SPACE(R1)
-       MOVD    g, 176+PARAM_SPACE(R1) // R30
-       MOVD    R31, 184+PARAM_SPACE(R1)
-       FMOVD   F14, 192+PARAM_SPACE(R1)
-       FMOVD   F15, 200+PARAM_SPACE(R1)
-       FMOVD   F16, 208+PARAM_SPACE(R1)
-       FMOVD   F17, 216+PARAM_SPACE(R1)
-       FMOVD   F18, 224+PARAM_SPACE(R1)
-       FMOVD   F19, 232+PARAM_SPACE(R1)
-       FMOVD   F20, 240+PARAM_SPACE(R1)
-       FMOVD   F21, 248+PARAM_SPACE(R1)
-       FMOVD   F22, 256+PARAM_SPACE(R1)
-       FMOVD   F23, 264+PARAM_SPACE(R1)
-       FMOVD   F24, 272+PARAM_SPACE(R1)
-       FMOVD   F25, 280+PARAM_SPACE(R1)
-       FMOVD   F26, 288+PARAM_SPACE(R1)
-       FMOVD   F27, 296+PARAM_SPACE(R1)
-       FMOVD   F28, 304+PARAM_SPACE(R1)
-       FMOVD   F29, 312+PARAM_SPACE(R1)
-       FMOVD   F30, 320+PARAM_SPACE(R1)
-       FMOVD   F31, 328+PARAM_SPACE(R1)
-
-       // Synchronous initialization.
-       MOVD    $runtime·reginit(SB), R12
-       MOVD    R12, CTR
-       BL      (CTR)
-
-       MOVBZ   runtime·isarchive(SB), R3      // Check buildmode = c-archive
-       CMP             $0, R3
-       BEQ             done
-
-       MOVD    R14, _rt0_ppc64_aix_lib_argc<>(SB)
-       MOVD    R15, _rt0_ppc64_aix_lib_argv<>(SB)
-
-       MOVD    $runtime·libpreinit(SB), R12
-       MOVD    R12, CTR
-       BL      (CTR)
-
-       // Create a new thread to do the runtime initialization and return.
-       MOVD    _cgo_sys_thread_create(SB), R12
-       CMP     $0, R12
-       BEQ     nocgo
-       MOVD    $_rt0_ppc64_aix_lib_go(SB), R3
-       MOVD    $0, R4
-       MOVD    R2, 40(R1)
-       MOVD    8(R12), R2
-       MOVD    (R12), R12
-       MOVD    R12, CTR
-       BL      (CTR)
-       MOVD    40(R1), R2
-       BR      done
-
-nocgo:
-       MOVD    $0x800000, R12                                     // stacksize = 8192KB
-       MOVD    R12, 8(R1)
-       MOVD    $_rt0_ppc64_aix_lib_go(SB), R12
-       MOVD    R12, 16(R1)
-       MOVD    $runtime·newosproc0(SB),R12
-       MOVD    R12, CTR
-       BL      (CTR)
-
-done:
-       // Restore saved registers.
-       MOVD    48+PARAM_SPACE(R1), R14
-       MOVD    56+PARAM_SPACE(R1), R15
-       MOVD    64+PARAM_SPACE(R1), R16
-       MOVD    72+PARAM_SPACE(R1), R17
-       MOVD    80+PARAM_SPACE(R1), R18
-       MOVD    88+PARAM_SPACE(R1), R19
-       MOVD    96+PARAM_SPACE(R1), R20
-       MOVD    104+PARAM_SPACE(R1), R21
-       MOVD    112+PARAM_SPACE(R1), R22
-       MOVD    120+PARAM_SPACE(R1), R23
-       MOVD    128+PARAM_SPACE(R1), R24
-       MOVD    136+PARAM_SPACE(R1), R25
-       MOVD    144+PARAM_SPACE(R1), R26
-       MOVD    152+PARAM_SPACE(R1), R27
-       MOVD    160+PARAM_SPACE(R1), R28
-       MOVD    168+PARAM_SPACE(R1), R29
-       MOVD    176+PARAM_SPACE(R1), g // R30
-       MOVD    184+PARAM_SPACE(R1), R31
-       FMOVD   196+PARAM_SPACE(R1), F14
-       FMOVD   200+PARAM_SPACE(R1), F15
-       FMOVD   208+PARAM_SPACE(R1), F16
-       FMOVD   216+PARAM_SPACE(R1), F17
-       FMOVD   224+PARAM_SPACE(R1), F18
-       FMOVD   232+PARAM_SPACE(R1), F19
-       FMOVD   240+PARAM_SPACE(R1), F20
-       FMOVD   248+PARAM_SPACE(R1), F21
-       FMOVD   256+PARAM_SPACE(R1), F22
-       FMOVD   264+PARAM_SPACE(R1), F23
-       FMOVD   272+PARAM_SPACE(R1), F24
-       FMOVD   280+PARAM_SPACE(R1), F25
-       FMOVD   288+PARAM_SPACE(R1), F26
-       FMOVD   296+PARAM_SPACE(R1), F27
-       FMOVD   304+PARAM_SPACE(R1), F28
-       FMOVD   312+PARAM_SPACE(R1), F29
-       FMOVD   320+PARAM_SPACE(R1), F30
-       FMOVD   328+PARAM_SPACE(R1), F31
-
-       ADD     $344+PARAM_SPACE, R1
-
-       MOVD    8(R1), R0
-       MOVFL   R0, $0xff
-       MOVD    16(R1), R0
-       MOVD    R0, LR
-       RET
-
-DEFINE_PPC64X_FUNCDESC(_rt0_ppc64_aix_lib_go, __rt0_ppc64_aix_lib_go)
-
-TEXT __rt0_ppc64_aix_lib_go(SB),NOSPLIT,$0
-       MOVD    _rt0_ppc64_aix_lib_argc<>(SB), R3
-       MOVD    _rt0_ppc64_aix_lib_argv<>(SB), R4
-       MOVD    $runtime·rt0_go(SB), R12
-       MOVD    R12, CTR
-       BR      (CTR)
-
-DATA _rt0_ppc64_aix_lib_argc<>(SB)/8, $0
-GLOBL _rt0_ppc64_aix_lib_argc<>(SB),NOPTR, $8
-DATA _rt0_ppc64_aix_lib_argv<>(SB)/8, $0
-GLOBL _rt0_ppc64_aix_lib_argv<>(SB),NOPTR, $8
+TEXT _rt0_ppc64_aix_lib(SB),NOSPLIT,$0
+       JMP _rt0_ppc64x_lib(SB)
index 4b7d8e1b940a1ec608fd237019b934be497023e7..3a6e8863b2da1dcbf5b509d5f1942562426d6930 100644 (file)
@@ -5,60 +5,13 @@
 #include "go_asm.h"
 #include "textflag.h"
 #include "asm_ppc64x.h"
-#include "cgo/abi_ppc64x.h"
 
 TEXT _rt0_ppc64le_linux(SB),NOSPLIT,$0
        XOR R0, R0        // Make sure R0 is zero before _main
        BR _main<>(SB)
 
 TEXT _rt0_ppc64le_linux_lib(SB),NOSPLIT|NOFRAME,$0
-       // This is called with ELFv2 calling conventions. Convert to Go.
-       // Allocate argument storage for call to newosproc0.
-       STACK_AND_SAVE_HOST_TO_GO_ABI(16)
-
-       MOVD    R3, _rt0_ppc64le_linux_lib_argc<>(SB)
-       MOVD    R4, _rt0_ppc64le_linux_lib_argv<>(SB)
-
-       // Synchronous initialization.
-       MOVD    $runtime·libpreinit(SB), R12
-       MOVD    R12, CTR
-       BL      (CTR)
-
-       // Create a new thread to do the runtime initialization and return.
-       MOVD    _cgo_sys_thread_create(SB), R12
-       CMP     $0, R12
-       BEQ     nocgo
-       MOVD    $_rt0_ppc64le_linux_lib_go(SB), R3
-       MOVD    $0, R4
-       MOVD    R12, CTR
-       BL      (CTR)
-       BR      done
-
-nocgo:
-       MOVD    $0x800000, R12                     // stacksize = 8192KB
-       MOVD    R12, 8+FIXED_FRAME(R1)
-       MOVD    $_rt0_ppc64le_linux_lib_go(SB), R12
-       MOVD    R12, 16+FIXED_FRAME(R1)
-       MOVD    $runtime·newosproc0(SB),R12
-       MOVD    R12, CTR
-       BL      (CTR)
-
-done:
-       // Restore and return to ELFv2 caller.
-       UNSTACK_AND_RESTORE_GO_TO_HOST_ABI(16)
-       RET
-
-TEXT _rt0_ppc64le_linux_lib_go(SB),NOSPLIT,$0
-       MOVD    _rt0_ppc64le_linux_lib_argc<>(SB), R3
-       MOVD    _rt0_ppc64le_linux_lib_argv<>(SB), R4
-       MOVD    $runtime·rt0_go(SB), R12
-       MOVD    R12, CTR
-       BR      (CTR)
-
-DATA _rt0_ppc64le_linux_lib_argc<>(SB)/8, $0
-GLOBL _rt0_ppc64le_linux_lib_argc<>(SB),NOPTR, $8
-DATA _rt0_ppc64le_linux_lib_argv<>(SB)/8, $0
-GLOBL _rt0_ppc64le_linux_lib_argv<>(SB),NOPTR, $8
+       JMP _rt0_ppc64x_lib(SB)
 
 TEXT _main<>(SB),NOSPLIT,$-8
        // In a statically linked binary, the stack contains argc,