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: u32
The current shard.
clk: u32
The clock cycle.
next_pc: u32
The next program counter.
exit_code: u32
The exit code.
rt: &'a mut Executor<'b>
The runtime.
syscall_lookup_id: LookupId
The 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