| // 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: ] |