xref: /llvm-project/compiler-rt/test/orc/TestCases/Linux/ppc64/trivial-static-initializer.S (revision 5cb2a78ac2fe861888db7d129dacdd33e8bf6a40)
1// Test that basic ELF static initializers work. The main function in this
2// test returns the value of 'x', which is initially 1 in the data section,
3// and reset to 0 if the _static_init function is run. If the static initializer
4// does not run then main will return 1, causing the test to be treated as a
5// failure.
6//
7// RUN: %clang -c -o %t %s
8// RUN: %llvm_jitlink %t
9	.text
10	.abiversion 2
11	.file	"init.c"
12	.globl	static_init
13	.p2align	4
14	.type	static_init,@function
15static_init:
16.Lfunc_begin0:
17.Lfunc_gep0:
18	addis 2, 12, .TOC.-.Lfunc_gep0@ha
19	addi 2, 2, .TOC.-.Lfunc_gep0@l
20.Lfunc_lep0:
21	.localentry	static_init, .Lfunc_lep0-.Lfunc_gep0
22	addis 3, 2, x@toc@ha
23	li 4, 0
24	stw 4, x@toc@l(3)
25	blr
26	.long	0
27	.quad	0
28.Lfunc_end0:
29	.size	static_init, .Lfunc_end0-.Lfunc_begin0
30
31	.globl	main
32	.p2align	4
33	.type	main,@function
34main:
35.Lfunc_begin1:
36.Lfunc_gep1:
37	addis 2, 12, .TOC.-.Lfunc_gep1@ha
38	addi 2, 2, .TOC.-.Lfunc_gep1@l
39.Lfunc_lep1:
40	.localentry	main, .Lfunc_lep1-.Lfunc_gep1
41	addis 3, 2, x@toc@ha
42	lwa 3, x@toc@l(3)
43	blr
44	.long	0
45	.quad	0
46.Lfunc_end1:
47	.size	main, .Lfunc_end1-.Lfunc_begin1
48
49	.type	x,@object
50	.data
51	.globl	x
52	.p2align	2, 0x0
53x:
54	.long	1
55	.size	x, 4
56
57	.section	.init_array.0,"aw",@init_array
58	.p2align	3
59	.quad	static_init
60