Просмотр исходного кода

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 лет назад
Родитель
Сommit
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
  * arch/sh/lib/mcount.S
  *
  *
- *  Copyright (C) 2008  Paul Mundt
+ *  Copyright (C) 2008, 2009  Paul Mundt
  *  Copyright (C) 2008, 2009  Matt Fleming
  *  Copyright (C) 2008, 2009  Matt Fleming
  *
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * This file is subject to the terms and conditions of the GNU General Public
@@ -86,13 +86,18 @@
 	.type	mcount,@function
 	.type	mcount,@function
 _mcount:
 _mcount:
 mcount:
 mcount:
+	STACK_CHECK()
+
+#ifndef CONFIG_FUNCTION_TRACER
+	rts
+	 nop
+#else
 #ifndef CONFIG_DYNAMIC_FTRACE
 #ifndef CONFIG_DYNAMIC_FTRACE
 	mov.l	.Lfunction_trace_stop, r0
 	mov.l	.Lfunction_trace_stop, r0
 	mov.l	@r0, r0
 	mov.l	@r0, r0
 	tst	r0, r0
 	tst	r0, r0
 	bf	ftrace_stub
 	bf	ftrace_stub
 #endif
 #endif
-	STACK_CHECK()
 
 
 	MCOUNT_ENTER()
 	MCOUNT_ENTER()
 
 
@@ -174,8 +179,6 @@ ftrace_caller:
 	tst	r0, r0
 	tst	r0, r0
 	bf	ftrace_stub
 	bf	ftrace_stub
 
 
-	STACK_CHECK()
-
 	MCOUNT_ENTER()
 	MCOUNT_ENTER()
 
 
 	.globl ftrace_call
 	.globl ftrace_call
@@ -211,38 +214,6 @@ ftrace_stub:
 	rts
 	rts
 	 nop
 	 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
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 	.globl	ftrace_graph_caller
 	.globl	ftrace_graph_caller
 ftrace_graph_caller:
 ftrace_graph_caller:
@@ -304,3 +275,36 @@ return_to_handler:
 .Lftrace_return_to_handler:
 .Lftrace_return_to_handler:
 	.long	ftrace_return_to_handler
 	.long	ftrace_return_to_handler
 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 #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 */