On 4/1/21 1:53 PM, Madhavan T. Venkataraman wrote: > > > 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 > Or, even better, I could just use ftrace_call+4 because that would be the return address for the tracer function at ftrace_call: SYM_CODE_START(ftrace_common) sub x0, x30, #AARCH64_INSN_SIZE // ip (callsite's BL insn) mov x1, x9 // parent_ip (callsite's LR) ldr_l x2, function_trace_op // op mov x3, sp // regs SYM_INNER_LABEL(ftrace_call, SYM_L_GLOBAL) bl ftrace_stub I think that would be cleaner. And, I don't need the complicated comments for ftrace_graph_call. Is this acceptable? Madhavan