[PATCH] D111171: [lld][WebAssembly] Create optional internal symbols only after LTO object as been added
Sam Clegg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 5 13:31:59 PDT 2021
sbc100 updated this revision to Diff 377338.
sbc100 edited the summary of this revision.
sbc100 added a comment.
- fix test
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D111171/new/
https://reviews.llvm.org/D111171
Files:
lld/test/wasm/lto/tls.ll
lld/wasm/Driver.cpp
lld/wasm/SymbolTable.cpp
Index: lld/wasm/SymbolTable.cpp
===================================================================
--- lld/wasm/SymbolTable.cpp
+++ lld/wasm/SymbolTable.cpp
@@ -258,11 +258,11 @@
DefinedGlobal *SymbolTable::addOptionalGlobalSymbol(StringRef name,
InputGlobal *global) {
- LLVM_DEBUG(dbgs() << "addOptionalGlobalSymbol: " << name << " -> " << global
- << "\n");
Symbol *s = find(name);
if (!s || s->isDefined())
return nullptr;
+ LLVM_DEBUG(dbgs() << "addOptionalGlobalSymbol: " << name << " -> " << global
+ << "\n");
syntheticGlobals.emplace_back(global);
return replaceSymbol<DefinedGlobal>(s, name, WASM_SYMBOL_VISIBILITY_HIDDEN,
nullptr, global);
Index: lld/wasm/Driver.cpp
===================================================================
--- lld/wasm/Driver.cpp
+++ lld/wasm/Driver.cpp
@@ -947,8 +947,6 @@
}
}
- createOptionalSymbols();
-
if (errorCount())
return;
@@ -976,6 +974,8 @@
if (errorCount())
return;
+ createOptionalSymbols();
+
// Resolve any variant symbols that were created due to signature
// mismatchs.
symtab->handleSymbolVariants();
Index: lld/test/wasm/lto/tls.ll
===================================================================
--- /dev/null
+++ lld/test/wasm/lto/tls.ll
@@ -0,0 +1,45 @@
+; Test that LTO objects build with TLS and threading support can be linked into
+; a single threaded binary. Specifically the references to `__tls_base` that
+; can be generated at LTO-time need to trigger the creation of the internal/fake
+; `__tls_base` symbol in the linker.
+
+; RUN: llvm-as %s -o %t1.o
+; RUN: wasm-ld --export=tls_int --export=get_tls %t1.o -o %t
+; RUN: obj2yaml %t | FileCheck %s
+
+target datalayout = "e-m:e-p:32:32-i64:64-f128:64-n32:64-S128-ni:1:10:20"
+target triple = "wasm32-unknown-emscripten"
+
+ at tls_int = dso_local thread_local global i32 99
+
+define i32 @get_tls() #0 {
+ %val = load i32, i32* @tls_int
+ ret i32 %val
+}
+
+define void @_start() #0 {
+ ret void
+}
+
+attributes #0 = { noinline nounwind optnone "target-features"="+atomics,+bulk-memory,+mutable-globals,+sign-ext" }
+
+; CHECK: - Type: GLOBAL
+; CHECK-NEXT: Globals:
+; CHECK-NEXT: - Index: 0
+; CHECK-NEXT: Type: I32
+; CHECK-NEXT: Mutable: true
+; CHECK-NEXT: InitExpr:
+; CHECK-NEXT: Opcode: I32_CONST
+; CHECK-NEXT: Value: 66576
+; CHECK-NEXT: - Index: 1
+; CHECK-NEXT: Type: I32
+; CHECK-NEXT: Mutable: false
+; CHECK-NEXT: InitExpr:
+; CHECK-NEXT: Opcode: I32_CONST
+; CHECK-NEXT: Value: 1024
+
+; CHECK: GlobalNames:
+; CHECK-NEXT: - Index: 0
+; CHECK-NEXT: Name: __stack_pointer
+; CHECK-NEXT: - Index: 1
+; CHECK-NEXT: Name: __tls_base
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D111171.377338.patch
Type: text/x-patch
Size: 3066 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211005/949a048a/attachment.bin>
More information about the llvm-commits
mailing list