diff --git a/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S b/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S index 3a64d714126219d383bc155ce8094a1c4a140144..ef15f104ec9565d9c7c0e4c4d8ba7959370dc04b 100644 --- a/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S +++ b/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S @@ -371,56 +371,6 @@ ret_to_user: 1: eret -.global lwp_check_exit -lwp_check_exit: - SAVE_FPU sp - stp x0, x1, [sp, #-0x10]! - stp x2, x3, [sp, #-0x10]! - stp x4, x5, [sp, #-0x10]! - stp x6, x7, [sp, #-0x10]! - stp x10, x11, [sp, #-0x10]! - stp x12, x13, [sp, #-0x10]! - stp x14, x15, [sp, #-0x10]! - stp x16, x17, [sp, #-0x10]! - stp x18, x19, [sp, #-0x10]! - stp x20, x21, [sp, #-0x10]! - stp x22, x23, [sp, #-0x10]! - stp x24, x25, [sp, #-0x10]! - stp x26, x27, [sp, #-0x10]! - stp x28, x29, [sp, #-0x10]! - mrs x0, fpcr - mrs x1, fpsr - stp x0, x1, [sp, #-0x10]! - stp x29, x30, [sp, #-0x10]! - - bl lwp_check_exit_request - cmp x0, xzr - bne 1f - ldp x29, x30, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - msr fpcr, x0 - msr fpsr, x1 - ldp x28, x29, [sp], #0x10 - ldp x26, x27, [sp], #0x10 - ldp x24, x25, [sp], #0x10 - ldp x22, x23, [sp], #0x10 - ldp x20, x21, [sp], #0x10 - ldp x18, x19, [sp], #0x10 - ldp x16, x17, [sp], #0x10 - ldp x14, x15, [sp], #0x10 - ldp x12, x13, [sp], #0x10 - ldp x10, x11, [sp], #0x10 - ldp x6, x7, [sp], #0x10 - ldp x4, x5, [sp], #0x10 - ldp x2, x3, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - RESTORE_FPU sp - - br x30 -1: - mov x0, xzr - b sys_exit - /* struct rt_hw_exp_stack { @@ -493,9 +443,13 @@ lwp_check_debug: stp x0, x1, [sp, #-0x10]! stp x29, x30, [sp, #-0x10]! + bl lwp_check_exit_request + cbz x0, 1f + mov x0, xzr + b sys_exit +1: bl dbg_check_suspend - cmp w0, wzr - beq lwp_check_debug_quit + cbz w0, lwp_check_debug_quit mrs x2, sp_el0 sub x2, x2, #8 diff --git a/components/lwp/arch/arm/cortex-a/lwp_gcc.S b/components/lwp/arch/arm/cortex-a/lwp_gcc.S index 6284442c89723e76917dbfa447c57e6f98f368e1..81d1418c3e8eaffe224eac0e5b91c4c86d5990ea 100644 --- a/components/lwp/arch/arm/cortex-a/lwp_gcc.S +++ b/components/lwp/arch/arm/cortex-a/lwp_gcc.S @@ -208,18 +208,6 @@ ret_to_user: movs pc, lr #ifdef RT_USING_LWP -.global lwp_check_exit -lwp_check_exit: - push {r0 - r12, lr} - bl lwp_check_exit_request - cmp r0, #0 - beq 1f - mov r0, #0 - bl sys_exit -1: - pop {r0 - r12, pc} -#endif - .global lwp_check_debug lwp_check_debug: ldr r0, =rt_dbg_ops @@ -229,6 +217,12 @@ lwp_check_debug: bx lr 1: push {r0 - r12, lr} + bl lwp_check_exit_request + cmp r0, #0 + beq 2f + mov r0, #0 + bl sys_exit +2: bl dbg_check_suspend cmp r0, #0 beq lwp_check_debug_quit @@ -342,6 +336,7 @@ lwp_thread_return: mov r0, #0 mov r7, #0x01 svc #0 +#endif .global check_vfp check_vfp: diff --git a/libcpu/aarch64/common/context_gcc.S b/libcpu/aarch64/common/context_gcc.S index 1c0b5711dfb20c533952eeba05a08657756470e7..afb92b30a5bd7a7ba3f68efa9f2ffa9728e71cec 100644 --- a/libcpu/aarch64/common/context_gcc.S +++ b/libcpu/aarch64/common/context_gcc.S @@ -145,8 +145,7 @@ rt_hw_get_gtimer_frq: MOV SP, X0 #ifdef RT_USING_LWP - bl lwp_check_debug - BL lwp_check_exit + BL lwp_check_debug #endif LDP X2, X3, [SP], #0x10 /* SPSR and ELR. */ @@ -188,11 +187,8 @@ rt_hw_get_gtimer_frq: #ifdef RT_USING_LWP bl lwp_check_debug - bl lwp_check_exit #endif - BL lwp_check_exit - BL rt_thread_self MOV X19, X0 BL lwp_mmu_switch @@ -235,7 +231,9 @@ rt_hw_get_gtimer_frq: .macro RESTORE_CONTEXT_WITHOUT_MMU_SWITCH /* the SP is already ok */ - BL lwp_check_exit +#ifdef RT_USING_LWP + bl lwp_check_debug +#endif LDP X2, X3, [SP], #0x10 /* SPSR and ELR. */ diff --git a/libcpu/arm/cortex-a/context_gcc.S b/libcpu/arm/cortex-a/context_gcc.S index 9549129c0d4c969c56db4e62a774dc15992b6f34..f537f003cf52e81bf577e6dd28c46b2b12aaccaf 100644 --- a/libcpu/arm/cortex-a/context_gcc.S +++ b/libcpu/arm/cortex-a/context_gcc.S @@ -248,7 +248,6 @@ rt_hw_context_switch_exit: #ifdef RT_USING_LWP bl lwp_check_debug - bl lwp_check_exit #endif #ifdef RT_USING_LWP diff --git a/libcpu/arm/cortex-a/start_gcc.S b/libcpu/arm/cortex-a/start_gcc.S index 28dd4be3a9ea21cf74629006871bcd8fa313ce5c..3e4083d7f0832f4a9555851b5526c4e88aff80ba 100644 --- a/libcpu/arm/cortex-a/start_gcc.S +++ b/libcpu/arm/cortex-a/start_gcc.S @@ -407,7 +407,7 @@ vector_irq: mrs r4, spsr sub r5, lr, #4 cps #Mode_SVC - bl lwp_check_exit + bl lwp_check_debug and r6, r4, #0x1f cmp r6, #0x10 bne 1f @@ -507,7 +507,6 @@ rt_hw_context_switch_interrupt_do: #ifdef RT_USING_LWP bl lwp_check_debug - bl lwp_check_exit #endif #ifdef RT_USING_LWP