| //! System bindings for the risc0 zkvm platform | |
| //! | |
| //! This module contains the facade (aka platform-specific) implementations of | |
| //! OS level functionality for zkvm. | |
| //! | |
| //! This is all super highly experimental and not actually intended for | |
| //! wide/production use yet, it's still all in the experimental category. This | |
| //! will likely change over time. | |
| #![forbid(unsafe_op_in_unsafe_fn)] | |
| pub const WORD_SIZE: usize = size_of::<u32>(); | |
| pub mod abi; | |
| use crate::io as std_io; | |
| // SAFETY: must be called only once during runtime initialization. | |
| // NOTE: this is not guaranteed to run, for example when Rust code is called externally. | |
| pub unsafe fn init(_argc: isize, _argv: *const *const u8, _sigpipe: u8) {} | |
| // SAFETY: must be called only once during runtime cleanup. | |
| // NOTE: this is not guaranteed to run, for example when the program aborts. | |
| pub unsafe fn cleanup() {} | |
| pub fn unsupported<T>() -> std_io::Result<T> { | |
| Err(unsupported_err()) | |
| } | |
| pub fn unsupported_err() -> std_io::Error { | |
| std_io::Error::UNSUPPORTED_PLATFORM | |
| } | |
| pub fn abort_internal() -> ! { | |
| core::intrinsics::abort(); | |
| } |