diff options
Diffstat (limited to 'arch/arm/kernel/entry-common.S')
-rw-r--r-- | arch/arm/kernel/entry-common.S | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index b8c1f1411440..b55cb0331809 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
@@ -115,6 +115,7 @@ ENTRY(mcount) | |||
115 | .globl mcount_call | 115 | .globl mcount_call |
116 | mcount_call: | 116 | mcount_call: |
117 | bl ftrace_stub | 117 | bl ftrace_stub |
118 | ldr lr, [fp, #-4] @ restore lr | ||
118 | ldmia sp!, {r0-r3, pc} | 119 | ldmia sp!, {r0-r3, pc} |
119 | 120 | ||
120 | ENTRY(ftrace_caller) | 121 | ENTRY(ftrace_caller) |
@@ -126,6 +127,7 @@ ENTRY(ftrace_caller) | |||
126 | .globl ftrace_call | 127 | .globl ftrace_call |
127 | ftrace_call: | 128 | ftrace_call: |
128 | bl ftrace_stub | 129 | bl ftrace_stub |
130 | ldr lr, [fp, #-4] @ restore lr | ||
129 | ldmia sp!, {r0-r3, pc} | 131 | ldmia sp!, {r0-r3, pc} |
130 | 132 | ||
131 | #else | 133 | #else |
@@ -137,6 +139,7 @@ ENTRY(mcount) | |||
137 | adr r0, ftrace_stub | 139 | adr r0, ftrace_stub |
138 | cmp r0, r2 | 140 | cmp r0, r2 |
139 | bne trace | 141 | bne trace |
142 | ldr lr, [fp, #-4] @ restore lr | ||
140 | ldmia sp!, {r0-r3, pc} | 143 | ldmia sp!, {r0-r3, pc} |
141 | 144 | ||
142 | trace: | 145 | trace: |
@@ -145,6 +148,7 @@ trace: | |||
145 | sub r0, r0, #MCOUNT_INSN_SIZE | 148 | sub r0, r0, #MCOUNT_INSN_SIZE |
146 | mov lr, pc | 149 | mov lr, pc |
147 | mov pc, r2 | 150 | mov pc, r2 |
151 | mov lr, r1 @ restore lr | ||
148 | ldmia sp!, {r0-r3, pc} | 152 | ldmia sp!, {r0-r3, pc} |
149 | 153 | ||
150 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 154 | #endif /* CONFIG_DYNAMIC_FTRACE */ |