• Youling Tang's avatar
    LoongArch: ftrace: Add direct call support · 9cdc3b6a
    Youling Tang authored
    Select the HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS to provide the
    register_ftrace_direct[_multi] interfaces allowing users to register
    the customed trampoline (direct_caller) as the mcount for one or more
    target functions. And modify_ftrace_direct[_multi] are also provided
    for modifying direct_caller.
    
    There are a few cases to distinguish:
    - If a direct call ops is the only one tracing a function AND the direct
      called trampoline is within the reach of a 'bl' instruction
      -> the ftrace patchsite jumps to the trampoline
    - Else
      -> the ftrace patchsite jumps to the ftrace_regs_caller trampoline points
         to ftrace_list_ops so it iterates over all registered ftrace ops,
         including the direct call ops and calls its call_direct_funcs handler
         which stores the direct called trampoline's address in the ftrace_regs
         and the ftrace_regs_caller trampoline will return to that address
         instead of returning to the traced function
    Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
    Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    9cdc3b6a
ftrace.h 2.61 KB