Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
* [lttng-dev] lttng-ust with --std=c99 -pedantic
@ 2012-06-09 23:37 John Steele Scott
  2012-06-12 15:32 ` Mathieu Desnoyers
  0 siblings, 1 reply; 9+ messages in thread
From: John Steele Scott @ 2012-06-09 23:37 UTC (permalink / raw)


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:

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]

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




^ permalink raw reply	[flat|nested] 9+ messages in thread

* [lttng-dev] lttng-ust with --std=c99 -pedantic
  2012-06-09 23:37 [lttng-dev] lttng-ust with --std=c99 -pedantic John Steele Scott
@ 2012-06-12 15:32 ` Mathieu Desnoyers
  2012-06-12 15:55   ` Mathieu Desnoyers
  0 siblings, 1 reply; 9+ messages in thread
From: Mathieu Desnoyers @ 2012-06-12 15:32 UTC (permalink / raw)


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 <mathieu.desnoyers at 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 <toojays at toojays.net>
    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>

I also had issues with (void) arg parameters with tracepoints, so
pushed:

commit 4495dd39c05739d0fb2bc463b7c093d2459ce2b6
Author: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
Date:   Tue Jun 12 11:22:46 2012 -0400

    Fix: support -std=c99 in tracepoint macros
    
    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>

I had also to fix userspace RCU library, with:


commit e51500edbd9919cee53bc85cbb4b22cd4786fc42
Author: Mathieu Desnoyers <mathieu.desnoyers at 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.desnoyers at efficios.com>

commit bdffa73aa208ad5f1e5b3a3cb6cbf86ac6996559
Author: Mathieu Desnoyers <mathieu.desnoyers at 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 <toojays at toojays.net>
    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>


> 
> 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.

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



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [lttng-dev] lttng-ust with --std=c99 -pedantic
  2012-06-12 15:32 ` Mathieu Desnoyers
@ 2012-06-12 15:55   ` Mathieu Desnoyers
  2012-06-18 12:10     ` John Steele Scott
  0 siblings, 1 reply; 9+ messages in thread
From: Mathieu Desnoyers @ 2012-06-12 15:55 UTC (permalink / raw)


* 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 <mathieu.desnoyers at 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 <toojays at toojays.net>
>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> 
> I also had issues with (void) arg parameters with tracepoints, so
> pushed:
> 
> commit 4495dd39c05739d0fb2bc463b7c093d2459ce2b6
> Author: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> Date:   Tue Jun 12 11:22:46 2012 -0400
> 
>     Fix: support -std=c99 in tracepoint macros
>     
>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> 
> I had also to fix userspace RCU library, with:
> 
> 
> commit e51500edbd9919cee53bc85cbb4b22cd4786fc42
> Author: Mathieu Desnoyers <mathieu.desnoyers at 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.desnoyers at efficios.com>
> 
> commit bdffa73aa208ad5f1e5b3a3cb6cbf86ac6996559
> Author: Mathieu Desnoyers <mathieu.desnoyers at 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 <toojays at toojays.net>
>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> 
> 
> > 
> > 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



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [lttng-dev] lttng-ust with --std=c99 -pedantic
  2012-06-12 15:55   ` Mathieu Desnoyers
@ 2012-06-18 12:10     ` John Steele Scott
  2012-06-18 14:11       ` Mathieu Desnoyers
  0 siblings, 1 reply; 9+ messages in thread
From: John Steele Scott @ 2012-06-18 12:10 UTC (permalink / raw)


On 13/06/12 01:25, Mathieu Desnoyers wrote:
> * 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 <mathieu.desnoyers at 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 <toojays at toojays.net>
>>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
>>
>> I also had issues with (void) arg parameters with tracepoints, so
>> pushed:
>>
>> commit 4495dd39c05739d0fb2bc463b7c093d2459ce2b6
>> Author: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
>> Date:   Tue Jun 12 11:22:46 2012 -0400
>>
>>     Fix: support -std=c99 in tracepoint macros
>>     
>>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
>>
>> I had also to fix userspace RCU library, with:
>>
>>
>> commit e51500edbd9919cee53bc85cbb4b22cd4786fc42
>> Author: Mathieu Desnoyers <mathieu.desnoyers at 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.desnoyers at efficios.com>
>>
>> commit bdffa73aa208ad5f1e5b3a3cb6cbf86ac6996559
>> Author: Mathieu Desnoyers <mathieu.desnoyers at 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 <toojays at toojays.net>
>>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
>>
>>
>>> 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.

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.

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. :(

cheers,

John



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [lttng-dev] lttng-ust with --std=c99 -pedantic
  2012-06-18 12:10     ` John Steele Scott
