From 0a500cefc6bbba5404925740e7327e47ac7c4e43 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 7 Jun 2018 17:49:54 +0300 Subject: [PATCH] Fix build of test-chains. --- .../test-chains/basic_add/Cargo.toml | 2 +- .../test-chains/basic_add/src/lib.rs | 2 +- .../test-chains/basic_add/src/wasm.rs | 20 +++++++++++------- .../test-chains/build_test_chains.sh | 3 +-- polkadot/parachain/tests/res/basic_add.wasm | Bin 44941 -> 11783 bytes 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/polkadot/parachain/test-chains/basic_add/Cargo.toml b/polkadot/parachain/test-chains/basic_add/Cargo.toml index afc9e9f13103d..dd0fc4050d925 100644 --- a/polkadot/parachain/test-chains/basic_add/Cargo.toml +++ b/polkadot/parachain/test-chains/basic_add/Cargo.toml @@ -9,7 +9,7 @@ crate-type = ["cdylib"] [dependencies] polkadot-parachain = { path = "../../", default-features = false } -wee_alloc = "0.2.0" +wee_alloc = "0.4.0" tiny-keccak = "1.4" pwasm-libc = "0.2" diff --git a/polkadot/parachain/test-chains/basic_add/src/lib.rs b/polkadot/parachain/test-chains/basic_add/src/lib.rs index 3f877b16d1bcb..be21a8dec8caa 100644 --- a/polkadot/parachain/test-chains/basic_add/src/lib.rs +++ b/polkadot/parachain/test-chains/basic_add/src/lib.rs @@ -17,7 +17,7 @@ //! Basic parachain that adds a number as part of its state. #![cfg_attr(not(feature = "std"), no_std)] -#![cfg_attr(not(feature = "std"), feature(alloc, core_intrinsics, global_allocator, lang_items))] +#![cfg_attr(not(feature = "std"), feature(alloc, core_intrinsics, global_allocator, lang_items, panic_implementation))] #[cfg(not(feature = "std"))] extern crate alloc; diff --git a/polkadot/parachain/test-chains/basic_add/src/wasm.rs b/polkadot/parachain/test-chains/basic_add/src/wasm.rs index fa1bf64f43cea..3af2dd39a9722 100644 --- a/polkadot/parachain/test-chains/basic_add/src/wasm.rs +++ b/polkadot/parachain/test-chains/basic_add/src/wasm.rs @@ -16,19 +16,23 @@ //! Defines WASM module logic. +use core::intrinsics; + use parachain::{self, ValidationResult}; use parachain::codec::Slicable; use super::{HeadData, BlockData}; -#[lang = "panic_fmt"] +#[panic_implementation] +#[no_mangle] +pub fn rust_begin_panic(_info: &::core::panic::PanicInfo) -> ! { + unsafe { + intrinsics::abort() + } +} + +#[lang = "oom"] #[no_mangle] -pub extern fn panic_fmt( - _args: ::core::fmt::Arguments, - _file: &'static str, - _line: u32, - _col: u32, -) -> ! { - use core::intrinsics; +pub fn oom() -> ! { unsafe { intrinsics::abort(); } diff --git a/polkadot/parachain/test-chains/build_test_chains.sh b/polkadot/parachain/test-chains/build_test_chains.sh index 6523e46f14e7e..2b876634e88c7 100755 --- a/polkadot/parachain/test-chains/build_test_chains.sh +++ b/polkadot/parachain/test-chains/build_test_chains.sh @@ -7,8 +7,7 @@ do i=${i%/} cd $i - # TODO: stop using exact nightly when wee-alloc works on normal nightly. - RUSTFLAGS="-C link-arg=--import-memory" cargo +nightly-2018-03-07 build --target=wasm32-unknown-unknown --release --no-default-features + RUSTFLAGS="-C link-arg=--import-memory" cargo +nightly build --target=wasm32-unknown-unknown --release --no-default-features wasm-gc target/wasm32-unknown-unknown/release/$i.wasm ../../tests/res/$i.wasm cd .. done diff --git a/polkadot/parachain/tests/res/basic_add.wasm b/polkadot/parachain/tests/res/basic_add.wasm index 83f52db817f81cf088221070e7db06d3a9ea8765..709c111d278c720417615f10e3f7dd08538ed76f 100755 GIT binary patch literal 11783 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 literal 44941 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 X{Ls~5O8(frTX~$XF7(Rv(PRG)^`N<2