aarch64emu

Trait Cpu

Source
pub trait Cpu: AccessCpuState {
    type Error;

    // Required methods
    fn read_instruction(
        &mut self,
        gva: u64,
        bytes: &mut [u8],
    ) -> impl Future<Output = Result<(), Self::Error>>;
    fn read_memory(
        &mut self,
        gva: u64,
        bytes: &mut [u8],
    ) -> impl Future<Output = Result<(), Self::Error>>;
    fn read_physical_memory(
        &mut self,
        gpa: u64,
        bytes: &mut [u8],
    ) -> impl Future<Output = Result<(), Self::Error>>;
    fn write_memory(
        &mut self,
        gva: u64,
        bytes: &[u8],
    ) -> impl Future<Output = Result<(), Self::Error>>;
    fn write_physical_memory(
        &mut self,
        gpa: u64,
        bytes: &[u8],
    ) -> impl Future<Output = Result<(), Self::Error>>;
    fn compare_and_write_memory(
        &mut self,
        gva: u64,
        current: &[u8],
        new: &[u8],
        success: &mut bool,
    ) -> impl Future<Output = Result<(), Self::Error>>;
}

Required Associated Types§

Source

type Error

The error type for IO access failures.

Required Methods§

Source

fn read_instruction( &mut self, gva: u64, bytes: &mut [u8], ) -> impl Future<Output = Result<(), Self::Error>>

Performs a memory read of an instruction to execute.

Source

fn read_memory( &mut self, gva: u64, bytes: &mut [u8], ) -> impl Future<Output = Result<(), Self::Error>>

Performs a memory read of 1, 2, 4, or 8 bytes.

Source

fn read_physical_memory( &mut self, gpa: u64, bytes: &mut [u8], ) -> impl Future<Output = Result<(), Self::Error>>

Performs a memory read of 1, 2, 4, or 8 bytes on a guest physical address.

Source

fn write_memory( &mut self, gva: u64, bytes: &[u8], ) -> impl Future<Output = Result<(), Self::Error>>

Performs a memory write of 1, 2, 4, or 8 bytes.

Source

fn write_physical_memory( &mut self, gpa: u64, bytes: &[u8], ) -> impl Future<Output = Result<(), Self::Error>>

Performs a memory write of 1, 2, 4, or 8 bytes on a guest physical address.

Source

fn compare_and_write_memory( &mut self, gva: u64, current: &[u8], new: &[u8], success: &mut bool, ) -> impl Future<Output = Result<(), Self::Error>>

Performs an atomic, sequentially-consistent compare exchange on a memory location.

The caller has already fetched current via read_memory, so the implementor only needs to perform an atomic compare+write if the memory could have mutated concurrently and supports atomic operation. This includes ordinary RAM, but does not include device registers.

Sets *success to true if the exchange succeeded, false otherwise.

FUTURE: just return success when we can directly use async functions in traits.

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.

Implementations on Foreign Types§

Source§

impl<T: Cpu + ?Sized> Cpu for &mut T

Source§

type Error = <T as Cpu>::Error

Source§

fn read_instruction( &mut self, gva: u64, bytes: &mut [u8], ) -> impl Future<Output = Result<(), Self::Error>>

Source§

fn read_memory( &mut self, gva: u64, bytes: &mut [u8], ) -> impl Future<Output = Result<(), Self::Error>>

Source§

fn read_physical_memory( &mut self, gpa: u64, bytes: &mut [u8], ) -> impl Future<Output = Result<(), Self::Error>>

Source§

fn write_memory( &mut self, gva: u64, bytes: &[u8], ) -> impl Future<Output = Result<(), Self::Error>>

Source§

fn write_physical_memory( &mut self, gpa: u64, bytes: &[u8], ) -> impl Future<Output = Result<(), Self::Error>>

Source§

fn compare_and_write_memory( &mut self, gva: u64, current: &[u8], new: &[u8], success: &mut bool, ) -> impl Future<Output = Result<(), Self::Error>>

Implementors§