1// REQUIRES: aarch64
2
3// RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-linux %s -o %t.o
4// RUN: ld.lld -shared --pack-dyn-relocs=android %t.o -o %t.so
5// RUN: llvm-readobj -r %t.so | FileCheck %s
6
7// Bug 37841: Symbol::getVA must work on TLS symbols during the layout loop in
8// finalizeSections.
9
10    .global foo
11foo:
12    adrp    x0, :tlsdesc:tlsvar1
13    ldr     x1, [x0, :tlsdesc_lo12:tlsvar1]
14    add     x0, x0, :tlsdesc_lo12:tlsvar1
15    .tlsdesccall tlsvar1
16
17// Also test an atypical IE access from a shared object to a local TLS symbol.
18
19    .global bar
20bar:
21    adrp    x0, :gottprel:tlsvar2
22    ldr     x0, [x0, #:gottprel_lo12:tlsvar2]
23
24    .section    .tdata,"awT",@progbits
25    .space  0x1234
26tlsvar1:
27    .word   42
28tlsvar2:
29    .word   17
30
31// CHECK:          Section ({{.+}}) .rela.dyn {
32// CHECK-NEXT:     R_AARCH64_TLSDESC - 0x1234
33// CHECK-NEXT:     R_AARCH64_TLS_TPREL64 - 0x1238
34// CHECK-NEXT:     }
35