瀏覽代碼

sh: Fix up stack overflow check with ftrace disabled.

Presently the STACK_CHECK() code is called in to multiple times, although
it's only necessary from the mcount entry. The code still attempts to
treat the nop case as an ftrace path resulting in superfluous code flow
for the case where ftrace is disabled. And finally, this also fixes up
references to a few undefined symbols when FUNCTION_TRACER=n.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Paul Mundt 16 年之前
父節點
當前提交
e460ab27b6
共有 1 個文件被更改,包括 40 次插入36 次删除
  1. 40 36
      arch/sh/lib/mcount.S

+ 40 - 36
arch/sh/lib/mcount.S

@@ -1,7 +1,7 @@
 /*
  * arch/sh/lib/mcount.S
  *
- *  Copyright (C) 2008  Paul Mundt
+ *  Copyright (C) 2008, 2009  Paul Mundt
  *  Copyright (C) 2008, 2009  Matt Fleming
  *
  * This file is subject to the terms and conditions of the GNU General Public
@@ -86,13 +86,18 @@
 	.type	mcount,@function
 _mcount:
 mcount:
+	STACK_CHECK()
+
+#ifndef CONFIG_FUNCTION_TRACER
+	rts
+	 nop
+#else
 #ifndef CONFIG_DYNAMIC_FTRACE
 	mov.l	.Lfunction_trace_stop, r0
 	mov.l	@r0, r0
 	tst	r0, r0
 	bf	ftrace_stub
 #endif
-	STACK_CHECK()
 
 	MCOUNT_ENTER()
 
@@ -174,8 +179,6 @@ ftrace_caller:
 	tst	r0, r0
 	bf	ftrace_stub
 
-	STACK_CHECK()
-
 	MCOUNT_ENTER()
 
 	.globl ftrace_call
@@ -211,38 +214,6 @@ ftrace_stub:
 	rts
 	 nop
 
-#ifdef CONFIG_STACK_DEBUG
-	.globl	stack_panic
-stack_panic:
-	mov.l	.Ldump_stack, r0
-	jsr	@r0
-	 nop
-
-	mov.l	.Lpanic, r0
-	jsr	@r0
-	 mov.l	.Lpanic_s, r4
-
-	rts
-	 nop
-
-	.align 2
-.L_ebss:
-	.long	_ebss
-.L_init_thread_union:
-	.long	init_thread_union
-.Lpanic:
-	.long	panic
-.Lpanic_s:
-	.long	.Lpanic_str
-.Ldump_stack:
-	.long	dump_stack
-
-	.section	.rodata
-	.align 2
-.Lpanic_str:
-	.string "Stack error"
-#endif /* CONFIG_STACK_DEBUG */
-
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 	.globl	ftrace_graph_caller
 ftrace_graph_caller:
@@ -304,3 +275,36 @@ return_to_handler:
 .Lftrace_return_to_handler:
 	.long	ftrace_return_to_handler
 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
+#endif /* CONFIG_FUNCTION_TRACER */
+
+#ifdef CONFIG_STACK_DEBUG
+	.globl	stack_panic
+stack_panic:
+	mov.l	.Ldump_stack, r0
+	jsr	@r0
+	 nop
+
+	mov.l	.Lpanic, r0
+	jsr	@r0
+	 mov.l	.Lpanic_s, r4
+
+	rts
+	 nop
+
+	.align 2
+.L_ebss:
+	.long	_ebss
+.L_init_thread_union:
+	.long	init_thread_union
+.Lpanic:
+	.long	panic
+.Lpanic_s:
+	.long	.Lpanic_str
+.Ldump_stack:
+	.long	dump_stack
+
+	.section	.rodata
+	.align 2
+.Lpanic_str:
+	.string "Stack error"
+#endif /* CONFIG_STACK_DEBUG */