1
- ; RUN: llc < %s -mtriple=i386-linux-musl -relocation-model=pic | FileCheck --check-prefixes=CHECK,X86 %s
2
- ; RUN: llc < %s -mtriple=x86_64-linux-musl -relocation-model=pic | FileCheck --check-prefixes=CHECK,X64 %s
1
+ ; RUN: llc < %s -mtriple=i386-linux-musl -relocation-model=pic -relax-elf-relocations=true | FileCheck --check-prefixes=CHECK,X86 %s
2
+ ; RUN: llc < %s -mtriple=x86_64-linux-musl -relocation-model=pic -relax-elf-relocations=true | FileCheck --check-prefixes=CHECK,X64 %s
3
+
4
+ ;; If GOTPCRELX is disabled, don't use GOT for __tls_get_addr to work around
5
+ ;; a ld.bfd bug (binutils PR24784).
6
+ ; RUN: llc < %s -mtriple=i386-linux-musl -relocation-model=pic | FileCheck --check-prefixes=CHECK,X86-PLT %s
7
+ ; RUN: llc < %s -mtriple=x86_64-linux-musl -relocation-model=pic | FileCheck --check-prefixes=CHECK,X64-PLT %s
3
8
4
9
@gd = thread_local global i32 0
5
10
@ld = internal thread_local global i32 0
9
14
; CHECK-LABEL: get_gd:
10
15
; X86: leal gd@TLSGD(%ebx), %eax
11
16
; X86: calll *___tls_get_addr@GOT(%ebx)
17
+ ; X86-PLT: calll ___tls_get_addr@PLT
12
18
13
19
; X64: leaq gd@TLSGD(%rip), %rdi
14
20
; X64: callq *__tls_get_addr@GOTPCREL(%rip)
21
+ ; X64-PLT: callq __tls_get_addr@PLT
15
22
ret i32* @gd
16
23
}
17
24
@@ -20,9 +27,11 @@ define i32* @get_ld() {
20
27
; CHECK-LABEL: get_ld:
21
28
; X86: leal ld@TLSLDM(%ebx), %eax
22
29
; X86: calll *___tls_get_addr@GOT(%ebx)
30
+ ; X86-PLT: calll ___tls_get_addr@PLT
23
31
24
32
; X64: leaq ld@TLSLD(%rip), %rdi
25
33
; X64: callq *__tls_get_addr@GOTPCREL(%rip)
34
+ ; X64-PLT: callq __tls_get_addr@PLT
26
35
ret i32* @ld
27
36
}
28
37
0 commit comments