mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-11 21:14:07 +08:00
nds32/ftrace: Support dynamic function graph tracer
This patch contains the implementation of dynamic function graph tracer. Signed-off-by: Zong Li <zong@andestech.com> Acked-by: Greentime Hu <greentime@andestech.com> Signed-off-by: Greentime Hu <greentime@andestech.com>
This commit is contained in:
parent
6b1d6d2fba
commit
95cd2f7bce
@ -74,6 +74,14 @@ void _ftrace_caller(unsigned long parent_ip)
|
||||
"nop \n\t"
|
||||
"nop \n\t");
|
||||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
/* a placeholder for the call to ftrace_graph_caller */
|
||||
__asm__ __volatile__ (
|
||||
"ftrace_graph_call: \n\t"
|
||||
"nop \n\t"
|
||||
"nop \n\t"
|
||||
"nop \n\t");
|
||||
#endif
|
||||
/* restore all state needed by the compiler epilogue */
|
||||
}
|
||||
|
||||
@ -258,4 +266,32 @@ void __naked return_to_handler(void)
|
||||
"lmw.bim $r0,[$sp],$r1,#0x0 \n\t");
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
extern unsigned long ftrace_graph_call;
|
||||
|
||||
static int ftrace_modify_graph_caller(bool enable)
|
||||
{
|
||||
unsigned long pc = (unsigned long)&ftrace_graph_call;
|
||||
unsigned long nop_insn[3] = {INSN_NOP, INSN_NOP, INSN_NOP};
|
||||
unsigned long call_insn[3] = {INSN_NOP, INSN_NOP, INSN_NOP};
|
||||
|
||||
ftrace_gen_call_insn(call_insn, (unsigned long)ftrace_graph_caller);
|
||||
|
||||
if (enable)
|
||||
return ftrace_modify_code(pc, nop_insn, call_insn, true);
|
||||
else
|
||||
return ftrace_modify_code(pc, call_insn, nop_insn, true);
|
||||
}
|
||||
|
||||
int ftrace_enable_ftrace_graph_caller(void)
|
||||
{
|
||||
return ftrace_modify_graph_caller(true);
|
||||
}
|
||||
|
||||
int ftrace_disable_ftrace_graph_caller(void)
|
||||
{
|
||||
return ftrace_modify_graph_caller(false);
|
||||
}
|
||||
#endif /* CONFIG_DYNAMIC_FTRACE */
|
||||
|
||||
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
||||
|
Loading…
Reference in New Issue
Block a user