* Mathieu Desnoyers (mathieu.desnoy...@efficios.com) wrote: > * John Steele Scott (tooj...@toojays.net) wrote: > > On 13/06/12 01:25, Mathieu Desnoyers wrote: > > > * Mathieu Desnoyers (mathieu.desnoy...@efficios.com) wrote: > > >> Hi John, > > >> > > >> * John Steele Scott (tooj...@toojays.net) wrote: > > >>> I want to add lttng-ust tracepoints to a program which builds with > > >>> "--std=c99 -pedantic". Right now this does not work. > > >>> > > >>> Using the demo program as an example, if you enable --std=c99, the > > >>> first issue looks like: > > >>> > > >>> jscott@saaz:~/src/lttng-ust/tests/demo$ ccache gcc -std=c99 > > >>> -DHAVE_CONFIG_H -I. -I../.. -I../../include/lttng -I../../include > > >>> -Wall -g -O2 -MT demo.o -MD -MP -MF .deps/demo.Tpo -c -o demo.o demo.c > > >>> In file included from demo.c:34:0: > > >>> ust_tests_demo.h: In function > > >>> ‘__tracepoint_cb_ust_tests_demo___starting’: > > >>> ust_tests_demo.h:27:23: warning: implicit declaration of function > > >>> ‘typeof’ [-Wimplicit-function-declaration] > > >>> ust_tests_demo.h:27:218: error: expected ‘;’ before ‘_________p1’ > > >>> ust_tests_demo.h:27:395: error: ‘_________p1’ undeclared (first use in > > >>> this function) > > >>> ust_tests_demo.h:27:395: note: each undeclared identifier is reported > > >>> only once for each function it appears in > > >>> In file included from demo.c:34:0: > > >>> ust_tests_demo.h: In function ‘__tracepoint_cb_ust_tests_demo___done’: > > >>> ust_tests_demo.h:35:214: error: expected ‘;’ before ‘_________p1’ > > >>> ust_tests_demo.h:35:383: error: ‘_________p1’ undeclared (first use in > > >>> this function) > > >>> In file included from demo.c:35:0: > > >>> ust_tests_demo2.h: In function ‘__tracepoint_cb_ust_tests_demo2___loop’: > > >>> ust_tests_demo2.h:27:299: error: expected ‘;’ before ‘_________p1’ > > >>> ust_tests_demo2.h:27:470: error: ‘_________p1’ undeclared (first use in > > >>> this function) > > >>> In file included from demo.c:36:0: > > >>> ust_tests_demo3.h: In function ‘__tracepoint_cb_ust_tests_demo3___done’: > > >>> ust_tests_demo3.h:27:215: error: expected ‘;’ before ‘_________p1’ > > >>> ust_tests_demo3.h:27:386: error: ‘_________p1’ undeclared (first use in > > >>> this function) > > >>> > > >>> This can be easily resolved by using __typeof__() instead of typeof(). > > >>> Then I can build with --std=c99. But adding -pedantic still fails: > > >> I pushed a fix for this: > > >> > > >> commit 6423c3134bf07d4a7db56f69f2c79b540a79c4f1 > > >> Author: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > >> Date: Mon Jun 11 10:15:25 2012 -0400 > > >> > > >> Fix c99 compatibility: use __typeof__ instead of typeof in public > > >> headers > > >> > > >> Reported-by: John Steele Scott <tooj...@toojays.net> > > >> Signed-off-by: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > >> > > >> I also had issues with (void) arg parameters with tracepoints, so > > >> pushed: > > >> > > >> commit 4495dd39c05739d0fb2bc463b7c093d2459ce2b6 > > >> Author: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > >> Date: Tue Jun 12 11:22:46 2012 -0400 > > >> > > >> Fix: support -std=c99 in tracepoint macros > > >> > > >> Signed-off-by: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > >> > > >> I had also to fix userspace RCU library, with: > > >> > > >> > > >> commit e51500edbd9919cee53bc85cbb4b22cd4786fc42 > > >> Author: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > >> Date: Tue Jun 12 11:24:31 2012 -0400 > > >> > > >> Fix c99 compatibility: use __asm__ and __volatile__ in public headers > > >> > > >> Signed-off-by: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > >> > > >> commit bdffa73aa208ad5f1e5b3a3cb6cbf86ac6996559 > > >> Author: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > >> Date: Mon Jun 11 10:16:35 2012 -0400 > > >> > > >> Fix c99 compatibility: use __typeof__ instead of typeof in public > > >> headers > > >> > > >> Reported-by: John Steele Scott <tooj...@toojays.net> > > >> Signed-off-by: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > >> > > >> > > >>> jscott@saaz:~/src/lttng-ust/tests/demo$ ccache gcc -std=c99 > > >>> -Dtypeof=__typeof__ -pedantic -DHAVE_CONFIG_H -I. -I../.. > > >>> -I../../include/lttng -I../../include -Wall -g -O2 -MT demo.o -MD -MP > > >>> -MF .deps/demo.Tpo -c -o demo.o demo.c > > >>> In file included from ust_tests_demo.h:25:0, > > >>> from demo.c:34: > > >>> ../../include/lttng/tracepoint.h: In function ‘__tracepoints__init’: > > >>> ../../include/lttng/tracepoint.h:251:4: warning: ISO C forbids > > >>> conversion of object pointer to function pointer type [-pedantic] > > >>> ../../include/lttng/tracepoint.h:255:4: warning: ISO C forbids > > >>> conversion of object pointer to function pointer type [-pedantic] > > >>> ../../include/lttng/tracepoint.h:260:4: warning: ISO C forbids > > >>> conversion of object pointer to function pointer type [-pedantic] > > >>> ../../include/lttng/tracepoint.h:264:4: warning: ISO C forbids > > >>> conversion of object pointer to function pointer type [-pedantic] > > >>> ../../include/lttng/tracepoint.h:268:4: warning: ISO C forbids > > >>> conversion of object pointer to function pointer type [-pedantic] > > >>> In file included from demo.c:34:0: > > >>> ust_tests_demo.h: In function > > >>> ‘__tracepoint_cb_ust_tests_demo___starting’: > > >>> ust_tests_demo.h:27:161: warning: ISO C forbids braced-groups within > > >>> expressions [-pedantic] > > >>> ust_tests_demo.h:27:549: warning: ISO C forbids conversion of object > > >>> pointer to function pointer type [-pedantic] > > >>> In file included from demo.c:34:0: > > >>> ust_tests_demo.h: In function ‘__tracepoint_cb_ust_tests_demo___done’: > > >>> ust_tests_demo.h:35:161: warning: ISO C forbids braced-groups within > > >>> expressions [-pedantic] > > >>> ust_tests_demo.h:35:537: warning: ISO C forbids conversion of object > > >>> pointer to function pointer type [-pedantic] > > >>> In file included from demo.c:35:0: > > >>> ust_tests_demo2.h: In function ‘__tracepoint_cb_ust_tests_demo2___loop’: > > >>> ust_tests_demo2.h:27:245: warning: ISO C forbids braced-groups within > > >>> expressions [-pedantic] > > >>> ust_tests_demo2.h:27:624: warning: ISO C forbids conversion of object > > >>> pointer to function pointer type [-pedantic] > > >>> In file included from demo.c:36:0: > > >>> ust_tests_demo3.h: In function ‘__tracepoint_cb_ust_tests_demo3___done’: > > >>> ust_tests_demo3.h:27:161: warning: ISO C forbids braced-groups within > > >>> expressions [-pedantic] > > >>> ust_tests_demo3.h:27:540: warning: ISO C forbids conversion of object > > >>> pointer to function pointer type [-pedantic] > > >> I see these warnings, the only thing that currently fails is due to > > >> BYTE_ORDER and BIG_ENDIAN not being defined. By adding: > > >> > > >> -DBYTE_ORDER=__BYTE_ORDER -DBIG_ENDIAN=__BIG_ENDIAN > > >> > > >> my tests/hello program, with a Makefile.am modified to do: > > >> > > >> hello_CFLAGS = -Werror=old-style-definition --std=c99 -pedantic > > >> > > >> prints many pedantic warnings, and fails with: > > >> > > >> ././ust_tests_hello.h:55:1: error: zero or negative size array > > >> ‘__event_fields___ust_tests_hello___tptest_sighandler’ > > >> > > >> which seems to be caused by my event with 0 fields, which try to create > > >> an array of length 0. > > >> > > >> I'll look into this one. > > > Please try again with lttng-ust master HEAD, userspace-rcu master HEAD, > > > and let me know if you experience problems compiling your instrumented > > > application with --std=c99 -pedantic. Please note that the probe object > > > (e.g. tp.c in the tests/hello program) needs to be compiled with gnu > > > extensions, so you should not use --std=c99 for this specific object. > > > > Mathieu, > > > > Thanks for your reply, sorry it has taken me so long to respond. > > > > I can now build this application with userspace tracing. I was > > actually able to compile the probe object with --std=c99 as well (this > > time on Centos 6.2, didn't try yet on Ubuntu). Would you expect any > > problems from this? I only have a single tracepoint in this app, but > > it does seem to work. > > --std=c99 will not work to compile probes containing tracepoints taking > 0 arguments. This is because c99 does not allow 0-sized arrays, and I > don't want to complexify the probe generation to take care of this > issue. > > > > > The thing I forgot to mention is: okay, I can build now with > > -pedantic, but I can't build with "-pedantic -Werror". This > > application builds with "--std=c99 -pedantic -Werror" (among many > > other flags). I can of course remove -Werror for my tests, but in the > > longer term I would like to see lttng-ust enabled in our regular > > build, and disabling -Werror for that is not something we want to do. > > If I only had to disable it for the trace provider, I could negotiate > > that, but disabling it for any module which uses tracepoints is > > undesirable. > > > > I haven't yet looked at how difficult it would be do eliminate these > > pedantic warnings. Do you have a feel for what is involved? > > Preprocessor tricks warp my mind. :( > > I don't think we'll want to make the lttng probe module build under > --std=c99 -pedandic -Werror, but I think we should focus on making sure > the tracepoint part that is built within the application (with > TRACEPOINT_CREATE_PROBES _not_ defined) builds fine in --std=c99 > -pedantic. > > Currently, building a simple test program with tracepoints under > --std=c99 -pedantic gets me: > > > In file included from ust_tests_hello.h:25:0, > from hello.c:34: > ../../include/lttng/tracepoint.h: In function ‘__tracepoints__init’: > ../../include/lttng/tracepoint.h:261:3: warning: ISO C forbids conversion of > object pointer to function pointer type [-pedantic] > ../../include/lttng/tracepoint.h:265:3: warning: ISO C forbids conversion of > object pointer to function pointer type [-pedantic] > ../../include/lttng/tracepoint.h:270:3: warning: ISO C forbids conversion of > object pointer to function pointer type [-pedantic] > ../../include/lttng/tracepoint.h:274:3: warning: ISO C forbids conversion of > object pointer to function pointer type [-pedantic] > ../../include/lttng/tracepoint.h:278:3: warning: ISO C forbids conversion of > object pointer to function pointer type [-pedantic] > > ---> see include/lttng/tracepoint.h __tracepoints__init(): > ----> This is caused by use of dlsym() to lookup a function pointer from > a symbol. dlsym() returns "void *", and we cast it into function > pointer type. Ideas on how to make this c99 pedantic compliant are > welcome. > > ------------------ > > In file included from hello.c:34:0: > ust_tests_hello.h: In function ‘__tracepoint_cb_ust_tests_hello___tptest’: > ust_tests_hello.h:28:1: warning: ISO C forbids braced-groups within > expressions [-pedantic] > ust_tests_hello.h:28:1: warning: ISO C forbids conversion of object pointer > to function pointer type [-pedantic] > ust_tests_hello.h: In function > ‘__tracepoint_cb_ust_tests_hello___tptest_sighandler’: > ust_tests_hello.h:52:1: warning: ISO C forbids braced-groups within > expressions [-pedantic] > ust_tests_hello.h:52:1: warning: ISO C forbids conversion of object pointer > to function pointer type [-pedantic] > > ---> see include/lttng/tracepoint.h > > #define _DECLARE_TRACEPOINT(_provider, _name, ...) > \ > extern struct tracepoint __tracepoint_##_provider##___##_name; > \ > static inline void > __tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)) \ > [...] > > ----> this is caused by use of "tp_rcu_dereference_bp()", which is > defined in include/lttng/tracepoint-rcu.h (in the #else clause) : > > #define tp_rcu_dereference_bp(p) \ > ({ \ > __typeof__(p) _________p1 = URCU_FORCE_CAST(__typeof__(p), \ > > tracepoint_dlopen.rcu_dereference_sym_bp(URCU_FORCE_CAST(void *, p))); \ > (_________p1); \ > }) > > For this one, we should be able to change it into a single-expression > and remove the braced-groups, since we are just really evaluating a > single expression here. Fixed by the following commit in lttng-ust > master: > > commit a4eaf8eabe829be8f7d7432ffaf83291a068b0ed > Author: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > Date: Mon Jun 18 10:10:36 2012 -0400 > > Fix c99 compatibility: tp_rcu_dereference_bp() should not use > braced-groups within expressions > > ------------------ > > hello.c: In function ‘inthandler’: > hello.c:39:47: warning: ISO C99 requires rest arguments to be used [enabled > by default] > ---> see include/lttng/tracepoint.h tracepoint() macro. > ----> this is caused by not passing any argument to the tracepoint. > Ideas on how to fix this are welcome, as I don't see any way to do it in > C99-pedantic.
I think I found a way to fix the last pedantic warnings. Can you try with this master branch commit ? commit fbdeb5ecb8ff9b7d73a72de9fc66d07f7797d93f Author: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> Date: Tue Jun 19 13:45:05 2012 -0400 Fix C99 strict compatibility: don't use void * for function pointers compiling public headers with --std=x99 -pedantic shows: warning: ISO C forbids conversion of object pointer to function pointer type Use "void (*func)(void)" to represent a generic function pointer rather than "void *". Signed-off-by: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > > Thanks! > > Mathieu > > > > > > > cheers, > > > > John > > > > _______________________________________________ > > lttng-dev mailing list > > lttng-dev@lists.lttng.org > > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev > > -- > Mathieu Desnoyers > Operating System Efficiency R&D Consultant > EfficiOS Inc. > http://www.efficios.com > > _______________________________________________ > lttng-dev mailing list > lttng-dev@lists.lttng.org > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list lttng-dev@lists.lttng.org http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev