[PATCH] D112769: [lld][WebAssemlby] Always enable mutable-globala feature in PIC mode

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 28 16:12:27 PDT 2021


sbc100 created this revision.
Herald added subscribers: ormris, wingo, steven_wu, hiraditya.
sbc100 requested review of this revision.
Herald added subscribers: llvm-commits, aheejin.
Herald added a project: LLVM.

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


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D112769

Files:
  lld/test/wasm/lto/pic-empty.s
  lld/wasm/Writer.cpp


Index: lld/wasm/Writer.cpp
===================================================================
--- lld/wasm/Writer.cpp
+++ lld/wasm/Writer.cpp
@@ -433,6 +433,13 @@
   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();
 
Index: lld/test/wasm/lto/pic-empty.s
===================================================================
--- /dev/null
+++ 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
+; do the 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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D112769.383192.patch
Type: text/x-patch
Size: 1679 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211028/506f2d82/attachment.bin>


More information about the llvm-commits mailing list