ckb_vm::memory

Trait Memory

Source
pub trait Memory {
    type REG: Register;

Show 23 methods // Required methods fn new() -> Self; fn new_with_memory(memory_size: usize) -> Self; fn init_pages( &mut self, addr: u64, size: u64, flags: u8, source: Option<Bytes>, offset_from_addr: u64, ) -> Result<(), Error>; fn fetch_flag(&mut self, page: u64) -> Result<u8, Error>; fn set_flag(&mut self, page: u64, flag: u8) -> Result<(), Error>; fn clear_flag(&mut self, page: u64, flag: u8) -> Result<(), Error>; fn memory_size(&self) -> usize; fn store_byte( &mut self, addr: u64, size: u64, value: u8, ) -> Result<(), Error>; fn store_bytes(&mut self, addr: u64, value: &[u8]) -> Result<(), Error>; fn load_bytes(&mut self, addr: u64, size: u64) -> Result<Bytes, Error>; fn execute_load16(&mut self, addr: u64) -> Result<u16, Error>; fn execute_load32(&mut self, addr: u64) -> Result<u32, Error>; fn load8(&mut self, addr: &Self::REG) -> Result<Self::REG, Error>; fn load16(&mut self, addr: &Self::REG) -> Result<Self::REG, Error>; fn load32(&mut self, addr: &Self::REG) -> Result<Self::REG, Error>; fn load64(&mut self, addr: &Self::REG) -> Result<Self::REG, Error>; fn store8( &mut self, addr: &Self::REG, value: &Self::REG, ) -> Result<(), Error>; fn store16( &mut self, addr: &Self::REG, value: &Self::REG, ) -> Result<(), Error>; fn store32( &mut self, addr: &Self::REG, value: &Self::REG, ) -> Result<(), Error>; fn store64( &mut self, addr: &Self::REG, value: &Self::REG, ) -> Result<(), Error>; fn lr(&self) -> &Self::REG; fn set_lr(&mut self, value: &Self::REG); // Provided method fn memory_pages(&self) -> usize { ... }
}

Required Associated Types§

Required Methods§

Source

fn new() -> Self

Source

fn new_with_memory(memory_size: usize) -> Self

Source

fn init_pages( &mut self, addr: u64, size: u64, flags: u8, source: Option<Bytes>, offset_from_addr: u64, ) -> Result<(), Error>

Source

fn fetch_flag(&mut self, page: u64) -> Result<u8, Error>

Source

fn set_flag(&mut self, page: u64, flag: u8) -> Result<(), Error>

Source

fn clear_flag(&mut self, page: u64, flag: u8) -> Result<(), Error>

Source

fn memory_size(&self) -> usize

Source

fn store_byte(&mut self, addr: u64, size: u64, value: u8) -> Result<(), Error>

Source

fn store_bytes(&mut self, addr: u64, value: &[u8]) -> Result<(), Error>

Source

fn load_bytes(&mut self, addr: u64, size: u64) -> Result<Bytes, Error>

Source

fn execute_load16(&mut self, addr: u64) -> Result<u16, Error>

Source

fn execute_load32(&mut self, addr: u64) -> Result<u32, Error>

Source

fn load8(&mut self, addr: &Self::REG) -> Result<Self::REG, Error>

Source

fn load16(&mut self, addr: &Self::REG) -> Result<Self::REG, Error>

Source

fn load32(&mut self, addr: &Self::REG) -> Result<Self::REG, Error>

Source

fn load64(&mut self, addr: &Self::REG) -> Result<Self::REG, Error>

Source

fn store8(&mut self, addr: &Self::REG, value: &Self::REG) -> Result<(), Error>

Source

fn store16(&mut self, addr: &Self::REG, value: &Self::REG) -> Result<(), Error>

Source

fn store32(&mut self, addr: &Self::REG, value: &Self::REG) -> Result<(), Error>

Source

fn store64(&mut self, addr: &Self::REG, value: &Self::REG) -> Result<(), Error>

Source

fn lr(&self) -> &Self::REG

Source

fn set_lr(&mut self, value: &Self::REG)

Provided Methods§

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<M: Memory> Memory for WXorXMemory<M>

Source§

type REG = <M as Memory>::REG

Source§

impl<R: Register> Memory for FlatMemory<R>

A flat chunk of memory used for RISC-V machine, it lacks all the permission checking logic.

Source§

type REG = R

Source§

impl<R: Register> Memory for SparseMemory<R>

Source§

type REG = R