From 5fb2d7a98fe128196823bd58f543d6f14c8eb76c Mon Sep 17 00:00:00 2001 From: Jack May Date: Wed, 4 Sep 2019 16:00:11 -0700 Subject: [PATCH] Add libstd support to Rust BPF (#5788) --- ci/test-checks.sh | 2 +- programs/bpf/rust/128bit/Cargo.toml | 1 - programs/bpf/rust/128bit/Xargo.toml | 8 ++--- programs/bpf/rust/128bit/src/lib.rs | 6 ---- programs/bpf/rust/128bit_dep/Xargo.toml | 8 ++--- programs/bpf/rust/128bit_dep/src/lib.rs | 2 -- programs/bpf/rust/alloc/Cargo.toml | 1 - programs/bpf/rust/alloc/Xargo.toml | 8 ++--- programs/bpf/rust/alloc/src/lib.rs | 16 +++------- programs/bpf/rust/dep_crate/Cargo.toml | 1 - programs/bpf/rust/dep_crate/Xargo.toml | 8 ++--- programs/bpf/rust/dep_crate/src/lib.rs | 6 ---- programs/bpf/rust/external_spend/Cargo.toml | 1 - programs/bpf/rust/external_spend/Xargo.toml | 8 ++--- programs/bpf/rust/external_spend/src/lib.rs | 10 +----- programs/bpf/rust/iter/Cargo.toml | 1 - programs/bpf/rust/iter/Xargo.toml | 8 ++--- programs/bpf/rust/iter/src/lib.rs | 6 ---- programs/bpf/rust/many_args/Cargo.toml | 1 - programs/bpf/rust/many_args/Xargo.toml | 8 ++--- programs/bpf/rust/many_args/src/lib.rs | 7 ---- programs/bpf/rust/many_args_dep/Xargo.toml | 8 ++--- programs/bpf/rust/many_args_dep/src/lib.rs | 3 -- programs/bpf/rust/noop/Cargo.toml | 1 - programs/bpf/rust/noop/Xargo.toml | 8 ++--- programs/bpf/rust/noop/src/lib.rs | 21 +++++------- programs/bpf/rust/panic/Cargo.toml | 1 - programs/bpf/rust/panic/Xargo.toml | 8 ++--- programs/bpf/rust/panic/src/lib.rs | 5 --- programs/bpf/rust/param_passing/Cargo.toml | 1 - programs/bpf/rust/param_passing/Xargo.toml | 8 ++--- programs/bpf/rust/param_passing/src/lib.rs | 6 ---- .../bpf/rust/param_passing_dep/Cargo.toml | 1 - .../bpf/rust/param_passing_dep/Xargo.toml | 8 ++--- .../bpf/rust/param_passing_dep/src/lib.rs | 3 -- programs/bpf/rust/tick_height/Cargo.toml | 1 - programs/bpf/rust/tick_height/Xargo.toml | 8 ++--- programs/bpf/rust/tick_height/src/lib.rs | 6 ---- sdk/bpf/.gitignore | 1 + sdk/bpf/rust/rust-no-std/.gitignore | 4 --- sdk/bpf/rust/rust-no-std/Cargo.toml | 16 ---------- sdk/bpf/rust/rust-no-std/src/allocator.rs | 23 ------------- sdk/bpf/rust/rust-no-std/src/lib.rs | 20 ------------ sdk/bpf/rust/rust-no-std/src/panic.rs | 32 ------------------- sdk/bpf/rust/rust-utils/src/lib.rs | 2 -- sdk/bpf/scripts/install.sh | 21 +++++++++++- 46 files changed, 62 insertions(+), 271 deletions(-) delete mode 100644 sdk/bpf/rust/rust-no-std/.gitignore delete mode 100644 sdk/bpf/rust/rust-no-std/Cargo.toml delete mode 100644 sdk/bpf/rust/rust-no-std/src/allocator.rs delete mode 100644 sdk/bpf/rust/rust-no-std/src/lib.rs delete mode 100644 sdk/bpf/rust/rust-no-std/src/panic.rs diff --git a/ci/test-checks.sh b/ci/test-checks.sh index 0a6c28009..a6ec1ee9c 100755 --- a/ci/test-checks.sh +++ b/ci/test-checks.sh @@ -24,7 +24,7 @@ _ ci/nits.sh _ ci/order-crates-for-publishing.py _ book/build.sh -for project in sdk/bpf/rust/{rust-no-std,rust-utils,rust-test} programs/bpf/rust/*/ ; do +for project in sdk/bpf/rust/{rust-utils,rust-test} programs/bpf/rust/*/ ; do echo "+++ do_bpf_check $project" ( cd "$project" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index a7cdd40e7..7ce0ac00a 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "0.19.0-pre0" } [dev_dependencies] diff --git a/programs/bpf/rust/128bit/Xargo.toml b/programs/bpf/rust/128bit/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/128bit/Xargo.toml +++ b/programs/bpf/rust/128bit/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/128bit/src/lib.rs b/programs/bpf/rust/128bit/src/lib.rs index 9790a6975..67a24aa76 100644 --- a/programs/bpf/rust/128bit/src/lib.rs +++ b/programs/bpf/rust/128bit/src/lib.rs @@ -1,12 +1,6 @@ //! @brief Example Rust-based BPF program tests loop iteration -#![no_std] -#![allow(unused_attributes)] - -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - use solana_sdk_bpf_utils::info; #[no_mangle] diff --git a/programs/bpf/rust/128bit_dep/Xargo.toml b/programs/bpf/rust/128bit_dep/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/128bit_dep/Xargo.toml +++ b/programs/bpf/rust/128bit_dep/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ 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 index 2d63322fc..b34e1b80c 100644 --- a/programs/bpf/rust/128bit_dep/src/lib.rs +++ b/programs/bpf/rust/128bit_dep/src/lib.rs @@ -1,7 +1,5 @@ //! @brief Solana Rust-based BPF program utility functions and types -#![no_std] - extern crate solana_sdk_bpf_utils; pub fn uadd(x: u128, y: u128) -> u128 { diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 97c614022..ebfbdad52 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } [workspace] members = [] diff --git a/programs/bpf/rust/alloc/Xargo.toml b/programs/bpf/rust/alloc/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/alloc/Xargo.toml +++ b/programs/bpf/rust/alloc/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/alloc/src/lib.rs b/programs/bpf/rust/alloc/src/lib.rs index 787c3b615..9024b2f7a 100644 --- a/programs/bpf/rust/alloc/src/lib.rs +++ b/programs/bpf/rust/alloc/src/lib.rs @@ -1,24 +1,18 @@ //! @brief Example Rust-based BPF program that test dynamic memory allocation -#![no_std] -#![allow(unused_attributes)] #[macro_use] extern crate alloc; -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - -use alloc::vec::Vec; -use core::alloc::Layout; -use core::mem; use solana_sdk_bpf_utils::info; +use std::alloc::Layout; +use std::mem; #[no_mangle] pub extern "C" fn entrypoint(_input: *mut u8) -> bool { unsafe { // Confirm large allocation fails - let layout = Layout::from_size_align(core::usize::MAX, mem::align_of::()).unwrap(); + let layout = Layout::from_size_align(std::usize::MAX, mem::align_of::()).unwrap(); let ptr = alloc::alloc::alloc(layout); if !ptr.is_null() { info!("Error: Alloc of very larger buffer should fail"); @@ -59,7 +53,7 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> bool { alloc::alloc::dealloc(ptr, layout); } - // // TODO not supported for system or bump allocator + // TODO not supported bump allocator // unsafe { // // Test alloc all bytes and one more (assumes heap size of 2048) @@ -93,7 +87,7 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> bool { } { - // TODO test Vec::new() + // test Vec::new() const ITERS: usize = 100; let mut v = Vec::new(); diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 41f30f860..3f376e0c6 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -14,7 +14,6 @@ edition = "2018" [dependencies] byteorder = { version = "1", default-features = false } solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } [workspace] members = [] diff --git a/programs/bpf/rust/dep_crate/Xargo.toml b/programs/bpf/rust/dep_crate/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/dep_crate/Xargo.toml +++ b/programs/bpf/rust/dep_crate/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/dep_crate/src/lib.rs b/programs/bpf/rust/dep_crate/src/lib.rs index 8b9e92d13..1ba0e326e 100644 --- a/programs/bpf/rust/dep_crate/src/lib.rs +++ b/programs/bpf/rust/dep_crate/src/lib.rs @@ -1,12 +1,6 @@ //! @brief Example Rust-based BPF program tests dependent crates -#![no_std] -#![allow(unused_attributes)] - -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - use byteorder::{ByteOrder, LittleEndian}; use solana_sdk_bpf_utils::info; diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index a235eeb2a..3e526cfa2 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } [workspace] members = [] diff --git a/programs/bpf/rust/external_spend/Xargo.toml b/programs/bpf/rust/external_spend/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/external_spend/Xargo.toml +++ b/programs/bpf/rust/external_spend/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/external_spend/src/lib.rs b/programs/bpf/rust/external_spend/src/lib.rs index 1c3774762..d4536a077 100644 --- a/programs/bpf/rust/external_spend/src/lib.rs +++ b/programs/bpf/rust/external_spend/src/lib.rs @@ -1,15 +1,8 @@ //! @brief Example Rust-based BPF program that moves a lamport from one account to another -#![no_std] -#![allow(unreachable_code)] -#![allow(unused_attributes)] - -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - +use solana_sdk_bpf_utils::entrypoint; use solana_sdk_bpf_utils::entrypoint::*; -use solana_sdk_bpf_utils::{entrypoint, info}; entrypoint!(process_instruction); fn process_instruction(ka: &mut [SolKeyedAccount], _info: &SolClusterInfo, _data: &[u8]) -> bool { @@ -18,6 +11,5 @@ fn process_instruction(ka: &mut [SolKeyedAccount], _info: &SolClusterInfo, _data // is seen by the runtime and fails as expected *ka[0].lamports -= 1; - info!("Success"); true } diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index b3fe9df9b..16207e1af 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } [workspace] members = [] diff --git a/programs/bpf/rust/iter/Xargo.toml b/programs/bpf/rust/iter/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/iter/Xargo.toml +++ b/programs/bpf/rust/iter/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/iter/src/lib.rs b/programs/bpf/rust/iter/src/lib.rs index 3dee0fe8d..7ddde559e 100644 --- a/programs/bpf/rust/iter/src/lib.rs +++ b/programs/bpf/rust/iter/src/lib.rs @@ -1,12 +1,6 @@ //! @brief Example Rust-based BPF program tests loop iteration -#![no_std] -#![allow(unused_attributes)] - -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - use solana_sdk_bpf_utils::info; #[no_mangle] diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 3f76d33f1..cf4a121cb 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "0.19.0-pre0" } [workspace] diff --git a/programs/bpf/rust/many_args/Xargo.toml b/programs/bpf/rust/many_args/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/many_args/Xargo.toml +++ b/programs/bpf/rust/many_args/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/many_args/src/lib.rs b/programs/bpf/rust/many_args/src/lib.rs index fc5d37fd0..a70ff12c0 100644 --- a/programs/bpf/rust/many_args/src/lib.rs +++ b/programs/bpf/rust/many_args/src/lib.rs @@ -1,14 +1,7 @@ //! @brief Example Rust-based BPF program tests loop iteration -#![no_std] -#![allow(unused_attributes)] - mod helper; - -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - use solana_sdk_bpf_utils::info; #[no_mangle] diff --git a/programs/bpf/rust/many_args_dep/Xargo.toml b/programs/bpf/rust/many_args_dep/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/many_args_dep/Xargo.toml +++ b/programs/bpf/rust/many_args_dep/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/many_args_dep/src/lib.rs b/programs/bpf/rust/many_args_dep/src/lib.rs index 328265ac7..af5a241ae 100644 --- a/programs/bpf/rust/many_args_dep/src/lib.rs +++ b/programs/bpf/rust/many_args_dep/src/lib.rs @@ -1,9 +1,6 @@ //! @brief Solana Rust-based BPF program utility functions and types -#![no_std] - extern crate solana_sdk_bpf_utils; - use solana_sdk_bpf_utils::info; pub fn many_args( diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index ac991db79..a1b57e4af 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } [workspace] members = [] diff --git a/programs/bpf/rust/noop/Xargo.toml b/programs/bpf/rust/noop/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/noop/Xargo.toml +++ b/programs/bpf/rust/noop/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/noop/src/lib.rs b/programs/bpf/rust/noop/src/lib.rs index 90d7c9abf..87ff7ee73 100644 --- a/programs/bpf/rust/noop/src/lib.rs +++ b/programs/bpf/rust/noop/src/lib.rs @@ -1,13 +1,8 @@ //! @brief Example Rust-based BPF program that prints out the parameters passed to it -#![no_std] #![allow(unreachable_code)] -#![allow(unused_attributes)] -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - use solana_sdk_bpf_utils::entrypoint::*; use solana_sdk_bpf_utils::log::*; use solana_sdk_bpf_utils::{entrypoint, info}; @@ -36,17 +31,11 @@ fn process_instruction(ka: &mut [SolKeyedAccount], info: &SolClusterInfo, data: sol_log_params(ka, data); { - // Test - arch config - #[cfg(not(target_arch = "bpf"))] - panic!(); - } - - { - // Test - use core methods, unwrap + // Test - use std methods, unwrap // valid bytes, in a stack-allocated array let sparkle_heart = [240, 159, 146, 150]; - let result_str = core::str::from_utf8(&sparkle_heart).unwrap(); + let result_str = std::str::from_utf8(&sparkle_heart).unwrap(); assert_eq!(4, result_str.len()); assert_eq!("💖", result_str); info!(result_str); @@ -59,6 +48,12 @@ fn process_instruction(ka: &mut [SolKeyedAccount], info: &SolClusterInfo, data: assert_eq!(s.x + s.y + s.z, 6); } + { + // Test - arch config + #[cfg(not(target_arch = "bpf"))] + panic!(); + } + info!("Success"); true } diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index 372e0bb31..162fb005b 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } [workspace] members = [] diff --git a/programs/bpf/rust/panic/Xargo.toml b/programs/bpf/rust/panic/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/panic/Xargo.toml +++ b/programs/bpf/rust/panic/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/panic/src/lib.rs b/programs/bpf/rust/panic/src/lib.rs index 2a7d5224f..cb21b4c28 100644 --- a/programs/bpf/rust/panic/src/lib.rs +++ b/programs/bpf/rust/panic/src/lib.rs @@ -1,10 +1,5 @@ //! @brief Example Rust-based BPF program that panics -#![no_std] -#![allow(unused_attributes)] - -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; #[no_mangle] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 753e87d09..c11fca931 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "0.19.0-pre0" } [dev_dependencies] diff --git a/programs/bpf/rust/param_passing/Xargo.toml b/programs/bpf/rust/param_passing/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/param_passing/Xargo.toml +++ b/programs/bpf/rust/param_passing/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/param_passing/src/lib.rs b/programs/bpf/rust/param_passing/src/lib.rs index d39ae6db1..8c7db4367 100644 --- a/programs/bpf/rust/param_passing/src/lib.rs +++ b/programs/bpf/rust/param_passing/src/lib.rs @@ -1,12 +1,6 @@ //! @brief Example Rust-based BPF program tests loop iteration -#![no_std] -#![allow(unused_attributes)] - -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - use solana_bpf_rust_param_passing_dep::{Data, TestDep}; use solana_sdk_bpf_utils::info; diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index f0de42bad..944784007 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -13,7 +13,6 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } [dev_dependencies] solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/rust-test", version = "0.19.0-pre0" } diff --git a/programs/bpf/rust/param_passing_dep/Xargo.toml b/programs/bpf/rust/param_passing_dep/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/param_passing_dep/Xargo.toml +++ b/programs/bpf/rust/param_passing_dep/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/param_passing_dep/src/lib.rs b/programs/bpf/rust/param_passing_dep/src/lib.rs index 69f31991f..b94b04cea 100644 --- a/programs/bpf/rust/param_passing_dep/src/lib.rs +++ b/programs/bpf/rust/param_passing_dep/src/lib.rs @@ -1,8 +1,5 @@ //! @brief Example Rust-based BPF program tests loop iteration -#![no_std] -#![allow(unused_attributes)] - extern crate solana_sdk_bpf_utils; pub struct Data<'a> { diff --git a/programs/bpf/rust/tick_height/Cargo.toml b/programs/bpf/rust/tick_height/Cargo.toml index 87a74c4b0..e1c6c6944 100644 --- a/programs/bpf/rust/tick_height/Cargo.toml +++ b/programs/bpf/rust/tick_height/Cargo.toml @@ -14,7 +14,6 @@ edition = "2018" [dependencies] byteorder = { version = "1", default-features = false } solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.19.0-pre0" } -solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.19.0-pre0" } [workspace] members = [] diff --git a/programs/bpf/rust/tick_height/Xargo.toml b/programs/bpf/rust/tick_height/Xargo.toml index 385a264b0..1744f098a 100644 --- a/programs/bpf/rust/tick_height/Xargo.toml +++ b/programs/bpf/rust/tick_height/Xargo.toml @@ -1,6 +1,2 @@ -[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 +[target.bpfel-unknown-unknown.dependencies.std] +features = [] \ No newline at end of file diff --git a/programs/bpf/rust/tick_height/src/lib.rs b/programs/bpf/rust/tick_height/src/lib.rs index 2527026d4..9daccec7e 100644 --- a/programs/bpf/rust/tick_height/src/lib.rs +++ b/programs/bpf/rust/tick_height/src/lib.rs @@ -1,12 +1,6 @@ //! @brief Example Rust-based BPF program that prints out the parameters passed to it -#![no_std] -#![allow(unreachable_code)] - -#[cfg(not(test))] -extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; - use byteorder::{ByteOrder, LittleEndian}; use solana_sdk_bpf_utils::entrypoint::*; use solana_sdk_bpf_utils::{entrypoint, info}; diff --git a/sdk/bpf/.gitignore b/sdk/bpf/.gitignore index dfae0331c..bb0dd92ab 100644 --- a/sdk/bpf/.gitignore +++ b/sdk/bpf/.gitignore @@ -1,4 +1,5 @@ /dependencies/criterion* +/dependencies/hashbrown* /dependencies/llvm-native* /dependencies/rust-bpf* /dependencies/xargo* diff --git a/sdk/bpf/rust/rust-no-std/.gitignore b/sdk/bpf/rust/rust-no-std/.gitignore deleted file mode 100644 index 1ef9ec960..000000000 --- a/sdk/bpf/rust/rust-no-std/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/target/ - -Cargo.lock -/farf/ diff --git a/sdk/bpf/rust/rust-no-std/Cargo.toml b/sdk/bpf/rust/rust-no-std/Cargo.toml deleted file mode 100644 index cc72fa276..000000000 --- a/sdk/bpf/rust/rust-no-std/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ - -[package] -name = "solana-sdk-bpf-no-std" -version = "0.19.0-pre0" -description = "Solana BPF SDK Rust no_std support" -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 = "../rust-utils" } - -[workspace] -members = [] diff --git a/sdk/bpf/rust/rust-no-std/src/allocator.rs b/sdk/bpf/rust/rust-no-std/src/allocator.rs deleted file mode 100644 index 02311f76e..000000000 --- a/sdk/bpf/rust/rust-no-std/src/allocator.rs +++ /dev/null @@ -1,23 +0,0 @@ -//! @brief Solana Rust-based BPF program memory allocator shim - -use core::alloc::{GlobalAlloc, Layout}; -use solana_sdk_bpf_utils::log::*; - -pub struct Allocator; -unsafe impl GlobalAlloc for Allocator { - unsafe fn alloc(&self, layout: Layout) -> *mut u8 { - sol_alloc_free_(layout.size() as u64, 0) - } - unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { - sol_alloc_free_(layout.size() as u64, ptr as u64); - } -} -extern "C" { - fn sol_alloc_free_(size: u64, ptr: u64) -> *mut u8; -} - -#[alloc_error_handler] -fn my_alloc_error_handler(_: core::alloc::Layout) -> ! { - sol_log("alloc_error_handler"); - panic!(); -} diff --git a/sdk/bpf/rust/rust-no-std/src/lib.rs b/sdk/bpf/rust/rust-no-std/src/lib.rs deleted file mode 100644 index 3f774738e..000000000 --- a/sdk/bpf/rust/rust-no-std/src/lib.rs +++ /dev/null @@ -1,20 +0,0 @@ -//! @brief Solana Rust-based BPF program utility functions and types - -#![no_std] -#![feature(allocator_api)] -#![feature(alloc_error_handler)] -#![feature(panic_info_message)] -#![feature(compiler_builtins_lib)] -#![feature(lang_items)] -#![cfg(not(test))] - -#[lang = "eh_personality"] -extern "C" fn eh_personality() {} - -extern crate compiler_builtins; - -pub mod allocator; -pub mod panic; - -#[global_allocator] -static A: allocator::Allocator = allocator::Allocator; diff --git a/sdk/bpf/rust/rust-no-std/src/panic.rs b/sdk/bpf/rust/rust-no-std/src/panic.rs deleted file mode 100644 index 53de3a664..000000000 --- a/sdk/bpf/rust/rust-no-std/src/panic.rs +++ /dev/null @@ -1,32 +0,0 @@ -//! @brief Solana Rust-based BPF program panic handling - -use core::panic::PanicInfo; -use core::ptr; - -#[panic_handler] -fn panic(info: &PanicInfo) -> ! { - // Message is ignored for now to avoid incurring formatting overhead - match info.location() { - Some(location) => { - let mut file: [u8; 128] = [0; 128]; - for (i, c) in location.file().as_bytes().iter().enumerate() { - if i > 127 { - break; - } - file[i] = *c; - } - unsafe { - sol_panic_( - file.as_ptr(), - file.len() as u64, - u64::from(location.line()), - u64::from(location.column()), - ); - } - } - None => unsafe { sol_panic_(ptr::null(), 0, 0, 0) }, - } -} -extern "C" { - pub fn sol_panic_(file: *const u8, len: u64, line: u64, column: u64) -> !; -} diff --git a/sdk/bpf/rust/rust-utils/src/lib.rs b/sdk/bpf/rust/rust-utils/src/lib.rs index 6ee7175e9..b31a8590c 100644 --- a/sdk/bpf/rust/rust-utils/src/lib.rs +++ b/sdk/bpf/rust/rust-utils/src/lib.rs @@ -1,6 +1,4 @@ //! @brief Solana Rust-based BPF program utility functions and types -#![no_std] - pub mod entrypoint; pub mod log; diff --git a/sdk/bpf/scripts/install.sh b/sdk/bpf/scripts/install.sh index 8ac09cf7c..0eb8a35d6 100755 --- a/sdk/bpf/scripts/install.sh +++ b/sdk/bpf/scripts/install.sh @@ -116,7 +116,7 @@ if [[ ! -f rust-bpf-$machine-$version.md ]]; then fi # Install Rust-BPF Sysroot sources -version=v0.8 +version=v0.9 if [[ ! -f rust-bpf-sysroot-$version.md ]]; then ( set -ex @@ -134,4 +134,23 @@ if [[ ! -f rust-bpf-sysroot-$version.md ]]; then fi fi +# Install custom Hashbrown crate needed by Rust-BPF Sysroot +version=v0.1 +if [[ ! -f hashbrown-$version.md ]]; then + ( + set -ex + rm -rf hashbrown* + rm -rf xargo + cmd="git clone --recursive --single-branch --branch $version https://github.com/solana-labs/hashbrown.git" + $cmd + + echo "$cmd" > hashbrown-$version.md + ) + exitcode=$? + if [[ $exitcode -ne 0 ]]; then + rm -rf hashbrown + exit 1 + fi +fi + exit 0