Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sparc64: Allocate sufficient stack space in ftrace stubs.

128 bytes is sufficient for the register window save area, but the
calling conventions allow the callee to save up to 6 incoming argument
registers into the stack frame after the register window save area.

This means a minimal stack frame is 176 bytes (128 + (6 * 8)).

This fixes random crashes when using the function tracer.

Reported-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

+4 -4
+4 -4
arch/sparc/lib/mcount.S
··· 34 34 cmp %g1, %g2 35 35 be,pn %icc, 1f 36 36 mov %i7, %g3 37 - save %sp, -128, %sp 37 + save %sp, -176, %sp 38 38 mov %g3, %o1 39 39 jmpl %g1, %o7 40 40 mov %i7, %o0 ··· 56 56 nop 57 57 5: mov %i7, %g2 58 58 mov %fp, %g3 59 - save %sp, -128, %sp 59 + save %sp, -176, %sp 60 60 mov %g2, %l0 61 61 ba,pt %xcc, ftrace_graph_caller 62 62 mov %g3, %l1 ··· 85 85 lduw [%g1 + %lo(function_trace_stop)], %g1 86 86 brnz,pn %g1, ftrace_stub 87 87 mov %fp, %g3 88 - save %sp, -128, %sp 88 + save %sp, -176, %sp 89 89 mov %g2, %o1 90 90 mov %g2, %l0 91 91 mov %g3, %l1 ··· 120 120 END(ftrace_graph_caller) 121 121 122 122 ENTRY(return_to_handler) 123 - save %sp, -128, %sp 123 + save %sp, -176, %sp 124 124 call ftrace_return_to_handler 125 125 mov %fp, %o0 126 126 jmpl %o0 + 8, %g0