[PATCH] D95124: [lld][ELF][test] Add testing for IE/LD TLS weak undef references

James Henderson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 21 03:17:59 PST 2021


jhenderson created this revision.
jhenderson added reviewers: MaskRay, grimar, psmith.
Herald added a subscriber: emaste.
jhenderson requested review of this revision.
Herald added a project: LLVM.

Whilst migrating/retiring some downstream testing, I came across a test for weak undef IE and LD TLS references, but was unable to find any equivalent in LLD's upstream testing. There does seem to be some slight subtle differences that could be worth testing compared to LE TLS references, in particular that IE can be relaxed to LE in this case, hence this change.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D95124

Files:
  lld/test/ELF/tls-le-weak-undef.s
  lld/test/ELF/tls-weak-undef.s


Index: lld/test/ELF/tls-weak-undef.s
===================================================================
--- /dev/null
+++ lld/test/ELF/tls-weak-undef.s
@@ -0,0 +1,41 @@
+# REQUIRES: x86
+
+# RUN: split-file %s %t
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/exec.s -o %texec.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/shared.s -o %tshared.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/ledef.s -o %tdef.o
+# RUN: ld.lld %texec.o -o %t.exec
+# RUN: ld.lld %tshared.o -o %t.shared --shared
+# RUN: llvm-objdump -d %t.exec | FileCheck %s --check-prefix=EXEC
+# RUN: llvm-objdump -d %t.shared | FileCheck %s --check-prefix=SHARED
+
+## A weak symbol does not fetch a lazy definition.
+# RUN: ld.lld %t.o --start-lib %tdef.o --end-lib -o - | llvm-objdump -d - | FileCheck %s
+
+## Undefined TLS symbols arbitrarily resolve to 0.
+# EXEC:   leaq 16(%rax), %rdx
+## Initial-exec references to undefined weak symbols can be relaxed to LE
+## references.
+# EXEC:   leaq 32(%rax), %rax
+# SHARED: leaq 48(%rax), %rcx
+
+# RUN: ld.lld -shared %tdef.o -o %tdef.so
+# RUN: not ld.lld %t.o %tdef.so -o /dev/null 2>&1 | FileCheck --check-prefix=COPYRELOC %s
+
+# COPYRELOC: symbol 'le' has no type
+
+#--- ledef.s
+.tbss
+.globl le
+le:
+
+#--- exec.s
+.weak le
+leaq le at tpoff+16(%rax), %rdx
+
+.weak ie
+addq ie at gottpoff+32(%rip), %rax
+
+#--- shared.s
+.weak ld
+leaq ld at dtpoff+48(%rax), %rcx
Index: lld/test/ELF/tls-le-weak-undef.s
===================================================================
--- lld/test/ELF/tls-le-weak-undef.s
+++ /dev/null
@@ -1,18 +0,0 @@
-# REQUIRES: x86
-# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
-# RUN: echo '.tbss; .globl tls; tls:' | llvm-mc -filetype=obj -triple=x86_64 - -o %tdef.o
-# RUN: ld.lld %t.o -o - | llvm-objdump -d - | FileCheck %s
-
-## A weak symbol does not fetch a lazy definition.
-# RUN: ld.lld %t.o --start-lib %tdef.o --end-lib -o - | llvm-objdump -d - | FileCheck %s
-
-## Undefined TLS symbols arbitrarily resolve to 0.
-# CHECK:  leaq 16(%rax), %rdx
-
-# RUN: ld.lld -shared %tdef.o -o %tdef.so
-# RUN: not ld.lld %t.o %tdef.so -o /dev/null 2>&1 | FileCheck --check-prefix=COPYRELOC %s
-
-# COPYRELOC: symbol 'tls' has no type
-
-.weak tls
-leaq tls at tpoff+16(%rax), %rdx


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D95124.318143.patch
Type: text/x-patch
Size: 2245 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210121/fffbb8d2/attachment.bin>


More information about the llvm-commits mailing list