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 local dynamic model. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker .file "/home/espindola/llvm/llvm/test/CodeGen/PowerPC/tls-ld-obj.ll" 8*9880d681SAndroid Build Coastguard Worker .text 9*9880d681SAndroid Build Coastguard Worker .globl main 10*9880d681SAndroid Build Coastguard Worker .align 2 11*9880d681SAndroid Build Coastguard Worker .type main,@function 12*9880d681SAndroid Build Coastguard Worker .section .opd,"aw",@progbits 13*9880d681SAndroid Build Coastguard Workermain: # @main 14*9880d681SAndroid Build Coastguard Worker .align 3 15*9880d681SAndroid Build Coastguard Worker .quad .L.main 16*9880d681SAndroid Build Coastguard Worker .quad .TOC.@tocbase 17*9880d681SAndroid Build Coastguard Worker .quad 0 18*9880d681SAndroid Build Coastguard Worker .text 19*9880d681SAndroid Build Coastguard Worker.L.main: 20*9880d681SAndroid Build Coastguard Worker# BB#0: # %entry 21*9880d681SAndroid Build Coastguard Worker addis 3, 2, a@got@tlsld@ha 22*9880d681SAndroid Build Coastguard Worker addi 3, 3, a@got@tlsld@l 23*9880d681SAndroid Build Coastguard Worker li 4, 0 24*9880d681SAndroid Build Coastguard Worker bl __tls_get_addr(a@tlsld) 25*9880d681SAndroid Build Coastguard Worker nop 26*9880d681SAndroid Build Coastguard Worker stw 4, -4(1) 27*9880d681SAndroid Build Coastguard Worker addis 3, 3, a@dtprel@ha 28*9880d681SAndroid Build Coastguard Worker addi 3, 3, a@dtprel@l 29*9880d681SAndroid Build Coastguard Worker lwz 4, 0(3) 30*9880d681SAndroid Build Coastguard Worker extsw 3, 4 31*9880d681SAndroid Build Coastguard Worker blr 32*9880d681SAndroid Build Coastguard Worker .long 0 33*9880d681SAndroid Build Coastguard Worker .quad 0 34*9880d681SAndroid Build Coastguard Worker.Ltmp0: 35*9880d681SAndroid Build Coastguard Worker .size main, .Ltmp0-.L.main 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker .hidden a # @a 38*9880d681SAndroid Build Coastguard Worker .type a,@object 39*9880d681SAndroid Build Coastguard Worker .section .tbss,"awT",@nobits 40*9880d681SAndroid Build Coastguard Worker .globl a 41*9880d681SAndroid Build Coastguard Worker .align 2 42*9880d681SAndroid Build Coastguard Workera: 43*9880d681SAndroid Build Coastguard Worker .long 0 # 0x0 44*9880d681SAndroid Build Coastguard Worker .size a, 4 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker// Verify generation of R_PPC64_GOT_TLSLD16_HA, R_PPC64_GOT_TLSLD16_LO, 48*9880d681SAndroid Build Coastguard Worker// R_PPC64_TLSLD, R_PPC64_DTPREL16_HA, and R_PPC64_DTPREL16_LO for 49*9880d681SAndroid Build Coastguard Worker// accessing external variable a, and R_PPC64_REL24 for the call to 50*9880d681SAndroid Build Coastguard Worker// __tls_get_addr. 51*9880d681SAndroid Build Coastguard Worker// 52*9880d681SAndroid Build Coastguard Worker// CHECK: Relocations [ 53*9880d681SAndroid Build Coastguard Worker// CHECK: Section {{.*}} .rela.text { 54*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_GOT_TLSLD16_HA a 55*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_GOT_TLSLD16_LO a 56*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_TLSLD a 57*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_REL24 __tls_get_addr 58*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_DTPREL16_HA a 59*9880d681SAndroid Build Coastguard Worker// CHECK: 0x{{[0-9,A-F]+}} R_PPC64_DTPREL16_LO a 60*9880d681SAndroid Build Coastguard Worker// CHECK: } 61*9880d681SAndroid Build Coastguard Worker// CHECK: ] 62