diff --git a/lld/test/wasm/export-all.s b/lld/test/wasm/export-all.s new file mode 100644 --- /dev/null +++ b/lld/test/wasm/export-all.s @@ -0,0 +1,48 @@ +# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s +# RUN: wasm-ld --export-all -o %t.wasm %t.o +# RUN: obj2yaml %t.wasm | FileCheck %s + +.globl _start + +_start: + .functype _start () -> () + i32.const 3 + global.set __stack_pointer + end_function + +foo: + .functype foo () -> (i32) + i32.const 42 + end_function + +.globaltype __stack_pointer, i32 + +# CHECK: - Type: EXPORT +# CHECK-NEXT: Exports: +# CHECK-NEXT: - Name: memory +# CHECK-NEXT: Kind: MEMORY +# CHECK-NEXT: Index: 0 +# CHECK-NEXT: - Name: __wasm_call_ctors +# CHECK-NEXT: Kind: FUNCTION +# CHECK-NEXT: Index: 0 +# CHECK-NEXT: - Name: _start +# CHECK-NEXT: Kind: FUNCTION +# CHECK-NEXT: Index: 1 +# CHECK-NEXT: - Name: __dso_handle +# CHECK-NEXT: Kind: GLOBAL +# CHECK-NEXT: Index: 1 +# CHECK-NEXT: - Name: __data_end +# CHECK-NEXT: Kind: GLOBAL +# CHECK-NEXT: Index: 2 +# CHECK-NEXT: - Name: __global_base +# CHECK-NEXT: Kind: GLOBAL +# CHECK-NEXT: Index: 3 +# CHECK-NEXT: - Name: __heap_base +# CHECK-NEXT: Kind: GLOBAL +# CHECK-NEXT: Index: 4 +# CHECK-NEXT: - Name: __memory_base +# CHECK-NEXT: Kind: GLOBAL +# CHECK-NEXT: Index: 5 +# CHECK-NEXT: - Name: __table_base +# CHECK-NEXT: Kind: GLOBAL +# CHECK-NEXT: Index: 6 diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -462,7 +462,8 @@ if (!config->checkFeatures) return; - if (!config->relocatable && used.count("mutable-globals") == 0) { + if (!config->exportAll && !config->relocatable && + used.count("mutable-globals") == 0) { for (Symbol *sym : symtab->getSymbols()) { if (auto *global = dyn_cast(sym)) { if (global->getGlobalType()->Mutable) {