Trait Architecture

Source
pub trait Architecture {
    type Endian: Endianness;
    type Registers: Into<Registers>;
    type SpecialRegisters: Into<SpecialRegisters>;
    type OtherRegisters: Into<OtherRegisters>;

    // Required methods
    fn into_runtime(self) -> Architecture;
    fn endianness(&self) -> Self::Endian;
    fn virtual_to_physical<M: Memory + ?Sized>(
        &self,
        memory: &M,
        mmu_addr: PhysicalAddress,
        addr: VirtualAddress,
    ) -> TranslationResult<PhysicalAddress>;
    fn find_kernel_pgd<M: Memory + ?Sized>(
        &self,
        memory: &M,
        vcpus: &(impl HasVcpus<Arch = Self> + ?Sized),
        use_per_cpu: bool,
        additional: &[VirtualAddress],
    ) -> VmResult<Option<PhysicalAddress>>;
    fn find_in_kernel_memory_raw<M: Memory + ?Sized>(
        &self,
        memory: &M,
        mmu_addr: PhysicalAddress,
        base_search_addr: VirtualAddress,
        finder: &Finder<'_>,
        buf: &mut [u8],
    ) -> MemoryAccessResult<Option<VirtualAddress>>;
    fn find_in_kernel_memory<M: Memory + ?Sized>(
        &self,
        memory: &M,
        mmu_addr: PhysicalAddress,
        needle: &[u8],
    ) -> MemoryAccessResult<Option<VirtualAddress>>;
    fn kernel_base(&self) -> VirtualAddress;
    fn instruction_pointer<Vcpus: HasVcpus<Arch = Self> + ?Sized>(
        &self,
        vcpus: &Vcpus,
        vcpu: VcpuId,
    ) -> VcpuResult<VirtualAddress>;
    fn stack_pointer<Vcpus: HasVcpus<Arch = Self> + ?Sized>(
        &self,
        vcpus: &Vcpus,
        vcpu: VcpuId,
    ) -> VcpuResult<VirtualAddress>;
    fn base_pointer<Vcpus: HasVcpus<Arch = Self> + ?Sized>(
        &self,
        vcpus: &Vcpus,
        vcpu: VcpuId,
    ) -> VcpuResult<Option<VirtualAddress>>;
    fn pgd<Vcpus: HasVcpus<Arch = Self> + ?Sized>(
        &self,
        vcpus: &Vcpus,
        vcpu: VcpuId,
    ) -> VcpuResult<PhysicalAddress>;
    fn kernel_per_cpu<Vcpus: HasVcpus<Arch = Self> + ?Sized>(
        &self,
        vcpus: &Vcpus,
        vcpu: VcpuId,
    ) -> VcpuResult<Option<VirtualAddress>>;
}
Expand description

A hardware architecture

This trait has a lifetime, which will be removed when GAT are stable

Required Associated Types§

Required Methods§

Source

fn into_runtime(self) -> Architecture

Source

fn endianness(&self) -> Self::Endian

Source

fn virtual_to_physical<M: Memory + ?Sized>( &self, memory: &M, mmu_addr: PhysicalAddress, addr: VirtualAddress, ) -> TranslationResult<PhysicalAddress>

Source

fn find_kernel_pgd<M: Memory + ?Sized>( &self, memory: &M, vcpus: &(impl HasVcpus<Arch = Self> + ?Sized), use_per_cpu: bool, additional: &[VirtualAddress], ) -> VmResult<Option<PhysicalAddress>>

Source

fn find_in_kernel_memory_raw<M: Memory + ?Sized>( &self, memory: &M, mmu_addr: PhysicalAddress, base_search_addr: VirtualAddress, finder: &Finder<'_>, buf: &mut [u8], ) -> MemoryAccessResult<Option<VirtualAddress>>

Source

fn find_in_kernel_memory<M: Memory + ?Sized>( &self, memory: &M, mmu_addr: PhysicalAddress, needle: &[u8], ) -> MemoryAccessResult<Option<VirtualAddress>>

Source

fn kernel_base(&self) -> VirtualAddress

Source

fn instruction_pointer<Vcpus: HasVcpus<Arch = Self> + ?Sized>( &self, vcpus: &Vcpus, vcpu: VcpuId, ) -> VcpuResult<VirtualAddress>

Source

fn stack_pointer<Vcpus: HasVcpus<Arch = Self> + ?Sized>( &self, vcpus: &Vcpus, vcpu: VcpuId, ) -> VcpuResult<VirtualAddress>

Source

fn base_pointer<Vcpus: HasVcpus<Arch = Self> + ?Sized>( &self, vcpus: &Vcpus, vcpu: VcpuId, ) -> VcpuResult<Option<VirtualAddress>>

Source

fn pgd<Vcpus: HasVcpus<Arch = Self> + ?Sized>( &self, vcpus: &Vcpus, vcpu: VcpuId, ) -> VcpuResult<PhysicalAddress>

Source

fn kernel_per_cpu<Vcpus: HasVcpus<Arch = Self> + ?Sized>( &self, vcpus: &Vcpus, vcpu: VcpuId, ) -> VcpuResult<Option<VirtualAddress>>

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§