tracing/arm64: Have max stack tracer handle the case of return address after data
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Wed, 7 Aug 2019 15:28:59 +0000 (11:28 -0400)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Sat, 31 Aug 2019 16:19:40 +0000 (12:19 -0400)
commitf7edb451fa51e44e62177347ea7850aa0e901ea5
treeb45581500a45e47632c8ef223dd96f3dfba83375
parent4fbcf0741697a75eb766835cb34836cf4f3803da
tracing/arm64: Have max stack tracer handle the case of return address after data

Most archs (well at least x86) store the function call return address on the
stack before storing the local variables for the function. The max stack
tracer depends on this in its algorithm to display the stack size of each
function it finds in the back trace.

Some archs (arm64), may store the return address (from its link register)
just before calling a nested function. There's no reason to save the link
register on leaf functions, as it wont be updated. This breaks the algorithm
of the max stack tracer.

Add a new define ARCH_FTRACE_SHIFT_STACK_TRACER that an architecture may set
if it stores the return address (link register) after it stores the
function's local variables, and have the stack trace shift the values of the
mapped stack size to the appropriate functions.

Link: 20190802094103.163576-1-jiping.ma2@windriver.com

Reported-by: Jiping Ma <jiping.ma2@windriver.com>
Acked-by: Will Deacon <will@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
arch/arm64/include/asm/ftrace.h
kernel/trace/trace_stack.c