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

35 lines
641 B
Rust
Raw Normal View History

#![allow(missing_docs)]
2025-02-27 18:49:20 +02:00
use abi_serde::impl_struct_serde;
use super::FrameOps;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone, Debug, Default)]
2023-11-04 15:40:48 +02:00
#[repr(C)]
pub struct SavedFrame {
2024-10-11 15:29:41 +03:00
pub gp_regs: [usize; 32],
2023-11-04 15:40:48 +02:00
pub spsr_el1: u64,
pub elr_el1: u64,
pub sp_el0: u64,
pub mdscr_el1: u64,
2023-11-04 15:40:48 +02:00
}
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 _
}
}
2025-02-27 18:49:20 +02:00
impl_struct_serde!(SavedFrame: [
gp_regs,
spsr_el1,
elr_el1,
sp_el0,
mdscr_el1,
]);