diff --git a/src/kernel/exception.rs b/src/kernel/exception.rs index 17599f2..b020f6e 100644 --- a/src/kernel/exception.rs +++ b/src/kernel/exception.rs @@ -44,7 +44,7 @@ pub const SC_DEBUG: u8 = 34; pub const CONSOLE_OUTPUT: u8 = 1; // todo : returns new types, not just machine errors and machine ok -pub fn call(exception: ExceptionType, machine: &mut Machine, system: &mut System) -> Result { +pub fn call(exception: &ExceptionType, machine: &mut Machine, system: &mut System) -> Result { match exception { ExceptionType::NoException => todo!(), @@ -66,10 +66,10 @@ fn syscall(machine: &mut Machine, system: &mut System) -> Result Ok(MachineOk::Shutdown), SC_EXIT => { let th = match &system.get_thread_manager().g_current_thread { - Some(th) => th, + Some(th) => th.clone(), None => Err("Current thread is None")? }; - system.get_thread_manager().thread_finish(machine, *th); + system.get_thread_manager().thread_finish(machine, th); Ok(MachineOk::Ok) }, SC_EXEC => todo!(), diff --git a/src/simulator/machine.rs b/src/simulator/machine.rs index 9baf651..166fbce 100644 --- a/src/simulator/machine.rs +++ b/src/simulator/machine.rs @@ -34,6 +34,7 @@ use super::error::MachineOk; /// Textual names of the exceptions that can be generated by user program /// execution, for debugging purpose. /// todo: is this really supposed to stand in machine.rs? +#[derive(Debug)] pub enum ExceptionType { /// Everything ok NoException, @@ -229,7 +230,7 @@ impl Machine { pub fn raise_exception(&mut self, exception: ExceptionType, address : u64, system: &mut System) -> Result{ self.set_status(MachineStatus::SystemMode); // Handle the interruption - match exception::call(exception, self, system) { + match exception::call(&exception, self, system) { Ok(MachineOk::Shutdown) => { self.set_status(MachineStatus::UserMode); return Ok(MachineOk::Shutdown);