zkvmc-context 0.0.1

zkVMc runtime context
Documentation
use zkvmc_core::traits::Reset;

use crate::Context;
use std::ptr::NonNull;

pub extern "C" fn default_ecall_handler(_ctx: NonNull<Context>) {}
pub extern "C" fn default_trace_handler(mut ctx: NonNull<Context>) {
    // handle traces in trace_buf
    unsafe {
        // reset trace buf at the end of the handler
        ctx.as_mut().trace_buf.reset();
    }
}

pub extern "C" fn default_ebreak_handler(ctx: NonNull<Context>) {
    panic!("Unsupported EBREAK instruction at {:#x}", unsafe {
        ctx.as_ref().pc
    });
}

pub extern "C" fn default_undefined_handler(ctx: NonNull<Context>, inst: u32) {
    panic!(
        "Undefined instruction encoding at {:#x}: {inst:8x}",
        unsafe { ctx.as_ref().pc }
    );
}