提交 8a574cfa 编写于 作者: M Markos Chandras 提交者: Ralf Baechle

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 58b69401
(MIPS: Function tracer: Fix broken function tracing).

Commit ad8c3969 ("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: NMarkos 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: NRalf Baechle <ralf@linux-mips.org>
上级 c8c0da6b
...@@ -129,7 +129,11 @@ NESTED(_mcount, PT_SIZE, ra) ...@@ -129,7 +129,11 @@ NESTED(_mcount, PT_SIZE, ra)
nop nop
#endif #endif
b ftrace_stub b ftrace_stub
#ifdef CONFIG_32BIT
addiu sp, sp, 8
#else
nop nop
#endif
static_trace: static_trace:
MCOUNT_SAVE_REGS MCOUNT_SAVE_REGS
...@@ -139,6 +143,9 @@ static_trace: ...@@ -139,6 +143,9 @@ static_trace:
move a1, AT /* arg2: parent's return address */ move a1, AT /* arg2: parent's return address */
MCOUNT_RESTORE_REGS MCOUNT_RESTORE_REGS
#ifdef CONFIG_32BIT
addiu sp, sp, 8
#endif
.globl ftrace_stub .globl ftrace_stub
ftrace_stub: ftrace_stub:
RETURN_BACK RETURN_BACK
...@@ -183,6 +190,11 @@ NESTED(ftrace_graph_caller, PT_SIZE, ra) ...@@ -183,6 +190,11 @@ NESTED(ftrace_graph_caller, PT_SIZE, ra)
jal prepare_ftrace_return jal prepare_ftrace_return
nop nop
MCOUNT_RESTORE_REGS MCOUNT_RESTORE_REGS
#ifndef CONFIG_DYNAMIC_FTRACE
#ifdef CONFIG_32BIT
addiu sp, sp, 8
#endif
#endif
RETURN_BACK RETURN_BACK
END(ftrace_graph_caller) END(ftrace_graph_caller)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册