//! 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. const WORD_SIZE: usize = core::mem::size_of::(); pub mod alloc; #[path = "../zkvm/args.rs"] pub mod args; pub mod env; #[path = "../unsupported/fs.rs"] pub mod fs; #[path = "../unsupported/io.rs"] pub mod io; #[path = "../unsupported/net.rs"] pub mod net; pub mod os; #[path = "../unsupported/pipe.rs"] pub mod pipe; #[path = "../unsupported/process.rs"] pub mod process; pub mod stdio; pub mod thread_local_key; #[path = "../unsupported/time.rs"] pub mod time; #[path = "../unsupported/thread.rs"] pub mod thread; #[path = "../unsupported/thread_parking.rs"] pub mod thread_parking; 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() -> std_io::Result { Err(unsupported_err()) } pub fn unsupported_err() -> std_io::Error { std_io::Error::UNSUPPORTED_PLATFORM } pub fn is_interrupted(_code: i32) -> bool { false } pub fn decode_error_kind(_code: i32) -> crate::io::ErrorKind { crate::io::ErrorKind::Uncategorized } pub fn abort_internal() -> ! { core::intrinsics::abort(); } pub fn hashmap_random_keys() -> (u64, u64) { let mut buf = [0u32; 4]; unsafe { abi::sys_rand(buf.as_mut_ptr(), 4); }; ((buf[0] as u64) << 32 + buf[1] as u64, (buf[2] as u64) << 32 + buf[3] as u64) }