On Fri, 21 Oct 2016 12:17:59 -0400 Steven Rostedt <rost...@goodmis.org> wrote:
> 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) Seems okay, but what about just calling it EXPORT_SYMBOL? Thanks, Nick