1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple=powerpc64-pc-linux -filetype=obj %s -o - | \ 2*9880d681SAndroid Build Coastguard Worker// RUN: llvm-readobj -r | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker// Test correct relocation generation for thread-local storage using 5*9880d681SAndroid Build Coastguard Worker// the general dynamic model and integrated assembly. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker .file "/home/espindola/llvm/llvm/test/CodeGen/PowerPC/tls-gd-obj.ll" 9*9880d681SAndroid Build Coastguard Worker .text 10*9880d681SAndroid Build Coastguard Worker .globl main 11*9880d681SAndroid Build Coastguard Worker .align 2 12*9880d681SAndroid Build Coastguard Worker .type main,@function 13*9880d681SAndroid Build Coastguard Worker .section .opd,"aw",@progbits 14*9880d681SAndroid Build Coastguard Workermain: # @main 15*9880d681SAndroid Build Coastguard Worker .align 3 16*9880d681SAndroid Build Coastguard Worker .quad .L.main 17*9880d681SAndroid Build Coastguard Worker .quad .TOC.@tocbase 18*9880d681SAndroid Build Coastguard Worker .quad 0 19*9880d681SAndroid Build Coastguard Worker .text 20*9880d681SAndroid Build Coastguard Worker.L.main: 21*9880d681SAndroid Build Coastguard Worker# BB#0: # %entry 22*9880d681SAndroid Build Coastguard Worker addis 3, 2, a@got@tlsgd@ha 23*9880d681SAndroid Build Coastguard Worker addi 3, 3, a@got@tlsgd@l 24*9880d681SAndroid Build Coastguard Worker li 4, 0 25*9880d681SAndroid Build Coastguard Worker bl __tls_get_addr(a@tlsgd) 26*9880d681SAndroid Build Coastguard Worker nop 27*9880d681SAndroid Build Coastguard Worker stw 4, -4(1) 28*9880d681SAndroid Build Coastguard Worker lwz 4, 0(3) 29*9880d681SAndroid Build Coastguard Worker extsw 3, 4 30*9880d681SAndroid Build Coastguard Worker blr 31*9880d681SAndroid Build Coastguard Worker .long 0 32*9880d681SAndroid Build Coastguard Worker .quad 0 33*9880d681SAndroid Build Coastguard Worker.Ltmp0: 34*9880d681SAndroid Build Coastguard Worker .size main, .Ltmp0-.L.main 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker .type a,@object # @a 37*9880d681SAndroid Build Coastguard Worker .section .tbss,"awT",@nobits 38*9880d681SAndroid Build Coastguard Worker .globl a 39*9880d681SAndroid Build Coastguard Worker .align 2 40*9880d681SAndroid Build Coastguard Workera: 41*9880d681SAndroid Build Coastguard Worker .long 0 # 0x0 42*9880d681SAndroid Build Coastguard Worker .size a, 4 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker// Verify generation of R_PPC64_GOT_TLSGD16_HA, R_PPC64_GOT_TLSGD16_LO, 46*9880d681SAndroid Build Coastguard Worker// and R_PPC64_TLSGD for accessing external variable a, and R_PPC64_REL24 47*9880d681SAndroid Build Coastguard Worker// for the call to __tls_get_addr. 48*9880d681SAndroid Build Coastguard Worker// 49*9880d681SAndroid Build Coastguard Worker// CHECK: Relocations [ 50*9880d681SAndroid Build Coastguard Worker// CHECK: Section {{.*}} .rela.text { 51*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_GOT_TLSGD16_HA a 52*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_GOT_TLSGD16_LO a 53*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_TLSGD a 54*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_REL24 __tls_get_addr 55*9880d681SAndroid Build Coastguard Worker// CHECK: } 56*9880d681SAndroid Build Coastguard Worker// CHECK: ] 57