@ 2012-06-18 14:11       ` Mathieu Desnoyers
  2012-06-19 17:45         ` Mathieu Desnoyers
  0 siblings, 1 reply; 9+ messages in thread
From: Mathieu Desnoyers @ 2012-06-18 14:11 UTC (permalink / raw)


* John Steele Scott (toojays at toojays.net) wrote:
> On 13/06/12 01:25, Mathieu Desnoyers wrote:
> > * 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 <mathieu.desnoyers at 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 <toojays at toojays.net>
> >>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> >>
> >> I also had issues with (void) arg parameters with tracepoints, so
> >> pushed:
> >>
> >> commit 4495dd39c05739d0fb2bc463b7c093d2459ce2b6
> >> Author: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> >> Date:   Tue Jun 12 11:22:46 2012 -0400
> >>
> >>     Fix: support -std=c99 in tracepoint macros
> >>     
> >>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> >>
> >> I had also to fix userspace RCU library, with:
> >>
> >>
> >> commit e51500edbd9919cee53bc85cbb4b22cd4786fc42
> >> Author: Mathieu Desnoyers <mathieu.desnoyers at 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.desnoyers at efficios.com>
> >>
> >> commit bdffa73aa208ad5f1e5b3a3cb6cbf86ac6996559
> >> Author: Mathieu Desnoyers <mathieu.desnoyers at 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 <toojays at toojays.net>
> >>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> >>
> >>
> >>> 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.
> 
> 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.desnoyers at 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.

Thanks!

Mathieu



> 
> 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



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [lttng-dev] lttng-ust with --std=c99 -pedantic
  2012-06-18 14:11       ` Mathieu Desnoyers
@ 2012-06-19 17:45         ` Mathieu Desnoyers
  2012-06-20 13:10           ` John Steele Scott
  0 siblings, 1 reply; 9+ messages in thread
From: Mathieu Desnoyers @ 2012-06-19 17:45 UTC (permalink / raw)


* Mathieu Desnoyers (mathieu.desnoyers at efficios.com) wrote:
> * John Steele Scott (toojays at toojays.net) wrote:
> > On 13/06/12 01:25, Mathieu Desnoyers wrote:
> > > * 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 <mathieu.desnoyers at 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 <toojays at toojays.net>
> > >>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> > >>
> > >> I also had issues with (void) arg parameters with tracepoints, so
> > >> pushed:
> > >>
> > >> commit 4495dd39c05739d0fb2bc463b7c093d2459ce2b6
> > >> Author: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> > >> Date:   Tue Jun 12 11:22:46 2012 -0400
> > >>
> > >>     Fix: support -std=c99 in tracepoint macros
> > >>     
> > >>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> > >>
> > >> I had also to fix userspace RCU library, with:
> > >>
> > >>
> > >> commit e51500edbd9919cee53bc85cbb4b22cd4786fc42
> > >> Author: Mathieu Desnoyers <mathieu.desnoyers at 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.desnoyers at efficios.com>
> > >>
> > >> commit bdffa73aa208ad5f1e5b3a3cb6cbf86ac6996559
> > >> Author: Mathieu Desnoyers <mathieu.desnoyers at 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 <toojays at toojays.net>
> > >>     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> > >>
> > >>
> > >>> 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.
> > 
> > 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.desnoyers at 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.desnoyers at 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.desnoyers at efficios.com>

> 
> Thanks!
> 
> Mathieu
> 
> 
> 
> > 
> > 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



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [lttng-dev] lttng-ust with --std=c99 -pedantic
  2012-06-19 17:45         ` Mathieu Desnoyers
@ 2012-06-20 13:10           ` John Steele Scott
  2012-06-20 13:47             ` Mathieu Desnoyers
  0 siblings, 1 reply; 9+ messages in thread
