From c7802cef25496c12c4b7a0ca30263c6de373bf65 Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Mon, 30 Jan 2023 10:32:37 +0100 Subject: [PATCH] Kernel/aarch64: Handle exceptions from lower exception level (EL) When we execute in userspace, the exception level is EL0, so to handle exceptions, such as interrupts, and syscalls, we need to add handlers to vector_table.S. For now we only support running userspace applications in AArch64 mode, so this commit only adds the handlers for that mode. --- Kernel/Arch/aarch64/vector_table.S | 32 ++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/Kernel/Arch/aarch64/vector_table.S b/Kernel/Arch/aarch64/vector_table.S index 80a44f3d5b..daa5f3b127 100644 --- a/Kernel/Arch/aarch64/vector_table.S +++ b/Kernel/Arch/aarch64/vector_table.S @@ -128,10 +128,10 @@ vector_table_el1: table_entry system_error_current_elsp_elx // Exceptions from Lower EL, where causing application is in AArch64 mode - unimplemented_entry - unimplemented_entry - unimplemented_entry - unimplemented_entry + table_entry synchronous_lower_el + table_entry irq_lower_el + table_entry fiq_lower_el + table_entry system_error_lower_el // Exceptions from Lower EL, where causing application is in AArch32 mode unimplemented_entry @@ -187,6 +187,30 @@ system_error_current_elsp_el0: restore_previous_context eret +synchronous_lower_el: + save_current_context + bl exception_common + restore_previous_context + eret + +irq_lower_el: + save_current_context + bl handle_interrupt + restore_previous_context + eret + +fiq_lower_el: + save_current_context + bl exception_common + restore_previous_context + eret + +system_error_lower_el: + save_current_context + bl exception_common + restore_previous_context + eret + .global restore_context_and_eret restore_context_and_eret: restore_previous_context