[PATCH] D109518: [lld][WebAssembly] Fix crash on used __tls_base base
Sam Clegg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 9 09:04:48 PDT 2021
sbc100 created this revision.
Herald added subscribers: wingo, ecnelises, sunfish, jgravelle-google, dschuff.
sbc100 requested review of this revision.
Herald added subscribers: llvm-commits, aheejin.
Herald added a project: LLVM.
In the case that TLS is used in the single-threaded program, and
therefore effectively lowered away, we still optionally create a
`__tls_base` symbols, but the code for setting it was assuming it was
always created.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D109518
Files:
lld/test/wasm/tls-non-shared-memory-basic.s
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/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.371616.patch
Type: text/x-patch
Size: 2638 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210909/5c9683ee/attachment-0001.bin>
More information about the llvm-commits
mailing list