| 1 | // RUN: %clang -c -o %t %s |
| 2 | // RUN: %llvm_jitlink %t |
| 3 | // |
| 4 | // Test that basic MachO TLVs work by adding together TLVs with values |
| 5 | // 0, 1, and -1, and returning the result (0 for success). This setup |
| 6 | // tests both zero-initialized (__thread_bss) and non-zero-initialized |
| 7 | // (__thread_data) secitons. |
| 8 | |
| 9 | .section __TEXT,__text,regular,pure_instructions |
| 10 | .build_version macos, 11, 0 |
| 11 | |
| 12 | .globl _main |
| 13 | .p2align 4, 0x90 |
| 14 | _main: |
| 15 | pushq %rax |
| 16 | movq _x@TLVP(%rip), %rdi |
| 17 | callq *(%rdi) |
| 18 | movq %rax, %rcx |
| 19 | movq _y@TLVP(%rip), %rdi |
| 20 | callq *(%rdi) |
| 21 | movl (%rax), %edx |
| 22 | addl (%rcx), %edx |
| 23 | movq _z@TLVP(%rip), %rdi |
| 24 | callq *(%rdi) |
| 25 | addl (%rax), %edx |
| 26 | movl %edx, %eax |
| 27 | popq %rcx |
| 28 | retq |
| 29 | |
| 30 | .tbss _x$tlv$init, 4, 2 |
| 31 | |
| 32 | .section __DATA,__thread_vars,thread_local_variables |
| 33 | .globl _x |
| 34 | _x: |
| 35 | .quad __tlv_bootstrap |
| 36 | .quad 0 |
| 37 | .quad _x$tlv$init |
| 38 | |
| 39 | .section __DATA,__thread_data,thread_local_regular |
| 40 | .p2align 2 |
| 41 | _y$tlv$init: |
| 42 | .long 4294967295 |
| 43 | |
| 44 | .section __DATA,__thread_vars,thread_local_variables |
| 45 | .globl _y |
| 46 | _y: |
| 47 | .quad __tlv_bootstrap |
| 48 | .quad 0 |
| 49 | .quad _y$tlv$init |
| 50 | |
| 51 | .section __DATA,__thread_data,thread_local_regular |
| 52 | .p2align 2 |
| 53 | _z$tlv$init: |
| 54 | .long 1 |
| 55 | |
| 56 | .section __DATA,__thread_vars,thread_local_variables |
| 57 | .globl _z |
| 58 | _z: |
| 59 | .quad __tlv_bootstrap |
| 60 | .quad 0 |
| 61 | .quad _z$tlv$init |
| 62 | |
| 63 | .subsections_via_symbols |
| 64 | |