Commit 8a574cfa2652545eb95595d38ac2a0bb501af0ae
Committed by
Ralf Baechle
1 parent
c8c0da6bdf
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
MIPS: mcount: Adjust stack pointer for static trace in MIPS32
Every mcount() call in the MIPS 32-bit kernel is done as follows: [...] move at, ra jal _mcount addiu sp, sp, -8 [...] but upon returning from the mcount() function, the stack pointer is not adjusted properly. This is explained in details in 58b69401c797 (MIPS: Function tracer: Fix broken function tracing). Commit ad8c396936e3 ("MIPS: Unbreak function tracer for 64-bit kernel.) fixed the stack manipulation for 64-bit but it didn't fix it completely for MIPS32. Signed-off-by: Markos Chandras <markos.chandras@imgtec.com> Cc: <stable@vger.kernel.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/7792/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Showing 1 changed file with 12 additions and 0 deletions Side-by-side Diff
arch/mips/kernel/mcount.S
... | ... | @@ -129,7 +129,11 @@ |
129 | 129 | nop |
130 | 130 | #endif |
131 | 131 | b ftrace_stub |
132 | +#ifdef CONFIG_32BIT | |
133 | + addiu sp, sp, 8 | |
134 | +#else | |
132 | 135 | nop |
136 | +#endif | |
133 | 137 | |
134 | 138 | static_trace: |
135 | 139 | MCOUNT_SAVE_REGS |
... | ... | @@ -139,6 +143,9 @@ |
139 | 143 | move a1, AT /* arg2: parent's return address */ |
140 | 144 | |
141 | 145 | MCOUNT_RESTORE_REGS |
146 | +#ifdef CONFIG_32BIT | |
147 | + addiu sp, sp, 8 | |
148 | +#endif | |
142 | 149 | .globl ftrace_stub |
143 | 150 | ftrace_stub: |
144 | 151 | RETURN_BACK |
... | ... | @@ -183,6 +190,11 @@ |
183 | 190 | jal prepare_ftrace_return |
184 | 191 | nop |
185 | 192 | MCOUNT_RESTORE_REGS |
193 | +#ifndef CONFIG_DYNAMIC_FTRACE | |
194 | +#ifdef CONFIG_32BIT | |
195 | + addiu sp, sp, 8 | |
196 | +#endif | |
197 | +#endif | |
186 | 198 | RETURN_BACK |
187 | 199 | END(ftrace_graph_caller) |
188 | 200 |