From 407db65336f93c0c028e84c98108055df72593b2 Mon Sep 17 00:00:00 2001 From: Jack May Date: Fri, 21 Jun 2019 02:43:50 -0700 Subject: [PATCH] Add 128bit Rust BPF test (#4766) automerge --- programs/bpf/build.rs | 1 + programs/bpf/rust/128bit/.gitignore | 3 ++ programs/bpf/rust/128bit/Cargo.toml | 23 ++++++++++++++ programs/bpf/rust/128bit/Xargo.toml | 6 ++++ programs/bpf/rust/128bit/src/lib.rs | 41 +++++++++++++++++++++++++ programs/bpf/rust/128bit_dep/.gitignore | 3 ++ programs/bpf/rust/128bit_dep/Cargo.toml | 19 ++++++++++++ programs/bpf/rust/128bit_dep/Xargo.toml | 6 ++++ programs/bpf/rust/128bit_dep/src/lib.rs | 9 ++++++ programs/bpf/tests/programs.rs | 1 + 10 files changed, 112 insertions(+) create mode 100644 programs/bpf/rust/128bit/.gitignore create mode 100644 programs/bpf/rust/128bit/Cargo.toml create mode 100644 programs/bpf/rust/128bit/Xargo.toml create mode 100644 programs/bpf/rust/128bit/src/lib.rs create mode 100644 programs/bpf/rust/128bit_dep/.gitignore create mode 100644 programs/bpf/rust/128bit_dep/Cargo.toml create mode 100644 programs/bpf/rust/128bit_dep/Xargo.toml create mode 100644 programs/bpf/rust/128bit_dep/src/lib.rs diff --git a/programs/bpf/build.rs b/programs/bpf/build.rs index 504f53b489..62e47a4c81 100644 --- a/programs/bpf/build.rs +++ b/programs/bpf/build.rs @@ -68,6 +68,7 @@ fn main() { .success()); let rust_programs = [ + "128bit", "alloc", "dep_crate", "iter", diff --git a/programs/bpf/rust/128bit/.gitignore b/programs/bpf/rust/128bit/.gitignore new file mode 100644 index 0000000000..e13de17f65 --- /dev/null +++ b/programs/bpf/rust/128bit/.gitignore @@ -0,0 +1,3 @@ +/target/ + +Cargo.lock diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml new file mode 100644 index 0000000000..10b8e9560e --- /dev/null +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -0,0 +1,23 @@ + +# Note: This crate must be built using build.sh + +[package] +name = "solana-bpf-rust-128bit" +version = "0.16.0" +description = "Solana BPF iter program written in Rust" +authors = ["Solana Maintainers "] +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +edition = "2018" + +[dependencies] +solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.16.0" } +solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "0.16.0" } + +[workspace] +members = [] + +[lib] +crate-type = ["cdylib"] +name = "solana_bpf_rust_128bit" diff --git a/programs/bpf/rust/128bit/Xargo.toml b/programs/bpf/rust/128bit/Xargo.toml new file mode 100644 index 0000000000..385a264b04 --- /dev/null +++ b/programs/bpf/rust/128bit/Xargo.toml @@ -0,0 +1,6 @@ +[dependencies.compiler_builtins] +path = "../../../../sdk/bpf/dependencies/rust-bpf-sysroot/src/compiler-builtins" +features = ["c", "mem"] + +[target.bpfel-unknown-unknown.dependencies] +alloc = { path = "../../../../sdk/bpf/dependencies/rust-bpf-sysroot/src/liballoc" } \ No newline at end of file diff --git a/programs/bpf/rust/128bit/src/lib.rs b/programs/bpf/rust/128bit/src/lib.rs new file mode 100644 index 0000000000..d2946d8788 --- /dev/null +++ b/programs/bpf/rust/128bit/src/lib.rs @@ -0,0 +1,41 @@ +//! @brief Example Rust-based BPF program tests loop iteration + +#![no_std] +#![allow(unused_attributes)] + +extern crate solana_sdk_bpf_utils; + +use solana_sdk_bpf_utils::info; + +#[no_mangle] +pub extern "C" fn entrypoint(_input: *mut u8) -> bool { + let x: u128 = 1; + let y = x.rotate_right(1); + assert_eq!(y, 170_141_183_460_469_231_731_687_303_715_884_105_728); + + assert_eq!( + u128::max_value(), + 340_282_366_920_938_463_463_374_607_431_768_211_455 + ); + + let mut z = u128::max_value(); + z -= 1; + assert_eq!(z, 340_282_366_920_938_463_463_374_607_431_768_211_454); + + let x = u64::max_value(); + assert_eq!(u128::from(x) + u128::from(x), 36_893_488_147_419_103_230); + + let x = solana_bpf_rust_128bit_dep::work( + u128::from(u64::max_value()), + u128::from(u64::max_value()), + ); + assert_eq!(x.wrapping_shr(64) as u64, 1); + assert_eq!( + x.wrapping_shl(64).wrapping_shr(64) as u64, + 0xffff_ffff_ffff_fffe + ); + assert_eq!(x, 0x0001_ffff_ffff_ffff_fffe); + + info!("Success"); + true +} diff --git a/programs/bpf/rust/128bit_dep/.gitignore b/programs/bpf/rust/128bit_dep/.gitignore new file mode 100644 index 0000000000..e13de17f65 --- /dev/null +++ b/programs/bpf/rust/128bit_dep/.gitignore @@ -0,0 +1,3 @@ +/target/ + +Cargo.lock diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml new file mode 100644 index 0000000000..42ab824221 --- /dev/null +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -0,0 +1,19 @@ + +# Note: This crate must be built using build.sh + +[package] +name = "solana-bpf-rust-128bit-dep" +version = "0.16.0" +description = "Solana BPF many-args-dep program written in Rust" +authors = ["Solana Maintainers "] +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +edition = "2018" + +[dependencies] +solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.16.0" } + +[workspace] +members = [] + diff --git a/programs/bpf/rust/128bit_dep/Xargo.toml b/programs/bpf/rust/128bit_dep/Xargo.toml new file mode 100644 index 0000000000..385a264b04 --- /dev/null +++ b/programs/bpf/rust/128bit_dep/Xargo.toml @@ -0,0 +1,6 @@ +[dependencies.compiler_builtins] +path = "../../../../sdk/bpf/dependencies/rust-bpf-sysroot/src/compiler-builtins" +features = ["c", "mem"] + +[target.bpfel-unknown-unknown.dependencies] +alloc = { path = "../../../../sdk/bpf/dependencies/rust-bpf-sysroot/src/liballoc" } \ No newline at end of file diff --git a/programs/bpf/rust/128bit_dep/src/lib.rs b/programs/bpf/rust/128bit_dep/src/lib.rs new file mode 100644 index 0000000000..62a1d969cb --- /dev/null +++ b/programs/bpf/rust/128bit_dep/src/lib.rs @@ -0,0 +1,9 @@ +//! @brief Solana Rust-based BPF program utility functions and types + +#![no_std] + +extern crate solana_sdk_bpf_utils; + +pub fn work(x: u128, y: u128) -> u128 { + x + y +} diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index ca066e350d..f5abb978fa 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -90,6 +90,7 @@ mod bpf { solana_logger::setup(); let programs = [ + ("solana_bpf_rust_128bit", true), ("solana_bpf_rust_alloc", true), ("solana_bpf_rust_dep_crate", true), ("solana_bpf_rust_iter", true),