diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile
index c25a6cd6a52964f3e3b1a71b048415be6a7805ee..d9efbbfa2bdf721d1ce2634ec4d471fa757b5d3b 100644
--- a/kernel/trace/Makefile
+++ b/kernel/trace/Makefile
@@ -4,6 +4,10 @@
 ifdef CONFIG_FTRACE
 ORIG_CFLAGS := $(KBUILD_CFLAGS)
 KBUILD_CFLAGS = $(subst -pg,,$(ORIG_CFLAGS))
+
+# selftest needs instrumentation
+CFLAGS_trace_selftest_dynamic.o = -pg
+obj-y += trace_selftest_dynamic.o
 endif
 
 obj-$(CONFIG_FTRACE) += libftrace.o
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 96951a8d09a4b3cdf4e27a749d6ec59c4aacfdf4..98cbfd05d75477b92ae58803fcdfa1e2c582f697 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -244,6 +244,8 @@ extern int unregister_tracer_switch(struct tracer_switch_ops *ops);
 
 #ifdef CONFIG_DYNAMIC_FTRACE
 extern unsigned long ftrace_update_tot_cnt;
+#define DYN_FTRACE_TEST_NAME trace_selftest_dynamic_test_func
+extern int DYN_FTRACE_TEST_NAME(void);
 #endif
 
 #ifdef CONFIG_FTRACE_STARTUP_TEST
diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c
index 92f4acb7740c1c4cbe1f8525fac1a9e4aca9bce2..83e55a2000ccb13e87fd3ebade062384b46704fe 100644
--- a/kernel/trace/trace_selftest.c
+++ b/kernel/trace/trace_selftest.c
@@ -107,14 +107,8 @@ static int trace_test_buffer(struct trace_array *tr, unsigned long *count)
 
 #ifdef CONFIG_DYNAMIC_FTRACE
 
-#define DYN_FTRACE_TEST_NAME trace_selftest_dynamic_test_func
 #define __STR(x) #x
 #define STR(x) __STR(x)
-static int DYN_FTRACE_TEST_NAME(void)
-{
-	/* used to call mcount */
-	return 0;
-}
 
 /* Test dynamic code modification and ftrace filters */
 int trace_selftest_startup_dynamic_tracing(struct tracer *trace,
diff --git a/kernel/trace/trace_selftest_dynamic.c b/kernel/trace/trace_selftest_dynamic.c
new file mode 100644
index 0000000000000000000000000000000000000000..54dd77cce5bfec6aa956c635f50f1061bea96a8a
--- /dev/null
+++ b/kernel/trace/trace_selftest_dynamic.c
@@ -0,0 +1,7 @@
+#include "trace.h"
+
+int DYN_FTRACE_TEST_NAME(void)
+{
+	/* used to call mcount */
+	return 0;
+}