Fix boot loop by enabling the NXE bit in the EFER register

master
Philipp Oppermann 8 years ago
parent 0ce2b46ad1
commit ffaddeb84e

@ -45,12 +45,23 @@ pub extern fn rust_main(multiboot_information_address: usize) {
kernel_start as usize, kernel_end as usize, multiboot_start, kernel_start as usize, kernel_end as usize, multiboot_start,
multiboot_end, memory_map_tag.memory_areas()); multiboot_end, memory_map_tag.memory_areas());
enable_nxe_bit();
memory::remap_the_kernel(&mut frame_allocator, boot_info); memory::remap_the_kernel(&mut frame_allocator, boot_info);
println!("It did not crash!"); println!("It did not crash!");
loop {} 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 = "eh_personality"] extern fn eh_personality() {}
#[lang = "panic_fmt"] #[lang = "panic_fmt"]

Loading…
Cancel
Save