blob: 0e3d582809faf9a72b57fd1b2d7b382d2d0e2fc5 [file] [log] [blame]
Clément Chigot9f78aa72018-09-28 14:54:43 +02001// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5#include "textflag.h"
6
7// _rt0_ppc64_aix is a function descriptor of the entrypoint function
8// __start. This name is needed by cmd/link.
9DATA _rt0_ppc64_aix+0(SB)/8, $__start<>(SB)
10DATA _rt0_ppc64_aix+8(SB)/8, $TOC(SB)
11GLOBL _rt0_ppc64_aix(SB), NOPTR, $16
12
13
14// The starting function must return in the loader to
15// initialise some librairies, especially libthread which
16// creates the main thread and adds the TLS in R13
17// R19 contains a function descriptor to the loader function
18// which needs to be called.
19// This code is similar to the __start function in C
20TEXT __start<>(SB),NOSPLIT,$-8
21 XOR R0, R0
22 MOVD $libc___n_pthreads(SB), R4
23 MOVD 0(R4), R4
24 MOVD $libc___mod_init(SB), R5
25 MOVD 0(R5), R5
26 MOVD 0(R19), R0
27 MOVD R2, 40(R1)
28 MOVD 8(R19), R2
29 MOVD R18, R3
30 MOVD R0, CTR
31 BL (CTR) // Return to AIX loader
32
33 // Launch rt0_go
34 MOVD 40(R1), R2
35 MOVD R14, R3 // argc
36 MOVD R15, R4 // argv
37 MOVD $runtime·rt0_go(SB), R12
38 MOVD R12, CTR
39 BR (CTR)
40