From mboxrd@z Thu Jan 1 00:00:00 1970 From: soariez@gmail.com (Zifei Tong) Date: Wed, 27 Nov 2013 21:52:06 +0800 Subject: [lttng-dev] Build and test LTTng on Travis CI In-Reply-To: <20131126155254.GA7267@thessa> References: <20131126155254.GA7267@thessa> Message-ID: 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 : 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 413c13: e8 f8 05 ff ff callq 404210 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 413c2c: eb 19 jmp 413c47 413c2e: 66 90 xchg %ax,%ax 413c30: 4c 89 e7 mov %r12,%rdi 413c33: e8 d8 04 ff ff callq 404110 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 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 413c5e: 48 8b 7b d8 mov -0x28(%rbx),%rdi 413c62: 48 85 ff test %rdi,%rdi 413c65: 74 c9 je 413c30 413c67: e8 a4 6b ff ff callq 40a810 413c6c: 48 8b 7b d8 mov -0x28(%rbx),%rdi 413c70: e8 2b 72 ff ff callq 40aea0 413c75: eb b9 jmp 413c30 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 at plt> Asm code with `gcc -O2`: 00000000004179e0 : 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 4179ee: e8 0d c6 fe ff callq 404000 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 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 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 417a23: 48 89 df mov %rbx,%rdi 417a26: e8 75 fd ff ff callq 4177a0 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 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 417a4a: e8 61 ca fe ff callq 4044b0 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 at 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 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 >> lttng-dev at lists.lttng.org >> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev On 11/26/13, David Goulet 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 >> lttng-dev at lists.lttng.org >> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev > -- -- Best Regards, ??? (Zifei Tong) College of Computer Science and Technology, Zhejiang University soariez at gmail.com / tongzifei at zju.edu.cn