From 05435cd25691fce0b2835ba3337d549ff9872134 Mon Sep 17 00:00:00 2001 From: ravyu-jump <146378768+ravyu-jump@users.noreply.github.com> Date: Fri, 6 Sep 2024 14:38:49 -0500 Subject: [PATCH] CPI harness: migrate to new error mapping logic (#111) --- src/utils/vm/err_map.rs | 2 ++ src/vm_cpi_syscall.rs | 19 +++++++------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/utils/vm/err_map.rs b/src/utils/vm/err_map.rs index 14bcc2ff..6b14f7ba 100644 --- a/src/utils/vm/err_map.rs +++ b/src/utils/vm/err_map.rs @@ -1,3 +1,5 @@ +/* DEPRECATED, use utils/err_map.rs instead. Saving this for vm_interp.rs, which will +need more substantial changes to accomodate the newer err_map.rs */ use solana_program_runtime::solana_rbpf::error::EbpfError; use solana_program_runtime::solana_rbpf::verifier::VerifierError; const TRUNCATE_ERROR_WORDS: usize = 7; diff --git a/src/vm_cpi_syscall.rs b/src/vm_cpi_syscall.rs index ca0c4a7d..d63d3ac3 100644 --- a/src/vm_cpi_syscall.rs +++ b/src/vm_cpi_syscall.rs @@ -1,7 +1,10 @@ use crate::{ load_builtins, proto::{SyscallContext, SyscallEffects}, - utils::{self, vm::mem_regions, vm::STACK_SIZE}, + utils::{ + err_map::stable_result_to_err_no, + vm::{mem_regions, STACK_SIZE}, + }, InstrContext, }; use solana_bpf_loader_program::syscalls::create_program_runtime_environment_v1; @@ -230,19 +233,15 @@ fn execute_vm_cpi_syscall(input: SyscallContext) -> Option { // Unwrap and return the effects of the syscall let program_result = vm.program_result; + let program_id = instr_ctx.instruction.program_id; Some(SyscallEffects { - error: match program_result { - StableResult::Ok(_) => 0, - StableResult::Err(ref ebpf_error) => { - utils::vm::err_map::get_fd_vm_err_code(ebpf_error).into() - } - }, // Register 0 doesn't seem to contain the result, maybe we're missing some code from agave. // Regardless, the result is available in vm.program_result, so we can return it from there. r0: match program_result { StableResult::Ok(n) => n, StableResult::Err(_) => 0, }, + error: stable_result_to_err_no(program_result, vm.context_object_pointer, &program_id), cu_avail: vm.context_object_pointer.get_remaining(), heap, stack, @@ -253,11 +252,7 @@ fn execute_vm_cpi_syscall(input: SyscallContext) -> Option { .get_log_collector()? .borrow() .get_recorded_content() - .iter() - .fold(String::new(), |mut acc, s| { - acc.push_str(s); - acc - }) + .join("\n") .into_bytes(), ..Default::default() })