aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-07-11 21:06:53 +0900
committerPaul Mundt <lethal@linux-sh.org>2009-07-11 21:06:53 +0900
commite460ab27b6c3ea313762169713086529d5bfb8bc (patch)
treea3d0cba85bf3118da4465037c18c6390cac14635
parenta470b95e99ea77ef1e307ff181e59a4a16caa4f4 (diff)
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>
-rw-r--r--arch/sh/lib/mcount.S76
1 files changed, 40 insertions, 36 deletions
diff --git a/arch/sh/lib/mcount.S b/arch/sh/lib/mcount.S
index 9e397aafc16..84a57761f17 100644
--- a/arch/sh/lib/mcount.S
+++ b/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 */