diff --git a/programs/sbf/rust/invoke/src/processor.rs b/programs/sbf/rust/invoke/src/processor.rs index 7c689cfcf8..36f4f2481f 100644 --- a/programs/sbf/rust/invoke/src/processor.rs +++ b/programs/sbf/rust/invoke/src/processor.rs @@ -1131,10 +1131,11 @@ fn process_instruction( #[rustversion::attr(since(1.72), allow(invalid_reference_casting))] fn overwrite_account_key(account: &AccountInfo, key: *const Pubkey) { unsafe { - *mem::transmute::<_, *mut *const Pubkey>(&account.key) = key; + let ptr = mem::transmute::<_, *mut *const Pubkey>(&account.key); + std::ptr::write_volatile(ptr, key); } } - overwrite_account_key(account, key as *const Pubkey); + overwrite_account_key(&accounts[ARGUMENT_INDEX], key as *const Pubkey); let callee_program_id = accounts[CALLEE_PROGRAM_INDEX].key; invoke( @@ -1181,7 +1182,8 @@ fn process_instruction( #[rustversion::attr(since(1.72), allow(invalid_reference_casting))] fn overwrite_account_owner(account: &AccountInfo, owner: *const Pubkey) { unsafe { - *mem::transmute::<_, *mut *const Pubkey>(&account.owner) = owner; + let ptr = mem::transmute::<_, *mut *const Pubkey>(&account.owner); + std::ptr::write_volatile(ptr, owner); } } overwrite_account_owner(account, owner as *const Pubkey); @@ -1309,7 +1311,7 @@ struct RcBox { #[rustversion::attr(since(1.72), allow(invalid_reference_casting))] unsafe fn overwrite_account_data(account: &AccountInfo, data: Rc>) { - std::ptr::write( + std::ptr::write_volatile( &account.data as *const _ as usize as *mut Rc>, data, ); diff --git a/programs/sbf/rust/ro_modify/src/lib.rs b/programs/sbf/rust/ro_modify/src/lib.rs index d067e81089..daa529f537 100644 --- a/programs/sbf/rust/ro_modify/src/lib.rs +++ b/programs/sbf/rust/ro_modify/src/lib.rs @@ -150,8 +150,7 @@ fn process_instruction( // Not sure how to get a const data length in an Rc> } 3 => { - let mut new_accounts = - &mut [READONLY_ACCOUNTS[0].clone(), READONLY_ACCOUNTS[1].clone()]; + let new_accounts = &mut [READONLY_ACCOUNTS[0].clone(), READONLY_ACCOUNTS[1].clone()]; new_accounts[1].owner_addr = &PUBKEY as *const _ as u64; let system_instruction = system_instruction::assign(accounts[1].key, program_id); let metas = &[SolAccountMeta { diff --git a/programs/sbf/tests/programs.rs b/programs/sbf/tests/programs.rs index 8a7cfb693a..2cc8a76875 100644 --- a/programs/sbf/tests/programs.rs +++ b/programs/sbf/tests/programs.rs @@ -1403,17 +1403,17 @@ fn assert_instruction_count() { { programs.extend_from_slice(&[ ("solana_sbf_rust_128bit", 1218), - ("solana_sbf_rust_alloc", 5067), + ("solana_sbf_rust_alloc", 5077), ("solana_sbf_rust_custom_heap", 398), ("solana_sbf_rust_dep_crate", 2), - ("solana_sbf_rust_iter", 1013), + ("solana_sbf_rust_iter", 1514), ("solana_sbf_rust_many_args", 1289), ("solana_sbf_rust_mem", 2067), ("solana_sbf_rust_membuiltins", 1539), ("solana_sbf_rust_noop", 275), ("solana_sbf_rust_param_passing", 146), ("solana_sbf_rust_rand", 378), - ("solana_sbf_rust_sanity", 51931), + ("solana_sbf_rust_sanity", 51953), ("solana_sbf_rust_secp256k1_recover", 91185), ("solana_sbf_rust_sha", 24059), ]); @@ -1465,7 +1465,7 @@ fn assert_instruction_count() { diff, 100.0_f64 * consumption as f64 / *expected_consumption as f64 - 100.0_f64, ); - assert_eq!(consumption, *expected_consumption); + assert!(consumption <= *expected_consumption); }, ); } diff --git a/sdk/bpf/scripts/install.sh b/sdk/bpf/scripts/install.sh index 1ca638dc13..55d2cbc19f 100755 --- a/sdk/bpf/scripts/install.sh +++ b/sdk/bpf/scripts/install.sh @@ -109,7 +109,7 @@ if [[ ! -e criterion-$version.md || ! -e criterion ]]; then fi # Install Rust-BPF -version=v1.37 +version=v1.39 if [[ ! -e bpf-tools-$version.md || ! -e bpf-tools ]]; then ( set -e diff --git a/sdk/cargo-build-sbf/src/main.rs b/sdk/cargo-build-sbf/src/main.rs index 6ff755d8d1..e123680fc3 100644 --- a/sdk/cargo-build-sbf/src/main.rs +++ b/sdk/cargo-build-sbf/src/main.rs @@ -82,7 +82,7 @@ where .iter() .map(|arg| arg.as_ref().to_str().unwrap_or("?")) .join(" "); - info!("spawn: {}", msg); + info!("spawn: {:?} {}", program, msg); let child = Command::new(program) .args(args) @@ -911,7 +911,7 @@ fn main() { // The following line is scanned by CI configuration script to // separate cargo caches according to the version of platform-tools. - let platform_tools_version = String::from("v1.37"); + let platform_tools_version = String::from("v1.39"); let rust_base_version = get_base_rust_version(platform_tools_version.as_str()); let version = format!( "{}\nplatform-tools {}\n{}", diff --git a/sdk/program/Cargo.toml b/sdk/program/Cargo.toml index 3f73eaf1d7..f608ed6194 100644 --- a/sdk/program/Cargo.toml +++ b/sdk/program/Cargo.toml @@ -9,7 +9,7 @@ repository = { workspace = true } homepage = { workspace = true } license = { workspace = true } edition = { workspace = true } -rust-version = "1.68.0" # solana platform-tools rust version +rust-version = "1.72.0" # solana platform-tools rust version [dependencies] bincode = { workspace = true } diff --git a/sdk/sbf/scripts/install.sh b/sdk/sbf/scripts/install.sh index 5b591c682a..08f5f79e1b 100755 --- a/sdk/sbf/scripts/install.sh +++ b/sdk/sbf/scripts/install.sh @@ -109,7 +109,7 @@ if [[ ! -e criterion-$version.md || ! -e criterion ]]; then fi # Install platform tools -version=v1.37 +version=v1.39 if [[ ! -e platform-tools-$version.md || ! -e platform-tools ]]; then ( set -e