diff options
Diffstat (limited to 'src/wasm-linker.cpp')
-rw-r--r-- | src/wasm-linker.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/wasm-linker.cpp b/src/wasm-linker.cpp index 014dfe6a9..56ec03851 100644 --- a/src/wasm-linker.cpp +++ b/src/wasm-linker.cpp @@ -107,14 +107,25 @@ void Linker::layout() { } else { out.wasm.memory.initial = initialMem / Memory::kPageSize; } + out.wasm.memory.exists = true; if (userMaxMemory) out.wasm.memory.max = userMaxMemory / Memory::kPageSize; - auto memoryExport = make_unique<Export>(); - memoryExport->name = MEMORY; - memoryExport->value = Name::fromInt(0); - memoryExport->kind = ExternalKind::Memory; - out.wasm.addExport(memoryExport.release()); + if (importMemory) { + auto memoryImport = make_unique<Import>(); + memoryImport->name = MEMORY; + memoryImport->module = ENV; + memoryImport->base = MEMORY; + memoryImport->kind = ExternalKind::Memory; + out.wasm.memory.imported = true; + out.wasm.addImport(memoryImport.release()); + } else { + auto memoryExport = make_unique<Export>(); + memoryExport->name = MEMORY; + memoryExport->value = Name::fromInt(0); + memoryExport->kind = ExternalKind::Memory; + out.wasm.addExport(memoryExport.release()); + } // XXX For now, export all functions marked .globl. for (Name name : out.globls) exportFunction(name, false); |