1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 13:57:35 +00:00

Kernel/aarch64: Handle instruction aborts

To detect instruction aborts, a helper to Registers.h is added, and used
in Interrupts.cpp. Additionally, the PageFault class gets a setter to
set the PageFaults m_is_instruction_fetch bool, and is also used in
Interrupts.cpp.
This commit is contained in:
Timon Kruiper 2023-01-29 15:10:41 +01:00 committed by Linus Groh
parent daf7f43135
commit ecf45e191e
3 changed files with 11 additions and 1 deletions

View file

@ -73,6 +73,9 @@ static PageFault page_fault_from_exception_syndrome_register(VirtualAddress faul
// FIXME: Set correct mode
fault.set_mode(ExecutionMode::Kernel);
if (Aarch64::exception_class_is_instruction_abort(esr_el1.EC))
fault.set_instruction_fetch(true);
return fault;
}
@ -92,7 +95,7 @@ extern "C" void exception_common(Kernel::TrapFrame* trap_frame)
dump_exception_syndrome_register(esr_el1);
}
if (Aarch64::exception_class_is_data_abort(esr_el1.EC)) {
if (Aarch64::exception_class_is_data_abort(esr_el1.EC) || Aarch64::exception_class_is_instruction_abort(esr_el1.EC)) {
auto page_fault = page_fault_from_exception_syndrome_register(VirtualAddress(fault_address), esr_el1);
page_fault.handle(*trap_frame->regs);
} else {