mirror of https://github.com/rust-lang/rust
25 lines
738 B
Rust
25 lines
738 B
Rust
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::<String>() {
|
|
Some(msg) => msg.as_bytes(),
|
|
None => &[],
|
|
},
|
|
};
|
|
if msg.is_empty() {
|
|
return;
|
|
}
|
|
|
|
extern "C" {
|
|
fn sys_panic(msg_ptr: *const u8, len: usize) -> !;
|
|
}
|
|
|
|
sys_panic(msg.as_ptr(), msg.len());
|
|
}
|