From ffaddeb84e907cbc07077370abf1c376ecec480f Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Tue, 18 Apr 2017 12:32:59 +0200 Subject: [PATCH] Fix boot loop by enabling the NXE bit in the EFER register --- src/lib.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index c56d602..51d0295 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -45,12 +45,23 @@ pub extern fn rust_main(multiboot_information_address: usize) { kernel_start as usize, kernel_end as usize, multiboot_start, multiboot_end, memory_map_tag.memory_areas()); + enable_nxe_bit(); memory::remap_the_kernel(&mut frame_allocator, boot_info); println!("It did not crash!"); loop {} } +fn enable_nxe_bit() { + use x86_64::registers::msr::{IA32_EFER, rdmsr, wrmsr}; + + let nxe_bit = 1 << 11; + unsafe { + let efer = rdmsr(IA32_EFER); + wrmsr(IA32_EFER, efer | nxe_bit); + } +} + #[lang = "eh_personality"] extern fn eh_personality() {} #[lang = "panic_fmt"]