aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorSteven Rostedt <rostedt@goodmis.org>2008-08-14 15:45:08 -0400
committerIngo Molnar <mingo@elte.hu>2008-10-14 04:34:44 -0400
commit68bf21aa15c85d2e9b623dcda2b1ed8893275fa1 (patch)
tree54d4d4f7e8311b77f3166a8807a635347d479081 /include
parent8da3821ba5634497da63d58a69e24a97697c4a2b (diff)
ftrace: mcount call site on boot nops core
This is the infrastructure to the converting the mcount call sites recorded by the __mcount_loc section into nops on boot. It also allows for using these sites to enable tracing as normal. When the __mcount_loc section is used, the "ftraced" kernel thread is disabled. This uses the current infrastructure to record the mcount call sites as well as convert them to nops. The mcount function is kept as a stub on boot up and not converted to the ftrace_record_ip function. We use the ftrace_record_ip to only record from the table. This patch does not handle modules. That comes with a later patch. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include')
-rw-r--r--include/asm-x86/ftrace.h10
-rw-r--r--include/linux/ftrace.h6
2 files changed, 16 insertions, 0 deletions
diff --git a/include/asm-x86/ftrace.h b/include/asm-x86/ftrace.h
index be0e004ad148..1bb6f9bbe1ab 100644
--- a/include/asm-x86/ftrace.h
+++ b/include/asm-x86/ftrace.h
@@ -7,6 +7,16 @@
7 7
8#ifndef __ASSEMBLY__ 8#ifndef __ASSEMBLY__
9extern void mcount(void); 9extern void mcount(void);
10
11static inline unsigned long ftrace_call_adjust(unsigned long addr)
12{
13 /*
14 * call mcount is "e8 <4 byte offset>"
15 * The addr points to the 4 byte offset and the caller of this
16 * function wants the pointer to e8. Simply subtract one.
17 */
18 return addr - 1;
19}
10#endif 20#endif
11 21
12#endif /* CONFIG_FTRACE */ 22#endif /* CONFIG_FTRACE */
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index bb384068272e..d4d6ab453b78 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -162,4 +162,10 @@ static inline void
162ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { } 162ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { }
163#endif 163#endif
164 164
165#ifdef CONFIG_FTRACE_MCOUNT_RECORD
166extern void ftrace_init(void);
167#else
168static inline void ftrace_init(void) { }
169#endif
170
165#endif /* _LINUX_FTRACE_H */ 171#endif /* _LINUX_FTRACE_H */