diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2014-10-07 09:45:10 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-10-09 03:14:18 -0400 |
commit | 53255c9a4dade6ff2162121430d13aaadb38a69c (patch) | |
tree | 1f6514d2397a3a10922abbdda3c59f792147a5c2 /arch/s390/kernel/mcount.S | |
parent | a62bc0739253939d6fce40d51d92412252a9bb55 (diff) |
s390/ftrace: remove 31 bit ftrace support
31 bit and 64 bit diverge more and more and it is rather painful
to keep both parts running.
To make things simpler just remove the 31 bit support which nobody
uses anyway.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/mcount.S')
-rw-r--r-- | arch/s390/kernel/mcount.S | 87 |
1 files changed, 50 insertions, 37 deletions
diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S index be6dbd9a81a7..07abe8d464d4 100644 --- a/arch/s390/kernel/mcount.S +++ b/arch/s390/kernel/mcount.S | |||
@@ -8,60 +8,73 @@ | |||
8 | #include <linux/linkage.h> | 8 | #include <linux/linkage.h> |
9 | #include <asm/asm-offsets.h> | 9 | #include <asm/asm-offsets.h> |
10 | #include <asm/ftrace.h> | 10 | #include <asm/ftrace.h> |
11 | #include <asm/ptrace.h> | ||
11 | 12 | ||
12 | .section .kprobes.text, "ax" | 13 | .section .kprobes.text, "ax" |
13 | 14 | ||
14 | ENTRY(ftrace_stub) | 15 | ENTRY(ftrace_stub) |
15 | br %r14 | 16 | br %r14 |
16 | 17 | ||
18 | #define STACK_FRAME_SIZE (STACK_FRAME_OVERHEAD + __PT_SIZE) | ||
19 | #define STACK_PTREGS (STACK_FRAME_OVERHEAD) | ||
20 | #define STACK_PTREGS_GPRS (STACK_PTREGS + __PT_GPRS) | ||
21 | #define STACK_PTREGS_PSW (STACK_PTREGS + __PT_PSW) | ||
22 | |||
17 | ENTRY(_mcount) | 23 | ENTRY(_mcount) |
18 | br %r14 | 24 | br %r14 |
19 | 25 | ||
20 | ENTRY(ftrace_caller) | 26 | ENTRY(ftrace_caller) |
21 | stm %r2,%r5,16(%r15) | 27 | .globl ftrace_regs_caller |
22 | bras %r1,1f | 28 | .set ftrace_regs_caller,ftrace_caller |
23 | 0: .long ftrace_trace_function | 29 | lgr %r1,%r15 |
24 | 1: st %r14,56(%r15) | 30 | aghi %r15,-STACK_FRAME_SIZE |
25 | lr %r0,%r15 | 31 | stg %r1,__SF_BACKCHAIN(%r15) |
26 | ahi %r15,-96 | 32 | stg %r1,(STACK_PTREGS_GPRS+15*8)(%r15) |
27 | l %r3,100(%r15) | 33 | stg %r0,(STACK_PTREGS_PSW+8)(%r15) |
28 | la %r2,0(%r14) | 34 | stmg %r2,%r14,(STACK_PTREGS_GPRS+2*8)(%r15) |
29 | st %r0,__SF_BACKCHAIN(%r15) | 35 | #ifdef CONFIG_HAVE_MARCH_Z196_FEATURES |
30 | la %r3,0(%r3) | 36 | aghik %r2,%r0,-MCOUNT_INSN_SIZE |
31 | ahi %r2,-MCOUNT_INSN_SIZE | 37 | lgrl %r4,function_trace_op |
32 | l %r14,0b-0b(%r1) | 38 | lgrl %r1,ftrace_trace_function |
33 | l %r14,0(%r14) | 39 | #else |
34 | basr %r14,%r14 | 40 | lgr %r2,%r0 |
41 | aghi %r2,-MCOUNT_INSN_SIZE | ||
42 | larl %r4,function_trace_op | ||
43 | lg %r4,0(%r4) | ||
44 | larl %r1,ftrace_trace_function | ||
45 | lg %r1,0(%r1) | ||
46 | #endif | ||
47 | lgr %r3,%r14 | ||
48 | la %r5,STACK_PTREGS(%r15) | ||
49 | basr %r14,%r1 | ||
35 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 50 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
36 | l %r2,100(%r15) | 51 | # The j instruction gets runtime patched to a nop instruction. |
37 | l %r3,152(%r15) | ||
38 | ENTRY(ftrace_graph_caller) | ||
39 | # The bras instruction gets runtime patched to call prepare_ftrace_return. | ||
40 | # See ftrace_enable_ftrace_graph_caller. The patched instruction is: | 52 | # See ftrace_enable_ftrace_graph_caller. The patched instruction is: |
41 | # bras %r14,prepare_ftrace_return | 53 | # j .+4 |
42 | bras %r14,0f | 54 | ENTRY(ftrace_graph_caller) |
43 | 0: st %r2,100(%r15) | 55 | j ftrace_graph_caller_end |
56 | lg %r2,(STACK_PTREGS_GPRS+14*8)(%r15) | ||
57 | lg %r3,(STACK_PTREGS_PSW+8)(%r15) | ||
58 | brasl %r14,prepare_ftrace_return | ||
59 | stg %r2,(STACK_PTREGS_GPRS+14*8)(%r15) | ||
60 | ftrace_graph_caller_end: | ||
61 | .globl ftrace_graph_caller_end | ||
44 | #endif | 62 | #endif |
45 | ahi %r15,96 | 63 | lg %r1,(STACK_PTREGS_PSW+8)(%r15) |
46 | l %r14,56(%r15) | 64 | lmg %r2,%r15,(STACK_PTREGS_GPRS+2*8)(%r15) |
47 | lm %r2,%r5,16(%r15) | 65 | br %r1 |
48 | br %r14 | ||
49 | 66 | ||
50 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 67 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
51 | 68 | ||
52 | ENTRY(return_to_handler) | 69 | ENTRY(return_to_handler) |
53 | stm %r2,%r5,16(%r15) | 70 | stmg %r2,%r5,32(%r15) |
54 | st %r14,56(%r15) | 71 | lgr %r1,%r15 |
55 | lr %r0,%r15 | 72 | aghi %r15,-STACK_FRAME_OVERHEAD |
56 | ahi %r15,-96 | 73 | stg %r1,__SF_BACKCHAIN(%r15) |
57 | st %r0,__SF_BACKCHAIN(%r15) | 74 | brasl %r14,ftrace_return_to_handler |
58 | bras %r1,0f | 75 | aghi %r15,STACK_FRAME_OVERHEAD |
59 | .long ftrace_return_to_handler | 76 | lgr %r14,%r2 |
60 | 0: l %r2,0b-0b(%r1) | 77 | lmg %r2,%r5,32(%r15) |
61 | basr %r14,%r2 | ||
62 | lr %r14,%r2 | ||
63 | ahi %r15,96 | ||
64 | lm %r2,%r5,16(%r15) | ||
65 | br %r14 | 78 | br %r14 |
66 | 79 | ||
67 | #endif | 80 | #endif |