From mboxrd@z Thu Jan 1 00:00:00 1970 From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers) Date: Tue, 12 Jun 2012 11:55:39 -0400 Subject: [lttng-dev] lttng-ust with --std=c99 -pedantic In-Reply-To: <20120612153257.GB14189@Krystal> References: <20120612153257.GB14189@Krystal> Message-ID: <20120612155539.GA15859@Krystal> * Mathieu Desnoyers (mathieu.desnoyers at efficios.com) wrote: > Hi John, > > * John Steele Scott (toojays at 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 at 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 > 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 > Signed-off-by: Mathieu Desnoyers > > I also had issues with (void) arg parameters with tracepoints, so > pushed: > > commit 4495dd39c05739d0fb2bc463b7c093d2459ce2b6 > Author: Mathieu Desnoyers > Date: Tue Jun 12 11:22:46 2012 -0400 > > Fix: support -std=c99 in tracepoint macros > > Signed-off-by: Mathieu Desnoyers > > I had also to fix userspace RCU library, with: > > > commit e51500edbd9919cee53bc85cbb4b22cd4786fc42 > Author: Mathieu Desnoyers > Date: Tue Jun 12 11:24:31 2012 -0400 > > Fix c99 compatibility: use __asm__ and __volatile__ in public headers > > Signed-off-by: Mathieu Desnoyers > > commit bdffa73aa208ad5f1e5b3a3cb6cbf86ac6996559 > Author: Mathieu Desnoyers > 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 > Signed-off-by: Mathieu Desnoyers > > > > > > jscott at 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. Thanks, Mathieu > > Thanks, > > Mathieu > > > > > This is with 4.6.1-9ubuntu3 on Ubuntu 11.10, lttng-ust master 5a821c. > > > > Would it be particularly difficult to make the lttng-ust tracepoints compatible with programs built with -pedantic? > > > > cheers, > > > > John > > > > > > _______________________________________________ > > lttng-dev mailing list > > lttng-dev at 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 at 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