From: John Steele Scott @ 2012-06-20 13:10 UTC (permalink / raw)


On 20/06/12 03:15, Mathieu Desnoyers wrote:
> * Mathieu Desnoyers (mathieu.desnoyers at efficios.com) wrote:
>> * John Steele Scott (toojays at toojays.net) wrote:
>>
snip snip
>>> 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.

I found this warning discussed in a GCC bug report. Jakub Jelinek's suggestion at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45289#c6 (load the result of dlsym into a void *, then memcpy to the function pointer), does make these go away (using GCC 4.4.6 on Centos 6.2).

>>
>> ------------------
>>
>> 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.desnoyers at 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.desnoyers at 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.desnoyers at efficios.com>
>

Unfortunately, this isn't sufficient to fix these warnings on Centos 6.2. However, I can now make the warnings go away by using dlsym+memcpy (instead of dlsym+cast), as mentioned above. I haven't had a chance to actually use the resulting binary yet, but I don't see why it shouldn't work.

Thanks,

John



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [lttng-dev] lttng-ust with --std=c99 -pedantic
  2012-06-20 13:10           ` John Steele Scott
@ 2012-06-20 13:47             ` Mathieu Desnoyers
  2012-06-21  0:51               ` John Steele Scott
  0 siblings, 1 reply; 9+ messages in thread
From: Mathieu Desnoyers @ 2012-06-20 13:47 UTC (permalink / raw)


* John Steele Scott (toojays at toojays.net) wrote:
> On 20/06/12 03:15, Mathieu Desnoyers wrote:
> > * Mathieu Desnoyers (mathieu.desnoyers at efficios.com) wrote:
> >> * John Steele Scott (toojays at toojays.net) wrote:
> >>
> snip snip
> >>> 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.
> 
> I found this warning discussed in a GCC bug report. Jakub Jelinek's suggestion at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45289#c6 (load the result of dlsym into a void *, then memcpy to the function pointer), does make these go away (using GCC 4.4.6 on Centos 6.2).

Can you check if these can be reproduced with gcc 4.5 or 4.6 ? (without
the memcpy trick)

The bugzilla entry seems to imply that the warning went away from
-pedantic mode at some point.

Thanks,

Mathieu

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [lttng-dev] lttng-ust with --std=c99 -pedantic
  2012-06-20 13:47             ` Mathieu Desnoyers
