Commit 784d5699eddc5 ("x86: move exports to actual definitions") removed the EXPORT_SYMBOL(__fentry__) and EXPORT_SYMBOL(mcount) from x8664_ksyms_64.c, and added EXPORT_SYMBOL(function_hook) in mcount_64.S instead. The problem is that function_hook isn't a function at all, but a macro that is defined as eithe mcount or __fentry__ depending on the support from gcc. But instead of adding more #ifdefs like x8684_ksyms_64.c had, I suggest having another export that can handle this similar to the way __string() works with converting macros to strings. By having:
EXPORT_MACRO_SYMBOL(function_hook) Where we have: #define EXPORT_MACRO_SYMBOL(x) EXPORT_SYMBOL(x) It will convert the macro into what it is defined as before calling EXPORT_SYMBOL(), and this will just work properly again. Cc: sta...@vger.kernel.org Fixes: Commit 784d5699eddc5 ("x86: move exports to actual definitions") Signed-off-by: Steven Rostedt <rost...@goodmis.org> --- arch/x86/kernel/mcount_64.S | 2 +- include/asm-generic/export.h | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S index efe73aacf966..ccd9d912af27 100644 --- a/arch/x86/kernel/mcount_64.S +++ b/arch/x86/kernel/mcount_64.S @@ -295,7 +295,7 @@ trace: jmp fgraph_trace END(function_hook) #endif /* CONFIG_DYNAMIC_FTRACE */ -EXPORT_SYMBOL(function_hook) +EXPORT_MACRO_SYMBOL(function_hook) #endif /* CONFIG_FUNCTION_TRACER */ #ifdef CONFIG_FUNCTION_GRAPH_TRACER diff --git a/include/asm-generic/export.h b/include/asm-generic/export.h index 43199a049da5..cb86e746865e 100644 --- a/include/asm-generic/export.h +++ b/include/asm-generic/export.h @@ -90,5 +90,10 @@ __EXPORT_SYMBOL(name, KSYM(name),) #define EXPORT_DATA_SYMBOL_GPL(name) \ __EXPORT_SYMBOL(name, KSYM(name),_gpl) +/* + * If "name" is a macro of a function and not a function itself, + * it needs a second pass. + */ +#define EXPORT_MACRO_SYMBOL(x) EXPORT_SYMBOL(x) #endif -- 1.9.3