From cdd401552ea0dedf06a645378e2607c5ac30f618 Mon Sep 17 00:00:00 2001 From: Mark Poliakov Date: Fri, 22 Dec 2023 12:41:45 +0200 Subject: [PATCH] arch/x86-64: implement IrqFrame signal frame --- src/arch/x86_64/exception.rs | 39 +++++++++++++++++++++++++++--------- src/arch/x86_64/mod.rs | 2 +- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/arch/x86_64/exception.rs b/src/arch/x86_64/exception.rs index bf7ea3f0..7ebff9d7 100644 --- a/src/arch/x86_64/exception.rs +++ b/src/arch/x86_64/exception.rs @@ -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 _; } } diff --git a/src/arch/x86_64/mod.rs b/src/arch/x86_64/mod.rs index f186fe91..da60007a 100644 --- a/src/arch/x86_64/mod.rs +++ b/src/arch/x86_64/mod.rs @@ -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};