pub struct SyscallContext<'a, 'b: 'a> {
pub current_shard: u32,
pub clk: u32,
pub next_pc: u32,
pub exit_code: u32,
pub rt: &'a mut Executor<'b>,
pub syscall_lookup_id: LookupId,
pub local_memory_access: HashMap<u32, MemoryLocalEvent>,
}Expand description
A runtime for syscalls that is protected so that developers cannot arbitrarily modify the runtime.
Fields§
§current_shard: u32The current shard.
clk: u32The clock cycle.
next_pc: u32The next program counter.
exit_code: u32The exit code.
rt: &'a mut Executor<'b>The runtime.
syscall_lookup_id: LookupIdThe syscall lookup id.
local_memory_access: HashMap<u32, MemoryLocalEvent>The local memory access events for the syscall.
Implementations§
Source§impl<'a, 'b> SyscallContext<'a, 'b>
impl<'a, 'b> SyscallContext<'a, 'b>
Sourcepub fn new(runtime: &'a mut Executor<'b>) -> Self
pub fn new(runtime: &'a mut Executor<'b>) -> Self
Create a new SyscallContext.
Sourcepub fn record_mut(&mut self) -> &mut ExecutionRecord
pub fn record_mut(&mut self) -> &mut ExecutionRecord
Get a mutable reference to the execution record.
Sourcepub fn current_shard(&self) -> u32
pub fn current_shard(&self) -> u32
Get the current shard.
Sourcepub fn mr(&mut self, addr: u32) -> (MemoryReadRecord, u32)
pub fn mr(&mut self, addr: u32) -> (MemoryReadRecord, u32)
Read a word from memory.
Sourcepub fn mr_slice(
&mut self,
addr: u32,
len: usize,
) -> (Vec<MemoryReadRecord>, Vec<u32>)
pub fn mr_slice( &mut self, addr: u32, len: usize, ) -> (Vec<MemoryReadRecord>, Vec<u32>)
Read a slice of words from memory.
Sourcepub fn mw(&mut self, addr: u32, value: u32) -> MemoryWriteRecord
pub fn mw(&mut self, addr: u32, value: u32) -> MemoryWriteRecord
Write a word to memory.
Sourcepub fn mw_slice(&mut self, addr: u32, values: &[u32]) -> Vec<MemoryWriteRecord>
pub fn mw_slice(&mut self, addr: u32, values: &[u32]) -> Vec<MemoryWriteRecord>
Write a slice of words to memory.
Sourcepub fn postprocess(&mut self) -> Vec<MemoryLocalEvent>
pub fn postprocess(&mut self) -> Vec<MemoryLocalEvent>
Postprocess the syscall. Specifically will process the syscall’s memory local events.
Sourcepub fn register_unsafe(&mut self, register: Register) -> u32
pub fn register_unsafe(&mut self, register: Register) -> u32
Get the current value of a register, but doesn’t use a memory record. This is generally unconstrained, so you must be careful using it.
Sourcepub fn byte_unsafe(&mut self, addr: u32) -> u8
pub fn byte_unsafe(&mut self, addr: u32) -> u8
Get the current value of a byte, but doesn’t use a memory record.
Sourcepub fn word_unsafe(&mut self, addr: u32) -> u32
pub fn word_unsafe(&mut self, addr: u32) -> u32
Get the current value of a word, but doesn’t use a memory record.
Sourcepub fn slice_unsafe(&mut self, addr: u32, len: usize) -> Vec<u32>
pub fn slice_unsafe(&mut self, addr: u32, len: usize) -> Vec<u32>
Get a slice of words, but doesn’t use a memory record.
Sourcepub fn set_next_pc(&mut self, next_pc: u32)
pub fn set_next_pc(&mut self, next_pc: u32)
Set the next program counter.
Sourcepub fn set_exit_code(&mut self, exit_code: u32)
pub fn set_exit_code(&mut self, exit_code: u32)
Set the exit code.
Auto Trait Implementations§
impl<'a, 'b> Freeze for SyscallContext<'a, 'b>
impl<'a, 'b> !RefUnwindSafe for SyscallContext<'a, 'b>
impl<'a, 'b> Send for SyscallContext<'a, 'b>
impl<'a, 'b> Sync for SyscallContext<'a, 'b>
impl<'a, 'b> Unpin for SyscallContext<'a, 'b>
impl<'a, 'b> !UnwindSafe for SyscallContext<'a, 'b>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more