sbc100 updated this revision to Diff 291317.
sbc100 edited the summary of this revision.
sbc100 added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
switch to verification in wasm-ld
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D87537/new/
https://reviews.llvm.org/D87537
Files:
clang/lib/Driver/ToolChains/WebAssembly.cpp
lld/test/wasm/Inputs/undefined-globals.s
lld/test/wasm/emit-relocs-fpic.s
lld/test/wasm/gc-imports.s
lld/test/wasm/mutable-globals.s
lld/test/wasm/pie.ll
lld/test/wasm/shared.ll
lld/wasm/Writer.cpp
Index: lld/wasm/Writer.cpp
===================================================================
--- lld/wasm/Writer.cpp
+++ lld/wasm/Writer.cpp
@@ -461,6 +461,29 @@
if (!config->checkFeatures)
return;
+ if (!config->relocatable && used.count("mutable-globals") == 0) {
+ for (Symbol *sym : symtab->getSymbols()) {
+ if (auto *global = dyn_cast<GlobalSymbol>(sym)) {
+ if (global->getGlobalType()->Mutable) {
+ if (!sym->isLive())
+ continue;
+ if (!sym->isUsedInRegularObj)
+ continue;
+ if (sym->isUndefined() && sym->isWeak() && !config->relocatable)
+ continue;
+ if (sym->isUndefined())
+ error(Twine("mutable global imported but 'mutable-globals' feature "
+ "not present in inputs: `") +
+ toString(*sym) + "`. Use --no-check-features to suppress.");
+ else if (sym->isExported())
+ error(Twine("mutable global exported but 'mutable-globals' feature "
+ "not present in inputs: `") +
+ toString(*sym) + "`. Use --no-check-features to suppress.");
+ }
+ }
+ }
+ }
+
if (config->sharedMemory) {
if (disallowed.count("shared-mem"))
error("--shared-memory is disallowed by " + disallowed["shared-mem"] +
Index: lld/test/wasm/shared.ll
===================================================================
--- lld/test/wasm/shared.ll
+++ lld/test/wasm/shared.ll
@@ -1,4 +1,4 @@
-; RUN: llc -relocation-model=pic -filetype=obj %s -o %t.o
+; RUN: llc -relocation-model=pic -mattr=+mutable-globals -filetype=obj %s -o %t.o
; RUN: wasm-ld -shared -o %t.wasm %t.o
; RUN: obj2yaml %t.wasm | FileCheck %s
Index: lld/test/wasm/pie.ll
===================================================================
--- lld/test/wasm/pie.ll
+++ lld/test/wasm/pie.ll
@@ -1,4 +1,4 @@
-; RUN: llc -relocation-model=pic -filetype=obj %s -o %t.o
+; RUN: llc -relocation-model=pic -mattr=+mutable-globals -filetype=obj %s -o %t.o
; RUN: wasm-ld --no-gc-sections --allow-undefined -pie -o %t.wasm %t.o
; RUN: obj2yaml %t.wasm | FileCheck %s
Index: lld/test/wasm/mutable-globals.s
===================================================================
--- /dev/null
+++ lld/test/wasm/mutable-globals.s
@@ -0,0 +1,13 @@
+# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
+# RUN: not wasm-ld %t.o -o %t.wasm 2>&1 | FileCheck %s
+
+.globl _start
+_start:
+ .functype _start () -> ()
+ i32.const 1
+ global.set mutable_global
+ end_function
+
+.globaltype mutable_global, i32
+
+# CHECK: error: mutable global imported but 'mutable-globals' feature not present in inputs: `mutable_global`. Use --no-check-features to suppress.
Index: lld/test/wasm/gc-imports.s
===================================================================
--- lld/test/wasm/gc-imports.s
+++ lld/test/wasm/gc-imports.s
@@ -31,7 +31,7 @@
# CHECK-NEXT: Field: used_undef_global
# CHECK-NEXT: Kind: GLOBAL
# CHECK-NEXT: GlobalType: I64
-# CHECK-NEXT: GlobalMutable: true
+# CHECK-NEXT: GlobalMutable: false
# CHECK-NEXT: - Type:
# CHECK: - Type: CUSTOM
# CHECK-NEXT: Name: name
@@ -62,12 +62,12 @@
# NO-GC-NEXT: Field: unused_undef_global
# NO-GC-NEXT: Kind: GLOBAL
# NO-GC-NEXT: GlobalType: I64
-# NO-GC-NEXT: GlobalMutable: true
+# NO-GC-NEXT: GlobalMutable: false
# NO-GC-NEXT: - Module: env
# NO-GC-NEXT: Field: used_undef_global
# NO-GC-NEXT: Kind: GLOBAL
# NO-GC-NEXT: GlobalType: I64
-# NO-GC-NEXT: GlobalMutable: true
+# NO-GC-NEXT: GlobalMutable: false
# NO-GC-NEXT: - Type:
# NO-GC: - Type: CUSTOM
# NO-GC-NEXT: Name: name
Index: lld/test/wasm/emit-relocs-fpic.s
===================================================================
--- lld/test/wasm/emit-relocs-fpic.s
+++ lld/test/wasm/emit-relocs-fpic.s
@@ -1,6 +1,6 @@
-# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -o %t.o < %s
+# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %s -o %t.o
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/ret32.s -o %t.ret32.o
-# RUN: wasm-ld -pie --export-all --no-gc-sections --no-entry --emit-relocs -o %t.wasm %t.o %t.ret32.o
+# RUN: wasm-ld -pie --export-all --no-check-features --no-gc-sections --no-entry --emit-relocs -o %t.wasm %t.o %t.ret32.o
# RUN: obj2yaml %t.wasm | FileCheck %s
load_hidden_data:
Index: lld/test/wasm/Inputs/undefined-globals.s
===================================================================
--- lld/test/wasm/Inputs/undefined-globals.s
+++ lld/test/wasm/Inputs/undefined-globals.s
@@ -7,5 +7,5 @@
global.get used_undef_global
end_function
-.globaltype unused_undef_global, i64
-.globaltype used_undef_global, i64
+.globaltype unused_undef_global, i64, immutable
+.globaltype used_undef_global, i64, immutable
Index: clang/lib/Driver/ToolChains/WebAssembly.cpp
===================================================================
--- clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -243,6 +243,14 @@
CC1Args.push_back("+sign-ext");
}
+ llvm::Reloc::Model RelocationModel;
+ unsigned PICLevel;
+ bool IsPIE;
+ std::tie(RelocationModel, PICLevel, IsPIE) = ParsePICArgs(*this, DriverArgs);
+ if (RelocationModel == llvm::Reloc::PIC_) {
+ CC1Args.push_back("+mutable-globals");
+ }
+
if (DriverArgs.getLastArg(options::OPT_fwasm_exceptions)) {
// '-fwasm-exceptions' is not compatible with '-mno-exception-handling'
if (DriverArgs.hasFlag(options::OPT_mno_exception_handing,
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits