From 21bd55c30d69f21b2fa2bd6d8d69f5406d876d27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Sun, 21 Apr 2019 12:58:48 +0200 Subject: [PATCH 01/12] Make the slice::from_raw_parts call safe --- lib/runtime-core/src/memory/atomic.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/runtime-core/src/memory/atomic.rs b/lib/runtime-core/src/memory/atomic.rs index f4ed3d3d0..f14415def 100644 --- a/lib/runtime-core/src/memory/atomic.rs +++ b/lib/runtime-core/src/memory/atomic.rs @@ -52,6 +52,7 @@ macro_rules! intcast { } intcast! { u8 i8 u16 i16 u32 i32 u64 i64 } +#[repr(transparent)] pub struct Atomic { v: UnsafeCell>, } From a4170d44956d418280299672a810a41d0c3724c1 Mon Sep 17 00:00:00 2001 From: Syrus Date: Sat, 27 Apr 2019 12:53:13 -0700 Subject: [PATCH 02/12] Improved fault debugging with emscripten --- lib/emscripten/src/lib.rs | 3 +++ lib/emscripten/src/memory.rs | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/emscripten/src/lib.rs b/lib/emscripten/src/lib.rs index b3484770b..c41e4b96d 100644 --- a/lib/emscripten/src/lib.rs +++ b/lib/emscripten/src/lib.rs @@ -646,6 +646,9 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject "_emscripten_get_heap_size" => func!(crate::memory::_emscripten_get_heap_size), "_emscripten_resize_heap" => func!(crate::memory::_emscripten_resize_heap), "enlargeMemory" => func!(crate::memory::enlarge_memory), + "segfault" => func!(crate::memory::segfault), + "alignfault" => func!(crate::memory::alignfault), + "ftfault" => func!(crate::memory::ftfault), "getTotalMemory" => func!(crate::memory::get_total_memory), "___map_file" => func!(crate::memory::___map_file), diff --git a/lib/emscripten/src/memory.rs b/lib/emscripten/src/memory.rs index 9a0874015..1795dcae6 100644 --- a/lib/emscripten/src/memory.rs +++ b/lib/emscripten/src/memory.rs @@ -95,6 +95,24 @@ pub fn abort_on_cannot_grow_memory_old(ctx: &mut Ctx) -> u32 { 0 } +/// emscripten: segfault +pub fn segfault(ctx: &mut Ctx) { + debug!("emscripten::segfault"); + abort_with_message(ctx, "segmentation fault"); +} + +/// emscripten: alignfault +pub fn alignfault(ctx: &mut Ctx) { + debug!("emscripten::alignfault"); + abort_with_message(ctx, "alignment fault"); +} + +/// emscripten: ftfault +pub fn ftfault(ctx: &mut Ctx) { + debug!("emscripten::ftfault"); + abort_with_message(ctx, "Function table mask error"); +} + /// emscripten: ___map_file pub fn ___map_file(_ctx: &mut Ctx, _one: u32, _two: u32) -> c_int { debug!("emscripten::___map_file"); From a127b770b36dd369fbb452a9e4880f6420202dbe Mon Sep 17 00:00:00 2001 From: Brandon Fish Date: Mon, 29 Apr 2019 23:34:48 -0500 Subject: [PATCH 03/12] Update to newer common wasmparser version --- Cargo.lock | 20 ++++---------------- lib/clif-backend/Cargo.toml | 2 +- lib/llvm-backend/Cargo.toml | 2 +- lib/runtime-abi/Cargo.toml | 2 +- lib/singlepass-backend/Cargo.toml | 2 +- 5 files changed, 8 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 44e77e7df..7b0a1d07e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2264,7 +2264,7 @@ dependencies = [ "target-lexicon 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-runtime-core 0.3.0", "wasmer-win-exception-handler 0.3.0", - "wasmparser 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmparser 0.29.2 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2303,7 +2303,7 @@ dependencies = [ "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-runtime-core 0.3.0", - "wasmparser 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmparser 0.29.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2331,7 +2331,7 @@ dependencies = [ "tar 0.4.22 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-runtime-core 0.3.0", - "wasmparser 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmparser 0.29.2 (registry+https://github.com/rust-lang/crates.io-index)", "zbox 0.6.1 (git+https://github.com/wasmerio/zbox?branch=bundle-libsodium)", "zstd 0.4.22+zstd.1.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2385,7 +2385,7 @@ dependencies = [ "nix 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-runtime-core 0.3.0", - "wasmparser 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmparser 0.29.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2424,16 +2424,6 @@ dependencies = [ "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "wasmparser" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "wasmparser" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "wasmparser" version = "0.29.2" @@ -2827,8 +2817,6 @@ dependencies = [ "checksum wabt-sys 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a6265b25719e82598d104b3717375e37661d41753e2c84cde3f51050c7ed7e3c" "checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" "checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3" -"checksum wasmparser 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b5e01c420bc7d36e778bd242e1167b079562ba8b34087122cc9057187026d060" -"checksum wasmparser 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)" = "40f426b1929bd26517fb10702e2a8e520d1845c49567aa4d244f426f10b206c1" "checksum wasmparser 0.29.2 (registry+https://github.com/rust-lang/crates.io-index)" = "981a8797cf89762e0233ec45fae731cb79a4dfaee12d9f0fe6cee01e4ac58d00" "checksum which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" diff --git a/lib/clif-backend/Cargo.toml b/lib/clif-backend/Cargo.toml index 9259a1903..f1aa6ef04 100644 --- a/lib/clif-backend/Cargo.toml +++ b/lib/clif-backend/Cargo.toml @@ -15,7 +15,7 @@ cranelift-entity = "0.30.0" cranelift-wasm = "0.30.0" hashbrown = "0.1" target-lexicon = "0.3.0" -wasmparser = "0.23.0" +wasmparser = "0.29.2" byteorder = "1" nix = "0.13.0" libc = "0.2.49" diff --git a/lib/llvm-backend/Cargo.toml b/lib/llvm-backend/Cargo.toml index 944db6d41..c1a1cbbdc 100644 --- a/lib/llvm-backend/Cargo.toml +++ b/lib/llvm-backend/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] wasmer-runtime-core = { path = "../runtime-core", version = "0.3.0" } inkwell = { git = "https://github.com/wasmerio/inkwell", branch = "llvm7-0" } -wasmparser = "0.28.0" +wasmparser = "0.29.2" hashbrown = "0.1.8" smallvec = "0.6.8" goblin = "0.0.20" diff --git a/lib/runtime-abi/Cargo.toml b/lib/runtime-abi/Cargo.toml index 459c08de2..bf971f7e8 100644 --- a/lib/runtime-abi/Cargo.toml +++ b/lib/runtime-abi/Cargo.toml @@ -13,7 +13,7 @@ wasmer-runtime-core = { path = "../runtime-core" } hashbrown = "0.1" failure = "0.1" tar = "0.4" -wasmparser = "0.23.0" +wasmparser = "0.29.2" zstd = "0.4" [target.'cfg(unix)'.dependencies.zbox] diff --git a/lib/singlepass-backend/Cargo.toml b/lib/singlepass-backend/Cargo.toml index 51fa61319..b4046e76c 100644 --- a/lib/singlepass-backend/Cargo.toml +++ b/lib/singlepass-backend/Cargo.toml @@ -9,7 +9,7 @@ edition = "2018" [dependencies] wasmer-runtime-core = { path = "../runtime-core", version = "0.3.0" } -wasmparser = "0.28.0" +wasmparser = "0.29.2" dynasm = "0.3.1" dynasmrt = "0.3.1" lazy_static = "1.2.0" From da807ed2a17dd89899c8cb03a725da8f82c74773 Mon Sep 17 00:00:00 2001 From: Brandon Fish Date: Mon, 29 Apr 2019 23:40:16 -0500 Subject: [PATCH 04/12] Remove unused imports --- lib/singlepass-backend/src/protect_unix.rs | 2 +- src/webassembly.rs | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/lib/singlepass-backend/src/protect_unix.rs b/lib/singlepass-backend/src/protect_unix.rs index 213db5f6a..b969f1656 100644 --- a/lib/singlepass-backend/src/protect_unix.rs +++ b/lib/singlepass-backend/src/protect_unix.rs @@ -11,7 +11,7 @@ //! use libc::{c_int, c_void, siginfo_t}; use nix::sys::signal::{ - sigaction, SaFlags, SigAction, SigHandler, SigSet, Signal, SIGBUS, SIGFPE, SIGILL, SIGSEGV, + sigaction, SaFlags, SigAction, SigHandler, SigSet, SIGBUS, SIGFPE, SIGILL, SIGSEGV, }; use std::any::Any; use std::cell::{Cell, UnsafeCell}; diff --git a/src/webassembly.rs b/src/webassembly.rs index 3d051f078..0df8b59e8 100644 --- a/src/webassembly.rs +++ b/src/webassembly.rs @@ -1,13 +1,6 @@ use std::panic; pub use wasmer_runtime::compile_with_config_with; -use wasmer_runtime::{ - self as runtime, - error::{CallResult, Result}, - ImportObject, Instance, Module, -}; -use wasmer_runtime_core::types::Value; - -use wasmer_emscripten::run_emscripten_instance; +use wasmer_runtime::{self as runtime, error::Result, ImportObject, Instance, Module}; pub struct ResultObject { /// A webassembly::Module object representing the compiled WebAssembly module. From 8acf9edf678e7f3f6e9860d0b40c688ec893ce8c Mon Sep 17 00:00:00 2001 From: Brandon Fish Date: Mon, 29 Apr 2019 23:45:38 -0500 Subject: [PATCH 05/12] Remove unneeded returns --- lib/emscripten/src/process.rs | 2 +- lib/emscripten/src/time.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/emscripten/src/process.rs b/lib/emscripten/src/process.rs index 4c6e33e70..319dc9eb4 100644 --- a/lib/emscripten/src/process.rs +++ b/lib/emscripten/src/process.rs @@ -159,7 +159,7 @@ pub fn _system(_ctx: &mut Ctx, _one: i32) -> c_int { debug!("emscripten::_system"); // TODO: May need to change this Em impl to a working version eprintln!("Can't call external programs"); - return EAGAIN; + EAGAIN } pub fn _popen(_ctx: &mut Ctx, _one: i32, _two: i32) -> c_int { diff --git a/lib/emscripten/src/time.rs b/lib/emscripten/src/time.rs index 312808a82..56dfdbda8 100644 --- a/lib/emscripten/src/time.rs +++ b/lib/emscripten/src/time.rs @@ -345,7 +345,7 @@ pub fn _strftime( // pad for null? let bytes = result_str.chars().count(); if bytes as u32 > maxsize { - return 0; + 0 } else { // write output string for (i, c) in result_str.chars().enumerate() { From 01ba789eed1cded255b42034dffdf422b5c6a539 Mon Sep 17 00:00:00 2001 From: Brandon Fish Date: Mon, 29 Apr 2019 23:49:00 -0500 Subject: [PATCH 06/12] Cleanup some long literal lacking separators --- lib/llvm-backend/src/code.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/llvm-backend/src/code.rs b/lib/llvm-backend/src/code.rs index 05cde0694..2795e6271 100644 --- a/lib/llvm-backend/src/code.rs +++ b/lib/llvm-backend/src/code.rs @@ -1468,7 +1468,7 @@ fn parse_function( context, &function, -2147483904.0, - 2147483648.0, + 2_147_483_648.0, v1, ); let res = @@ -1482,8 +1482,8 @@ fn parse_function( intrinsics, context, &function, - -2147483649.0, - 2147483648.0, + -2_147_483_649.0, + 2_147_483_648.0, v1, ); let res = @@ -1503,8 +1503,8 @@ fn parse_function( intrinsics, context, &function, - -9223373136366403584.0, - 9223372036854775808.0, + -9_223_373_136_366_403_584.0, + 9_223_372_036_854_775_808.0, v1, ); let res = From 6af87c1b5bd30d27f58bcbe6e3494f3a0f34d725 Mon Sep 17 00:00:00 2001 From: Mackenzie Clark Date: Tue, 30 Apr 2019 09:21:08 -0700 Subject: [PATCH 07/12] add images to installer and add wapm bin dir to path --- media/wizard_logo.ico | Bin 0 -> 30138 bytes media/wizard_logo_2.bmp | Bin 0 -> 980726 bytes media/wizard_logo_small.bmp | Bin 0 -> 4158 bytes src/installer/wasmer.iss | 17 ++++++++++++++--- 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 media/wizard_logo.ico create mode 100644 media/wizard_logo_2.bmp create mode 100644 media/wizard_logo_small.bmp diff --git a/media/wizard_logo.ico b/media/wizard_logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..664b0d7a16bf2c6388add01b22ff370850e25aa5 GIT binary patch literal 30138 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 zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z g1Rwwb2tWV=5P$##AOHafKmY;|fB*y_kSYTIAA~+r82|tP literal 0 HcmV?d00001 diff --git a/media/wizard_logo_small.bmp b/media/wizard_logo_small.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9ca204fcabda77087321ab8256b6d1887220c6ec GIT binary patch literal 4158 zcmeI#c~n$Y90%}cw%BHyG}>yGWviwnGE9IYfwGDsn}Qpnfk+ApRN#^zR4l1!3JCbl z5s5HkF)J5NS(1PW0v*vnITal^!Z2*ZY~SuM%$xg$H{kR~e|gXO&HLSZ-)DaB-M5?> zsfYc;%wU^+C&Nr5naxm)VaDkv$mhB7`e4S84v8bv9gsiW5&1KvD3~!9g)^i$I!lUU zGo5hM+6e_V&M35VMWMtEMGl@QndOW!YZnsp@vZd&oSyBDGbGO1c;Lr5UijJ88|Q5o zp+dYEzmmA13wvKwNqkT(S%MmSKOB>K>Pv^GWVP38dNWfM2&AaY6By2IcO6uFONb!*|xf_ z#6Kk3-B+Q*GX$L^WL|3^TNnzNPZ+xV)}zZm0$o8HQ63(H^7XN}ydoO)A+cx(i^uN~ zTk%s=0_3Y>AP@nsMGxs$CZ?k@ zDFan0yKymfAFgf7K+WDPTu;kJXL>ezcJ4uM%6{~wX5vQ1A=DknLtQ3|hMau-nN@(k zJ$dNcdl>yWg}8F02v@%<#1hm{J&)F3E})~l0?P99P@bzqTXhY(s%p`7u@1@$HBeR7qWw}GX8K|Vn4%G>cj zt^q69@-}Y~9OniZE~Ar#1>$JBKRg$5NsGi{%Uybi9buNbtcbUD%2F5SqF0u=9SaT0 z68CYCQPD1U0X2x~-aF)o+tjpW%z*AhkWDk+ZyxY3KL=Cx&z)6Ieb4iPb zsX>>${zaWKj*UT0Gp&Bo5qD`B_6-c;!OOPvgg@Al}|h!Iv|@he6~o!@~KQ~rZH z9QF(|*>d;6^W^1dvD@WLl*R5dzk3FmW%Y8_-mh1d)tmmDL0RU8e(nrnOV;JKVb9TX>=w4Iw z`B^7w2l$Hbym#tfZj^I%W5!xpJ*4~7!EeTT^WWDiy57u#z6>*dET0Va49-6C zkbzOhxt%3Wuo>KLPEqyVWX-wz*6R0XC}ynZZ^qrVByDJaAvbAxhOnEP$W;+=o+-Ln z`uv^^a3|+FC5BThJIqPr^|O?l`Z>!^efr&8ikZ4MHsuY?8r@{V*ll}hWm4~*)d#s* zqkE4VqY~b6?x!X=H!hPJ Date: Tue, 30 Apr 2019 09:59:00 -0700 Subject: [PATCH 08/12] add global wapm packages bin dir to path --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 40b95cc22..fd2cf4778 100755 --- a/install.sh +++ b/install.sh @@ -131,7 +131,7 @@ wasmer_link() { printf "$cyan> Adding to bash profile...$reset\n" WASMER_PROFILE="$(wasmer_detect_profile)" LOAD_STR="\n# Wasmer\nexport WASMER_DIR=\"\$HOME/.wasmer\"\n[ -s \"\$WASMER_DIR/wasmer.sh\" ] && source \"\$WASMER_DIR/wasmer.sh\" # This loads wasmer\n" - SOURCE_STR="# Wasmer config\nexport WASMER_DIR=\"\$HOME/.wasmer\"\nexport WASMER_CACHE_DIR=\"\$WASMER_DIR/cache\"\nexport PATH=\"\$HOME/.wasmer/bin:\$PATH\"\n" + SOURCE_STR="# Wasmer config\nexport WASMER_DIR=\"\$HOME/.wasmer\"\nexport WASMER_CACHE_DIR=\"\$WASMER_DIR/cache\"\nexport PATH=\"\$HOME/.wasmer/globals/wapm_packages/.bin:$HOME/.wasmer/bin:\$PATH\"\n" # We create the wasmer.sh file printf "$SOURCE_STR" > "$HOME/.wasmer/wasmer.sh" From 18a8341e5abb0cd694333b83c5d6310d77fa516d Mon Sep 17 00:00:00 2001 From: Mackenzie Clark Date: Tue, 30 Apr 2019 09:59:07 -0700 Subject: [PATCH 09/12] add changelog record --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37b1390ec..91b04b3ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Blocks of changes will separated by version increments. - [#399](https://github.com/wasmerio/wasmer/pull/399) Add example of using a plugin extended from WASI - [#397](https://github.com/wasmerio/wasmer/pull/397) Fix WASI fs abstraction to work on Windows - [#390](https://github.com/wasmerio/wasmer/pull/390) Pin released wapm version and add it as a git submodule +- [#408](https://github.com/wasmerio/wasmer/pull/408) Add images to windows installer and update installer to add wapm bin directory to path ## 0.4.0 - 2018-04-23 From bc50fe090cf8152eab4749e04d21e0fb9102de5a Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Tue, 30 Apr 2019 10:09:04 -0700 Subject: [PATCH 10/12] Update install.sh Co-Authored-By: xmclark --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index fd2cf4778..c0d0982bd 100755 --- a/install.sh +++ b/install.sh @@ -131,7 +131,7 @@ wasmer_link() { printf "$cyan> Adding to bash profile...$reset\n" WASMER_PROFILE="$(wasmer_detect_profile)" LOAD_STR="\n# Wasmer\nexport WASMER_DIR=\"\$HOME/.wasmer\"\n[ -s \"\$WASMER_DIR/wasmer.sh\" ] && source \"\$WASMER_DIR/wasmer.sh\" # This loads wasmer\n" - SOURCE_STR="# Wasmer config\nexport WASMER_DIR=\"\$HOME/.wasmer\"\nexport WASMER_CACHE_DIR=\"\$WASMER_DIR/cache\"\nexport PATH=\"\$HOME/.wasmer/globals/wapm_packages/.bin:$HOME/.wasmer/bin:\$PATH\"\n" + SOURCE_STR="# Wasmer config\nexport WASMER_DIR=\"\$HOME/.wasmer\"\nexport WASMER_CACHE_DIR=\"\$WASMER_DIR/cache\"\nexport PATH=\"\$HOME/.wasmer/bin:\$HOME/.wasmer/globals/wapm_packages/.bin:\$PATH\"\n" # We create the wasmer.sh file printf "$SOURCE_STR" > "$HOME/.wasmer/wasmer.sh" From e68f5e10e4ed698b902f98217a265972c5bbb7b8 Mon Sep 17 00:00:00 2001 From: Syrus Date: Tue, 30 Apr 2019 11:47:03 -0700 Subject: [PATCH 11/12] Improved emscripten functions to be able to run jsc --- lib/emscripten/src/emscripten_target.rs | 36 +++++++++++++++++++++++++ lib/emscripten/src/exception.rs | 6 +++++ lib/emscripten/src/lib.rs | 12 ++++++++- lib/emscripten/src/math.rs | 5 ++++ lib/emscripten/src/process.rs | 7 ++++- 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/lib/emscripten/src/emscripten_target.rs b/lib/emscripten/src/emscripten_target.rs index 5b14a1099..08a7ef516 100644 --- a/lib/emscripten/src/emscripten_target.rs +++ b/lib/emscripten/src/emscripten_target.rs @@ -15,6 +15,15 @@ pub fn getTempRet0(ctx: &mut Ctx) -> i32 { get_emscripten_data(ctx).temp_ret_0 } +pub fn _atexit(_ctx: &mut Ctx, _func: i32) -> i32 { + debug!("emscripten::_atexit"); + // TODO: implement atexit properly + // __ATEXIT__.unshift({ + // func: func, + // arg: arg + // }); + 0 +} pub fn __Unwind_Backtrace(_ctx: &mut Ctx, _a: i32, _b: i32) -> i32 { debug!("emscripten::__Unwind_Backtrace"); 0 @@ -45,14 +54,37 @@ pub fn _dladdr(_ctx: &mut Ctx, _a: i32, _b: i32) -> i32 { debug!("emscripten::_dladdr"); 0 } +pub fn _pthread_attr_init(_ctx: &mut Ctx, _a: i32) -> i32 { + debug!("emscripten::_pthread_attr_init"); + 0 +} +pub fn _pthread_attr_destroy(_ctx: &mut Ctx, _a: i32) -> i32 { + debug!("emscripten::_pthread_attr_destroy"); + 0 +} +pub fn _pthread_attr_getstack(_ctx: &mut Ctx, _stackaddr: i32, _stacksize: i32, _other: i32) -> i32 { + debug!("emscripten::_pthread_attr_getstack"); + // TODO: Translate from Emscripten + // HEAP32[stackaddr >> 2] = STACK_BASE; + // HEAP32[stacksize >> 2] = TOTAL_STACK; + 0 +} pub fn _pthread_cond_destroy(_ctx: &mut Ctx, _a: i32) -> i32 { debug!("emscripten::_pthread_cond_destroy"); 0 } +pub fn _pthread_cond_timedwait(_ctx: &mut Ctx, _a: i32, _b: i32, _c: i32) -> i32 { + debug!("emscripten::_pthread_cond_timedwait"); + 0 +} pub fn _pthread_getspecific(_ctx: &mut Ctx, _a: i32) -> i32 { debug!("emscripten::_pthread_getspecific"); 0 } +pub fn _pthread_getattr_np(_ctx: &mut Ctx, _thread: i32, _attr: i32) -> i32 { + debug!("emscripten::_pthread_getattr_np"); + 0 +} pub fn _pthread_setspecific(_ctx: &mut Ctx, _a: i32, _b: i32) -> i32 { debug!("emscripten::_pthread_setspecific"); 0 @@ -69,6 +101,10 @@ pub fn _pthread_create(_ctx: &mut Ctx, _a: i32, _b: i32, _c: i32, _d: i32) -> i3 debug!("emscripten::_pthread_create"); 0 } +pub fn _pthread_detach(_ctx: &mut Ctx, _a: i32) -> i32 { + debug!("emscripten::_pthread_detach"); + 0 +} pub fn _pthread_join(_ctx: &mut Ctx, _a: i32, _b: i32) -> i32 { debug!("emscripten::_pthread_join"); 0 diff --git a/lib/emscripten/src/exception.rs b/lib/emscripten/src/exception.rs index 1f2b098d8..f37c015e5 100644 --- a/lib/emscripten/src/exception.rs +++ b/lib/emscripten/src/exception.rs @@ -28,3 +28,9 @@ pub fn ___cxa_uncaught_exception(_ctx: &mut Ctx) -> i32 { debug!("emscripten::___cxa_uncaught_exception"); -1 } + +pub fn ___cxa_pure_virtual(_ctx: &mut Ctx) { + debug!("emscripten::___cxa_pure_virtual"); + // ABORT = true + panic!("Pure virtual function called!"); +} diff --git a/lib/emscripten/src/lib.rs b/lib/emscripten/src/lib.rs index c41e4b96d..116a0e88d 100644 --- a/lib/emscripten/src/lib.rs +++ b/lib/emscripten/src/lib.rs @@ -619,6 +619,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject "_llvm_eh_typeid_for" => func!(crate::process::_llvm_eh_typeid_for), "_raise" => func!(crate::process::_raise), "_sem_init" => func!(crate::process::_sem_init), + "_sem_destroy" => func!(crate::process::_sem_destroy), "_sem_post" => func!(crate::process::_sem_post), "_sem_wait" => func!(crate::process::_sem_wait), "_getgrent" => func!(crate::process::_getgrent), @@ -658,6 +659,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject "___cxa_begin_catch" => func!(crate::exception::___cxa_begin_catch), "___cxa_end_catch" => func!(crate::exception::___cxa_end_catch), "___cxa_uncaught_exception" => func!(crate::exception::___cxa_uncaught_exception), + "___cxa_pure_virtual" => func!(crate::exception::___cxa_pure_virtual), // Time "_gettimeofday" => func!(crate::time::_gettimeofday), @@ -686,6 +688,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject "_llvm_cos_f64" => func!(crate::math::_llvm_cos_f64), "_llvm_exp2_f32" => func!(crate::math::_llvm_exp2_f32), "_llvm_exp2_f64" => func!(crate::math::_llvm_exp2_f64), + "_llvm_trunc_f64" => func!(crate::math::_llvm_trunc_f64), "_emscripten_random" => func!(crate::math::_emscripten_random), // Jump @@ -704,6 +707,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject "_dlsym" => func!(crate::linking::_dlsym), // wasm32-unknown-emscripten + "_atexit" => func!(crate::emscripten_target::_atexit), "setTempRet0" => func!(crate::emscripten_target::setTempRet0), "getTempRet0" => func!(crate::emscripten_target::getTempRet0), "invoke_i" => func!(crate::emscripten_target::invoke_i), @@ -726,10 +730,15 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject "___resumeException" => func!(crate::emscripten_target::___resumeException), "_dladdr" => func!(crate::emscripten_target::_dladdr), "_pthread_create" => func!(crate::emscripten_target::_pthread_create), + "_pthread_detach" => func!(crate::emscripten_target::_pthread_detach), "_pthread_join" => func!(crate::emscripten_target::_pthread_join), - "_pthread_cond_destroy" => func!(crate::emscripten_target::_pthread_cond_destroy), + "_pthread_attr_init" => func!(crate::emscripten_target::_pthread_attr_init), + "_pthread_attr_destroy" => func!(crate::emscripten_target::_pthread_attr_destroy), + "_pthread_attr_getstack" => func!(crate::emscripten_target::_pthread_attr_getstack), "_pthread_cond_init" => func!(crate::emscripten_target::_pthread_cond_init), + "_pthread_cond_destroy" => func!(crate::emscripten_target::_pthread_cond_destroy), "_pthread_cond_signal" => func!(crate::emscripten_target::_pthread_cond_signal), + "_pthread_cond_timedwait" => func!(crate::emscripten_target::_pthread_cond_timedwait), "_pthread_cond_wait" => func!(crate::emscripten_target::_pthread_cond_wait), "_pthread_condattr_destroy" => func!(crate::emscripten_target::_pthread_condattr_destroy), "_pthread_condattr_init" => func!(crate::emscripten_target::_pthread_condattr_init), @@ -743,6 +752,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject "_pthread_rwlock_unlock" => func!(crate::emscripten_target::_pthread_rwlock_unlock), "_pthread_setcancelstate" => func!(crate::emscripten_target::_pthread_setcancelstate), "_pthread_getspecific" => func!(crate::emscripten_target::_pthread_getspecific), + "_pthread_getattr_np" => func!(crate::emscripten_target::_pthread_getattr_np), "_pthread_setspecific" => func!(crate::emscripten_target::_pthread_setspecific), "_pthread_once" => func!(crate::emscripten_target::_pthread_once), "_pthread_key_create" => func!(crate::emscripten_target::_pthread_key_create), diff --git a/lib/emscripten/src/math.rs b/lib/emscripten/src/math.rs index e0eb10c7d..3256b49c5 100644 --- a/lib/emscripten/src/math.rs +++ b/lib/emscripten/src/math.rs @@ -44,6 +44,11 @@ pub fn _llvm_exp2_f64(_ctx: &mut Ctx, value: f64) -> f64 { 2f64.powf(value) } +pub fn _llvm_trunc_f64(_ctx: &mut Ctx, value: f64) -> f64 { + debug!("emscripten::_llvm_trunc_f64"); + value.trunc() +} + pub fn _emscripten_random(_ctx: &mut Ctx) -> f64 { debug!("emscripten::_emscripten_random"); -1.0 diff --git a/lib/emscripten/src/process.rs b/lib/emscripten/src/process.rs index 4c6e33e70..bd21e69bf 100644 --- a/lib/emscripten/src/process.rs +++ b/lib/emscripten/src/process.rs @@ -83,7 +83,12 @@ pub fn _raise(_ctx: &mut Ctx, _one: i32) -> i32 { pub fn _sem_init(_ctx: &mut Ctx, _one: i32, _two: i32, _three: i32) -> i32 { debug!("emscripten::_sem_init"); - -1 + 0 +} + +pub fn _sem_destroy(_ctx: &mut Ctx, _one: i32) -> i32 { + debug!("emscripten::_sem_destroy"); + 0 } pub fn _sem_post(_ctx: &mut Ctx, _one: i32) -> i32 { From 747e5321a2af62de14e3c8e2b9a98fefee8ccb94 Mon Sep 17 00:00:00 2001 From: Syrus Date: Tue, 30 Apr 2019 12:05:13 -0700 Subject: [PATCH 12/12] Fixed issues. Updated CHANGELOG --- CHANGELOG.md | 1 + lib/emscripten/src/emscripten_target.rs | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37b1390ec..6d3fffc86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All PRs to the Wasmer repository must add to this file. Blocks of changes will separated by version increments. ## **[Unreleased]** +- [#409](https://github.com/wasmerio/wasmer/pull/409) Improved Emscripten functions to run JavascriptCore compiled to wasm - [#399](https://github.com/wasmerio/wasmer/pull/399) Add example of using a plugin extended from WASI - [#397](https://github.com/wasmerio/wasmer/pull/397) Fix WASI fs abstraction to work on Windows - [#390](https://github.com/wasmerio/wasmer/pull/390) Pin released wapm version and add it as a git submodule diff --git a/lib/emscripten/src/emscripten_target.rs b/lib/emscripten/src/emscripten_target.rs index 08a7ef516..8e107bd3c 100644 --- a/lib/emscripten/src/emscripten_target.rs +++ b/lib/emscripten/src/emscripten_target.rs @@ -62,7 +62,12 @@ pub fn _pthread_attr_destroy(_ctx: &mut Ctx, _a: i32) -> i32 { debug!("emscripten::_pthread_attr_destroy"); 0 } -pub fn _pthread_attr_getstack(_ctx: &mut Ctx, _stackaddr: i32, _stacksize: i32, _other: i32) -> i32 { +pub fn _pthread_attr_getstack( + _ctx: &mut Ctx, + _stackaddr: i32, + _stacksize: i32, + _other: i32, +) -> i32 { debug!("emscripten::_pthread_attr_getstack"); // TODO: Translate from Emscripten // HEAP32[stackaddr >> 2] = STACK_BASE;