From 85b647d80fb9af4b7ba928aa48f767128b9ed656 Mon Sep 17 00:00:00 2001 From: Dmitri Makarov Date: Tue, 25 May 2021 10:05:35 +0200 Subject: [PATCH] Bump solana_rbpf to version 0.2.11 (#17404) --- Cargo.lock | 5 +++-- cli/Cargo.toml | 2 +- programs/bpf/Cargo.lock | 5 +++-- programs/bpf/Cargo.toml | 2 +- programs/bpf/tests/programs.rs | 25 +++++++++++++++---------- programs/bpf_loader/Cargo.toml | 2 +- programs/bpf_loader/src/lib.rs | 15 +++++++++------ 7 files changed, 33 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 21edcfb5a..f43a446a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5518,9 +5518,9 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debbc13545a1d972955a4fd3014e7c9d6d81da16c3626ee5f64bf3aa619548f8" +checksum = "7c1c5bdfa63c68d848d95024c7f4335bae4b1917f7df2e48e2d945f4664a8b45" dependencies = [ "byteorder", "combine", @@ -5529,6 +5529,7 @@ dependencies = [ "libc", "log 0.4.11", "rand 0.7.3", + "rustc-demangle", "scroll", "thiserror", "time 0.1.43", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 33fcc4514..c08479372 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -38,7 +38,7 @@ solana-config-program = { path = "../programs/config", version = "=1.7.0" } solana-faucet = { path = "../faucet", version = "=1.7.0" } solana-logger = { path = "../logger", version = "=1.7.0" } solana-net-utils = { path = "../net-utils", version = "=1.7.0" } -solana_rbpf = "=0.2.9" +solana_rbpf = "=0.2.11" solana-remote-wallet = { path = "../remote-wallet", version = "=1.7.0" } solana-sdk = { path = "../sdk", version = "=1.7.0" } solana-stake-program = { path = "../programs/stake", version = "=1.7.0" } diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 51a64075a..03fc81970 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -3637,9 +3637,9 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debbc13545a1d972955a4fd3014e7c9d6d81da16c3626ee5f64bf3aa619548f8" +checksum = "7c1c5bdfa63c68d848d95024c7f4335bae4b1917f7df2e48e2d945f4664a8b45" dependencies = [ "byteorder 1.3.4", "combine", @@ -3648,6 +3648,7 @@ dependencies = [ "libc", "log", "rand 0.7.3", + "rustc-demangle", "scroll", "thiserror", "time", diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index d2138569c..8bb3d8097 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -30,7 +30,7 @@ solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.7.0" } solana-cli-output = { path = "../../cli-output", version = "=1.7.0" } solana-logger = { path = "../../logger", version = "=1.7.0" } solana-measure = { path = "../../measure", version = "=1.7.0" } -solana_rbpf = "=0.2.9" +solana_rbpf = "=0.2.11" solana-runtime = { path = "../../runtime", version = "=1.7.0" } solana-sdk = { path = "../../sdk", version = "=1.7.0" } solana-transaction-status = { path = "../../transaction-status", version = "=1.7.0" } diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 94599191e..c350c763a 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -15,7 +15,10 @@ use solana_bpf_loader_program::{ BpfError, ThisInstructionMeter, }; use solana_cli_output::display::println_transaction; -use solana_rbpf::vm::{Config, Executable, Tracer}; +use solana_rbpf::{ + static_analysis::Analysis, + vm::{Config, Executable, Tracer} +}; use solana_runtime::{ bank::{Bank, ExecuteTimings, NonceRollbackInfo, TransactionBalancesSet, TransactionResults}, bank_client::BankClient, @@ -242,27 +245,29 @@ fn run_program( if config.enable_instruction_tracing { if i == 1 { if !Tracer::compare(tracer.as_ref().unwrap(), vm.get_tracer()) { - let mut tracer_display = String::new(); + let analysis = Analysis::from_executable(executable.as_ref()); + let stdout = std::io::stdout(); + println!("TRACE (interpreted):"); tracer .as_ref() .unwrap() - .write(&mut tracer_display, vm.get_program()) + .write(&mut stdout.lock(), &analysis) .unwrap(); - println!("TRACE (interpreted): {}", tracer_display); - let mut tracer_display = String::new(); + println!("TRACE (jit):"); vm.get_tracer() - .write(&mut tracer_display, vm.get_program()) + .write(&mut stdout.lock(), &analysis) .unwrap(); - println!("TRACE (jit): {}", tracer_display); assert!(false); } else if log_enabled!(Trace) { - let mut trace_buffer = String::new(); + let analysis = Analysis::from_executable(executable.as_ref()); + let mut trace_buffer = Vec::::new(); tracer .as_ref() .unwrap() - .write(&mut trace_buffer, vm.get_program()) + .write(&mut trace_buffer, &analysis) .unwrap(); - trace!("BPF Program Instruction Trace:\n{}", trace_buffer); + let trace_string = String::from_utf8(trace_buffer).unwrap(); + trace!("BPF Program Instruction Trace:\n{}", trace_string); } } tracer = Some(vm.get_tracer().clone()); diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index c8b340025..ba7c4970b 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -20,7 +20,7 @@ sha3 = "0.9.1" solana-measure = { path = "../../measure", version = "=1.7.0" } solana-runtime = { path = "../../runtime", version = "=1.7.0" } solana-sdk = { path = "../../sdk", version = "=1.7.0" } -solana_rbpf = "=0.2.9" +solana_rbpf = "=0.2.11" thiserror = "1.0" [dev-dependencies] diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 0a94e9229..2cad10a0b 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -21,6 +21,7 @@ use solana_rbpf::{ ebpf::{HOST_ALIGN, MM_HEAP_START}, error::{EbpfError, UserDefinedError}, memory_region::MemoryRegion, + static_analysis::Analysis, vm::{Config, EbpfVm, Executable, InstructionMeter}, }; use solana_runtime::message_processor::MessageProcessor; @@ -794,11 +795,11 @@ impl Executor for BpfExecutor { before ); if log_enabled!(Trace) { - let mut trace_buffer = String::new(); - vm.get_tracer() - .write(&mut trace_buffer, vm.get_program()) - .unwrap(); - trace!("BPF Program Instruction Trace:\n{}", trace_buffer); + let mut trace_buffer = Vec::::new(); + let analysis = Analysis::from_executable(self.executable.as_ref()); + 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); } match result { Ok(status) => { @@ -896,9 +897,11 @@ mod tests { 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // exit ]; 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( program, + bpf_functions, None, Config::default(), )