[lld] 50bfc45 - [lld][WebAssemlby] Always enable mutable-globals feature in PIC mode
Sam Clegg via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 28 16:26:26 PDT 2021
Author: Sam Clegg
Date: 2021-10-28T16:24:54-07:00
New Revision: 50bfc451096f106aeb7fb9b805235ec44718ddf4
URL: https://github.com/llvm/llvm-project/commit/50bfc451096f106aeb7fb9b805235ec44718ddf4
DIFF: https://github.com/llvm/llvm-project/commit/50bfc451096f106aeb7fb9b805235ec44718ddf4.diff
LOG: [lld][WebAssemlby] Always enable mutable-globals feature in PIC mode
This works around an issue where the feature can be forgotten
in the case of LTO + object file with no functions.
See: https://bugs.llvm.org/show_bug.cgi?id=52339
Differential Revision: https://reviews.llvm.org/D112769
Added:
lld/test/wasm/lto/pic-empty.s
Modified:
lld/wasm/Writer.cpp
Removed:
################################################################################
diff --git a/lld/test/wasm/lto/pic-empty.s b/lld/test/wasm/lto/pic-empty.s
new file mode 100644
index 000000000000..88e0f42542e2
--- /dev/null
+++ b/lld/test/wasm/lto/pic-empty.s
@@ -0,0 +1,21 @@
+; Test that LTO objects with no function can still be linked as shared
+; libraries.
+; We had a bug where the mutable-globals feature was not being added
+; so the linker-generated import of `__stack_pointer` (which is currently
+; mandatory for ; shared libraries) was generating a linker error.
+; See https://bugs.llvm.org/show_bug.cgi?id=52339
+
+; RUN: llvm-as %s -o %t.o
+; RUN: wasm-ld -lto-O2 --experimental-pic -shared --no-gc-sections --export=tls_int %t.o -o %t.so
+; RUN: obj2yaml %t.so | FileCheck %s
+
+target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-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
+
+; CHECK: - Type: CUSTOM
+; CHECK: Name: target_features
+; CHECK: Features:
+; CHECK: - Prefix: USED
+; CHECK: Name: mutable-globals
diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp
index 2efa036cf1c6..664ddd4221e6 100644
--- a/lld/wasm/Writer.cpp
+++ b/lld/wasm/Writer.cpp
@@ -433,6 +433,13 @@ void Writer::populateTargetFeatures() {
SmallSet<std::string, 8> &allowed = out.targetFeaturesSec->features;
bool tlsUsed = false;
+ if (config->isPic) {
+ // This should not be necessary because all PIC objects should
+ // contain the mutable-globals feature.
+ // TODO(https://bugs.llvm.org/show_bug.cgi?id=52339)
+ allowed.insert("mutable-globals");
+ }
+
// Only infer used features if user did not specify features
bool inferFeatures = !config->features.hasValue();
More information about the llvm-commits
mailing list