[PATCH] D143568: [RuntimeDyld][ELF] Fixed relocations referencing undefined TLS symbols

Moritz Sichert via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 8 08:51:01 PST 2023


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGcb19b83baac1: [RuntimeDyld][ELF] Fixed relocations referencing undefined TLS symbols (authored by MoritzS).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143568/new/

https://reviews.llvm.org/D143568

Files:
  llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
  llvm/test/ExecutionEngine/RuntimeDyld/X86/TLS.s


Index: llvm/test/ExecutionEngine/RuntimeDyld/X86/TLS.s
===================================================================
--- llvm/test/ExecutionEngine/RuntimeDyld/X86/TLS.s
+++ llvm/test/ExecutionEngine/RuntimeDyld/X86/TLS.s
@@ -1,8 +1,11 @@
 # REQUIRES: x86_64-linux
 # RUN: rm -rf %t && mkdir -p %t
-# RUN: llvm-mc -triple=x86_64-unknown-linux -filetype=obj -o %t/tls.o %s
-# RUN: llvm-rtdyld -triple=x86_64-unknown-linux -execute %t/tls.o
+# RUN: split-file %s %t
+# RUN: llvm-mc -triple=x86_64-unknown-linux -filetype=obj -o %t/test_runner.o %t/test_runner.s
+# RUN: llvm-mc -triple=x86_64-unknown-linux -filetype=obj -o %t/external_tls.o %t/external_tls.s
+# RUN: llvm-rtdyld -triple=x86_64-unknown-linux -execute %t/test_runner.o %t/external_tls.o
 
+#--- test_runner.s
 
 _main:
 
@@ -130,6 +133,28 @@
 	jmp 2f
 1:
 
+# External TLS variable, Local Exec TLS Model (small code model)
+	mov %fs:external_tls_var at tpoff, %eax
+	cmp $0x56, %eax
+	je 1f
+	mov $12, %eax
+	jmp 2f
+1:
+
+# External TLS variable, Global Dynamic TLS Model (small code model)
+	.byte 0x66
+	leaq external_tls_var at tlsgd(%rip), %rdi
+	.byte 0x66, 0x66, 0x48
+	call __tls_get_addr at plt
+	mov (%rax), %eax
+	cmp $0x56, %eax
+	je 1f
+	mov $13, %eax
+	jmp 2f
+1:
+
+
+# Return 0 if all tests are successful
 	xor %eax, %eax
 
 2:
@@ -152,3 +177,14 @@
 	.align 4
 tls_bar:
 	.long 0x34
+
+#--- external_tls.s
+
+	.section .tdata, "awT", @progbits
+
+	.global external_tls_var
+	.type external_tls_var, @object
+	.size external_tls_var, 4
+	.align 4
+external_tls_var:
+	.long 0x56
Index: llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
===================================================================
--- llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
+++ llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
@@ -1282,6 +1282,7 @@
     }
     case SymbolRef::ST_Data:
     case SymbolRef::ST_Function:
+    case SymbolRef::ST_Other:
     case SymbolRef::ST_Unknown: {
       Value.SymbolName = TargetName.data();
       Value.Addend = Addend;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D143568.495868.patch
Type: text/x-patch
Size: 2040 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230208/c80d7853/attachment.bin>


More information about the llvm-commits mailing list