Hi David,

I am glad that the travis configuration got merged so quickly and it
does help :)

Here is something I found for the clang issue #697.

tl;dr, following is a *SILLY* patch for the issue:

diff --git a/src/common/hashtable/rculfhash.h b/src/common/hashtable/rculfhash.h
index 17cf6db..601ad98 100644
--- a/src/common/hashtable/rculfhash.h
+++ b/src/common/hashtable/rculfhash.h
@@ -458,7 +458,7 @@ void cds_lfht_resize(struct cds_lfht *ht, unsigned
long new_size);
        for (cds_lfht_first(ht, iter),                                  \
                        pos = caa_container_of(cds_lfht_iter_get_node(iter), \
                                        __typeof__(*(pos)), member);    \
-               &(pos)->member != NULL;                                 \
+               &(pos)->member == 42;                                   \
                cds_lfht_next(ht, iter),                                \
                        pos = caa_container_of(cds_lfht_iter_get_node(iter), \
                                        __typeof__(*(pos)), member))

With that patch, all unit tests passed even compiled with clang -O2.

I seems that clang will optimize out the "&(pos)->member != NULL" check.

Asm code with `clang -O2`
0000000000413c00 <snapshot_destroy>:
  413c00:       41 57                   push   %r15
  413c02:       41 56                   push   %r14
  413c04:       41 54                   push   %r12
  413c06:       53                      push   %rbx
  413c07:       48 83 ec 18             sub    $0x18,%rsp
  413c0b:       49 89 ff                mov    %rdi,%r15
  413c0e:       4d 85 ff                test   %r15,%r15
  413c11:       74 64                   je     413c77 <snapshot_destroy+0x77>
  413c13:       e8 f8 05 ff ff          callq  404210 <rcu_read_lock_memb@plt>
  413c18:       49 8b 47 18             mov    0x18(%r15),%rax
  413c1c:       48 8b 38                mov    (%rax),%rdi
  413c1f:       4c 8d 74 24 08          lea    0x8(%rsp),%r14
  413c24:       4c 89 f6                mov    %r14,%rsi
  413c27:       e8 c4 05 ff ff          callq  4041f0 <lttng_cds_lfht_first@plt>
  413c2c:       eb 19                   jmp    413c47 <snapshot_destroy+0x47>
  413c2e:       66 90                   xchg   %ax,%ax
  413c30:       4c 89 e7                mov    %r12,%rdi
  413c33:       e8 d8 04 ff ff          callq  404110 <free@plt>
  413c38:       49 8b 47 18             mov    0x18(%r15),%rax
  413c3c:       48 8b 38                mov    (%rax),%rdi
  413c3f:       4c 89 f6                mov    %r14,%rsi
  413c42:       e8 b9 05 ff ff          callq  404200 <lttng_cds_lfht_next@plt>
  413c47:       48 8b 5c 24 08          mov    0x8(%rsp),%rbx
  413c4c:       4c 8d a3 c0 fe ff ff    lea    -0x140(%rbx),%r12
  413c53:       4c 89 ff                mov    %r15,%rdi
  413c56:       4c 89 e6                mov    %r12,%rsi
  413c59:       e8 12 fc ff ff          callq  413870 <snapshot_delete_output>
  413c5e:       48 8b 7b d8             mov    -0x28(%rbx),%rdi
  413c62:       48 85 ff                test   %rdi,%rdi
  413c65:       74 c9                   je     413c30 <snapshot_destroy+0x30>
  413c67:       e8 a4 6b ff ff          callq  40a810
<consumer_output_send_destroy_relayd>
  413c6c:       48 8b 7b d8             mov    -0x28(%rbx),%rdi
  413c70:       e8 2b 72 ff ff          callq  40aea0 <consumer_destroy_output>
  413c75:       eb b9                   jmp    413c30 <snapshot_destroy+0x30>
  413c77:       bf 55 86 43 00          mov    $0x438655,%edi
  413c7c:       be 03 d4 43 00          mov    $0x43d403,%esi
  413c81:       ba 3b 01 00 00          mov    $0x13b,%edx
  413c86:       b9 22 d6 43 00          mov    $0x43d622,%ecx
  413c8b:       e8 50 04 ff ff          callq  4040e0 <__assert_fail@plt>

