summaryrefslogtreecommitdiff
path: root/src/wasm-linker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-linker.cpp')
-rw-r--r--src/wasm-linker.cpp21
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);