Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a574cfa authored by Markos Chandras's avatar Markos Chandras Committed by Ralf Baechle
Browse files

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: default avatarMarkos 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: default avatarRalf Baechle <ralf@linux-mips.org>
parent c8c0da6b
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -129,7 +129,11 @@ NESTED(_mcount, PT_SIZE, ra)
	 nop
#endif
	b	ftrace_stub
#ifdef CONFIG_32BIT
	 addiu sp, sp, 8
#else
	 nop
#endif

static_trace:
	MCOUNT_SAVE_REGS
@@ -139,6 +143,9 @@ static_trace:
	 move	a1, AT		/* arg2: parent's return address */

	MCOUNT_RESTORE_REGS
#ifdef CONFIG_32BIT
	addiu sp, sp, 8
#endif
	.globl ftrace_stub
ftrace_stub:
	RETURN_BACK
@@ -183,6 +190,11 @@ NESTED(ftrace_graph_caller, PT_SIZE, ra)
	jal	prepare_ftrace_return
	 nop
	MCOUNT_RESTORE_REGS
#ifndef CONFIG_DYNAMIC_FTRACE
#ifdef CONFIG_32BIT
	addiu sp, sp, 8
#endif
#endif
	RETURN_BACK
	END(ftrace_graph_caller)