Fix panics when services have more than 2gb memory allocated (#143)

* add test for allocation at offset more than 2gb

* update wasmer-it version and use u32 instead of usize where needed

* remove cargo.toml patch
This commit is contained in:
Valery Antopol
2022-03-25 18:40:50 +03:00
committed by GitHub
parent 614a4cb078
commit e37e475663
23 changed files with 316 additions and 169 deletions

View File

@ -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

226
Cargo.lock generated
View File

@ -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"

View File

@ -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",

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"] }

View File

@ -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::<u8, Array>::new(offset as _);
wasm_ptr.get_utf8_string(ctx.memory(0), size as _)
let wasm_ptr = WasmPtr::<u8, Array>::new(offset as u32);
wasm_ptr.get_utf8_string(ctx.memory(0), size as u32)
}
#[inline]

View File

@ -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"

View File

@ -31,8 +31,8 @@ impl<'c> LoHelper<'c> {
}
impl<'s> Allocatable for LoHelper<'s> {
fn allocate(&self, size: u32, type_tag: u32) -> Result<usize, AllocatableError> {
fn allocate(&self, size: u32, type_tag: u32) -> Result<u32, AllocatableError> {
let offset = call_wasm_func!(self.allocate_func, size as _, type_tag as _);
Ok(offset as _)
Ok(offset as u32)
}
}

View File

@ -56,7 +56,7 @@ pub(crate) fn ivalue_to_wvalues<A: Allocatable, MV: for<'a> SequentialMemoryView
}
Some(IValue::Record(values)) => {
let offset = record_lower_memory(lowerer, values)?;
vec![WValue::I32(offset)]
vec![WValue::I32(offset as i32)]
}
None => vec![],
};

View File

@ -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<Self::SW, MemoryAccessError> {
fn sequential_writer(&'v self, offset: u32, size: u32) -> Result<Self::SW, MemoryAccessError> {
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<Self::SR, MemoryAccessError> {
fn sequential_reader(&'v self, offset: u32, size: u32) -> Result<Self::SR, MemoryAccessError> {
let view = &self.0;
let slice: &[Cell<u8>] = view.deref();
self.check_bounds(offset, size, slice.len())?;
self.check_bounds(offset, size, slice.len() as u32)?;
let reader = WasmerSequentialReader {
memory: slice,

View File

@ -83,19 +83,19 @@ macro_rules! read_ty {
pub(crate) struct WasmerSequentialReader<'s> {
pub memory: &'s [Cell<u8>],
pub offset: Cell<usize>,
pub offset: Cell<u32>,
}
pub(crate) struct WasmerSequentialWriter<'s> {
pub offset: usize,
pub offset: u32,
pub slice: &'s [Cell<u8>],
pub current_offset: Cell<usize>,
pub current_offset: Cell<u32>,
}
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);
}

View File

@ -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));
}

View File

@ -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/

View File

@ -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"

View File

@ -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

View File

@ -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<Vec<u8>> = 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) {}

View File

@ -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"

View File

@ -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<u8> {
pub fn get_range(&self, offset: u32, size: u32) -> Vec<u8> {
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);
})

View File

@ -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<usize>,
offset: Cell<u32>,
data: Vec<u8>,
memory: JsWasmMemoryProxy,
start_offset: usize,
start_offset: u32,
}
pub(super) struct JsSequentialWriter {
offset: usize,
current_offset: Cell<usize>,
offset: u32,
current_offset: Cell<u32>,
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<const COUNT: usize>(&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<Self::SW, MemoryAccessError> {
fn sequential_writer(&'v self, offset: u32, size: u32) -> Result<Self::SW, MemoryAccessError> {
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<Self::SR, MemoryAccessError> {
fn sequential_reader(&'v self, offset: u32, size: u32) -> Result<Self::SR, MemoryAccessError> {
let memory = JsWasmMemoryProxy::new(self.module_name.clone());
let memory_size = memory.len();