1// Test that basic MachO TLVs work by adding together TLVs with values
2// 0, 1, and -1, and returning the result (0 for success). This setup
3// tests both zero-initialized (__thread_bss) and non-zero-initialized
4// (__thread_data) secitons.
5//
6// RUN: %clang -c -o %t %s
7// RUN: %llvm_jitlink %t
8
9 .section __TEXT,__text,regular,pure_instructions
10 .build_version macos, 12, 0 sdk_version 12, 0
11 .globl _main ; -- Begin function main
12 .p2align 2
13_main: ; @main
14 .cfi_startproc
15; %bb.0:
16 sub sp, sp, #32 ; =32
17 stp x29, x30, [sp, #16] ; 16-byte Folded Spill
18 add x29, sp, #16 ; =16
19 .cfi_def_cfa w29, 16
20 .cfi_offset w30, -8
21 .cfi_offset w29, -16
22 adrp x0, _x@TLVPPAGE
23 ldr x0, [x0, _x@TLVPPAGEOFF]
24 ldr x8, [x0]
25 blr x8
26 mov x8, x0
27 adrp x0, _y@TLVPPAGE
28 ldr x0, [x0, _y@TLVPPAGEOFF]
29 ldr x9, [x0]
30 blr x9
31 mov x9, x0
32 adrp x0, _z@TLVPPAGE
33 ldr x0, [x0, _z@TLVPPAGEOFF]
34 ldr x10, [x0]
35 blr x10
36 stur wzr, [x29, #-4]
37 ldr w8, [x8]
38 ldr w9, [x9]
39 add w8, w8, w9
40 ldr w9, [x0]
41 add w0, w8, w9
42 ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
43 add sp, sp, #32 ; =32
44 ret
45 .cfi_endproc
46 ; -- End function
47.tbss _x$tlv$init, 4, 2 ; @x
48
49 .section __DATA,__thread_vars,thread_local_variables
50 .globl _x
51_x:
52 .quad __tlv_bootstrap
53 .quad 0
54 .quad _x$tlv$init
55
56 .section __DATA,__thread_data,thread_local_regular
57 .p2align 2 ; @y
58_y$tlv$init:
59 .long 4294967295 ; 0xffffffff
60
61 .section __DATA,__thread_vars,thread_local_variables
62 .globl _y
63_y:
64 .quad __tlv_bootstrap
65 .quad 0
66 .quad _y$tlv$init
67
68 .section __DATA,__thread_data,thread_local_regular
69 .p2align 2 ; @z
70_z$tlv$init:
71 .long 1 ; 0x1
72
73 .section __DATA,__thread_vars,thread_local_variables
74 .globl _z
75_z:
76 .quad __tlv_bootstrap
77 .quad 0
78 .quad _z$tlv$init
79
80.subsections_via_symbols
81

source code of compiler-rt/test/orc/TestCases/Darwin/arm64/trivial-tlv.S