Asm code with `gcc -O2`:
00000000004179e0 <snapshot_destroy>:
  4179e0:       55                      push   %rbp
  4179e1:       48 89 fd                mov    %rdi,%rbp
  4179e4:       53                      push   %rbx
  4179e5:       48 83 ec 18             sub    $0x18,%rsp
  4179e9:       48 85 ff                test   %rdi,%rdi
  4179ec:       74 68                   je     417a56 <snapshot_destroy+0x76>
  4179ee:       e8 0d c6 fe ff          callq  404000 <rcu_read_lock_memb@plt>
  4179f3:       48 8b 45 18             mov    0x18(%rbp),%rax
  4179f7:       48 89 e6                mov    %rsp,%rsi
  4179fa:       48 8b 38                mov    (%rax),%rdi
  4179fd:       e8 ae c8 fe ff          callq  4042b0 <lttng_cds_lfht_first@plt>
  417a02:       48 8b 04 24             mov    (%rsp),%rax
  417a06:       48 85 c0                test   %rax,%rax
<------------------ null pointer check here
  417a09:       48 8d 98 c0 fe ff ff    lea    -0x140(%rax),%rbx
  417a10:       74 38                   je     417a4a <snapshot_destroy+0x6a>
  417a12:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
  417a18:       48 89 de                mov    %rbx,%rsi
  417a1b:       48 89 ef                mov    %rbp,%rdi
  417a1e:       e8 2d fc ff ff          callq  417650 <snapshot_delete_output>
  417a23:       48 89 df                mov    %rbx,%rdi
  417a26:       e8 75 fd ff ff          callq  4177a0 <snapshot_output_destroy>
  417a2b:       48 8b 45 18             mov    0x18(%rbp),%rax
  417a2f:       48 89 e6                mov    %rsp,%rsi
  417a32:       48 8b 38                mov    (%rax),%rdi
  417a35:       e8 26 c3 fe ff          callq  403d60 <lttng_cds_lfht_next@plt>
  417a3a:       48 8b 04 24             mov    (%rsp),%rax
  417a3e:       48 85 c0                test   %rax,%rax
  417a41:       48 8d 98 c0 fe ff ff    lea    -0x140(%rax),%rbx
  417a48:       75 ce                   jne    417a18 <snapshot_destroy+0x38>
  417a4a:       e8 61 ca fe ff          callq  4044b0 <rcu_read_unlock_memb@plt>
  417a4f:       48 83 c4 18             add    $0x18,%rsp
  417a53:       5b                      pop    %rbx
  417a54:       5d                      pop    %rbp
  417a55:       c3                      retq
  417a56:       b9 a0 02 44 00          mov    $0x4402a0,%ecx
  417a5b:       ba 3b 01 00 00          mov    $0x13b,%edx
  417a60:       be 12 02 44 00          mov    $0x440212,%esi
  417a65:       bf 39 64 44 00          mov    $0x446439,%edi
  417a6a:       e8 31 c5 fe ff          callq  403fa0 <__assert_fail@plt>
  417a6f:       90                      nop

I did not see any null pointer check in clang's code.

There is a '-fno-delete-null-pointer-checks' flag in gcc, however
clang does not support it, see
http://llvm.org/bugs/show_bug.cgi?id=9251 .

Hope my rough analysis helps.

Thanks!
--
Best Regards,
仝子飞 (Zifei Tong)


