adding time syscall

This commit is contained in:
Able 2022-02-26 07:47:44 -06:00
parent 3ce2026d32
commit 65259360eb

View file

@ -8,6 +8,7 @@ pub struct HostExternals {}
const ADD_FUNC_INDEX: usize = 0;
const SEND_SIGNAL_INDEX: usize = 1;
const GET_TIME_INDEX: usize = 2;
impl Externals for HostExternals {
fn invoke_index(
@ -31,6 +32,17 @@ impl Externals for HostExternals {
let ret = RuntimeValue::I32(0);
Ok(Some(ret))
}
GET_TIME_INDEX => {
use core::sync::atomic::Ordering::*;
x86_64::instructions::interrupts::disable();
let tick_time = crate::kmain::TICK.load(Relaxed);
x86_64::instructions::interrupts::enable();
let ret = RuntimeValue::I64(tick_time.try_into().unwrap());
Ok(Some(ret))
}
_ => panic!("Unimplemented function at {}", index),
}
}
@ -41,6 +53,8 @@ impl HostExternals {
let (params, ret_ty): (&[ValueType], Option<ValueType>) = match index {
ADD_FUNC_INDEX => (&[ValueType::I32, ValueType::I32], Some(ValueType::I32)),
SEND_SIGNAL_INDEX => (&[ValueType::I32, ValueType::I32], Some(ValueType::I32)),
GET_TIME_INDEX => (&[], Some(ValueType::I32)),
_ => return false,
};
signature.params() == params && signature.return_type() == ret_ty