Messages in this thread | | | Subject | Re: [PATCH v3] tracing: Function stack size and its name mismatch in arm64 | From | Jiping Ma <> | Date | Tue, 6 Aug 2019 14:01:37 +0800 |
| |
On 2019年08月03日 00:09, Steven Rostedt wrote: > On Fri, 2 Aug 2019 11:22:59 -0400 > Steven Rostedt <rostedt@goodmis.org> wrote: > >> I think you are not explaining the issue correctly. From looking at the >> document, I think what you want to say is that the LR is saved *after* >> the data for the function. Is that correct? If so, then yes, it would >> cause the stack tracing algorithm to be incorrect. >> > [..] > >> Can someone confirm that this is the real issue? > Does this patch fix your issue? Yes, it does.
-- Jiping > > -- Steve > > diff --git a/arch/arm64/include/asm/ftrace.h b/arch/arm64/include/asm/ftrace.h > index 5ab5200b2bdc..13a4832cfb00 100644 > --- a/arch/arm64/include/asm/ftrace.h > +++ b/arch/arm64/include/asm/ftrace.h > @@ -13,6 +13,7 @@ > #define HAVE_FUNCTION_GRAPH_FP_TEST > #define MCOUNT_ADDR ((unsigned long)_mcount) > #define MCOUNT_INSN_SIZE AARCH64_INSN_SIZE > +#define ARCH_RET_ADDR_AFTER_LOCAL_VARS 1 > > #ifndef __ASSEMBLY__ > #include <linux/compat.h> > diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c > index 5d16f73898db..050c6bd9beac 100644 > --- a/kernel/trace/trace_stack.c > +++ b/kernel/trace/trace_stack.c > @@ -158,6 +158,18 @@ static void check_stack(unsigned long ip, unsigned long *stack) > i++; > } > > +#ifdef ARCH_RET_ADDR_AFTER_LOCAL_VARS > + /* > + * Most archs store the return address before storing the > + * function's local variables. But some archs do this backwards. > + */ > + if (x > 1) { > + memmove(&stack_trace_index[0], &stack_trace_index[1], > + sizeof(stack_trace_index[0]) * (x - 1)); > + x--; > + } > +#endif > + > stack_trace_nr_entries = x; > > if (task_stack_end_corrupted(current)) { > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
| |