sparc64: Kill CONFIG_STACK_DEBUG code.
[pandora-kernel.git] / arch / sparc / lib / mcount.S
1 /*
2  * Copyright (C) 2000 Anton Blanchard (anton@linuxcare.com)
3  *
4  * This file implements mcount(), which is used to collect profiling data.
5  * This can also be tweaked for kernel stack overflow detection.
6  */
7
8 #include <linux/linkage.h>
9
10 /*
11  * This is the main variant and is called by C code.  GCC's -pg option
12  * automatically instruments every C function with a call to this.
13  */
14
15         .text
16         .align          32
17         .globl          _mcount
18         .type           _mcount,#function
19         .globl          mcount
20         .type           mcount,#function
21 _mcount:
22 mcount:
23 #ifdef CONFIG_FUNCTION_TRACER
24 #ifdef CONFIG_DYNAMIC_FTRACE
25         /* Do nothing, the retl/nop below is all we need.  */
26 #else
27         sethi           %hi(function_trace_stop), %g1
28         lduw            [%g1 + %lo(function_trace_stop)], %g2
29         brnz,pn         %g2, 1f
30          sethi          %hi(ftrace_trace_function), %g1
31         sethi           %hi(ftrace_stub), %g2
32         ldx             [%g1 + %lo(ftrace_trace_function)], %g1
33         or              %g2, %lo(ftrace_stub), %g2
34         cmp             %g1, %g2
35         be,pn           %icc, 1f
36          mov            %i7, %o1
37         jmpl            %g1, %g0
38          mov            %o7, %o0
39         /* not reached */
40 1:
41 #endif
42 #endif
43         retl
44          nop
45         .size           _mcount,.-_mcount
46         .size           mcount,.-mcount
47
48 #ifdef CONFIG_FUNCTION_TRACER
49         .globl          ftrace_stub
50         .type           ftrace_stub,#function
51 ftrace_stub:
52         retl
53          nop
54         .size           ftrace_stub,.-ftrace_stub
55 #ifdef CONFIG_DYNAMIC_FTRACE
56         .globl          ftrace_caller
57         .type           ftrace_caller,#function
58 ftrace_caller:
59         sethi           %hi(function_trace_stop), %g1
60         mov             %i7, %o1
61         lduw            [%g1 + %lo(function_trace_stop)], %g2
62         brnz,pn         %g2, ftrace_stub
63          mov            %o7, %o0
64         .globl          ftrace_call
65 ftrace_call:
66         /* If the final kernel link ever turns on relaxation, we'll need
67          * to do something about this tail call.  Otherwise the linker
68          * will rewrite the call into a branch and nop out the move
69          * instruction.
70          */
71         call            ftrace_stub
72          mov            %o0, %o7
73         retl
74          nop
75         .size           ftrace_call,.-ftrace_call
76         .size           ftrace_caller,.-ftrace_caller
77 #endif
78 #endif