diff --git a/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S b/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S index e1396522056ac8e859a38290e55f3db62a42f498..ccd3254255a7cb89b6b8124fb4d82c44efed48d5 100644 --- a/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S +++ b/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S @@ -123,8 +123,15 @@ set_user_context: str x1, [x2, #4] ldr x1, [x0, #8] str x1, [x2, #8] + + mov x3, x2 + dc cvau, x3 + add x3, x3, #8 + dc cvau, x3 + dsb sy ic ialluis dsb sy + msr sp_el0, x2 ret /* @@ -361,12 +368,15 @@ user_do_signal: str w1, [sp] ldr w1, [x0, #4] str w1, [sp, #4] - ic ialluis - dsb sy mov x9, sp /* lwp_sigreturn */ mov x0, sp + dc cvau, x0 + dsb sy + ic ialluis + dsb sy + msr spsel, #1 mrs x1, elr_el1 diff --git a/components/lwp/arch/arm/cortex-a/lwp_gcc.S b/components/lwp/arch/arm/cortex-a/lwp_gcc.S index 2c0d78abc1377d6326580e204c30ee97d4a76edd..e1240ad1b3fc43091e70f998dacad79b51b0df9e 100644 --- a/components/lwp/arch/arm/cortex-a/lwp_gcc.S +++ b/components/lwp/arch/arm/cortex-a/lwp_gcc.S @@ -56,10 +56,21 @@ set_user_context: str r1, [sp, #4] ldr r1, [r0, #8] str r1, [sp, #8] - mov lr, sp - mov r0, #0 + + mov r1, sp + mcr p15, 0, r1, c7, c11, 1 ;//dc cmvau + add r1, #4 + mcr p15, 0, r1, c7, c11, 1 ;//dc cmvau + add r1, #4 + mcr p15, 0, r1, c7, c11, 1 ;//dc cmvau + dsb + isb mcr p15, 0, r0, c7, c5, 0 ;//iciallu dsb + isb + + mov lr, sp + mov r0, #0 cps #Mode_SVC mov pc, lr @@ -201,10 +212,17 @@ lwp_check_debug: str r1, [sp] ldr r1, [r0, #4] str r1, [sp, #4] - mov r0, #0 + + mov r1, sp + mcr p15, 0, r1, c7, c11, 1 ;//dc cmvau + add r1, #4 + mcr p15, 0, r1, c7, c11, 1 ;//dc cmvau + dsb + isb mcr p15, 0, r0, c7, c5, 0 ;//iciallu dsb isb + mov r0, sp /* lwp_debugreturn */ cps #Mode_SVC @@ -257,9 +275,16 @@ user_do_signal: str r1, [sp] ldr r1, [r0, #4] str r1, [sp, #4] - mov r0, #0 + + mov r1, sp + mcr p15, 0, r1, c7, c11, 1 ;//dc cmvau + add r1, #4 + mcr p15, 0, r1, c7, c11, 1 ;//dc cmvau + dsb + isb mcr p15, 0, r0, c7, c5, 0 ;//iciallu dsb + isb mov r5, sp ;//if func is 0 mov lr, sp diff --git a/components/lwp/lwp_signal.c b/components/lwp/lwp_signal.c index 0ec1c6eb0e560ff4476d36e741fa6ad82669998e..33eb0d6a778d055d9a3ee5fcaaf4583f5a1f9bed 100644 --- a/components/lwp/lwp_signal.c +++ b/components/lwp/lwp_signal.c @@ -303,6 +303,11 @@ lwp_sighandler_t lwp_sighandler_get(int sig) } out: rt_hw_interrupt_enable(level); + + if (func == (lwp_sighandler_t)SIG_IGN) + { + func = RT_NULL; + } return func; }