* Re: [tip:perf/urgent] tracing: Include module.h in define_trace.h [not found] <tip-3a9f987b3141f086de27832514aad9f50a53f754@git.kernel.org> @ 2011-01-10 13:49 ` Peter Zijlstra 2011-01-10 14:14 ` Steven Rostedt 0 siblings, 1 reply; 5+ messages in thread From: Peter Zijlstra @ 2011-01-10 13:49 UTC (permalink / raw) To: linux-kernel, mingo, hpa, rostedt, srostedt, tglx; +Cc: linux-tip-commits On Sun, 2011-01-09 at 21:09 +0000, tip-bot for Steven Rostedt wrote: > Commit-ID: 3a9f987b3141f086de27832514aad9f50a53f754 > Gitweb: http://git.kernel.org/tip/3a9f987b3141f086de27832514aad9f50a53f754 > Author: Steven Rostedt <srostedt@redhat.com> > AuthorDate: Fri, 7 Jan 2011 15:40:10 -0500 > Committer: Steven Rostedt <rostedt@goodmis.org> > CommitDate: Fri, 7 Jan 2011 15:44:56 -0500 > > tracing: Include module.h in define_trace.h > > While doing some developing, Peter Zijlstra and I have found > that if a CREATE_TRACE_POINTS include is done before module.h > is included, it can break the build. > > We have been lucky so far that this has not broke the build > since module.h is included in almost everything. > > Reported-by: Peter Zijlstra <a.p.zijlstra@chello.nl> > Signed-off-by: Steven Rostedt <rostedt@goodmis.org> > --- > include/trace/define_trace.h | 10 ++++++++++ > 1 files changed, 10 insertions(+), 0 deletions(-) > > diff --git a/include/trace/define_trace.h b/include/trace/define_trace.h > index b0b4eb2..da39b22 100644 > --- a/include/trace/define_trace.h > +++ b/include/trace/define_trace.h > @@ -21,6 +21,16 @@ > #undef CREATE_TRACE_POINTS > > #include <linux/stringify.h> > +/* > + * module.h includes tracepoints, and because ftrace.h > + * pulls in module.h: > + * trace/ftrace.h -> linux/ftrace_event.h -> linux/perf_event.h -> > + * linux/ftrace.h -> linux/module.h > + * we must include module.h here before we play with any of > + * the TRACE_EVENT() macros, otherwise the tracepoints included > + * by module.h may break the build. > + */ > +#include <linux/module.h> > > #undef TRACE_EVENT > #define TRACE_EVENT(name, proto, args, tstruct, assign, print) \ After I got everything building on that tree I was working on, the above was found to compile but not to link, since it makes every: #define CREATE_TRACE_POINTS #include <trace/event/foo.h> site also create the trace/event/module.h tracepoints, thus confusing the linker with tons of duplicate symbols. The below patch makes things compile and link: --- include/trace/define_trace.h | 23 +++++++++++++---------- 1 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/trace/define_trace.h b/include/trace/define_trace.h index da39b22..9ebd0d3 100644 --- a/include/trace/define_trace.h +++ b/include/trace/define_trace.h @@ -21,16 +21,6 @@ #undef CREATE_TRACE_POINTS #include <linux/stringify.h> -/* - * module.h includes tracepoints, and because ftrace.h - * pulls in module.h: - * trace/ftrace.h -> linux/ftrace_event.h -> linux/perf_event.h -> - * linux/ftrace.h -> linux/module.h - * we must include module.h here before we play with any of - * the TRACE_EVENT() macros, otherwise the tracepoints included - * by module.h may break the build. - */ -#include <linux/module.h> #undef TRACE_EVENT #define TRACE_EVENT(name, proto, args, tstruct, assign, print) \ @@ -120,4 +110,17 @@ /* We may be processing more files */ #define CREATE_TRACE_POINTS +#else /* CREATE_TRACE_POINTS */ + +/* + * module.h includes tracepoints, and because ftrace.h + * pulls in module.h: + * trace/ftrace.h -> linux/ftrace_event.h -> linux/perf_event.h -> + * linux/ftrace.h -> linux/module.h + * we must include module.h here before we play with any of + * the TRACE_EVENT() macros, otherwise the tracepoints included + * by module.h may break the build. + */ +#include <linux/module.h> + #endif /* CREATE_TRACE_POINTS */ ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [tip:perf/urgent] tracing: Include module.h in define_trace.h 2011-01-10 13:49 ` [tip:perf/urgent] tracing: Include module.h in define_trace.h Peter Zijlstra @ 2011-01-10 14:14 ` Steven Rostedt 2011-01-10 14:38 ` Peter Zijlstra 0 siblings, 1 reply; 5+ messages in thread From: Steven Rostedt @ 2011-01-10 14:14 UTC (permalink / raw) To: Peter Zijlstra Cc: linux-kernel, mingo, hpa, srostedt, tglx, linux-tip-commits On Mon, 2011-01-10 at 14:49 +0100, Peter Zijlstra wrote: > After I got everything building on that tree I was working on, the above > was found to compile but not to link, since it makes every: > > #define CREATE_TRACE_POINTS > #include <trace/event/foo.h> > > site also create the trace/event/module.h tracepoints, thus confusing > the linker with tons of duplicate symbols. > > The below patch makes things compile and link: > > --- > include/trace/define_trace.h | 23 +++++++++++++---------- > 1 files changed, 13 insertions(+), 10 deletions(-) > > diff --git a/include/trace/define_trace.h b/include/trace/define_trace.h > index da39b22..9ebd0d3 100644 > --- a/include/trace/define_trace.h > +++ b/include/trace/define_trace.h > @@ -21,16 +21,6 @@ > #undef CREATE_TRACE_POINTS But here we undefine CREATE_TRACE_POINTS, why would this cause a problem in module.h? -- Steve > > #include <linux/stringify.h> > -/* > - * module.h includes tracepoints, and because ftrace.h > - * pulls in module.h: > - * trace/ftrace.h -> linux/ftrace_event.h -> linux/perf_event.h -> > - * linux/ftrace.h -> linux/module.h > - * we must include module.h here before we play with any of > - * the TRACE_EVENT() macros, otherwise the tracepoints included > - * by module.h may break the build. > - */ > -#include <linux/module.h> > > #undef TRACE_EVENT > #define TRACE_EVENT(name, proto, args, tstruct, assign, print) \ > @@ -120,4 +110,17 @@ > /* We may be processing more files */ > #define CREATE_TRACE_POINTS > > +#else /* CREATE_TRACE_POINTS */ > + > +/* > + * module.h includes tracepoints, and because ftrace.h > + * pulls in module.h: > + * trace/ftrace.h -> linux/ftrace_event.h -> linux/perf_event.h -> > + * linux/ftrace.h -> linux/module.h > + * we must include module.h here before we play with any of > + * the TRACE_EVENT() macros, otherwise the tracepoints included > + * by module.h may break the build. > + */ > +#include <linux/module.h> > + > #endif /* CREATE_TRACE_POINTS */ ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [tip:perf/urgent] tracing: Include module.h in define_trace.h 2011-01-10 14:14 ` Steven Rostedt @ 2011-01-10 14:38 ` Peter Zijlstra 2011-01-10 14:52 ` Steven Rostedt 0 siblings, 1 reply; 5+ messages in thread From: Peter Zijlstra @ 2011-01-10 14:38 UTC (permalink / raw) To: Steven Rostedt Cc: linux-kernel, mingo, hpa, srostedt, tglx, linux-tip-commits On Mon, 2011-01-10 at 09:14 -0500, Steven Rostedt wrote: > > @@ -21,16 +21,6 @@ > > #undef CREATE_TRACE_POINTS > > But here we undefine CREATE_TRACE_POINTS, why would this cause a problem > in module.h? I'm not sure what's happening, all I know is that without this change I get: LD vmlinux.o kernel/built-in.o:(__tracepoints+0xac0): multiple definition of `__tracepoint_module_request' arch/x86/built-in.o:(__tracepoints+0x100): first defined here kernel/built-in.o:(__tracepoints+0xa40): multiple definition of `__tracepoint_module_get' arch/x86/built-in.o:(__tracepoints+0x80): first defined here kernel/built-in.o:(__tracepoints+0x9c0): multiple definition of `__tracepoint_module_load' arch/x86/built-in.o:(__tracepoints+0x0): first defined here kernel/built-in.o:(__tracepoints+0xa80): multiple definition of `__tracepoint_module_put' arch/x86/built-in.o:(__tracepoints+0xc0): first defined here kernel/built-in.o:(__tracepoints+0xa00): multiple definition of `__tracepoint_module_free' arch/x86/built-in.o:(__tracepoints+0x40): first defined here ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [tip:perf/urgent] tracing: Include module.h in define_trace.h 2011-01-10 14:38 ` Peter Zijlstra @ 2011-01-10 14:52 ` Steven Rostedt 2011-01-10 15:00 ` Steven Rostedt 0 siblings, 1 reply; 5+ messages in thread From: Steven Rostedt @ 2011-01-10 14:52 UTC (permalink / raw) To: Peter Zijlstra Cc: linux-kernel, mingo, hpa, srostedt, tglx, linux-tip-commits On Mon, 2011-01-10 at 15:38 +0100, Peter Zijlstra wrote: > On Mon, 2011-01-10 at 09:14 -0500, Steven Rostedt wrote: > > > @@ -21,16 +21,6 @@ > > > #undef CREATE_TRACE_POINTS > > > > But here we undefine CREATE_TRACE_POINTS, why would this cause a problem > > in module.h? > > I'm not sure what's happening, all I know is that without this change I > get: > > LD vmlinux.o > kernel/built-in.o:(__tracepoints+0xac0): multiple definition of `__tracepoint_module_request' > arch/x86/built-in.o:(__tracepoints+0x100): first defined here > kernel/built-in.o:(__tracepoints+0xa40): multiple definition of `__tracepoint_module_get' > arch/x86/built-in.o:(__tracepoints+0x80): first defined here > kernel/built-in.o:(__tracepoints+0x9c0): multiple definition of `__tracepoint_module_load' > arch/x86/built-in.o:(__tracepoints+0x0): first defined here > kernel/built-in.o:(__tracepoints+0xa80): multiple definition of `__tracepoint_module_put' > arch/x86/built-in.o:(__tracepoints+0xc0): first defined here > kernel/built-in.o:(__tracepoints+0xa00): multiple definition of `__tracepoint_module_free' > arch/x86/built-in.o:(__tracepoints+0x40): first defined here Hmm, OK, I'm able to reproduce it when I add: #define CREATE_TRACE_POINTS #include <trace/events/syscalls.h> #undef CREATE_TRACE_POINTS as the first thing in ptrace.c. I'll investigate this further. Thanks! -- Steve ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [tip:perf/urgent] tracing: Include module.h in define_trace.h 2011-01-10 14:52 ` Steven Rostedt @ 2011-01-10 15:00 ` Steven Rostedt 0 siblings, 0 replies; 5+ messages in thread From: Steven Rostedt @ 2011-01-10 15:00 UTC (permalink / raw) To: Peter Zijlstra Cc: linux-kernel, mingo, hpa, srostedt, tglx, linux-tip-commits On Mon, 2011-01-10 at 09:52 -0500, Steven Rostedt wrote: > > LD vmlinux.o > > kernel/built-in.o:(__tracepoints+0xac0): multiple definition of `__tracepoint_module_request' > > arch/x86/built-in.o:(__tracepoints+0x100): first defined here > > kernel/built-in.o:(__tracepoints+0xa40): multiple definition of `__tracepoint_module_get' > > arch/x86/built-in.o:(__tracepoints+0x80): first defined here > > kernel/built-in.o:(__tracepoints+0x9c0): multiple definition of `__tracepoint_module_load' > > arch/x86/built-in.o:(__tracepoints+0x0): first defined here > > kernel/built-in.o:(__tracepoints+0xa80): multiple definition of `__tracepoint_module_put' > > arch/x86/built-in.o:(__tracepoints+0xc0): first defined here > > kernel/built-in.o:(__tracepoints+0xa00): multiple definition of `__tracepoint_module_free' > > arch/x86/built-in.o:(__tracepoints+0x40): first defined here > > Hmm, OK, I'm able to reproduce it when I add: Correction, I only reproduced this because I'm an idiot ;-) > > #define CREATE_TRACE_POINTS > #include <trace/events/syscalls.h> > #undef CREATE_TRACE_POINTS > > as the first thing in ptrace.c. I'll investigate this further. I added this, but forgot to remove: #define CREATE_TRACE_POINTS #include <trace/events/syscalls.h> that is at the bottom, causing the duplicate definitions. Removing the second installation, it complies fine. Thus, it works fine for me. :-/ -- Steve ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-01-10 15:01 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <tip-3a9f987b3141f086de27832514aad9f50a53f754@git.kernel.org>
2011-01-10 13:49 ` [tip:perf/urgent] tracing: Include module.h in define_trace.h Peter Zijlstra
2011-01-10 14:14 ` Steven Rostedt
2011-01-10 14:38 ` Peter Zijlstra
2011-01-10 14:52 ` Steven Rostedt
2011-01-10 15:00 ` Steven Rostedt
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.