Re: Ftrace: Static function graph not work

From: Zong Li
Date: Fri Mar 31 2017 - 02:21:17 EST


ping

2017-03-23 11:28 GMT+08:00 Zong Li <zongbox@xxxxxxxxx>:
> Hi all,
>
> I test the static function graph for ARM, x86 and x86_64 architecture
> on linux-3.10 and linux-4.9, and I find it works correctly only for
> x86_64 on linux-4.9.
>
> After the following commit, the function tracer also be registered
> when registering the function graph tracer.
>
> commit 2940c25bec92f40a3f7f32504b8ea115d1701892
> Author: Steven Rostedt (Red Hat) <rostedt@xxxxxxxxxxx>
> CommitDate: Wed Dec 4 10:57:05 2013 -0800
>
> ftrace: Fix function graph with loading of modules
>
>
> The arch-depend code implement the mcount function pseudo code like:
>
> void mcount(void)
> {
> ...
> if (ftrace_trace_function != ftrace_stub)
> goto do_trace;
>
> #ifdef CONFIG_FUNCTION_GRAPH_TRACER
> if (ftrace_graph_return != ftrace_stub ||
> ftrace_graph_entry != ftrace_graph_entry_stub)
> ftrace_graph_caller();
> #endif
> return;
>
> do_trace:
> ...
> }
>
> The function pointer 'ftrace_trace_function' will not be 'ftrace_stub'
> because function tracer is registered too, so the function graph part
> will not be executed.
>
>
> On the other hand, I find the another patch to resolve this situation,
> and it is reason that x86_64 architecture can work correctly.
>
> commit 62a207d748dd9224140a634786b274fdb6ece0b9
> Author: Steven Rostedt (Red Hat) <rostedt@xxxxxxxxxxx>
> CommitDate: Mon Nov 24 15:02:25 2014 -0500
>
> ftrace/x86: Have static function tracing always test for function graph
>
>
> so, is this problem tending to handle by each architecture? or maybe
> it is need to solve by generic code?
>
>
> This is my first mail to mailing list, please excuse having mistake
> and let me know.
> Thank a lot !