On 4/1/21 1:40 PM, Madhavan T. Venkataraman wrote: >>> So, it is only defined if CONFIG_FUNCTION_GRAPH_TRACER is defined. I can address >>> this as well as your comment by defining another label whose name is more meaningful >>> to our use: >>> +SYM_INNER_LABEL(ftrace_trampoline, SYM_L_GLOBAL) // checked by the unwinder >>> #ifdef CONFIG_FUNCTION_GRAPH_TRACER >>> SYM_INNER_LABEL(ftrace_graph_call, SYM_L_GLOBAL) // ftrace_graph_caller(); >>> nop // If enabled, this will be replaced >>> // "b ftrace_graph_caller" >>> #endif >> I'm not sure we need to bother with that, you'd still need the & I think. > I think we need to bother with that. If CONFIG_FUNCTION_GRAPH_TRACER is not on but > CONFIG_DYNAMIC_FTRACE_WITH_REGS is, then ftrace_graph_call() will not occur in the stack > trace taken from a tracer function. The unwinder still needs to recognize an ftrace frame. > I don't want to assume ftrace_common_return which is the label that currently follows > the above code. So, we need a different label outside the above ifdef. Alternatively, I could just move the SYM_INNER_LABEL(ftrace_graph_call..) to outside the ifdef. Madhavan