mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:07:35 +00:00
Kernel: Replace inline assembly for turning on IA32_EFER.NXE with MSR
This fixes a triple fault that occurs when compiling serenity with the i686 clang toolchain. (The underlying issue is that the old inline assembly did not specify that it clobbered the eax/ecx/edx registers and as such the compiler assumed they were not changed and used their values across it) Co-authored-by: Brian Gianforcaro <bgianf@serenityos.org>
This commit is contained in:
parent
a9e9bd8d84
commit
bc7b0a8986
2 changed files with 3 additions and 5 deletions
|
@ -177,11 +177,8 @@ UNMAP_AFTER_INIT void Processor::cpu_setup()
|
|||
|
||||
if (has_feature(CPUFeature::NX)) {
|
||||
// Turn on IA32_EFER.NXE
|
||||
asm volatile(
|
||||
"movl $0xc0000080, %ecx\n"
|
||||
"rdmsr\n"
|
||||
"orl $0x800, %eax\n"
|
||||
"wrmsr\n");
|
||||
MSR ia32_efer(MSR_IA32_EFER);
|
||||
ia32_efer.set(ia32_efer.get() | 0x800);
|
||||
}
|
||||
|
||||
if (has_feature(CPUFeature::SMEP)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue