2 // RUN: llvm-mc %s -o %t.o -filetype=obj -triple=armv7a-linux-gnueabi
3 // RUN: ld.lld --hash-style=sysv %t.o -o %t.so -shared
4 // RUN: llvm-readobj -s -dyn-relocations %t.so | FileCheck --check-prefix=SEC %s
5 // RUN: llvm-objdump -d -triple=armv7a-linux-gnueabi %t.so | FileCheck %s
7 // Test the handling of the initial-exec TLS model. Relative location within
8 // static TLS is a run-time constant computed by dynamic loader as a result
9 // of the R_ARM_TLS_TPOFF32 relocation.
25 // Generate R_ARM_TLS_IE32 static relocations
26 // Allocates a GOT entry dynamically relocated by R_ARM_TLS_TPOFF32
27 // literal contains the offset of the GOT entry from the place
28 .Lt0: .word x(gottpoff) + (. - .L0 - 8)
29 .Lt1: .word y(gottpoff) + (. - .L1 - 8)
30 .Lt2: .word .TLSSTART(gottpoff) + (. - .L2 - 8)
32 // __thread int x = 10
34 // __thread int z __attribute((visibility("hidden")))
40 .section .tbss,"awT",%nobits
49 .section .tdata,"awT",%progbits
56 // SEC-NEXT: Type: SHT_PROGBITS
58 // SEC-NEXT: SHF_ALLOC
60 // SEC-NEXT: SHF_WRITE
63 // SEC-NEXT: Type: SHT_NOBITS
65 // SEC-NEXT: SHF_ALLOC
67 // SEC-NEXT: SHF_WRITE
71 // SEC-NEXT: Type: SHT_PROGBITS
73 // SEC-NEXT: SHF_ALLOC
74 // SEC-NEXT: SHF_WRITE
76 // SEC-NEXT: Address: 0x204C
80 // SEC: Dynamic Relocations {
81 // SEC: 0x2054 R_ARM_TLS_TPOFF32
82 // SEC: 0x204C R_ARM_TLS_TPOFF32 x
83 // SEC: 0x2050 R_ARM_TLS_TPOFF32 y
85 // CHECK: Disassembly of section .text:
87 // CHECK-NEXT: 1000: 00 f0 20 e3 nop
88 // CHECK-NEXT: 1004: 00 f0 20 e3 nop
89 // CHECK-NEXT: 1008: 00 f0 20 e3 nop
91 // (0x204c - 0x100c) + (0x100c - 0x1000 - 8) = 0x1044
92 // CHECK: 100c: 44 10 00 00
93 // (0x2050 - 0x1010) + (0x1010 - 0x1004 - 8) = 0x1044
94 // CHECK-NEXT: 1010: 44 10 00 00
95 // (0x2054 - 0x1014) + (0x1014 - 0x1008 - 8) = 0x1044
96 // CHECK-NEXT: 1014: 44 10 00 00