On Tue, Nov 26, 2013 at 11:52 PM, David Goulet <[email protected]> wrote:
> Hi Zifei,
>
> On 25 Nov (23:21:30), Zifei Tong wrote:
>> Hi,
>>
>> I just made a travis script [1] to build and test LTTng on Travis CI.
>> I think this might be useful in case you work on your own lttng fork
>> and want to have a CI system to check your commits.
>>
>> The lttng test suite runs good with gcc on Travis CI [2], with minor
>> changes [4] with respect to bug #666 [5] and the 50 minutes build time
>> limit of Travis CI.
>>
>> However for clang build [3], the unit tests won't pass. And I can
>> confirm this failure on my own machine. I've created #697 [6] on bug
>> tracker with full backtraces.
>
> I've pushed a travis file upstream in lttng-tools based on your version
> [1] and I'm currently using it quite a bit with my development branch so
> big thanks for that!
>
> I've fixed most of the clang compiler issues, just need to investiguate
> #697 [6] for the travis' test to succeed.
>
> Bug 666 [5] is also fixed now so you don't need a custom patch for
> travis-ci.org. A fast and a long UST snapshot tests were added where the
> "make check" runs the fast one (only 10 snapshots in the loop version
> the 1000 for the long).
>
> Again, thank you! Cheers!
> David
>
>>
>> Thanks !
>>
>> [1] https://raw.github.com/5kg/lttng-tools/travis-ci/.travis.yml
>> [2] https://travis-ci.org/5kg/lttng-tools/jobs/14490911
>> [3] https://travis-ci.org/5kg/lttng-tools/jobs/14490912
>> [4] 
>> https://github.com/5kg/lttng-tools/commit/afad46a2e7497e7dd5101f170df278f8ded3a1f7
>> [5] https://bugs.lttng.org/issues/666
>> [6] https://bugs.lttng.org/issues/697
>> --
>> Best Regards,
>> 仝子飞 (Zifei Tong)
>>
>> _______________________________________________
>> lttng-dev mailing list
>> [email protected]
>> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev


On 11/26/13, David Goulet <[email protected]> wrote:
> Hi Zifei,
>
> On 25 Nov (23:21:30), Zifei Tong wrote:
>> Hi,
>>
>> I just made a travis script [1] to build and test LTTng on Travis CI.
>> I think this might be useful in case you work on your own lttng fork
>> and want to have a CI system to check your commits.
>>
>> The lttng test suite runs good with gcc on Travis CI [2], with minor
>> changes [4] with respect to bug #666 [5] and the 50 minutes build time
>> limit of Travis CI.
>>
>> However for clang build [3], the unit tests won't pass. And I can
>> confirm this failure on my own machine. I've created #697 [6] on bug
>> tracker with full backtraces.
>
> I've pushed a travis file upstream in lttng-tools based on your version
> [1] and I'm currently using it quite a bit with my development branch so
> big thanks for that!
>
> I've fixed most of the clang compiler issues, just need to investiguate
> #697 [6] for the travis' test to succeed.
>
> Bug 666 [5] is also fixed now so you don't need a custom patch for
> travis-ci.org. A fast and a long UST snapshot tests were added where the
> "make check" runs the fast one (only 10 snapshots in the loop version
> the 1000 for the long).
>
> Again, thank you! Cheers!
> David
>
>>
>> Thanks !
>>
>> [1] https://raw.github.com/5kg/lttng-tools/travis-ci/.travis.yml
>> [2] https://travis-ci.org/5kg/lttng-tools/jobs/14490911
>> [3] https://travis-ci.org/5kg/lttng-tools/jobs/14490912
>> [4]
>> https://github.com/5kg/lttng-tools/commit/afad46a2e7497e7dd5101f170df278f8ded3a1f7
>> [5] https://bugs.lttng.org/issues/666
>> [6] https://bugs.lttng.org/issues/697
>> --
>> Best Regards,
>> 仝子飞 (Zifei Tong)
>>
>> _______________________________________________
>> lttng-dev mailing list
>> [email protected]
>> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>


-- 
--
Best Regards,
仝子飞 (Zifei Tong)
College of Computer Science and Technology, Zhejiang University

[email protected] / [email protected]

_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to