aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/entry_32.S
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@ghostprotocols.net>2008-05-12 15:20:42 -0400
committerThomas Gleixner <tglx@linutronix.de>2008-05-23 14:31:58 -0400
commit16444a8a40d4c7b4f6de34af0cae1f76a4f6c901 (patch)
tree9c290bcdbdc1ecf8f578c30b3b36914e14fdaacc /arch/x86/kernel/entry_32.S
parent6e766410c4babd37bc7cd5e25009c179781742c8 (diff)
ftrace: add basic support for gcc profiler instrumentation
If CONFIG_FTRACE is selected and /proc/sys/kernel/ftrace_enabled is set to a non-zero value the ftrace routine will be called everytime we enter a kernel function that is not marked with the "notrace" attribute. The ftrace routine will then call a registered function if a function happens to be registered. [ This code has been highly hacked by Steven Rostedt and Ingo Molnar, so don't blame Arnaldo for all of this ;-) ] Update: It is now possible to register more than one ftrace function. If only one ftrace function is registered, that will be the function that ftrace calls directly. If more than one function is registered, then ftrace will call a function that will loop through the functions to call. Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/entry_32.S')
-rw-r--r--arch/x86/kernel/entry_32.S27
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index 2a609dc3271..f47b9b5440d 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -1109,6 +1109,33 @@ ENDPROC(xen_failsafe_callback)
1109 1109
1110#endif /* CONFIG_XEN */ 1110#endif /* CONFIG_XEN */
1111 1111
1112#ifdef CONFIG_FTRACE
1113ENTRY(mcount)
1114 cmpl $ftrace_stub, ftrace_trace_function
1115 jnz trace
1116
1117.globl ftrace_stub
1118ftrace_stub:
1119 ret
1120
1121 /* taken from glibc */
1122trace:
1123 pushl %eax
1124 pushl %ecx
1125 pushl %edx
1126 movl 0xc(%esp), %eax
1127 movl 0x4(%ebp), %edx
1128
1129 call *ftrace_trace_function
1130
1131 popl %edx
1132 popl %ecx
1133 popl %eax
1134
1135 jmp ftrace_stub
1136END(mcount)
1137#endif
1138
1112.section .rodata,"a" 1139.section .rodata,"a"
1113#include "syscall_table_32.S" 1140#include "syscall_table_32.S"
1114 1141