aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/ftrace.h
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2008-11-11 01:03:45 -0500
committerIngo Molnar <mingo@elte.hu>2008-11-11 04:29:11 -0500
commitcaf4b323b02a16c92fba449952ac6515ddc76d7a (patch)
tree6fc234d00faca192248344996a168afb253e5f40 /include/linux/ftrace.h
parentd844222a54c33a960755b44b934cd1b01b05dceb (diff)
tracing, x86: add low level support for ftrace return tracing
Impact: add infrastructure for function-return tracing Add low level support for ftrace return tracing. This plug-in stores return addresses on the thread_info structure of the current task. The index of the current return address is initialized when the task is the first one (init) and when a process forks (the child). It is not needed when a task does a sys_execve because after this syscall, it still needs to return on the kernel functions it called. Note that the code of return_to_handler has been suggested by Steven Rostedt as almost all of the ideas of improvements in this V3. For purpose of security, arch/x86/kernel/process_32.c is not traced because __switch_to() changes the current task during its execution. That could cause inconsistency in the stored return address of this function even if I didn't have any crash after testing with tracing on this function enabled. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux/ftrace.h')
-rw-r--r--include/linux/ftrace.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 1f5608c11023..dcbbf72a88b1 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -268,6 +268,26 @@ ftrace_init_module(unsigned long *start, unsigned long *end) { }
268 268
269 269
270/* 270/*
271 * Structure that defines a return function trace.
272 */
273struct ftrace_retfunc {
274 unsigned long ret; /* Return address */
275 unsigned long func; /* Current function */
276 unsigned long long calltime;
277 unsigned long long rettime;
278};
279
280#ifdef CONFIG_FUNCTION_RET_TRACER
281/* Type of a callback handler of tracing return function */
282typedef void (*trace_function_return_t)(struct ftrace_retfunc *);
283
284extern void register_ftrace_return(trace_function_return_t func);
285/* The current handler in use */
286extern trace_function_return_t ftrace_function_return;
287extern void unregister_ftrace_return(void);
288#endif
289
290/*
271 * Structure which defines the trace of an initcall. 291 * Structure which defines the trace of an initcall.
272 * You don't have to fill the func field since it is 292 * You don't have to fill the func field since it is
273 * only used internally by the tracer. 293 * only used internally by the tracer.