csky: Fixup CONFIG_DEBUG_RSEQ
authorGuo Ren <guoren@linux.alibaba.com>
Tue, 26 May 2020 06:34:50 +0000 (06:34 +0000)
committerGuo Ren <guoren@linux.alibaba.com>
Thu, 28 May 2020 00:18:36 +0000 (00:18 +0000)
Put the rseq_syscall check point at the prologue of the syscall
will break the a0 ... a7. This will casue system call bug when
DEBUG_RSEQ is enabled.

So move it to the epilogue of syscall, but before syscall_trace.

Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
arch/csky/kernel/entry.S

index 9595e86..f138003 100644 (file)
@@ -128,15 +128,11 @@ tlbop_end 1
 ENTRY(csky_systemcall)
        SAVE_ALL TRAP0_SIZE
        zero_fp
-#ifdef CONFIG_RSEQ_DEBUG
-       mov     a0, sp
-       jbsr    rseq_syscall
-#endif
        psrset  ee, ie
 
        lrw     r9, __NR_syscalls
        cmphs   syscallid, r9           /* Check nr of syscall */
-       bt      ret_from_exception
+       bt      1f
 
        lrw     r9, sys_call_table
        ixw     r9, syscallid
@@ -162,6 +158,11 @@ ENTRY(csky_systemcall)
        jsr     syscallid
 #endif
        stw     a0, (sp, LSAVE_A0)      /* Save return value */
+1:
+#ifdef CONFIG_DEBUG_RSEQ
+       mov     a0, sp
+       jbsr    rseq_syscall
+#endif
        jmpi    ret_from_exception
 
 csky_syscall_trace:
@@ -187,6 +188,10 @@ csky_syscall_trace:
 #endif
        stw     a0, (sp, LSAVE_A0)      /* Save return value */
 
+#ifdef CONFIG_DEBUG_RSEQ
+       mov     a0, sp
+       jbsr    rseq_syscall
+#endif
        mov     a0, sp                  /* right now, sp --> pt_regs */
        jbsr    syscall_trace_exit
        br      ret_from_exception