xref: /llvm-project/compiler-rt/test/orc/TestCases/FreeBSD/x86-64/priority-static-initializer.S (revision 2be5abb7e9a1f837c550745900f0fb155b440122)
1// Test that ELF static initializers with different constructor priorities work
2// and are executed in the proper order.
3//
4// RUN: %clang -c -o %t %s
5// RUN: %llvm_jitlink %t | FileCheck %s
6
7// CHECK: constructor 100
8// CHECK-NEXT: constructor 200
9// CHECK-NEXT: constructor 65535
10// CHECK-NEXT: main
11// CHECK-NEXT: destructor
12
13	.text
14
15	.globl	destructor
16	.p2align	4, 0x90
17	.type	destructor,@function
18destructor:
19.Ldestructor$local:
20
21	leaq	.L.str.d(%rip), %rdi
22	jmp	puts@PLT
23
24	.globl	main
25	.p2align	4, 0x90
26	.type	main,@function
27main:
28.Lmain$local:
29
30	pushq	%rax
31	leaq	.L.str(%rip), %rdi
32	callq	puts@PLT
33	xorl	%eax, %eax
34	popq	%rcx
35	retq
36
37	.p2align	4, 0x90
38	.type	constructor.65535,@function
39constructor.65535:
40
41	pushq	%rax
42	leaq	.L.str.65535(%rip), %rdi
43	callq	puts@PLT
44	leaq	.Ldestructor$local(%rip), %rdi
45	leaq	__dso_handle(%rip), %rdx
46	xorl	%esi, %esi
47	popq	%rax
48	jmp	__cxa_atexit@PLT
49
50	.p2align	4, 0x90
51	.type	constructor.200,@function
52constructor.200:
53
54	leaq	.L.str.200(%rip), %rdi
55	jmp	puts@PLT
56
57	.p2align	4, 0x90
58	.type	constructor.100,@function
59constructor.100:
60
61	leaq	.L.str.100(%rip), %rdi
62	jmp	puts@PLT
63
64	.hidden	__dso_handle
65	.type	.L.str,@object
66	.section	.rodata.str1.1,"aMS",@progbits,1
67.L.str:
68	.asciz	"main"
69	.size	.L.str, 5
70
71	.type	.L.str.100,@object
72.L.str.100:
73	.asciz	"constructor 100"
74	.size	.L.str.100, 16
75
76	.type	.L.str.200,@object
77.L.str.200:
78	.asciz	"constructor 200"
79	.size	.L.str.200, 16
80
81	.type	.L.str.65535,@object
82.L.str.65535:
83	.asciz	"constructor 65535"
84	.size	.L.str.65535, 18
85
86	.type	.L.str.d,@object
87.L.str.d:
88	.asciz	"destructor"
89	.size	.L.str.d, 11
90
91	.section	.init_array.100,"aw",@init_array
92	.p2align	3
93	.quad	constructor.100
94	.section	.init_array.200,"aw",@init_array
95	.p2align	3
96	.quad	constructor.200
97	.section	.init_array,"aw",@init_array
98	.p2align	3
99	.quad	constructor.65535
100