Skip to content

Commit be770ed

Browse files
authored
[lld][WebAssembly] Reject shared libraries when -static/-Bstatic is used (#108263)
This matches the behaviour of GNU ld and the ELF version of lld.
1 parent 1896ee3 commit be770ed

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

lld/test/wasm/static-error.s

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %s -o %t.o
2+
// RUN: wasm-ld --experimental-pic -shared -o %t.so %t.o
3+
4+
// RUN: wasm-ld --experimental-pic -pie -o /dev/null %t.o %t.so
5+
// RUN: not wasm-ld -o /dev/null -static %t.o %t.so 2>&1 | FileCheck %s
6+
7+
// CHECK: attempted static link of dynamic object
8+
9+
.global _start
10+
_start:
11+
.functype _start () -> ()
12+
end_function

lld/wasm/Driver.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,9 +333,15 @@ void LinkerDriver::addFile(StringRef path) {
333333
return;
334334
}
335335
case file_magic::bitcode:
336-
case file_magic::wasm_object:
337-
files.push_back(createObjectFile(mbref, "", 0, inLib));
336+
case file_magic::wasm_object: {
337+
auto obj = createObjectFile(mbref, "", 0, inLib);
338+
if (config->isStatic && isa<SharedFile>(obj)) {
339+
error("attempted static link of dynamic object " + path);
340+
break;
341+
}
342+
files.push_back(obj);
338343
break;
344+
}
339345
case file_magic::unknown:
340346
if (mbref.getBuffer().starts_with("#STUB")) {
341347
files.push_back(make<StubFile>(mbref));

0 commit comments

Comments
 (0)