zkvmc_context/
syscall.rs

1use zkvmc_core::traits::Reset;
2
3use crate::Context;
4use std::ptr::NonNull;
5
6pub extern "C" fn default_ecall_handler(_ctx: NonNull<Context>) {}
7pub extern "C" fn default_trace_handler(mut ctx: NonNull<Context>) {
8    // handle traces in trace_buf
9    unsafe {
10        // reset trace buf at the end of the handler
11        ctx.as_mut().trace_buf.reset();
12    }
13}
14
15pub extern "C" fn default_ebreak_handler(ctx: NonNull<Context>) {
16    panic!("Unsupported EBREAK instruction at {:#x}", unsafe {
17        ctx.as_ref().pc
18    });
19}
20
21pub extern "C" fn default_undefined_handler(ctx: NonNull<Context>, inst: u32) {
22    panic!(
23        "Undefined instruction encoding at {:#x}: {inst:8x}",
24        unsafe { ctx.as_ref().pc }
25    );
26}