X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/6be108db01439d3463342689446e457a315d6705..43487eff262637a59a4c2c0272d7c4a824af3944:/lunaix-os/arch/aarch64/exception/context.S?ds=sidebyside diff --git a/lunaix-os/arch/aarch64/exception/context.S b/lunaix-os/arch/aarch64/exception/context.S index cbb7cf4..e30f72d 100644 --- a/lunaix-os/arch/aarch64/exception/context.S +++ b/lunaix-os/arch/aarch64/exception/context.S @@ -1,6 +1,6 @@ #define __ASM__ #include -#include "hart_field.inc" +#include "hart_fields.inc" .section .text @@ -8,10 +8,12 @@ .globl _aa64_switch_task _aa64_evec_prehandle: - stp xzr, elr, [sp, #-16]! # push {xzr , elr} - stp spsr, xzr, [sp, #-16]! # push {spsr, xzr} + // reservation for struct exec_param + sub sp, sp, #8 // push xzr + sub sp, sp, #16 // push {sp_el0, link} + sub sp, sp, #16 // push {spsr, parent_hart} - stp lr, fp, [sp, #-16]! # push {x31-x1} + stp lr, fp, [sp, #-16]! //push {x31-x1} stp x28, x27, [sp, #-16]! stp x26, x25, [sp, #-16]! stp x24, x23, [sp, #-16]! @@ -26,21 +28,24 @@ stp x6, x5, [sp, #-16]! stp x4, x3, [sp, #-16]! stp x2, x1, [sp, #-16]! - stp x0, xzr, [sp, #-16]! # push {x0, xzr} + stp x0, xzr, [sp, #-16]! // push {x0, xzr} add x1, sp, #hart_execp mrs x0, SP_EL0 str x0, [x1, #execp_spel0_saved] - - sub x0, sp, #hart_end - str x0, [x1, #execp_spel1_saved] + + mrs x0, ELR_E1 + str x0, [x1, #execp_link] + + mrs x0, SPSR_EL1 + str x0, [x1, #execp_spsr] mov x0, sp bl handle_exception do_eret: - mov sp, x0 + add sp, x0, xzr add x1, x0, #hart_execp @@ -72,12 +77,12 @@ ldp x27, x28, [sp, #16]! ldp fp, lr, [sp, #16]! - # sp now point to the start of exec_param + // sp now point to the start of exec_param - ldr sp, [sp, #execp_spel1_saved] + sub sp, sp, #execp_end eret _aa64_switch_task: - # TODO + // TODO b do_eret \ No newline at end of file