From f04e06e0c2784dae1a2eb65b07dd9828289ba3cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Fri, 3 Dec 2021 23:44:31 +0100 Subject: [PATCH] Bumps solana_rbpf to v0.2.16 (#21492) --- Cargo.lock | 5 ++--- cli/Cargo.toml | 2 +- cli/src/program.rs | 7 ++----- programs/bpf/Cargo.lock | 5 ++--- programs/bpf/Cargo.toml | 2 +- programs/bpf/benches/bpf_loader.rs | 16 ++++++++-------- programs/bpf/tests/programs.rs | 11 ++++++----- programs/bpf_loader/Cargo.toml | 2 +- programs/bpf_loader/src/lib.rs | 26 +++++++++++--------------- rbpf-cli/src/main.rs | 11 ++++++----- 10 files changed, 40 insertions(+), 47 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9fa7d1bd30..4af8c8509b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5898,9 +5898,9 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc53d7522cccfd4a86a82a2fad79328002b70910d944f5be3ba72ac96c64c518" +checksum = "3af7860a2bf51e63a07c4098966b1c80e8cbfdab3cf4ac36aac7fdd80ea1094c" dependencies = [ "byteorder", "combine", @@ -5913,7 +5913,6 @@ dependencies = [ "scroll", "thiserror", "time 0.1.43", - "version_check 0.9.2", ] [[package]] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 485f611c03..6c2540637d 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -40,7 +40,7 @@ solana-config-program = { path = "../programs/config", version = "=1.8.7" } solana-faucet = { path = "../faucet", version = "=1.8.7" } solana-logger = { path = "../logger", version = "=1.8.7" } solana-net-utils = { path = "../net-utils", version = "=1.8.7" } -solana_rbpf = "=0.2.15" +solana_rbpf = "=0.2.16" solana-remote-wallet = { path = "../remote-wallet", version = "=1.8.7" } solana-sdk = { path = "../sdk", version = "=1.8.7" } solana-transaction-status = { path = "../transaction-status", version = "=1.8.7" } diff --git a/cli/src/program.rs b/cli/src/program.rs index 7e597b6f99..864fd1f4e9 100644 --- a/cli/src/program.rs +++ b/cli/src/program.rs @@ -24,10 +24,7 @@ use { rpc_filter::{Memcmp, MemcmpEncodedBytes, RpcFilterType}, tpu_client::{TpuClient, TpuClientConfig}, }, - solana_rbpf::{ - verifier, - vm::{Config, Executable}, - }, + solana_rbpf::{elf::Executable, verifier, vm::Config}, solana_remote_wallet::remote_wallet::RemoteWalletManager, solana_sdk::{ account::Account, @@ -1989,7 +1986,7 @@ fn read_and_verify_elf(program_location: &str) -> Result, Box>::from_elf( + Executable::::from_elf( &program_data, Some(verifier::check), Config { diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 9794d3f423..36a10008b5 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -3698,9 +3698,9 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc53d7522cccfd4a86a82a2fad79328002b70910d944f5be3ba72ac96c64c518" +checksum = "3af7860a2bf51e63a07c4098966b1c80e8cbfdab3cf4ac36aac7fdd80ea1094c" dependencies = [ "byteorder 1.3.4", "combine", @@ -3713,7 +3713,6 @@ dependencies = [ "scroll", "thiserror", "time", - "version_check", ] [[package]] diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 67a45cf92a..55975c8ecb 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -30,7 +30,7 @@ solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.8.7" } solana-cli-output = { path = "../../cli-output", version = "=1.8.7" } solana-logger = { path = "../../logger", version = "=1.8.7" } solana-measure = { path = "../../measure", version = "=1.8.7" } -solana_rbpf = "=0.2.15" +solana_rbpf = "=0.2.16" solana-runtime = { path = "../../runtime", version = "=1.8.7" } solana-sdk = { path = "../../sdk", version = "=1.8.7" } solana-transaction-status = { path = "../../transaction-status", version = "=1.8.7" } diff --git a/programs/bpf/benches/bpf_loader.rs b/programs/bpf/benches/bpf_loader.rs index d8f60e6e76..5acb491a00 100644 --- a/programs/bpf/benches/bpf_loader.rs +++ b/programs/bpf/benches/bpf_loader.rs @@ -11,7 +11,7 @@ use solana_bpf_loader_program::{ ThisInstructionMeter, }; use solana_measure::measure::Measure; -use solana_rbpf::vm::{Config, Executable, InstructionMeter, SyscallRegistry}; +use solana_rbpf::{elf::Executable, vm::{Config, InstructionMeter, SyscallRegistry}}; use solana_runtime::{ bank::Bank, bank_client::BankClient, @@ -75,7 +75,7 @@ fn bench_program_create_executable(bencher: &mut Bencher) { let elf = load_elf("bench_alu").unwrap(); bencher.iter(|| { - let _ = >::from_elf( + let _ = Executable::::from_elf( &elf, None, Config::default(), @@ -98,7 +98,7 @@ fn bench_program_alu(bencher: &mut Bencher) { let mut invoke_context = MockInvokeContext::new(vec![]); let elf = load_elf("bench_alu").unwrap(); - let mut executable = >::from_elf( + let mut executable = Executable::::from_elf( &elf, None, Config::default(), @@ -110,7 +110,7 @@ fn bench_program_alu(bencher: &mut Bencher) { let mut instruction_meter = ThisInstructionMeter { compute_meter }; let mut vm = create_vm( &loader_id, - executable.as_ref(), + &executable, &mut inner_iter, &mut invoke_context, ) @@ -229,7 +229,7 @@ fn bench_create_vm(bencher: &mut Bencher) { .unwrap(); let elf = load_elf("noop").unwrap(); - let executable = >::from_elf( + let executable = Executable::::from_elf( &elf, None, Config::default(), @@ -240,7 +240,7 @@ fn bench_create_vm(bencher: &mut Bencher) { bencher.iter(|| { let _ = create_vm( &loader_id, - executable.as_ref(), + &executable, serialized.as_slice_mut(), &mut invoke_context, ) @@ -280,7 +280,7 @@ fn bench_instruction_count_tuner(_bencher: &mut Bencher) { .unwrap(); let elf = load_elf("tuner").unwrap(); - let executable = >::from_elf( + let executable = Executable::::from_elf( &elf, None, Config::default(), @@ -291,7 +291,7 @@ fn bench_instruction_count_tuner(_bencher: &mut Bencher) { let mut instruction_meter = ThisInstructionMeter { compute_meter }; let mut vm = create_vm( &loader_id, - executable.as_ref(), + &executable, serialized.as_slice_mut(), &mut invoke_context, ) diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index e437449c34..ce228d3ac4 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -16,8 +16,9 @@ use solana_bpf_loader_program::{ }; use solana_cli_output::display::println_transaction; use solana_rbpf::{ + elf::Executable, static_analysis::Analysis, - vm::{Config, Executable, Tracer}, + vm::{Config, Tracer}, }; use solana_runtime::{ bank::{Bank, ExecuteTimings, NonceRollbackInfo, TransactionBalancesSet, TransactionResults}, @@ -214,7 +215,7 @@ fn run_program( enable_instruction_tracing: true, ..Config::default() }; - let mut executable = >::from_elf( + let mut executable = Executable::::from_elf( &data, None, config, @@ -232,7 +233,7 @@ fn run_program( let mut vm = create_vm( &loader_id, - executable.as_ref(), + &executable, parameter_bytes.as_slice_mut(), &mut invoke_context, ) @@ -250,7 +251,7 @@ fn run_program( if config.enable_instruction_tracing { if i == 1 { if !Tracer::compare(tracer.as_ref().unwrap(), vm.get_tracer()) { - let analysis = Analysis::from_executable(executable.as_ref()); + let analysis = Analysis::from_executable(&executable); let stdout = std::io::stdout(); println!("TRACE (interpreted):"); tracer @@ -264,7 +265,7 @@ fn run_program( .unwrap(); assert!(false); } else if log_enabled!(Trace) { - let analysis = Analysis::from_executable(executable.as_ref()); + let analysis = Analysis::from_executable(&executable); let mut trace_buffer = Vec::::new(); tracer .as_ref() diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index a6c2c1eb4c..75dd0fd966 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -21,7 +21,7 @@ sha3 = "0.9.1" solana-measure = { path = "../../measure", version = "=1.8.7" } solana-runtime = { path = "../../runtime", version = "=1.8.7" } solana-sdk = { path = "../../sdk", version = "=1.8.7" } -solana_rbpf = "=0.2.15" +solana_rbpf = "=0.2.16" thiserror = "1.0" [dev-dependencies] diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 7c43147023..9f688cd719 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -18,10 +18,11 @@ use { solana_rbpf::{ aligned_memory::AlignedMemory, ebpf::HOST_ALIGN, + elf::Executable, error::{EbpfError, UserDefinedError}, static_analysis::Analysis, verifier::{self, VerifierError}, - vm::{Config, EbpfVm, Executable, InstructionMeter}, + vm::{Config, EbpfVm, InstructionMeter}, }, solana_runtime::message_processor::MessageProcessor, solana_sdk::{ @@ -101,12 +102,7 @@ pub fn create_executor( let program = keyed_account_at_index(keyed_accounts, program_account_index)?; let account = program.try_account_ref()?; let data = &account.data()[program_data_offset..]; - >::from_elf( - data, - None, - config, - syscall_registry, - ) + Executable::::from_elf(data, None, config, syscall_registry) } .map_err(|e| map_ebpf_error(invoke_context, e))?; let text_bytes = executable.get_text_bytes().1; @@ -154,7 +150,7 @@ fn check_loader_id(id: &Pubkey) -> bool { /// Create the BPF virtual machine pub fn create_vm<'a>( loader_id: &'a Pubkey, - program: &'a dyn Executable, + program: &'a Executable, parameter_bytes: &mut [u8], invoke_context: &'a mut dyn InvokeContext, ) -> Result, EbpfError> { @@ -876,7 +872,7 @@ impl InstructionMeter for ThisInstructionMeter { /// BPF Loader's Executor implementation pub struct BpfExecutor { - executable: Box>, + executable: Executable, } // Well, implement Debug for solana_rbpf::vm::Executable in solana-rbpf... @@ -913,7 +909,7 @@ impl Executor for BpfExecutor { let compute_meter = invoke_context.get_compute_meter(); let mut vm = match create_vm( loader_id, - self.executable.as_ref(), + &self.executable, parameter_bytes.as_slice_mut(), invoke_context, ) { @@ -944,7 +940,7 @@ impl Executor for BpfExecutor { ); if log_enabled!(Trace) { let mut trace_buffer = Vec::::new(); - let analysis = Analysis::from_executable(self.executable.as_ref()); + let analysis = Analysis::from_executable(&self.executable); vm.get_tracer().write(&mut trace_buffer, &analysis).unwrap(); let trace_string = String::from_utf8(trace_buffer).unwrap(); trace!("BPF Program Instruction Trace:\n{}", trace_string); @@ -1056,8 +1052,9 @@ mod tests { ]; let input = &mut [0x00]; let mut bpf_functions = std::collections::BTreeMap::::new(); - solana_rbpf::elf::register_bpf_function(&mut bpf_functions, 0, "entrypoint").unwrap(); - let program = >::from_text_bytes( + solana_rbpf::elf::register_bpf_function(&mut bpf_functions, 0, "entrypoint", false) + .unwrap(); + let program = Executable::::from_text_bytes( program, None, Config::default(), @@ -1066,8 +1063,7 @@ mod tests { ) .unwrap(); let mut vm = - EbpfVm::::new(program.as_ref(), &mut [], input) - .unwrap(); + EbpfVm::::new(&program, &mut [], input).unwrap(); let mut instruction_meter = TestInstructionMeter { remaining: 10 }; vm.execute_program_interpreted(&mut instruction_meter) .unwrap(); diff --git a/rbpf-cli/src/main.rs b/rbpf-cli/src/main.rs index 985f2ea0f0..52e219f356 100644 --- a/rbpf-cli/src/main.rs +++ b/rbpf-cli/src/main.rs @@ -7,9 +7,10 @@ use solana_bpf_loader_program::{ }; use solana_rbpf::{ assembler::assemble, + elf::Executable, static_analysis::Analysis, verifier::check, - vm::{Config, DynamicAnalysis, Executable}, + vm::{Config, DynamicAnalysis}, }; use solana_sdk::{ account::AccountSharedData, @@ -187,7 +188,7 @@ native machine code before execting it in the virtual machine.", file.read_to_end(&mut contents).unwrap(); let syscall_registry = register_syscalls(&mut invoke_context).unwrap(); let mut executable = if magic == [0x7f, 0x45, 0x4c, 0x46] { - >::from_elf( + Executable::::from_elf( &contents, None, config, @@ -209,7 +210,7 @@ native machine code before execting it in the virtual machine.", check(text_bytes, &config).unwrap(); } executable.jit_compile().unwrap(); - let analysis = Analysis::from_executable(executable.as_ref()); + let analysis = Analysis::from_executable(&executable); match matches.value_of("use") { Some("cfg") => { @@ -226,7 +227,7 @@ native machine code before execting it in the virtual machine.", } let id = bpf_loader::id(); - let mut vm = create_vm(&id, executable.as_ref(), &mut mem, &mut invoke_context).unwrap(); + let mut vm = create_vm(&id, &executable, &mut mem, &mut invoke_context).unwrap(); let result = if matches.value_of("use").unwrap() == "interpreter" { vm.execute_program_interpreted(&mut instruction_meter) } else { @@ -244,7 +245,7 @@ native machine code before execting it in the virtual machine.", if matches.is_present("trace") { println!("Trace is saved in trace.out"); let mut file = File::create("trace.out").unwrap(); - let analysis = Analysis::from_executable(executable.as_ref()); + let analysis = Analysis::from_executable(&executable); vm.get_tracer().write(&mut file, &analysis).unwrap(); } if matches.is_present("profile") {