summaryrefslogtreecommitdiff
path: root/test/ELF/pack-dyn-relocs-tls-x86-64.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/ELF/pack-dyn-relocs-tls-x86-64.s')
-rw-r--r--test/ELF/pack-dyn-relocs-tls-x86-64.s23
1 files changed, 23 insertions, 0 deletions
diff --git a/test/ELF/pack-dyn-relocs-tls-x86-64.s b/test/ELF/pack-dyn-relocs-tls-x86-64.s
new file mode 100644
index 0000000000000..491efa6cc1d46
--- /dev/null
+++ b/test/ELF/pack-dyn-relocs-tls-x86-64.s
@@ -0,0 +1,23 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld -shared --pack-dyn-relocs=android %t.o -o %t.so
+// RUN: llvm-readobj -relocations %t.so | FileCheck %s
+
+// Bug 37841: Symbol::getVA must work on TLS symbols during the layout loop in
+// finalizeSections. This test uses an atypical IE access in a shared object to
+// access a local TLS symbol, because a more typical access would avoid the
+// bug.
+
+ .globl foo
+foo:
+ movq tlsvar@GOTTPOFF(%rip), %rcx
+
+ .section .tdata,"awT",@progbits
+ .space 0x1234
+tlsvar:
+ .word 42
+
+// CHECK: Section ({{.+}}) .rela.dyn {
+// CHECK-NEXT: R_X86_64_TPOFF64 - 0x1234
+// CHECK-NEXT: }