int ftrace_enable_ftrace_graph_caller(void)
{ unsignedlong ip = (unsignedlong)(&ftrace_graph_call);
u32 old, new;
old = *(u32 *) &ftrace_graph_call; new = ftrace_call_replace(ip, (unsignedlong) &ftrace_graph_caller); return ftrace_modify_code(ip, old, new);
}
int ftrace_disable_ftrace_graph_caller(void)
{ unsignedlong ip = (unsignedlong)(&ftrace_graph_call);
u32 old, new;
old = *(u32 *) &ftrace_graph_call; new = ftrace_call_replace(ip, (unsignedlong) &ftrace_stub);
return ftrace_modify_code(ip, old, new);
}
#endif/* !CONFIG_DYNAMIC_FTRACE */
/* * Hook the return address and push it in the stack of return addrs * in current thread info.
*/ unsignedlong prepare_ftrace_return(unsignedlong parent, unsignedlong self_addr, unsignedlong frame_pointer)
{ unsignedlong return_hooker = (unsignedlong) &return_to_handler;
if (unlikely(atomic_read(¤t->tracing_graph_pause))) return parent + 8UL;
if (function_graph_enter(parent, self_addr, frame_pointer, NULL)) return parent + 8UL;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.