yggdrasil/lib/abi/src/arch/aarch64.rs

35 lines
641 B
Rust

#![allow(missing_docs)]
use abi_serde::impl_struct_serde;
use super::FrameOps;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone, Debug, Default)]
#[repr(C)]
pub struct SavedFrame {
pub gp_regs: [usize; 32],
pub spsr_el1: u64,
pub elr_el1: u64,
pub sp_el0: u64,
pub mdscr_el1: u64,
}
impl FrameOps for SavedFrame {
fn set_user_ip(&mut self, value: usize) {
self.elr_el1 = value as _;
}
fn user_ip(&self) -> usize {
self.elr_el1 as _
}
}
impl_struct_serde!(SavedFrame: [
gp_regs,
spsr_el1,
elr_el1,
sp_el0,
mdscr_el1,
]);