[PATCH] D109518: [lld][WebAssembly] Fix crash on used `__tls_base` symbol
Sam Clegg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 9 09:46:31 PDT 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG635523466055: [lld][WebAssembly] Fix crash on un-used __tls_base symbol (authored by sbc100).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D109518/new/
https://reviews.llvm.org/D109518
Files:
lld/test/wasm/tls-non-shared-memory-basic.s
lld/wasm/Driver.cpp
lld/wasm/Writer.cpp
Index: lld/wasm/Writer.cpp
===================================================================
--- lld/wasm/Writer.cpp
+++ lld/wasm/Writer.cpp
@@ -278,7 +278,7 @@
auto *tlsAlign = cast<DefinedGlobal>(WasmSym::tlsAlign);
setGlobalPtr(tlsAlign, int64_t{1} << seg->alignment);
- } else {
+ } else if (WasmSym::tlsBase) {
auto *tlsBase = cast<DefinedGlobal>(WasmSym::tlsBase);
setGlobalPtr(tlsBase, memoryPtr);
}
Index: lld/wasm/Driver.cpp
===================================================================
--- lld/wasm/Driver.cpp
+++ lld/wasm/Driver.cpp
@@ -651,7 +651,7 @@
WasmSym::stackPointer->markLive();
}
- if (config->sharedMemory && !config->relocatable) {
+ if (config->sharedMemory) {
WasmSym::tlsBase = createGlobalVariable("__tls_base", true);
WasmSym::tlsSize = createGlobalVariable("__tls_size", false);
WasmSym::tlsAlign = createGlobalVariable("__tls_align", false);
Index: lld/test/wasm/tls-non-shared-memory-basic.s
===================================================================
--- /dev/null
+++ lld/test/wasm/tls-non-shared-memory-basic.s
@@ -0,0 +1,63 @@
+# Simplified version of tls-non-shared-memory.s that does not reference
+# __tls_base
+
+# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
+
+.section .tdata.tls1,"",@
+.globl tls1
+.p2align 2
+tls1:
+ .int32 43
+ .size tls1, 2
+
+.section .custom_section.target_features,"",@
+ .int8 2
+ .int8 43
+ .int8 7
+ .ascii "atomics"
+ .int8 43
+ .int8 11
+ .ascii "bulk-memory"
+
+# RUN: wasm-ld --no-gc-sections --no-entry -o %t.wasm %t.o
+# RUN: obj2yaml %t.wasm | FileCheck %s
+
+# RUN: wasm-ld --experimental-pic -shared -o %t.so %t.o
+# RUN: obj2yaml %t.so | FileCheck %s --check-prefix=PIC
+
+# CHECK: - Type: DATA
+# CHECK-NEXT: Segments:
+# CHECK-NEXT: - SectionOffset: 7
+# CHECK-NEXT: InitFlags: 0
+# CHECK-NEXT: Offset:
+# CHECK-NEXT: Opcode: I32_CONST
+# CHECK-NEXT: Value: 1024
+# CHECK-NEXT: Content: 2B000000
+# CHECK-NEXT: - Type: CUSTOM
+# CHECK-NOT: - Type: IMPORT
+
+
+# In PIC mode we expect TLS data and non-TLS data to be merged into
+# a single segment which is initialized via the __memory_base import
+
+# PIC: - Type: IMPORT
+# PIC-NEXT: Imports:
+# PIC-NEXT: - Module: env
+# PIC-NEXT: Field: memory
+# PIC-NEXT: Kind: MEMORY
+# PIC-NEXT: Memory:
+# PIC-NEXT: Minimum: 0x1
+# PIC-NEXT: - Module: env
+# PIC-NEXT: Field: __memory_base
+# PIC-NEXT: Kind: GLOBAL
+# PIC-NEXT: GlobalType: I32
+
+# PIC: - Type: DATA
+# PIC-NEXT: Segments:
+# PIC-NEXT: - SectionOffset: 6
+# PIC-NEXT: InitFlags: 0
+# PIC-NEXT: Offset:
+# PIC-NEXT: Opcode: GLOBAL_GET
+# PIC-NEXT: Index: 0
+# PIC-NEXT: Content: 2B000000
+# PIC-NEXT: - Type: CUSTOM
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109518.371636.patch
Type: text/x-patch
Size: 3136 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210909/5b14e87c/attachment.bin>
More information about the llvm-commits
mailing list