use alloc::string::String; use core::panic::PanicPayload; // Forward the abort message to zkVM's sys_panic. This is implemented by RISC Zero's // platform crate which exposes system calls specifically for the zkVM. pub(crate) unsafe fn zkvm_set_abort_message(payload: &mut dyn PanicPayload) { let payload = payload.get(); let msg = match payload.downcast_ref::<&'static str>() { Some(msg) => msg.as_bytes(), None => match payload.downcast_ref::() { Some(msg) => msg.as_bytes(), None => &[], }, }; if msg.is_empty() { return; } unsafe extern "C" { fn sys_panic(msg_ptr: *const u8, len: usize) -> !; } unsafe { sys_panic(msg.as_ptr(), msg.len()); } }