From 2b0d17675b7c1c82e3cabb08b1e4f2158d3410b4 Mon Sep 17 00:00:00 2001 From: Zhou Fang <33002388+zhou-w-fang@users.noreply.github.com> Date: Thu, 6 Feb 2025 21:47:17 -0800 Subject: [PATCH] docs: design merge --- crates/interpreter/src/lib.rs | 1 + crates/interpreter/src/valid.rs | 9 +++++++++ crates/interpreter/tests/spec.rs | 6 ++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/crates/interpreter/src/lib.rs b/crates/interpreter/src/lib.rs index 5196f999..9676741e 100644 --- a/crates/interpreter/src/lib.rs +++ b/crates/interpreter/src/lib.rs @@ -157,3 +157,4 @@ pub use syntax::{ FuncType, GlobalType, ImportDesc, Limits, Mut, RefType, ResultType, TableType, ValType, }; pub use valid::prepare; +pub use valid::merge; diff --git a/crates/interpreter/src/valid.rs b/crates/interpreter/src/valid.rs index dab87ede..e67ed338 100644 --- a/crates/interpreter/src/valid.rs +++ b/crates/interpreter/src/valid.rs @@ -25,6 +25,15 @@ use crate::syntax::*; use crate::toctou::*; use crate::util::*; use crate::*; +use crate::Error::Invalid; + +pub fn merge(binary: &[u8], side_table: Vec) -> Result, Error> { + // Convert Vec to Vec. + // Create a custom section at the beginning of the binary, + // and put the serialized `side_table` in it. + // Return the new module. + Err(Invalid) +} /// Checks whether a WASM module in binary format is valid, and returns the side table. pub fn prepare(binary: &[u8]) -> Result, Error> { diff --git a/crates/interpreter/tests/spec.rs b/crates/interpreter/tests/spec.rs index de3b9bc2..54199b8b 100644 --- a/crates/interpreter/tests/spec.rs +++ b/crates/interpreter/tests/spec.rs @@ -164,8 +164,10 @@ impl<'m> Env<'m> { } fn maybe_instantiate(&mut self, name: &str, wasm: &[u8]) -> Result { - let module = self.alloc(wasm.len()); - module.copy_from_slice(wasm); + let side_table = prepare(wasm)?; + let wasm_with_side_table = merge(wasm, side_table)?.as_slice(); + let module = self.alloc(wasm_with_side_table.len()); + module.copy_from_slice(wasm_with_side_table); let module = Module::new(module)?; let memory = self.alloc(mem_size(name)); self.store.instantiate(module, memory)