1 | // RUN: %clang -c -o %t %s |
2 | // RUN: %llvm_jitlink %t |
3 | // |
4 | // Test that basic ELF TLS work by adding together TLSs with values |
5 | // 0, 1, and -1, and returning the result (0 for success). This setup |
6 | // tests both zero-initialized (.tbss) and non-zero-initialized |
7 | // (.tdata) sections. |
8 | |
9 | .text |
10 | .file "tlstest.cpp" |
11 | .globl main |
12 | .p2align 2 |
13 | .type main,@function |
14 | main: |
15 | stp x29, x30, [sp, #-16]! |
16 | mov x29, sp |
17 | adrp x0, :tlsdesc:x |
18 | ldr x1, [x0, :tlsdesc_lo12:x] |
19 | add x0, x0, :tlsdesc_lo12:x |
20 | .tlsdesccall x |
21 | blr x1 |
22 | mrs x8, TPIDR_EL0 |
23 | ldr w9, [x8, x0] |
24 | adrp x0, :tlsdesc:y |
25 | ldr x1, [x0, :tlsdesc_lo12:y] |
26 | add x0, x0, :tlsdesc_lo12:y |
27 | .tlsdesccall y |
28 | blr x1 |
29 | ldr w10, [x8, x0] |
30 | add w9, w10, w9 |
31 | adrp x0, :tlsdesc:z |
32 | ldr x1, [x0, :tlsdesc_lo12:z] |
33 | add x0, x0, :tlsdesc_lo12:z |
34 | .tlsdesccall z |
35 | blr x1 |
36 | ldr w8, [x8, x0] |
37 | add w0, w9, w8 |
38 | ldp x29, x30, [sp], #16 |
39 | ret |
40 | .Lfunc_end0: |
41 | .size main, .Lfunc_end0-main |
42 | |
43 | .type x,@object |
44 | .section .tdata,"awT" ,@progbits |
45 | .globl x |
46 | .p2align 2 |
47 | x: |
48 | .word 4294967295 |
49 | .size x, 4 |
50 | |
51 | .type y,@object |
52 | .section .tbss,"awT" ,@nobits |
53 | .globl y |
54 | .p2align 2 |
55 | y: |
56 | .word 0 |
57 | .size y, 4 |
58 | |
59 | .type z,@object |
60 | .section .tdata,"awT" ,@progbits |
61 | .globl z |
62 | .p2align 2 |
63 | z: |
64 | .word 1 |
65 | .size z, 4 |
66 | |