[lld] [lld][WebAssembly] Reject shared libraries when `-static`/`-Bstatic` is used (PR #108263)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 11 11:11:20 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lld-wasm
@llvm/pr-subscribers-lld
Author: Sam Clegg (sbc100)
<details>
<summary>Changes</summary>
This matches the behaviour of GNU ld and the ELF version of lld.
---
Full diff: https://github.com/llvm/llvm-project/pull/108263.diff
2 Files Affected:
- (added) lld/test/wasm/static-error.s (+12)
- (modified) lld/wasm/Driver.cpp (+10-3)
``````````diff
diff --git a/lld/test/wasm/static-error.s b/lld/test/wasm/static-error.s
new file mode 100644
index 00000000000000..3557506a5f07a2
--- /dev/null
+++ b/lld/test/wasm/static-error.s
@@ -0,0 +1,12 @@
+// RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %s -o %t.o
+// RUN: wasm-ld --experimental-pic -shared -o %t.so %t.o
+
+// RUN: wasm-ld --experimental-pic -pie -o /dev/null %t.o %t.so
+// RUN: not wasm-ld -o /dev/null -static %t.o %t.so 2>&1 | FileCheck %s
+
+// CHECK: attempted static link of dynamic object
+
+.global _start
+_start:
+ .functype _start () -> ()
+ end_function
diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp
index cb8fe2534f5fe7..1480cc4151d7db 100644
--- a/lld/wasm/Driver.cpp
+++ b/lld/wasm/Driver.cpp
@@ -333,9 +333,15 @@ void LinkerDriver::addFile(StringRef path) {
return;
}
case file_magic::bitcode:
- case file_magic::wasm_object:
- files.push_back(createObjectFile(mbref, "", 0, inLib));
+ case file_magic::wasm_object: {
+ auto obj = createObjectFile(mbref, "", 0, inLib);
+ if (config->isStatic && isa<SharedFile>(obj)) {
+ error("attempted static link of dynamic object " + path);
+ break;
+ }
+ files.push_back(obj);
break;
+ }
case file_magic::unknown:
if (mbref.getBuffer().starts_with("#STUB")) {
files.push_back(make<StubFile>(mbref));
@@ -395,7 +401,8 @@ void LinkerDriver::createFiles(opt::InputArgList &args) {
config->isStatic = true;
break;
case OPT_Bdynamic:
- config->isStatic = false;
+ if (!config->relocatable)
+ config->isStatic = false;
break;
case OPT_whole_archive:
inWholeArchive = true;
``````````
</details>
https://github.com/llvm/llvm-project/pull/108263
More information about the llvm-commits
mailing list