From 68780058223693b6f8f68d7c14238bc7cc04ea86 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Tue, 30 Jan 2018 15:21:17 +0300 Subject: [PATCH 1/6] make unknown-unknown primary --- build/src/main.rs | 17 ++++++----------- src/ext.rs | 35 ++++++++++++++++++++++++++--------- src/lib.rs | 8 ++++---- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/build/src/main.rs b/build/src/main.rs index 7e6e982..3c761e1 100644 --- a/build/src/main.rs +++ b/build/src/main.rs @@ -14,7 +14,7 @@ use std::path::PathBuf; use clap::{App, Arg}; use parity_wasm::elements; -use wasm_utils::{CREATE_SYMBOL, CALL_SYMBOL, underscore_funcs}; +use wasm_utils::{CREATE_SYMBOL, CALL_SYMBOL, MEMORY_SYMBOL, ununderscore_funcs}; #[derive(Debug)] pub enum Error { @@ -125,15 +125,7 @@ fn main() { let mut module = parity_wasm::deserialize_file(&path).unwrap(); if let source::SourceTarget::Unknown = source_input.target() { - module = underscore_funcs(module); - // Removes the start section for 'wasm32-unknown-unknown' target if exists - module.sections_mut().retain(|section| { - if let &elements::Section::Start(ref _a) = section { - false - } else { - true - } - }); + module = ununderscore_funcs(module); } if let Some(runtime_type) = matches.value_of("runtime_type") { @@ -149,7 +141,10 @@ fn main() { let mut ctor_module = module.clone(); if !matches.is_present("skip_optimization") { - wasm_utils::optimize(&mut module, vec![CALL_SYMBOL]).expect("Optimizer to finish without errors"); + wasm_utils::optimize( + &mut module, + vec![CALL_SYMBOL, MEMORY_SYMBOL] + ).expect("Optimizer to finish without errors"); } if let Some(save_raw_path) = matches.value_of("save_raw") { diff --git a/src/ext.rs b/src/ext.rs index 10572e7..26752a4 100644 --- a/src/ext.rs +++ b/src/ext.rs @@ -49,20 +49,37 @@ pub fn externalize_mem(mut module: elements::Module) -> elements::Module { module } -pub fn underscore_funcs(mut module: elements::Module) -> elements::Module { - for entry in import_section(&mut module).expect("Import section to exist").entries_mut() { - if let elements::External::Function(_) = *entry.external() { - entry.field_mut().insert(0, '_'); +fn foreach_public_func_name(mut module: elements::Module, f: F) -> elements::Module +where F: Fn(&mut String) +{ + import_section(&mut module).map(|is| { + for entry in is.entries_mut() { + if let elements::External::Function(_) = *entry.external() { + f(entry.field_mut()) + } } - } - for entry in export_section(&mut module).expect("Import section to exist").entries_mut() { - if let elements::Internal::Function(_) = *entry.internal() { - entry.field_mut().insert(0, '_'); + }); + + export_section(&mut module).map(|es| { + for entry in es.entries_mut() { + if let elements::Internal::Function(_) = *entry.internal() { + f(entry.field_mut()) + } } - } + }); + module } +pub fn underscore_funcs(mut module: elements::Module) -> elements::Module { + foreach_public_func_name(module, |n| n.insert(0, '_')) +} + + +pub fn ununderscore_funcs(mut module: elements::Module) -> elements::Module { + foreach_public_func_name(module, |n| { n.remove(0); }) +} + pub fn externalize( module: elements::Module, replaced_funcs: Vec<&str>, diff --git a/src/lib.rs b/src/lib.rs index afdb5e1..157bbbe 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,8 +4,9 @@ extern crate byteorder; #[macro_use] extern crate log; #[macro_use] extern crate lazy_static; -pub static CREATE_SYMBOL: &'static str = "_deploy"; -pub static CALL_SYMBOL: &'static str = "_call"; +pub static CREATE_SYMBOL: &'static str = "deploy"; +pub static CALL_SYMBOL: &'static str = "call"; +pub static MEMORY_SYMBOL: &'static str = "memory"; pub mod rules; @@ -21,8 +22,7 @@ mod runtime_type; pub use optimizer::{optimize, Error as OptimizerError}; pub use gas::inject_gas_counter; pub use logger::init_log; -pub use ext::{externalize, externalize_mem, underscore_funcs}; +pub use ext::{externalize, externalize_mem, underscore_funcs, ununderscore_funcs}; pub use pack::pack_instance; pub use nondeterminism_check::is_deterministic; pub use runtime_type::inject_runtime_type; - From b1b94e9a0cb12405a9904b98f7febb27b6784fa3 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Tue, 30 Jan 2018 15:21:56 +0300 Subject: [PATCH 2/6] emscripten fix --- build/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/src/main.rs b/build/src/main.rs index 3c761e1..437f795 100644 --- a/build/src/main.rs +++ b/build/src/main.rs @@ -124,7 +124,7 @@ fn main() { let mut module = parity_wasm::deserialize_file(&path).unwrap(); - if let source::SourceTarget::Unknown = source_input.target() { + if let source::SourceTarget::Emscripten = source_input.target() { module = ununderscore_funcs(module); } From 057acd8995e762d118a82c91d1c8c16b5a030fea Mon Sep 17 00:00:00 2001 From: NikVolf Date: Tue, 30 Jan 2018 15:31:03 +0300 Subject: [PATCH 3/6] fix warnings --- src/ext.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ext.rs b/src/ext.rs index 26752a4..041f5cb 100644 --- a/src/ext.rs +++ b/src/ext.rs @@ -71,12 +71,12 @@ where F: Fn(&mut String) module } -pub fn underscore_funcs(mut module: elements::Module) -> elements::Module { +pub fn underscore_funcs(module: elements::Module) -> elements::Module { foreach_public_func_name(module, |n| n.insert(0, '_')) } -pub fn ununderscore_funcs(mut module: elements::Module) -> elements::Module { +pub fn ununderscore_funcs(module: elements::Module) -> elements::Module { foreach_public_func_name(module, |n| { n.remove(0); }) } From 4c0fd7e41095f0be36f452650a5b7a0c0d90f647 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Thu, 1 Feb 2018 15:20:23 +0300 Subject: [PATCH 4/6] fix index --- src/optimizer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/optimizer.rs b/src/optimizer.rs index b8d9a82..c8be636 100644 --- a/src/optimizer.rs +++ b/src/optimizer.rs @@ -27,7 +27,7 @@ pub fn optimize( } // If there is start function in module, it should stary - module.start_section().map(|ss| stay.insert(Symbol::Function(ss as usize))); + module.start_section().map(|ss| stay.insert(resolve_function(&module, ss))); // All symbols used in data/element segments are also should be preserved let mut init_symbols = Vec::new(); From 4860b2f9a8c6cbdeca9f50fd48b3ec34ff0264fa Mon Sep 17 00:00:00 2001 From: NikVolf Date: Thu, 1 Feb 2018 19:42:27 +0300 Subject: [PATCH 5/6] externalize mem for unknown --- build/src/main.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/build/src/main.rs b/build/src/main.rs index 437f795..4845009 100644 --- a/build/src/main.rs +++ b/build/src/main.rs @@ -14,7 +14,7 @@ use std::path::PathBuf; use clap::{App, Arg}; use parity_wasm::elements; -use wasm_utils::{CREATE_SYMBOL, CALL_SYMBOL, MEMORY_SYMBOL, ununderscore_funcs}; +use wasm_utils::{CREATE_SYMBOL, CALL_SYMBOL, MEMORY_SYMBOL, ununderscore_funcs, externalize_mem}; #[derive(Debug)] pub enum Error { @@ -128,6 +128,10 @@ fn main() { module = ununderscore_funcs(module); } + if let source::SourceTarget::Unknown = source_input.target() { + module = externalize_mem(module); + } + if let Some(runtime_type) = matches.value_of("runtime_type") { let runtime_type: &[u8] = runtime_type.as_bytes(); if runtime_type.len() != 4 { From d217c1eae02b989c4bb37a7c9efb2e6ff476a872 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Sun, 4 Feb 2018 22:12:34 +0300 Subject: [PATCH 6/6] remove memory symbol from export --- build/src/main.rs | 4 ++-- src/lib.rs | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/build/src/main.rs b/build/src/main.rs index 4845009..72a9b13 100644 --- a/build/src/main.rs +++ b/build/src/main.rs @@ -14,7 +14,7 @@ use std::path::PathBuf; use clap::{App, Arg}; use parity_wasm::elements; -use wasm_utils::{CREATE_SYMBOL, CALL_SYMBOL, MEMORY_SYMBOL, ununderscore_funcs, externalize_mem}; +use wasm_utils::{CREATE_SYMBOL, CALL_SYMBOL, ununderscore_funcs, externalize_mem}; #[derive(Debug)] pub enum Error { @@ -147,7 +147,7 @@ fn main() { if !matches.is_present("skip_optimization") { wasm_utils::optimize( &mut module, - vec![CALL_SYMBOL, MEMORY_SYMBOL] + vec![CALL_SYMBOL] ).expect("Optimizer to finish without errors"); } diff --git a/src/lib.rs b/src/lib.rs index 157bbbe..3137c0b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,6 @@ extern crate byteorder; pub static CREATE_SYMBOL: &'static str = "deploy"; pub static CALL_SYMBOL: &'static str = "call"; -pub static MEMORY_SYMBOL: &'static str = "memory"; pub mod rules;