sh: Setup the frame register in asm code
[deliverable/linux.git] / arch / sh / kernel / entry-common.S
index 5b7efc4016fa549be0cac212fc51e3e5866e9d37..b3b215fb21f7fe70cfc9f9e33d3466f8c84f7ba1 100644 (file)
@@ -45,7 +45,7 @@
  */
 
 #if defined(CONFIG_PREEMPT)
-#  define preempt_stop()       cli
+#  define preempt_stop()       cli ; TRACE_IRQS_OFF
 #else
 #  define preempt_stop()
 #  define resume_kernel                __restore_all
        .align  2
 ENTRY(exception_error)
        !
-#ifdef CONFIG_TRACE_IRQFLAGS
-       mov.l   2f, r0
-       jsr     @r0
-        nop
-#endif
+       TRACE_IRQS_ON
        sti
        mov.l   1f, r0
        jmp     @r0
@@ -67,22 +63,23 @@ ENTRY(exception_error)
 
        .align  2
 1:     .long   do_exception_error
-#ifdef CONFIG_TRACE_IRQFLAGS
-2:     .long   trace_hardirqs_on
-#endif
 
        .align  2
 ret_from_exception:
        preempt_stop()
-#ifdef CONFIG_TRACE_IRQFLAGS
-       mov.l   4f, r0
-       jsr     @r0
-        nop
-#endif
 ENTRY(ret_from_irq)
        !
        mov     #OFF_SR, r0
        mov.l   @(r0,r15), r0   ! get status register
+
+       shlr2   r0
+       and     #0x3c, r0
+       cmp/eq  #0x3c, r0
+       bt      9f
+       TRACE_IRQS_ON
+9:
+       mov     #OFF_SR, r0
+       mov.l   @(r0,r15), r0   ! get status register
        shll    r0
        shll    r0              ! kernel space?
        get_current_thread_info r8, r0
@@ -125,13 +122,9 @@ noresched:
 ENTRY(resume_userspace)
        ! r8: current_thread_info
        cli
-#ifdef CONFIG_TRACE_IRQFLAGS
-       mov.l   5f, r0
-       jsr     @r0
-        nop
-#endif
+       TRACE_IRQS_OfF
        mov.l   @(TI_FLAGS,r8), r0              ! current_thread_info->flags
-       tst     #_TIF_WORK_MASK, r0
+       tst     #(_TIF_WORK_MASK & 0xff), r0
        bt/s    __restore_all
         tst    #_TIF_NEED_RESCHED, r0
 
@@ -156,14 +149,10 @@ work_resched:
        jsr     @r1                             ! schedule
         nop
        cli
-#ifdef CONFIG_TRACE_IRQFLAGS
-       mov.l   5f, r0
-       jsr     @r0
-        nop
-#endif
+       TRACE_IRQS_OFF
        !
        mov.l   @(TI_FLAGS,r8), r0              ! current_thread_info->flags
-       tst     #_TIF_WORK_MASK, r0
+       tst     #(_TIF_WORK_MASK & 0xff), r0
        bt      __restore_all
        bra     work_pending
         tst    #_TIF_NEED_RESCHED, r0
@@ -172,23 +161,15 @@ work_resched:
 1:     .long   schedule
 2:     .long   do_notify_resume
 3:     .long   resume_userspace
-#ifdef CONFIG_TRACE_IRQFLAGS
-4:     .long   trace_hardirqs_on
-5:     .long   trace_hardirqs_off
-#endif
 
        .align  2
 syscall_exit_work:
        ! r0: current_thread_info->flags
        ! r8: current_thread_info
-       tst     #_TIF_WORK_SYSCALL_MASK, r0
+       tst     #(_TIF_WORK_SYSCALL_MASK & 0xff), r0
        bt/s    work_pending
         tst    #_TIF_NEED_RESCHED, r0
-#ifdef CONFIG_TRACE_IRQFLAGS
-       mov.l   5f, r0
-       jsr     @r0
-        nop
-#endif
+       TRACE_IRQS_ON
        sti
        mov     r15, r4
        mov.l   8f, r0                  ! do_syscall_trace_leave
