diff --git a/.circleci/config.yml b/.circleci/config.yml index 23f55ea8..aa2c1864 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -44,6 +44,7 @@ jobs: ) (cd ./examples; ./build.sh) (cd ./fluence-faas/tests/wasm_tests; ./build.sh) + (cd ./runtime/tests/wasm_tests; ./build.sh) cargo test --release -v --all-features -p marine-it-generator -p marine-runtime -p fluence-faas -p fluence-app-service -p marine -p mrepl cargo clippy diff --git a/Cargo.lock b/Cargo.lock index 3ae1d22a..7d185128 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,9 +47,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.53" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" +checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" [[package]] name = "arguments-passing-test" @@ -242,8 +242,8 @@ checksum = "686b97f42c02048850cf72da8a67a42c094d57f50e216b735d94aad32fd3c4c9" dependencies = [ "anyhow", "chrono", - "reqwest 0.11.9", - "semver 1.0.5", + "reqwest 0.11.10", + "semver 1.0.6", "serde", ] @@ -392,9 +392,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -413,10 +413,11 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00d6d2ea26e8b151d99093005cb442fb9a37aeaca582a03ec70946f49ab5ed9" +checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" dependencies = [ + "autocfg", "cfg-if 1.0.0", "crossbeam-utils", "lazy_static", @@ -426,9 +427,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ "cfg-if 1.0.0", "lazy_static", @@ -446,9 +447,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" +checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" dependencies = [ "quote", "syn", @@ -644,7 +645,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users 0.4.0", + "redox_users 0.4.2", "winapi 0.3.9", ] @@ -691,9 +692,9 @@ dependencies = [ [[package]] name = "erased-serde" -version = "0.3.18" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56047058e1ab118075ca22f9ecd737bcc961aa3566a3019cb71388afa280bd8a" +checksum = "ad132dd8d0d0b546348d7d86cb3191aad14b34e5f979781fc005c80d4ac67ffd" dependencies = [ "serde", ] @@ -849,7 +850,7 @@ dependencies = [ "serde_with", "thiserror", "toml", - "wasmer-interface-types-fl 0.21.1", + "wasmer-interface-types-fl 0.22.0", "wasmer-runtime-core-fl", "wasmer-runtime-fl", "wasmer-wasi-fl", @@ -861,7 +862,19 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "047f670b4807cab8872550a607b1515daff08b3e3bb7576ce8f45971fd811a4e" dependencies = [ - "it-to-bytes", + "it-to-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "nom", + "serde", + "variant_count", + "wast", +] + +[[package]] +name = "fluence-it-types" +version = "0.3.1" +source = "git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory#72b053b8730066c0f5d3d967d7a314919236c199" +dependencies = [ + "it-to-bytes 0.1.0 (git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory)", "nom", "serde", "variant_count", @@ -1014,9 +1027,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" dependencies = [ "cfg-if 1.0.0", "libc", @@ -1072,9 +1085,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b" dependencies = [ "bytes 1.1.0", "fnv", @@ -1204,15 +1217,15 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.17" +version = "0.14.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" dependencies = [ "bytes 1.1.0", "futures-channel", "futures-core", "futures-util", - "h2 0.3.11", + "h2 0.3.12", "http", "http-body 0.4.4", "httparse", @@ -1246,7 +1259,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes 1.1.0", - "hyper 0.14.17", + "hyper 0.14.18", "native-tls", "tokio 1.17.0", "tokio-native-tls", @@ -1332,9 +1345,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" [[package]] name = "it-json-serde" @@ -1345,7 +1358,7 @@ dependencies = [ "serde_json", "serde_with", "thiserror", - "wasmer-interface-types-fl 0.21.1", + "wasmer-interface-types-fl 0.22.0", ] [[package]] @@ -1354,7 +1367,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99ccf40e1e08f6f47ffbafe3cfb2e3adb721ddde80b178240f038d07dc9652fb" dependencies = [ - "fluence-it-types", + "fluence-it-types 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "log", "paste", "thiserror", @@ -1362,11 +1375,10 @@ dependencies = [ [[package]] name = "it-lilo" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4779ed9b3289f03294743f26112366a59eb53c5d05b5b6afbfd7ce8780944cfd" +version = "0.3.0" +source = "git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory#72b053b8730066c0f5d3d967d7a314919236c199" dependencies = [ - "fluence-it-types", + "fluence-it-types 0.3.1 (git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory)", "it-memory-traits", "log", "paste", @@ -1375,9 +1387,8 @@ dependencies = [ [[package]] name = "it-memory-traits" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1f9aa4bd18db30d0ed34e0119486f21cf49f08bfe96e44cb54930c4db403af" +version = "0.2.0" +source = "git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory#72b053b8730066c0f5d3d967d7a314919236c199" dependencies = [ "thiserror", ] @@ -1388,6 +1399,11 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "729c74bb4236418898a219c6d96f14cba77456dd7c04a2e99e65e9c643709b56" +[[package]] +name = "it-to-bytes" +version = "0.1.0" +source = "git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory#72b053b8730066c0f5d3d967d7a314919236c199" + [[package]] name = "itertools" version = "0.9.0" @@ -1464,9 +1480,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e509672465a0504304aa87f9f176f2b2b716ed8fb105ebe5c02dc6dce96a94" +checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" [[package]] name = "local_storage" @@ -1488,9 +1504,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ "cfg-if 1.0.0", ] @@ -1554,7 +1570,7 @@ name = "marine-it-generator" version = "0.6.0" dependencies = [ "cargo_toml", - "it-lilo 0.2.0", + "it-lilo 0.3.0", "marine-it-parser 0.7.0", "marine-macro-impl", "once_cell", @@ -1562,7 +1578,7 @@ dependencies = [ "serde_json", "thiserror", "walrus", - "wasmer-interface-types-fl 0.21.1", + "wasmer-interface-types-fl 0.22.0", ] [[package]] @@ -1580,7 +1596,7 @@ name = "marine-it-interfaces" version = "0.5.0" dependencies = [ "multimap", - "wasmer-interface-types-fl 0.21.1", + "wasmer-interface-types-fl 0.22.0", ] [[package]] @@ -1615,7 +1631,7 @@ dependencies = [ "serde", "thiserror", "walrus", - "wasmer-interface-types-fl 0.21.1", + "wasmer-interface-types-fl 0.22.0", "wasmer-runtime-core-fl", ] @@ -1711,7 +1727,7 @@ dependencies = [ "serde", "thiserror", "walrus", - "wasmer-interface-types-fl 0.21.1", + "wasmer-interface-types-fl 0.22.0", ] [[package]] @@ -1789,7 +1805,7 @@ dependencies = [ "boolinator", "bytes 0.5.6", "bytesize", - "it-lilo 0.2.0", + "it-lilo 0.3.0", "it-memory-traits", "log", "marine-it-generator 0.6.0", @@ -1809,7 +1825,7 @@ dependencies = [ "serde", "thiserror", "tokio 0.2.25", - "wasmer-interface-types-fl 0.21.1", + "wasmer-interface-types-fl 0.22.0", "wasmer-runtime-core-fl", "wasmer-runtime-fl", "wasmer-wasi-fl", @@ -1883,9 +1899,9 @@ dependencies = [ "boolinator", "bytesize", "console_error_panic_hook", - "fluence-it-types", + "fluence-it-types 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "it-json-serde", - "it-lilo 0.2.0", + "it-lilo 0.3.0", "it-memory-traits", "itertools 0.10.3", "log", @@ -1907,7 +1923,7 @@ dependencies = [ "thiserror", "toml", "wasm-bindgen", - "wasmer-interface-types-fl 0.21.1", + "wasmer-interface-types-fl 0.22.0", "web-sys", ] @@ -1989,14 +2005,15 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2" +checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" dependencies = [ "libc", "log", "miow 0.3.7", "ntapi", + "wasi 0.11.0+wasi-snapshot-preview1", "winapi 0.3.9", ] @@ -2192,9 +2209,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" [[package]] name = "openssl" @@ -2441,9 +2458,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "b4af2ec4714533fcdf07e886f17025ace8b997b9ce51204ee69b6da831c3da57" dependencies = [ "proc-macro2", ] @@ -2500,6 +2517,14 @@ dependencies = [ "test-record", ] +[[package]] +name = "records-allocation-test" +version = "0.1.0" +dependencies = [ + "marine-rs-sdk", + "safe-transmute", +] + [[package]] name = "records-passing-test" version = "0.1.0" @@ -2516,9 +2541,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c" dependencies = [ "bitflags", ] @@ -2529,7 +2554,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f" dependencies = [ - "redox_syscall 0.2.10", + "redox_syscall 0.2.11", ] [[package]] @@ -2545,19 +2570,20 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "7776223e2696f1aa4c6b0170e83212f47296a00424305117d013dfe86fb0fe55" dependencies = [ - "getrandom 0.2.4", - "redox_syscall 0.2.10", + "getrandom 0.2.5", + "redox_syscall 0.2.11", + "thiserror", ] [[package]] name = "regex" -version = "1.5.4" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" dependencies = [ "aho-corasick", "memchr", @@ -2611,24 +2637,24 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", + "winreg 0.7.0", ] [[package]] name = "reqwest" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" +checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" dependencies = [ "base64", "bytes 1.1.0", "encoding_rs", "futures-core", "futures-util", - "h2 0.3.11", + "h2 0.3.12", "http", "http-body 0.4.4", - "hyper 0.14.17", + "hyper 0.14.18", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -2647,7 +2673,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", + "winreg 0.10.1", ] [[package]] @@ -2790,9 +2816,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0486718e92ec9a68fbed73bb5ef687d71103b142595b406835649bebd33f72c7" +checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" dependencies = [ "serde", ] @@ -2993,9 +3019,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54" dependencies = [ "proc-macro2", "quote", @@ -3029,7 +3055,7 @@ dependencies = [ "cfg-if 1.0.0", "fastrand", "libc", - "redox_syscall 0.2.10", + "redox_syscall 0.2.11", "remove_dir_all", "winapi 0.3.9", ] @@ -3047,9 +3073,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] @@ -3062,7 +3088,7 @@ checksum = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e" dependencies = [ "libc", "numtoa", - "redox_syscall 0.2.10", + "redox_syscall 0.2.11", "redox_termios", ] @@ -3173,7 +3199,7 @@ dependencies = [ "bytes 1.1.0", "libc", "memchr", - "mio 0.8.0", + "mio 0.8.2", "num_cpus", "pin-project-lite 0.2.8", "socket2 0.4.4", @@ -3256,9 +3282,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f" +checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" dependencies = [ "cfg-if 1.0.0", "log", @@ -3268,9 +3294,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" +checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" dependencies = [ "lazy_static", ] @@ -3413,7 +3439,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.4", + "getrandom 0.2.5", ] [[package]] @@ -3507,6 +3533,12 @@ version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" version = "0.2.79" @@ -3666,9 +3698,9 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14ba3b5a07989987994b96bf5cc7ac2947005f9ff6123d71b7064232f07d28fa" dependencies = [ - "fluence-it-types", + "fluence-it-types 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "it-lilo 0.1.0", - "it-to-bytes", + "it-to-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.10.3", "log", "nom", @@ -3682,14 +3714,13 @@ dependencies = [ [[package]] name = "wasmer-interface-types-fl" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b44e5721c2d42996a6ce9aa3ae75fb8b32433e3bb8aa0942fe27087a9966175" +version = "0.22.0" +source = "git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory#72b053b8730066c0f5d3d967d7a314919236c199" dependencies = [ - "fluence-it-types", - "it-lilo 0.2.0", + "fluence-it-types 0.3.1 (git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory)", + "it-lilo 0.3.0", "it-memory-traits", - "it-to-bytes", + "it-to-bytes 0.1.0 (git+https://github.com/fluencelabs/interface-types?branch=use_u32_for_memory)", "itertools 0.10.3", "log", "nom", @@ -3888,6 +3919,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "ws2_32-sys" version = "0.2.1" diff --git a/Cargo.toml b/Cargo.toml index 018ff55b..fc765712 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ members = [ "fluence-faas/tests/wasm_tests/arrays_passing", "fluence-faas/tests/wasm_tests/records_passing", "runtime", + "runtime/tests/wasm_tests/records_allocation", "web-runtime", "tools/cli", "tools/repl", diff --git a/crates/it-generator/Cargo.toml b/crates/it-generator/Cargo.toml index aa8f0fae..b3c58555 100644 --- a/crates/it-generator/Cargo.toml +++ b/crates/it-generator/Cargo.toml @@ -14,8 +14,8 @@ path = "src/lib.rs" marine-it-parser = { path = "../it-parser", version = "0.7.0"} marine-macro-impl = "0.6.10" -wasmer-it = { package = "wasmer-interface-types-fl", version = "0.21.1" } -it-lilo = "0.2.0" +wasmer-it = { package = "wasmer-interface-types-fl", version = "0.22.0" } +it-lilo = "0.3.0" thiserror = "1.0.24" walrus = "0.18.0" diff --git a/crates/it-interfaces/Cargo.toml b/crates/it-interfaces/Cargo.toml index 17966e1a..00356cc1 100644 --- a/crates/it-interfaces/Cargo.toml +++ b/crates/it-interfaces/Cargo.toml @@ -11,5 +11,5 @@ name = "marine_it_interfaces" path = "src/lib.rs" [dependencies] -wasmer-it = { package = "wasmer-interface-types-fl", version = "0.21.1" } +wasmer-it = { package = "wasmer-interface-types-fl", version = "0.22.0" } multimap = "0.8.1" diff --git a/crates/it-json-serde/Cargo.toml b/crates/it-json-serde/Cargo.toml index c4363f90..6373d747 100644 --- a/crates/it-json-serde/Cargo.toml +++ b/crates/it-json-serde/Cargo.toml @@ -11,7 +11,7 @@ name = "it_json_serde" path = "src/lib.rs" [dependencies] -wasmer-it = { package = "wasmer-interface-types-fl", version = "0.21.1" } +wasmer-it = { package = "wasmer-interface-types-fl", version = "0.22.0" } serde = { version = "1.0.118", features = ["derive"] } serde_json = "1.0.53" diff --git a/crates/it-parser/Cargo.toml b/crates/it-parser/Cargo.toml index d9735e92..8e1b2309 100644 --- a/crates/it-parser/Cargo.toml +++ b/crates/it-parser/Cargo.toml @@ -17,7 +17,7 @@ marine-module-interface = { path = "../module-interface", version = "0.2.0" } anyhow = "1.0.31" walrus = "0.18.0" wasmer-core = { package = "wasmer-runtime-core-fl", version = "=0.17.1"} -wasmer-it = { package = "wasmer-interface-types-fl", version = "0.21.1"} +wasmer-it = { package = "wasmer-interface-types-fl", version = "0.22.0"} nom = "5.1" itertools = "0.10.0" diff --git a/crates/module-interface/Cargo.toml b/crates/module-interface/Cargo.toml index 806af15b..780fef2d 100644 --- a/crates/module-interface/Cargo.toml +++ b/crates/module-interface/Cargo.toml @@ -15,7 +15,7 @@ marine-it-interfaces = { path = "../it-interfaces", version = "0.5.0" } anyhow = "1.0.31" walrus = "0.18.0" -wasmer-it = { package = "wasmer-interface-types-fl", version = "0.21.1"} +wasmer-it = { package = "wasmer-interface-types-fl", version = "0.22.0"} nom = "5.1" itertools = "0.10.0" diff --git a/fluence-faas/Cargo.toml b/fluence-faas/Cargo.toml index 12ca2212..6aecc9cd 100644 --- a/fluence-faas/Cargo.toml +++ b/fluence-faas/Cargo.toml @@ -18,7 +18,7 @@ wasmer-runtime = { package = "wasmer-runtime-fl", version = "=0.17.1" } # dynamicfunc-fat-closures allows using state inside DynamicFunc wasmer-core = { package = "wasmer-runtime-core-fl", version = "=0.17.1", features = ["dynamicfunc-fat-closures"] } wasmer-wasi = { package = "wasmer-wasi-fl", version = "0.17.1" } -wasmer-it = { package = "wasmer-interface-types-fl", version = "0.21.1" } +wasmer-it = { package = "wasmer-interface-types-fl", version = "0.22.0" } toml = "0.5.6" serde = { version = "1.0.118", features = ["derive"] } diff --git a/fluence-faas/src/host_imports/logger/log_utf8_string_impl.rs b/fluence-faas/src/host_imports/logger/log_utf8_string_impl.rs index b1f4181b..d0b81697 100644 --- a/fluence-faas/src/host_imports/logger/log_utf8_string_impl.rs +++ b/fluence-faas/src/host_imports/logger/log_utf8_string_impl.rs @@ -53,8 +53,8 @@ pub(crate) fn log_utf8_string( #[inline] fn read_string(ctx: &Ctx, offset: i32, size: i32) -> Option<&str> { - let wasm_ptr = WasmPtr::::new(offset as _); - wasm_ptr.get_utf8_string(ctx.memory(0), size as _) + let wasm_ptr = WasmPtr::::new(offset as u32); + wasm_ptr.get_utf8_string(ctx.memory(0), size as u32) } #[inline] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index e4c3301b..2df15396 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -22,9 +22,9 @@ marine-min-it-version = { path = "../crates/min-it-version", version = "0.1.0"} wasmer-runtime = { package = "wasmer-runtime-fl", version = "=0.17.1" } # dynamicfunc-fat-closures allows using state inside DynamicFunc wasmer-core = { package = "wasmer-runtime-core-fl", version = "=0.17.1", features = ["dynamicfunc-fat-closures"] } -wasmer-it = { package = "wasmer-interface-types-fl", version = "0.21.1" } -it-lilo = "0.2.0" -it-memory-traits = "0.1.0" +wasmer-it = { package = "wasmer-interface-types-fl", version = "0.22.0" } +it-lilo = "0.3.0" +it-memory-traits = "0.2.0" wasmer-wasi = { package = "wasmer-wasi-fl", version = "0.17.1" } bytesize = "1.1.0" diff --git a/runtime/src/host_imports/lowering/lo_helper.rs b/runtime/src/host_imports/lowering/lo_helper.rs index 2b7be8ac..4d620f29 100644 --- a/runtime/src/host_imports/lowering/lo_helper.rs +++ b/runtime/src/host_imports/lowering/lo_helper.rs @@ -31,8 +31,8 @@ impl<'c> LoHelper<'c> { } impl<'s> Allocatable for LoHelper<'s> { - fn allocate(&self, size: u32, type_tag: u32) -> Result { + fn allocate(&self, size: u32, type_tag: u32) -> Result { let offset = call_wasm_func!(self.allocate_func, size as _, type_tag as _); - Ok(offset as _) + Ok(offset as u32) } } diff --git a/runtime/src/host_imports/lowering/lower_ivalues.rs b/runtime/src/host_imports/lowering/lower_ivalues.rs index 3bf6124a..2dd14d51 100644 --- a/runtime/src/host_imports/lowering/lower_ivalues.rs +++ b/runtime/src/host_imports/lowering/lower_ivalues.rs @@ -56,7 +56,7 @@ pub(crate) fn ivalue_to_wvalues SequentialMemoryView } Some(IValue::Record(values)) => { let offset = record_lower_memory(lowerer, values)?; - vec![WValue::I32(offset)] + vec![WValue::I32(offset as i32)] } None => vec![], }; diff --git a/runtime/src/module/memory.rs b/runtime/src/module/memory.rs index 88bb8c01..5e314ac4 100644 --- a/runtime/src/module/memory.rs +++ b/runtime/src/module/memory.rs @@ -40,9 +40,9 @@ impl std::ops::Deref for WITMemory { impl WITMemoryView<'_> { fn check_bounds( &self, - offset: usize, - size: usize, - memory_size: usize, + offset: u32, + size: u32, + memory_size: u32, ) -> Result<(), MemoryAccessError> { if offset + size >= memory_size { Err(MemoryAccessError::OutOfBounds { @@ -60,15 +60,11 @@ impl<'s, 'v> wasm::structures::SequentialMemoryView<'v> for WITMemoryView<'s> { type SR = WasmerSequentialReader<'v>; type SW = WasmerSequentialWriter<'v>; - fn sequential_writer( - &'v self, - offset: usize, - size: usize, - ) -> Result { + fn sequential_writer(&'v self, offset: u32, size: u32) -> Result { let view = &self.0; let slice = view.deref(); - self.check_bounds(offset, size, slice.len())?; + self.check_bounds(offset, size, slice.len() as u32)?; let writer = WasmerSequentialWriter { offset, @@ -79,15 +75,11 @@ impl<'s, 'v> wasm::structures::SequentialMemoryView<'v> for WITMemoryView<'s> { Ok(writer) } - fn sequential_reader( - &'v self, - offset: usize, - size: usize, - ) -> Result { + fn sequential_reader(&'v self, offset: u32, size: u32) -> Result { let view = &self.0; let slice: &[Cell] = view.deref(); - self.check_bounds(offset, size, slice.len())?; + self.check_bounds(offset, size, slice.len() as u32)?; let reader = WasmerSequentialReader { memory: slice, diff --git a/runtime/src/module/memory_access.rs b/runtime/src/module/memory_access.rs index 354d6a2b..03750656 100644 --- a/runtime/src/module/memory_access.rs +++ b/runtime/src/module/memory_access.rs @@ -83,19 +83,19 @@ macro_rules! read_ty { pub(crate) struct WasmerSequentialReader<'s> { pub memory: &'s [Cell], - pub offset: Cell, + pub offset: Cell, } pub(crate) struct WasmerSequentialWriter<'s> { - pub offset: usize, + pub offset: u32, pub slice: &'s [Cell], - pub current_offset: Cell, + pub current_offset: Cell, } impl SequentialReader for WasmerSequentialReader<'_> { fn read_byte(&self) -> u8 { let offset = self.offset.get(); - let result = self.memory[offset].get(); + let result = self.memory[offset as usize].get(); self.offset.set(offset + 1); result } @@ -106,22 +106,22 @@ impl SequentialReader for WasmerSequentialReader<'_> { let offset = self.offset.get(); let mut result = [0u8; COUNT]; for index in 0..COUNT { - result[index] = self.memory[offset + index].get(); + result[index] = self.memory[offset as usize + index].get(); } - self.offset.set(offset + COUNT); + self.offset.set(offset + COUNT as u32); result } } impl SequentialWriter for WasmerSequentialWriter<'_> { - fn start_offset(&self) -> usize { + fn start_offset(&self) -> u32 { self.offset } fn write_u8(&self, value: u8) { let offset = self.current_offset.get(); - self.slice[offset].set(value); + self.slice[offset as usize].set(value); self.current_offset.set(offset + 1); } diff --git a/runtime/tests/records.rs b/runtime/tests/records.rs index 8307982b..951ea17c 100644 --- a/runtime/tests/records.rs +++ b/runtime/tests/records.rs @@ -63,3 +63,40 @@ pub fn records() { )] ); } + +#[test] +pub fn records_allocation() { + let wasm_bytes = std::fs::read( + "./tests/wasm_tests/records_allocation/artifacts/records_allocation.wasm", + ) + .expect( + "./tests/wasm_tests/records_allocation/artifacts/records_allocation.wasm should be present", + ); + + let mut marine = Marine::new(); + + marine + .load_module("records_allocation", &wasm_bytes, <_>::default()) + .unwrap_or_else(|e| panic!("can't load a module into Marine: {:?}", e)); + + let result = marine + .call("records_allocation", "fill_2gb_mem", &[]) + .unwrap_or_else(|e| panic!("can't invoke fill_2gb_mem: {:?}", e)); + + assert_eq!(result.len(), 0); + + let args = vec![IValue::Record( + wasmer_it::NEVec::new(vec![ + IValue::S32(1), + IValue::S32(1), + IValue::S32(1), + IValue::S32(1), + IValue::S32(1), + ]) + .unwrap(), + )]; + + let result = marine + .call("records_allocation", "pass_record", &args) + .unwrap_or_else(|e| panic!("can't invoke pass_record: {:?}", e)); +} diff --git a/runtime/tests/wasm_tests/build.sh b/runtime/tests/wasm_tests/build.sh new file mode 100755 index 00000000..752227ed --- /dev/null +++ b/runtime/tests/wasm_tests/build.sh @@ -0,0 +1,12 @@ +#/bin/sh + +# This script builds all tests +( + cd records_allocation || exit; + cargo update --aggressive; + marine build --release; + rm artifacts/* || true; + mkdir artifacts +) + +cp ../../../target/wasm32-wasi/release/records_allocation.wasm records_allocation/artifacts/ diff --git a/runtime/tests/wasm_tests/records_allocation/Cargo.toml b/runtime/tests/wasm_tests/records_allocation/Cargo.toml new file mode 100644 index 00000000..a090a954 --- /dev/null +++ b/runtime/tests/wasm_tests/records_allocation/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "records-allocation-test" +version = "0.1.0" +authors = ["Fluence Labs"] +edition = "2018" +publish = false + +[[bin]] +name = "records_allocation" +path = "src/pure.rs" + +[dependencies] +marine-rs-sdk ="0.6.13" +safe-transmute = "0.11.0" diff --git a/runtime/tests/wasm_tests/records_allocation/Config.toml b/runtime/tests/wasm_tests/records_allocation/Config.toml new file mode 100644 index 00000000..8a7e5245 --- /dev/null +++ b/runtime/tests/wasm_tests/records_allocation/Config.toml @@ -0,0 +1,11 @@ +modules_dir = "./artifacts/" + +[[module]] + name = "records_allocation_effector" + max_heap_size = "10 KiB" + logger_enabled = true + +[[module]] + name = "records_allocation_pure" + max_heap_size = "10 KiB" + logger_enabled = true diff --git a/runtime/tests/wasm_tests/records_allocation/src/pure.rs b/runtime/tests/wasm_tests/records_allocation/src/pure.rs new file mode 100644 index 00000000..19f6a33c --- /dev/null +++ b/runtime/tests/wasm_tests/records_allocation/src/pure.rs @@ -0,0 +1,47 @@ +/* + * Copyright 2022 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#![allow(improper_ctypes)] +#![allow(clippy::all)] + +use marine_rs_sdk::marine; +static mut DATA: Option> = None; + +fn main() {} + +#[marine] +pub struct TestRecord { + field1: i32, + field2: i32, + field3: i32, + field4: i32, + field5: i32, +} + +#[marine] +pub fn fill_2gb_mem() { + unsafe { + DATA = Some(Vec::new()); + let mut data = DATA.as_mut().unwrap(); + data.reserve_exact(1); + let data_offset = std::mem::transmute::<*const u8, usize>(data.as_ptr()); + let size = 0x80000001 - data_offset; + data.reserve_exact(size); + } +} + +#[marine] +pub fn pass_record(_record: TestRecord) {} diff --git a/web-runtime/Cargo.toml b/web-runtime/Cargo.toml index 66da0af1..e0fabe57 100644 --- a/web-runtime/Cargo.toml +++ b/web-runtime/Cargo.toml @@ -16,10 +16,10 @@ marine-utils = { path = "../crates/utils", version = "0.4.0" } marine-min-it-version = { path = "../crates/min-it-version", version = "0.1.0"} marine-rs-sdk = "0.6.15" -wasmer-it = { package = "wasmer-interface-types-fl", version = "0.21.1" } +wasmer-it = { package = "wasmer-interface-types-fl", version = "0.22.0" } fluence-it-types = {version = "0.3.1", features = ["impls"] } -it-lilo = "0.2.0" -it-memory-traits = "0.1.0" +it-lilo = "0.3.0" +it-memory-traits = "0.2.0" it-json-serde = { path = "../crates/it-json-serde", version = "0.1.0" } wasm-bindgen = "0.2" diff --git a/web-runtime/src/marine_js.rs b/web-runtime/src/marine_js.rs index 4abd0ee3..a8680e66 100644 --- a/web-runtime/src/marine_js.rs +++ b/web-runtime/src/marine_js.rs @@ -32,11 +32,11 @@ const ALLOCATE_FUNC_NAME: &str = "allocate"; #[wasm_bindgen(module = "/marine-js.js")] extern "C" { pub fn call_export(module_name: &JsValue, export_name: &str, args: &str) -> String; - pub fn write_byte(module_name: &JsValue, module_offset: usize, value: u8); - pub fn read_byte(module_name: &JsValue, module_offset: usize) -> u8; - pub fn get_memory_size(module_name: &JsValue) -> i32; - pub fn read_byte_range(module_name: &JsValue, module_offset: usize, slice: &mut [u8]); - pub fn write_byte_range(module_name: &JsValue, module_offset: usize, slice: &[u8]); + pub fn write_byte(module_name: &JsValue, module_offset: u32, value: u8); + pub fn read_byte(module_name: &JsValue, module_offset: u32) -> u8; + pub fn get_memory_size(module_name: &JsValue) -> u32; + pub fn read_byte_range(module_name: &JsValue, module_offset: u32, slice: &mut [u8]); + pub fn write_byte_range(module_name: &JsValue, module_offset: u32, slice: &[u8]); } #[derive(Clone)] @@ -306,27 +306,27 @@ impl JsWasmMemoryProxy { Self { module_name } } - pub fn get(&self, index: usize) -> u8 { + pub fn get(&self, index: u32) -> u8 { INSTANCE.with(|instance| read_byte(instance.borrow().as_ref().unwrap(), index)) } - pub fn set(&self, index: usize, value: u8) { + pub fn set(&self, index: u32, value: u8) { INSTANCE.with(|instance| write_byte(instance.borrow().as_ref().unwrap(), index, value)) } - pub fn len(&self) -> usize { - INSTANCE.with(|instance| get_memory_size(instance.borrow().as_ref().unwrap()) as usize) + pub fn len(&self) -> u32 { + INSTANCE.with(|instance| get_memory_size(instance.borrow().as_ref().unwrap())) } - pub fn get_range(&self, offset: usize, size: usize) -> Vec { + pub fn get_range(&self, offset: u32, size: u32) -> Vec { INSTANCE.with(|instance| { - let mut result = vec![0; size]; + let mut result = vec![0; size as usize]; read_byte_range(instance.borrow().as_ref().unwrap(), offset, &mut result); result }) } - pub fn set_range(&self, offset: usize, data: &[u8]) { + pub fn set_range(&self, offset: u32, data: &[u8]) { INSTANCE.with(|instance| { write_byte_range(instance.borrow().as_ref().unwrap(), offset, data); }) diff --git a/web-runtime/src/module/memory.rs b/web-runtime/src/module/memory.rs index 502cc776..01bada9b 100644 --- a/web-runtime/src/module/memory.rs +++ b/web-runtime/src/module/memory.rs @@ -34,9 +34,9 @@ impl WITMemoryView { fn check_bounds( &self, - offset: usize, - size: usize, - memory_size: usize, + offset: u32, + size: u32, + memory_size: u32, ) -> Result<(), MemoryAccessError> { if offset + size >= memory_size { Err(MemoryAccessError::OutOfBounds { @@ -51,20 +51,20 @@ impl WITMemoryView { } pub(super) struct JsSequentialReader { - offset: Cell, + offset: Cell, data: Vec, memory: JsWasmMemoryProxy, - start_offset: usize, + start_offset: u32, } pub(super) struct JsSequentialWriter { - offset: usize, - current_offset: Cell, + offset: u32, + current_offset: Cell, memory: JsWasmMemoryProxy, } impl JsSequentialWriter { - pub fn new(offset: usize, memory: JsWasmMemoryProxy) -> Self { + pub fn new(offset: u32, memory: JsWasmMemoryProxy) -> Self { Self { offset, current_offset: Cell::new(offset), @@ -74,7 +74,7 @@ impl JsSequentialWriter { } impl JsSequentialReader { - pub fn new(offset: usize, size: usize, memory: JsWasmMemoryProxy) -> Self { + pub fn new(offset: u32, size: u32, memory: JsWasmMemoryProxy) -> Self { let data = memory.get_range(offset, size); Self { offset: Cell::new(offset), @@ -96,18 +96,18 @@ impl SequentialReader for JsSequentialReader { fn read_bytes(&self) -> [u8; COUNT] { let offset = self.offset.get(); - let start = offset - self.start_offset; + let start = (offset - self.start_offset) as usize; let mut result = [0u8; COUNT]; result.copy_from_slice(&self.data[start..start + COUNT]); - self.offset.set(offset + COUNT); + self.offset.set(offset + COUNT as u32); result } } impl SequentialWriter for JsSequentialWriter { - fn start_offset(&self) -> usize { + fn start_offset(&self) -> u32 { self.offset } @@ -125,7 +125,7 @@ impl SequentialWriter for JsSequentialWriter { fn write_bytes(&self, bytes: &[u8]) { let offset = self.current_offset.get(); self.memory.set_range(offset, bytes); - self.current_offset.set(offset + bytes.len()); + self.current_offset.set(offset + bytes.len() as u32); } } @@ -133,11 +133,7 @@ impl<'v> wasm::structures::SequentialMemoryView<'v> for WITMemoryView { type SR = JsSequentialReader; type SW = JsSequentialWriter; - fn sequential_writer( - &'v self, - offset: usize, - size: usize, - ) -> Result { + fn sequential_writer(&'v self, offset: u32, size: u32) -> Result { let memory = JsWasmMemoryProxy::new(self.module_name.clone()); let memory_size = memory.len(); @@ -146,11 +142,7 @@ impl<'v> wasm::structures::SequentialMemoryView<'v> for WITMemoryView { Ok(JsSequentialWriter::new(offset, memory)) } - fn sequential_reader( - &'v self, - offset: usize, - size: usize, - ) -> Result { + fn sequential_reader(&'v self, offset: u32, size: u32) -> Result { let memory = JsWasmMemoryProxy::new(self.module_name.clone()); let memory_size = memory.len();