liyujie
2025-08-28 d9927380ed7c8366f762049be9f3fee225860833
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Copyright 2018 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.
 
#include "textflag.h"
 
// _rt0_ppc64_aix is a function descriptor of the entrypoint function
// __start. This name is needed by cmd/link.
DATA    _rt0_ppc64_aix+0(SB)/8, $__start<>(SB)
DATA    _rt0_ppc64_aix+8(SB)/8, $TOC(SB)
GLOBL    _rt0_ppc64_aix(SB), NOPTR, $16
 
 
// The starting function must return in the loader to
// initialise some librairies, especially libthread which
// creates the main thread and adds the TLS in R13
// R19 contains a function descriptor to the loader function
// which needs to be called.
// This code is similar to the __start function in C
TEXT __start<>(SB),NOSPLIT,$-8
   XOR R0, R0
   MOVD $libc___n_pthreads(SB), R4
   MOVD 0(R4), R4
   MOVD $libc___mod_init(SB), R5
   MOVD 0(R5), R5
   MOVD 0(R19), R0
   MOVD R2, 40(R1)
   MOVD 8(R19), R2
   MOVD R18, R3
   MOVD R0, CTR
   BL (CTR) // Return to AIX loader
 
   // Launch rt0_go
   MOVD 40(R1), R2
   MOVD R14, R3 // argc
   MOVD R15, R4 // argv
   MOVD $runtime·rt0_go(SB), R12
   MOVD R12, CTR
   BR (CTR)