@@ -304,31 +285,36 @@ ret_from_fork:
  * system calls and debug traps through their respective jump tables.
  */
 ENTRY(system_call)
+       setup_frame_reg
 #if !defined(CONFIG_CPU_SH2)
        mov.l   1f, r9
        mov.l   @r9, r8         ! Read from TRA (Trap Address) Register
 #endif
+
+       mov     #OFF_TRA, r10
+       add     r15, r10
+       mov.l   r8, @r10                ! set TRA value to tra
+
        /*
         * Check the trap type
         */
        mov     #((0x20 << 2) - 1), r9
        cmp/hi  r9, r8
        bt/s    debug_trap              ! it's a debug trap..
-        mov    #OFF_TRA, r9
-       add     r15, r9
-       mov.l   r8, @r9                 ! set TRA value to tra
-#ifdef CONFIG_TRACE_IRQFLAGS
-       mov.l   5f, r10
-       jsr     @r10
         nop
-#endif
+
+       TRACE_IRQS_ON
        sti
 
        !
        get_current_thread_info r8, r10
        mov.l   @(TI_FLAGS,r8), r8
-       mov     #_TIF_WORK_SYSCALL_MASK, r10
+       mov     #(_TIF_WORK_SYSCALL_MASK & 0xff), r10
+       mov     #(_TIF_WORK_SYSCALL_MASK >> 8), r9
        tst     r10, r8
+       shll8   r9
+       bf      syscall_trace_entry
+       tst     r9, r8
        bf      syscall_trace_entry
        !
        mov.l   2f, r8                  ! Number of syscalls
@@ -347,15 +333,15 @@ syscall_call:
        !
 syscall_exit:
        cli
-#ifdef CONFIG_TRACE_IRQFLAGS
-       mov.l   6f, r0
-       jsr     @r0
-        nop
-#endif
+       TRACE_IRQS_OFF
        !
        get_current_thread_info r8, r0
        mov.l   @(TI_FLAGS,r8), r0              ! current_thread_info->flags
-       tst     #_TIF_ALLWORK_MASK, r0
+       tst     #(_TIF_ALLWORK_MASK & 0xff), r0
+       mov     #(_TIF_ALLWORK_MASK >> 8), r1
+       bf      syscall_exit_work
+       shlr8   r0
+       tst     r0, r1
        bf      syscall_exit_work
        bra     __restore_all
         nop
@@ -365,53 +351,5 @@ syscall_exit:
 #endif
 2:     .long   NR_syscalls
 3:     .long   sys_call_table
-#ifdef CONFIG_TRACE_IRQFLAGS
-5:     .long   trace_hardirqs_on
-6:     .long   trace_hardirqs_off
-#endif
 7:     .long   do_syscall_trace_enter
 8:     .long   do_syscall_trace_leave
-
-#ifdef CONFIG_FUNCTION_TRACER
-       .align 2
-       .globl  _mcount
-       .type   _mcount,@function
-       .globl  mcount
-       .type   mcount,@function
-_mcount:
-mcount:
-       mov.l   r4, @-r15
-       mov.l   r5, @-r15
-       mov.l   r6, @-r15
-       mov.l   r7, @-r15
-       sts.l   pr, @-r15
-
-       mov.l   @(20,r15),r4
-       sts     pr, r5
-
-       mov.l   1f, r6
-       mov.l   ftrace_stub, r7 
-       cmp/eq  r6, r7
-       bt      skip_trace
-
-       mov.l   @r6, r6
-       jsr     @r6
-        nop
-
-skip_trace:
-
-       lds.l   @r15+, pr
-       mov.l   @r15+, r7
-       mov.l   @r15+, r6
-       mov.l   @r15+, r5
-       rts
-        mov.l  @r15+, r4
-
-       .align 2
-1:     .long   ftrace_trace_function
-
-       .globl  ftrace_stub
-ftrace_stub:
-       rts
-        nop
-#endif /* CONFIG_FUNCTION_TRACER */
This page took 0.031574 seconds and 5 git commands to generate.