| 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 # -- Begin function main |
| 12 | .p2align 4, 0x90 |
| 13 | .type main,@function |
| 14 | main: # @main |
| 15 | # %bb.0: # %entry |
| 16 | pushq %rbp |
| 17 | movq %rsp, %rbp |
| 18 | subq $32, %rsp |
| 19 | movl $0, -4(%rbp) |
| 20 | movl %edi, -8(%rbp) |
| 21 | movq %rsi, -16(%rbp) |
| 22 | data16 |
| 23 | leaq x@TLSGD(%rip), %rdi |
| 24 | data16 |
| 25 | data16 |
| 26 | rex64 |
| 27 | callq __tls_get_addr@PLT |
| 28 | movl (%rax), %eax |
| 29 | movl %eax, -24(%rbp) # 4-byte Spill |
| 30 | data16 |
| 31 | leaq y@TLSGD(%rip), %rdi |
| 32 | data16 |
| 33 | data16 |
| 34 | rex64 |
| 35 | callq __tls_get_addr@PLT |
| 36 | movq %rax, %rcx |
| 37 | movl -24(%rbp), %eax # 4-byte Reload |
| 38 | movl (%rcx), %ecx |
| 39 | addl %ecx, %eax |
| 40 | movl %eax, -20(%rbp) # 4-byte Spill |
| 41 | data16 |
| 42 | leaq z@TLSGD(%rip), %rdi |
| 43 | data16 |
| 44 | data16 |
| 45 | rex64 |
| 46 | callq __tls_get_addr@PLT |
| 47 | movq %rax, %rcx |
| 48 | movl -20(%rbp), %eax # 4-byte Reload |
| 49 | movl (%rcx), %ecx |
| 50 | addl %ecx, %eax |
| 51 | addq $32, %rsp |
| 52 | popq %rbp |
| 53 | retq |
| 54 | .Lfunc_end0: |
| 55 | .size main, .Lfunc_end0-main |
| 56 | # -- End function |
| 57 | .type x,@object # @x |
| 58 | .section .tbss,"awT" ,@nobits |
| 59 | .globl x |
| 60 | .p2align 2 |
| 61 | x: |
| 62 | .long 0 # 0x0 |
| 63 | .size x, 4 |
| 64 | |
| 65 | .type y,@object # @y |
| 66 | .section .tdata,"awT" ,@progbits |
| 67 | .globl y |
| 68 | .p2align 2 |
| 69 | y: |
| 70 | .long 1 # 0x1 |
| 71 | .size y, 4 |
| 72 | |
| 73 | .type z,@object # @z |
| 74 | .globl z |
| 75 | .p2align 2 |
| 76 | z: |
| 77 | .long 4294967295 # 0xffffffff |
| 78 | .size z, 4 |
| 79 | |
| 80 | .section ".note.GNU-stack" ,"" ,@progbits |
| 81 | .addrsig |
| 82 | |