@ 2012-06-21  0:51               ` John Steele Scott
  0 siblings, 0 replies; 9+ messages in thread
From: John Steele Scott @ 2012-06-21  0:51 UTC (permalink / raw)


Mathieu Desnoyers <mathieu.desnoyers at efficios.com> writes:

> * John Steele Scott (toojays at toojays.net) wrote:
>> On 20/06/12 03:15, Mathieu Desnoyers wrote:
>> > * Mathieu Desnoyers (mathieu.desnoyers at efficios.com) wrote:
>> >> * John Steele Scott (toojays at toojays.net) wrote:
>> >>
>> snip snip
>> >>> 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.
>> 
>> I found this warning discussed in a GCC bug report. Jakub Jelinek's suggestion at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45289#c6 (load the result of dlsym into a void *, then memcpy to the function pointer), does make these go away (using GCC 4.4.6 on Centos 6.2).
>
> Can you check if these can be reproduced with gcc 4.5 or 4.6 ? (without
> the memcpy trick)
>
> The bugzilla entry seems to imply that the warning went away from
> -pedantic mode at some point.

That was my reading of the bugzilla entry as well. However, I can still
reproduce those warnings with GCC 4.5.4 and 4.6.1 (both installed on Ubuntu
11.10). I don't have a GCC 4.7 install to test with.

An alternative approach to the memcpy thing is to wrap dlsym in a function
which returns the symbol in an output parameter, rather than a return
value. It looks a little less ugly. Something like:

diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h
index 5bab476..8d2afc1 100644
--- a/include/lttng/tracepoint.h
+++ b/include/lttng/tracepoint.h
@@ -249,6 +249,14 @@ int __tracepoint_registered
 struct tracepoint_dlopen tracepoint_dlopen
 	__attribute__((weak, visibility("hidden")));
 
+#ifndef LTTNG_HAVE_PEDANTIC_C99_DLSYM_WORKAROUND
+#define LTTNG_HAVE_PEDANTIC_C99_DLSYM_WORKAROUND
+static void lttng_c99_dlsym(void *handle, const char* symbol, void **addr)
+{
+	*addr = dlsym(handle, symbol);
+}
+#endif
+
 static void __attribute__((constructor)) __tracepoints__init(void)
 {
 	if (__tracepoint_registered++)
@@ -258,27 +266,22 @@ static void __attribute__((constructor)) __tracepoints__init(void)
 		dlopen("liblttng-ust-tracepoint.so.0", RTLD_NOW | RTLD_GLOBAL);
 	if (!tracepoint_dlopen.liblttngust_handle)
 		return;
-	tracepoint_dlopen.tracepoint_register_lib =
-		URCU_FORCE_CAST(int (*)(struct tracepoint * const *, int),
-				dlsym(tracepoint_dlopen.liblttngust_handle,
-					"tracepoint_register_lib"));
-	tracepoint_dlopen.tracepoint_unregister_lib =
-		URCU_FORCE_CAST(int (*)(struct tracepoint * const *),
-				dlsym(tracepoint_dlopen.liblttngust_handle,
-					"tracepoint_unregister_lib"));
+	lttng_c99_dlsym(tracepoint_dlopen.liblttngust_handle,
+			"tracepoint_register_lib",
+			(void **)&tracepoint_dlopen.tracepoint_register_lib);
+	lttng_c99_dlsym(tracepoint_dlopen.liblttngust_handle,
+			"tracepoint_unregister_lib",
+			(void **)&tracepoint_dlopen.tracepoint_unregister_lib);
 #ifndef _LGPL_SOURCE
-	tracepoint_dlopen.rcu_read_lock_sym_bp =
-		URCU_FORCE_CAST(void (*)(void),
-				dlsym(tracepoint_dlopen.liblttngust_handle,
-					"tp_rcu_read_lock_bp"));
-	tracepoint_dlopen.rcu_read_unlock_sym_bp =
-		URCU_FORCE_CAST(void (*)(void),
-				dlsym(tracepoint_dlopen.liblttngust_handle,
-					"tp_rcu_read_unlock_bp"));
-	tracepoint_dlopen.rcu_dereference_sym_bp =
-		URCU_FORCE_CAST(void *(*)(void *p),
-				dlsym(tracepoint_dlopen.liblttngust_handle,
-					"tp_rcu_dereference_sym_bp"));
+	lttng_c99_dlsym(tracepoint_dlopen.liblttngust_handle,
+			"tp_rcu_read_lock_bp",
+			(void **)&tracepoint_dlopen.rcu_read_lock_sym_bp);
+	lttng_c99_dlsym(tracepoint_dlopen.liblttngust_handle,
+			"tp_rcu_read_unlock_bp",
+			(void **)&tracepoint_dlopen.rcu_read_unlock_sym_bp);
+	lttng_c99_dlsym(tracepoint_dlopen.liblttngust_handle,
+			"tp_rcu_dereference_sym_bp",
+			(void **)&tracepoint_dlopen.rcu_dereference_sym_bp);
 #endif
 	tracepoint_dlopen.tracepoint_register_lib(__start___tracepoints_ptrs,
 				__stop___tracepoints_ptrs -

On the system I'm trying to build which has the aggressive GCC warnings
enabled, this gets me down to just one warning, which is due to redundantly
declaring the __tracepoint_provider_##_provider symbol. That one is from
-Wredundant-decls, not -pedantic; and I'll leave it for another day.

cheers,

John



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-06-21  0:51 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-09 23:37 [lttng-dev] lttng-ust with --std=c99 -pedantic John Steele Scott
2012-06-12 15:32 ` Mathieu Desnoyers
2012-06-12 15:55   ` Mathieu Desnoyers
2012-06-18 12:10     ` John Steele Scott
2012-06-18 14:11       ` Mathieu Desnoyers
2012-06-19 17:45         ` Mathieu Desnoyers
2012-06-20 13:10           ` John Steele Scott
2012-06-20 13:47             ` Mathieu Desnoyers
2012-06-21  0:51               ` John Steele Scott

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox