arch/x86-64: implement IrqFrame signal frame

This commit is contained in:
Mark Poliakov 2023-12-22 12:41:45 +02:00
parent 77e5fcc947
commit cdd401552e
2 changed files with 30 additions and 11 deletions

View File

@ -136,7 +136,26 @@ struct Pointer {
impl TaskFrame for IrqFrame { impl TaskFrame for IrqFrame {
fn store(&self) -> SavedFrame { fn store(&self) -> SavedFrame {
todo!() SavedFrame {
rax: self.rax,
rcx: self.rcx,
rdx: self.rdx,
rbx: self.rbx,
rsi: self.rsi,
rdi: self.rdi,
rbp: self.rbp,
r8: self.r8,
r9: self.r9,
r10: self.r10,
r11: self.r11,
r12: self.r12,
r13: self.r13,
r14: self.r14,
r15: self.r15,
user_ip: self.rip,
user_sp: self.rsp,
rflags: self.rflags,
}
} }
fn restore(&mut self, _saved: &SavedFrame) { fn restore(&mut self, _saved: &SavedFrame) {
@ -144,31 +163,31 @@ impl TaskFrame for IrqFrame {
} }
fn argument(&self) -> u64 { fn argument(&self) -> u64 {
todo!(); self.rdi as _
} }
fn user_ip(&self) -> usize { fn user_ip(&self) -> usize {
todo!() self.rip as _
} }
fn user_sp(&self) -> usize { fn user_sp(&self) -> usize {
todo!() self.rsp as _
} }
fn set_argument(&mut self, value: u64) { fn set_argument(&mut self, value: u64) {
self.rdi = value; self.rdi = value;
} }
fn set_return_value(&mut self, _value: u64) { fn set_return_value(&mut self, value: u64) {
todo!() self.rax = value;
} }
fn set_user_ip(&mut self, _value: usize) { fn set_user_ip(&mut self, value: usize) {
todo!() self.rip = value as _;
} }
fn set_user_sp(&mut self, _value: usize) { fn set_user_sp(&mut self, value: usize) {
todo!() self.rsp = value as _;
} }
} }

View File

@ -18,7 +18,7 @@ use kernel_util::{
device::RawDeviceMemoryMapping, device::RawDeviceMemoryMapping,
table::EntryLevelExt, table::EntryLevelExt,
}, },
sync::{guard::GuardedRef, SpinFence}, sync::SpinFence,
util::OneTimeInit, util::OneTimeInit,
}; };
use yboot_proto::{v1::AvailableMemoryRegion, LoadProtocolV1}; use yboot_proto::{v1::AvailableMemoryRegion, LoadProtocolV1};