Home | History | Annotate | Download | only in runtime
      1 #include "textflag.h"
      2 
      3 TEXT _rt0_ppc64le_linux(SB),NOSPLIT,$0
      4 	BR _main<>(SB)
      5 
      6 TEXT _main<>(SB),NOSPLIT,$-8
      7 	// In a statically linked binary, the stack contains argc,
      8 	// argv as argc string pointers followed by a NULL, envv as a
      9 	// sequence of string pointers followed by a NULL, and auxv.
     10 	// There is no TLS base pointer.
     11 	//
     12 	// In a dynamically linked binary, r3 contains argc, r4
     13 	// contains argv, r5 contains envp, r6 contains auxv, and r13
     14 	// contains the TLS pointer.
     15 	//
     16 	// Figure out which case this is by looking at r4: if it's 0,
     17 	// we're statically linked; otherwise we're dynamically
     18 	// linked.
     19 	CMP	R0, R4
     20 	BNE	dlink
     21 
     22 	// Statically linked
     23 	MOVD	0(R1), R3 // argc
     24 	ADD	$8, R1, R4 // argv
     25 	MOVD	$runtimetls0(SB), R13 // TLS
     26 	ADD	$0x7000, R13
     27 
     28 dlink:
     29 	BR	main(SB)
     30 
     31 TEXT main(SB),NOSPLIT,$-8
     32 	MOVD	$runtimert0_go(SB), R31
     33 	MOVD	R31, CTR
     34 	BR	(CTR)
     35