[llvm] Do not replace dead constant references in metadata with undef
[llvm-project.git] / lld / test / ELF / arm-tls-ie32.s
blob37418595ad181ecca71fed400976a2b1f522d696
1 // REQUIRES: arm
2 // RUN: llvm-mc %s -o %t.o -filetype=obj -triple=armv7a-linux-gnueabi
3 // RUN: ld.lld %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.
11 .syntax unified
12 .arm
13 .globl func
14 .type func,%function
15 .p2align 2
16 func:
17 .L0:
18 nop
19 .L1:
20 nop
21 .L2:
22 nop
24 .p2align 2
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
33 /// __thread int y;
34 /// __thread int z __attribute((visibility("hidden")))
35 .hidden z
36 .globl z
37 .globl y
38 .globl x
40 .section .tbss,"awT",%nobits
41 .p2align 2
42 .TLSSTART:
43 .type z, %object
45 .space 4
46 .type y, %object
48 .space 4
49 .section .tdata,"awT",%progbits
50 .p2align 2
51 .type x, %object
53 .word 10
55 // SEC: Name: .tdata
56 // SEC-NEXT: Type: SHT_PROGBITS
57 // SEC-NEXT: Flags [
58 // SEC-NEXT: SHF_ALLOC
59 // SEC-NEXT: SHF_TLS
60 // SEC-NEXT: SHF_WRITE
61 // SEC: Size: 4
62 // SEC: Name: .tbss
63 // SEC-NEXT: Type: SHT_NOBITS
64 // SEC-NEXT: Flags [
65 // SEC-NEXT: SHF_ALLOC
66 // SEC-NEXT: SHF_TLS
67 // SEC-NEXT: SHF_WRITE
68 // SEC: Size: 8
70 // SEC: Name: .got
71 // SEC-NEXT: Type: SHT_PROGBITS
72 // SEC-NEXT: Flags [
73 // SEC-NEXT: SHF_ALLOC
74 // SEC-NEXT: SHF_WRITE
75 // SEC-NEXT: ]
76 // SEC-NEXT: Address: 0x20254
77 // SEC: Size: 12
80 // SEC: Dynamic Relocations {
81 // SEC: 0x2025C R_ARM_TLS_TPOFF32
82 // SEC: 0x20254 R_ARM_TLS_TPOFF32 x
83 // SEC: 0x20258 R_ARM_TLS_TPOFF32 y
85 // CHECK: Disassembly of section .text:
86 // CHECK-EMPTY:
87 // CHECK-NEXT: <func>:
88 // CHECK-NEXT: 101e8: 00 f0 20 e3 nop
89 // CHECK-NEXT: 101ec: 00 f0 20 e3 nop
90 // CHECK-NEXT: 101f0: 00 f0 20 e3 nop
92 /// (0x20254 - 0x101f4) + (0x101f4 - 0x101e8 - 8) = 0x10064
93 // CHECK: 101f4: 64 00 01 00
94 /// (0x20258 - 0x101f8) + (0x101f8 - 0x101ec - 8) = 0x10064
95 // CHECK-NEXT: 101f8: 64 00 01 00
96 /// (0x2025c - 0x101f8) + (0x101f8 - 0x101f0 - 8) = 0x10064
97 // CHECK-NEXT: 101fc: 64 00 01 00