| // RUN: llvm-mc -triple=powerpc64-pc-linux -filetype=obj %s -o - | \ |
| // RUN: llvm-readobj -r - | FileCheck %s |
| |
| // Test correct relocation generation for thread-local storage using |
| // the general dynamic model and integrated assembly. |
| |
| |
| .file "/home/espindola/llvm/llvm/test/CodeGen/PowerPC/tls-gd-obj.ll" |
| .text |
| .globl main |
| .align 2 |
| .type main,@function |
| .section .opd,"aw",@progbits |
| main: # @main |
| .align 3 |
| .quad .L.main |
| .quad .TOC.@tocbase |
| .quad 0 |
| .text |
| .L.main: |
| # %bb.0: # %entry |
| addis 3, 2, a@got@tlsgd@ha |
| addi 3, 3, a@got@tlsgd@l |
| li 4, 0 |
| bl __tls_get_addr(a@tlsgd) |
| nop |
| stw 4, -4(1) |
| lwz 4, 0(3) |
| extsw 3, 4 |
| blr |
| .long 0 |
| .quad 0 |
| .Ltmp0: |
| .size main, .Ltmp0-.L.main |
| |
| .type a,@object # @a |
| .section .tbss,"awT",@nobits |
| .globl a |
| .align 2 |
| a: |
| .long 0 # 0x0 |
| .size a, 4 |
| |
| |
| // Verify generation of R_PPC64_GOT_TLSGD16_HA, R_PPC64_GOT_TLSGD16_LO, |
| // and R_PPC64_TLSGD for accessing external variable a, and R_PPC64_REL24 |
| // for the call to __tls_get_addr. |
| // |
| // CHECK: Relocations [ |
| // CHECK: Section {{.*}} .rela.text { |
| // CHECK: 0x{{[0-9,A-F]+}} R_PPC64_GOT_TLSGD16_HA a |
| // CHECK: 0x{{[0-9,A-F]+}} R_PPC64_GOT_TLSGD16_LO a |
| // CHECK: 0x{{[0-9,A-F]+}} R_PPC64_TLSGD a |
| // CHECK: 0x{{[0-9,A-F]+}} R_PPC64_REL24 __tls_get_addr |
| // CHECK: } |
| // CHECK: ] |