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
src/arch/x86_64

@ -136,7 +136,26 @@ struct Pointer {
impl TaskFrame for IrqFrame {
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) {
@ -144,31 +163,31 @@ impl TaskFrame for IrqFrame {
}
fn argument(&self) -> u64 {
todo!();
self.rdi as _
}
fn user_ip(&self) -> usize {
todo!()
self.rip as _
}
fn user_sp(&self) -> usize {
todo!()
self.rsp as _
}
fn set_argument(&mut self, value: u64) {
self.rdi = value;
}
fn set_return_value(&mut self, _value: u64) {
todo!()
fn set_return_value(&mut self, value: u64) {
self.rax = value;
}
fn set_user_ip(&mut self, _value: usize) {
todo!()
fn set_user_ip(&mut self, value: usize) {
self.rip = value as _;
}
fn set_user_sp(&mut self, _value: usize) {
todo!()
fn set_user_sp(&mut self, value: usize) {
self.rsp = value as _;
}
}

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