diff --git a/Kernel/Arch/aarch64/Interrupts.cpp b/Kernel/Arch/aarch64/Interrupts.cpp index 2e2b899c5e..c8f1dd5e92 100644 --- a/Kernel/Arch/aarch64/Interrupts.cpp +++ b/Kernel/Arch/aarch64/Interrupts.cpp @@ -18,6 +18,17 @@ namespace Kernel { +static void dump_exception_syndrome_register(Aarch64::ESR_EL1 const& esr_el1) +{ + dbgln("esr_el1: EC({:#b}) IL({:#b}) ISS({:#b}) ISS2({:#b})", esr_el1.EC, esr_el1.IL, esr_el1.ISS, esr_el1.ISS2); + dbgln("Exception Class: {}", Aarch64::exception_class_to_string(esr_el1.EC)); + if (Aarch64::exception_class_has_set_far(esr_el1.EC)) + dbgln("Faulting Virtual Address: 0x{:x}", Aarch64::FAR_EL1::read().virtual_address); + + if (Aarch64::exception_class_is_data_abort(esr_el1.EC)) + dbgln("Data Fault Status Code: {}", Aarch64::data_fault_status_code_to_string(esr_el1.ISS)); +} + void dump_registers(RegisterState const& regs) { dbgln(" x0={:p} x1={:p} x2={:p} x3={:p} x4={:p}", regs.x[0], regs.x[1], regs.x[2], regs.x[3], regs.x[4]); @@ -37,23 +48,8 @@ void dump_registers(RegisterState const& regs) dbgln("tpidr_el0: 0x{:x}", regs.tpidr_el0); dbgln("sp_el0: 0x{:x}", regs.sp_el0); - constexpr bool print_backtrace = true; - if constexpr (print_backtrace) { - auto const* symbol = symbolicate_kernel_address(regs.elr_el1); - dbgln("{:p} {} +{}", regs.elr_el1, (symbol ? symbol->name : "(k?)"), (symbol ? regs.elr_el1 - symbol->address : 0)); - dump_backtrace_from_base_pointer(regs.x[29]); - } -} - -static void dump_exception_syndrome_register(Aarch64::ESR_EL1 const& esr_el1) -{ - dbgln("esr_el1: EC({:#b}) IL({:#b}) ISS({:#b}) ISS2({:#b})", esr_el1.EC, esr_el1.IL, esr_el1.ISS, esr_el1.ISS2); - dbgln("Exception Class: {}", Aarch64::exception_class_to_string(esr_el1.EC)); - if (Aarch64::exception_class_has_set_far(esr_el1.EC)) - dbgln("Faulting Virtual Address: 0x{:x}", Aarch64::FAR_EL1::read().virtual_address); - - if (Aarch64::exception_class_is_data_abort(esr_el1.EC)) - dbgln("Data Fault Status Code: {}", Aarch64::data_fault_status_code_to_string(esr_el1.ISS)); + auto esr_el1 = Kernel::Aarch64::ESR_EL1::read(); + dump_exception_syndrome_register(esr_el1); } static PageFault page_fault_from_exception_syndrome_register(VirtualAddress fault_address, Aarch64::ESR_EL1 esr_el1) @@ -92,7 +88,6 @@ extern "C" void exception_common(Kernel::TrapFrame* trap_frame) if constexpr (print_state) { dbgln("Exception Generated by processor!"); dump_registers(*trap_frame->regs); - dump_exception_syndrome_register(esr_el1); } if (Aarch64::exception_class_is_data_abort(esr_el1.EC) || Aarch64::exception_class_is_instruction_abort(esr_el1.EC)) { @@ -100,7 +95,6 @@ extern "C" void exception_common(Kernel::TrapFrame* trap_frame) page_fault.handle(*trap_frame->regs); } else { dump_registers(*trap_frame->regs); - dump_exception_syndrome_register(esr_el1); PANIC("Unexpected exception!"); }