OSDN Git Service

Merge branches 'devel-stable', 'entry', 'fixes', 'mach-types', 'misc' and 'smp-hotplu...
[uclinux-h8/linux.git] / arch / arm / kernel / entry-common.S
index 3248cde..bc5bc0a 100644 (file)
@@ -35,12 +35,11 @@ ret_fast_syscall:
        ldr     r1, [tsk, #TI_FLAGS]
        tst     r1, #_TIF_WORK_MASK
        bne     fast_work_pending
-#if defined(CONFIG_IRQSOFF_TRACER)
        asm_trace_hardirqs_on
-#endif
 
        /* perform architecture specific actions before user return */
        arch_ret_to_user r1, lr
+       ct_user_enter
 
        restore_user_regs fast = 1, offset = S_OFF
  UNWIND(.fnend         )
@@ -71,11 +70,11 @@ ENTRY(ret_to_user_from_irq)
        tst     r1, #_TIF_WORK_MASK
        bne     work_pending
 no_work_pending:
-#if defined(CONFIG_IRQSOFF_TRACER)
        asm_trace_hardirqs_on
-#endif
+
        /* perform architecture specific actions before user return */
        arch_ret_to_user r1, lr
+       ct_user_enter save = 0
 
        restore_user_regs fast = 0, offset = 0
 ENDPROC(ret_to_user_from_irq)
@@ -276,7 +275,13 @@ ENDPROC(ftrace_graph_caller_old)
  */
 
 .macro mcount_enter
+/*
+ * This pad compensates for the push {lr} at the call site.  Note that we are
+ * unable to unwind through a function which does not otherwise save its lr.
+ */
+ UNWIND(.pad   #4)
        stmdb   sp!, {r0-r3, lr}
+ UNWIND(.save  {r0-r3, lr})
 .endm
 
 .macro mcount_get_lr reg
@@ -289,6 +294,7 @@ ENDPROC(ftrace_graph_caller_old)
 .endm
 
 ENTRY(__gnu_mcount_nc)
+UNWIND(.fnstart)
 #ifdef CONFIG_DYNAMIC_FTRACE
        mov     ip, lr
        ldmia   sp!, {lr}
@@ -296,17 +302,22 @@ ENTRY(__gnu_mcount_nc)
 #else
        __mcount
 #endif
+UNWIND(.fnend)
 ENDPROC(__gnu_mcount_nc)
 
 #ifdef CONFIG_DYNAMIC_FTRACE
 ENTRY(ftrace_caller)
+UNWIND(.fnstart)
        __ftrace_caller
+UNWIND(.fnend)
 ENDPROC(ftrace_caller)
 #endif
 
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 ENTRY(ftrace_graph_caller)
+UNWIND(.fnstart)
        __ftrace_graph_caller
+UNWIND(.fnend)
 ENDPROC(ftrace_graph_caller)
 #endif
 
@@ -394,6 +405,7 @@ ENTRY(vector_swi)
        mcr     p15, 0, ip, c1, c0              @ update control register
 #endif
        enable_irq
+       ct_user_exit
 
        get_thread_info tsk
        adr     tbl, sys_call_table             @ load syscall table pointer