diff --git a/src/arch/x86_64.rs b/src/arch/x86_64.rs index 5fbac9f49d..d4e1ec6e3e 100644 --- a/src/arch/x86_64.rs +++ b/src/arch/x86_64.rs @@ -27,26 +27,24 @@ impl Arch for X8664Arch { #[inline(always)] unsafe fn invalidate(address: VirtualAddress) { - //TODO: invlpg address - unimplemented!(); + asm!("invlpg [{0}]", in(reg) address.data()); } #[inline(always)] unsafe fn invalidate_all() { - //TODO: mov cr3, cr3 - unimplemented!(); + Self::set_table(Self::table()); } #[inline(always)] unsafe fn table() -> PhysicalAddress { - //TODO: return cr3 - unimplemented!(); + let address: usize; + asm!("mov rax, cr3", out("rax") address); + PhysicalAddress::new(address) } #[inline(always)] unsafe fn set_table(address: PhysicalAddress) { - //TODO: mov cr3, address - unimplemented!(); + asm!("mov cr3, rax", in("rax") address.data()); } } diff --git a/src/lib.rs b/src/lib.rs index b174223b35..9cf7b30597 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,5 @@ +#![feature(asm)] + pub use crate::{ arch::Arch, arch::emulate::*,