You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
1
(33) |
2
(15) |
3
(20) |
4
(22) |
5
(13) |
|
6
(12) |
7
(32) |
8
(17) |
9
(31) |
10
(21) |
11
(7) |
12
(13) |
|
13
(13) |
14
(12) |
15
(10) |
16
(8) |
17
(7) |
18
(28) |
19
(5) |
|
20
(5) |
21
(7) |
22
(11) |
23
(7) |
24
(13) |
25
(7) |
26
(7) |
|
27
(7) |
28
(15) |
29
(30) |
30
(21) |
31
(6) |
|
|
|
From: <sv...@va...> - 2008-07-03 16:56:39
|
Author: bart Date: 2008-07-03 17:56:39 +0100 (Thu, 03 Jul 2008) New Revision: 8349 Log: Updated Subversion properties. Modified: trunk/memcheck/tests/ Property changes on: trunk/memcheck/tests ___________________________________________________________________ Name: svn:ignore - addressable badaddrvalue badfree badjump badjump2 badloop badpoll badrw brk brk2 buflen_check clientperm clientstackperm custom_alloc deep_templates .deps describe-block dir doublefree erringfds error_counts errs1 execve execve2 exitprog filter_leak_check_size filter_stderr fprw fwrite hello inits inline leak-0 leak-cycle leakotron leak-pool leak-regroot leak-tree linux-syscalls-2007 linux-syslog-syscall linux-timerfd-syscall long_namespace_xml lsframe1 lsframe2 Makefile Makefile.in mallinfo malloc1 malloc2 malloc3 malloc_free_fill malloc_usable manuel1 manuel2 manuel3 match-overrun memalign2 memalign_test memcmptest mempool metadata mismatches mmaptest nanoleak nanoleak2 new_nothrow new_override noisy_child null_socket origin1-yes origin2-not-quite origin3-no origin4-many origin5-bz2 origin6-fp oset_test overlap partial_load partiallydefinedeq pdb-realloc pdb-realloc2 pipe pointer-trace post-syscall realloc1 realloc2 realloc3 scalar scalar_exit_group scalar_fork scalar_supp scalar_vfork sh-mem sh-mem-random sigaltstack sigkill signal2 sigprocmask stack_changes stack_switch *.stderr.diff* *.stderr.out *.stdout.diff* *.stdout.out strchr str_tester supp1 supp2 suppfree supp_unknown threadederrno trivialleak varinfo1 varinfo2 varinfo3 varinfo4 varinfo5 varinfo5so.so varinfo6 vcpu_bz2 vcpu_fbench vcpu_fnfns vgtest_ume weirdioctl with space wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 wrap7 wrap7so.so wrap8 writev xml1 zeropage + addressable badaddrvalue badfree badjump badjump2 badloop badpoll badrw brk brk2 buflen_check clientperm clientstackperm custom_alloc deep_templates .deps describe-block dir doublefree erringfds error_counts errs1 execve execve2 exitprog file_locking filter_leak_check_size filter_stderr fprw fwrite hello inits inline leak-0 leak-cycle leakotron leak-pool leak-regroot leak-tree linux-syscalls-2007 linux-syslog-syscall linux-timerfd-syscall long_namespace_xml lsframe1 lsframe2 Makefile Makefile.in mallinfo malloc1 malloc2 malloc3 malloc_free_fill malloc_usable manuel1 manuel2 manuel3 match-overrun memalign2 memalign_test memcmptest mempool metadata mismatches mmaptest nanoleak nanoleak2 new_nothrow new_override noisy_child null_socket origin1-yes origin2-not-quite origin3-no origin4-many origin5-bz2 origin6-fp oset_test overlap partial_load partiallydefinedeq pdb-realloc pdb-realloc2 pipe pointer-trace post-syscall realloc1 realloc2 realloc3 scalar scalar_exit_group scalar_fork scalar_supp scalar_vfork sh-mem sh-mem-random sigaltstack sigkill signal2 sigprocmask stack_changes stack_switch *.stderr.diff* *.stderr.out *.stdout.diff* *.stdout.out strchr str_tester supp1 supp2 suppfree supp_unknown threadederrno trivialleak varinfo1 varinfo2 varinfo3 varinfo4 varinfo5 varinfo5so.so varinfo6 vcpu_bz2 vcpu_fbench vcpu_fnfns vgtest_ume weirdioctl with space wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 wrap7 wrap7so.so wrap8 writev xml1 zeropage |
|
From: <sv...@va...> - 2008-07-03 16:37:36
|
Author: bart Date: 2008-07-03 17:37:43 +0100 (Thu, 03 Jul 2008) New Revision: 8348 Log: Updated Subversion properties. Modified: trunk/exp-drd/ Property changes on: trunk/exp-drd ___________________________________________________________________ Name: svn:ignore - .deps exp-drd-amd64-linux Makefile Makefile.in vgpreload_exp-drd-amd64-linux.so + .deps exp-drd-amd64-linux exp-drd-x86-linux Makefile Makefile.in vgpreload_exp-drd-amd64-linux.so |
|
From: <sv...@va...> - 2008-07-03 16:36:34
|
Author: bart Date: 2008-07-03 17:36:42 +0100 (Thu, 03 Jul 2008) New Revision: 8347 Log: Updated Subversion properties. Modified: trunk/exp-drd/tests/ Property changes on: trunk/exp-drd/tests ___________________________________________________________________ Name: svn:ignore - .deps drd_bitmap_test fp_race hg01_all_ok hg02_deadlock hg03_inherit hg04_race hg05_race2 hg06_readshared linuxthreads_det Makefile Makefile.in matinv memory_allocation new_delete omp_matinv omp_prime pth_barrier pth_broadcast pth_cond_race pth_create_chain pth_detached pth_detached_sem recursive_mutex rwlock_race rwlock_test sem_as_mutex sigalrm *.stderr.diff* *.stderr.out *.stdout.diff* *.stdout.out tc01_simple_race tc02_simple_tls tc03_re_excl tc04_free_lock tc05_simple_race tc06_two_races tc07_hbl1 tc08_hbl2 tc09_bad_unlock tc10_rec_lock tc11_XCHG tc12_rwl_trivial tc13_laog1 tc15_laog_lockdel tc16_byterace tc17_sembar tc18_semabuse tc19_shadowmem tc20_verifywrap tc21_pthonce tc22_exit_w_lock tc23_bogus_condwait tc24_nonzero_sem trylock + .deps drd_bitmap_test fp_race hg01_all_ok hg02_deadlock hg03_inherit hg04_race hg05_race2 hg06_readshared hold_lock linuxthreads_det Makefile Makefile.in matinv memory_allocation new_delete omp_matinv omp_prime pth_barrier pth_barrier_reinit pth_broadcast pth_cond_race pth_create_chain pth_detached pth_detached_sem pth_inconsistent_cond_wait recursive_mutex rwlock_race rwlock_test sem_as_mutex sigalrm *.stderr.diff* *.stderr.out *.stdout.diff* *.stdout.out tc01_simple_race tc02_simple_tls tc03_re_excl tc04_free_lock tc05_simple_race tc06_two_races tc07_hbl1 tc08_hbl2 tc09_bad_unlock tc10_rec_lock tc11_XCHG tc12_rwl_trivial tc13_laog1 tc15_laog_lockdel tc16_byterace tc17_sembar tc18_semabuse tc19_shadowmem tc20_verifywrap tc21_pthonce tc22_exit_w_lock tc23_bogus_condwait tc24_nonzero_sem trylock |
|
From: <sv...@va...> - 2008-07-03 16:34:17
|
Author: bart Date: 2008-07-03 17:34:23 +0100 (Thu, 03 Jul 2008) New Revision: 8346 Log: Updated Subversion properties. Modified: trunk/exp-drd/scripts/ Property changes on: trunk/exp-drd/scripts ___________________________________________________________________ Name: svn:ignore + download-and-build-splash2 |
|
From: <sv...@va...> - 2008-07-03 16:23:45
|
Author: bart
Date: 2008-07-03 17:23:48 +0100 (Thu, 03 Jul 2008)
New Revision: 8345
Log:
Updated test plan.
Modified:
trunk/exp-drd/Testing.txt
Modified: trunk/exp-drd/Testing.txt
===================================================================
--- trunk/exp-drd/Testing.txt 2008-07-03 16:23:17 UTC (rev 8344)
+++ trunk/exp-drd/Testing.txt 2008-07-03 16:23:48 UTC (rev 8345)
@@ -14,8 +14,9 @@
./vg-in-place --trace-children=yes --tool=exp-drd knode
./vg-in-place --trace-children=yes --tool=exp-drd --check-stack-var=yes knode
./vg-in-place --trace-children=yes --tool=exp-drd amarokapp
-4. Test whether DRD works with standard GNOME applications. Expect race reports
- after having closed the GNOME terminal window:
+4. Test whether DRD works with standard GNOME applications. Expect
+ race reports triggered by ORBit_RootObject_duplicate() and after
+ having closed the GNOME terminal window:
./vg-in-place --trace-children=yes --tool=exp-drd gnome-terminal
5. Test DRD with Firefox. First of all, build and install Firefox 3. Next,
run the following command:
|
|
From: <sv...@va...> - 2008-07-03 16:23:23
|
Author: bart Date: 2008-07-03 17:23:17 +0100 (Thu, 03 Jul 2008) New Revision: 8344 Log: Updated to do list. Modified: trunk/exp-drd/TODO.txt Modified: trunk/exp-drd/TODO.txt =================================================================== --- trunk/exp-drd/TODO.txt 2008-07-03 12:29:16 UTC (rev 8343) +++ trunk/exp-drd/TODO.txt 2008-07-03 16:23:17 UTC (rev 8344) @@ -4,19 +4,17 @@ Data-race detection algorithm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Let DRD print a warning message when, after 30s runtime, the ratio of - the number of mutex lock / unlock calls to the number of executed basic - blocks exceeds a certain threshold. Test with Firefox and nautilus. - Propose to rename exp-drd back to drd. - Memory pool support. +- Find out why DRD reports an error on the POSIX implementation of libgomp.so. - Add locking order checking. Start from the following information: * http://sourceforge.net/mailarchive/message.php?msg_id=alpine.LNX.1.10.0803270822080.17890%40mudge.stoecker.eu * http://lwn.net/Articles/185605/ * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/lockdep-design.txt;h=488773018152056ea159685e732e42452a7ae142;hb=HEAD - Make sure tc14_laog_dinphils is run during exp-drd regression tests (only possible after locking order checking is implemented). -- Find out why no line number or variable name information is printed for - races detected in parallel sections of OpenMP programs. An example: +- Find out why no variable name information is printed for races + detected in parallel sections of OpenMP programs. An example: ./vg-in-place --tool=exp-drd exp-drd/tests/omp_prime 4 -t 2 |
|
From: <sv...@va...> - 2008-07-03 12:29:10
|
Author: bart
Date: 2008-07-03 13:29:16 +0100 (Thu, 03 Jul 2008)
New Revision: 8343
Log:
Fixed order of semaphore call stack and semaphore first observed call stack printing.
Modified:
trunk/exp-drd/drd_error.c
trunk/exp-drd/tests/tc18_semabuse.stderr.exp
trunk/exp-drd/tests/tc20_verifywrap.stderr.exp
trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3
trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp
trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b
trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8
Modified: trunk/exp-drd/drd_error.c
===================================================================
--- trunk/exp-drd/drd_error.c 2008-07-03 11:58:52 UTC (rev 8342)
+++ trunk/exp-drd/drd_error.c 2008-07-03 12:29:16 UTC (rev 8343)
@@ -235,8 +235,8 @@
"%s: semaphore 0x%lx",
VG_(get_error_string)(e),
sei->semaphore);
+ VG_(pp_ExeContext)(VG_(get_error_where)(e));
first_observed(sei->semaphore);
- VG_(pp_ExeContext)(VG_(get_error_where)(e));
break;
}
case BarrierErr: {
Modified: trunk/exp-drd/tests/tc18_semabuse.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc18_semabuse.stderr.exp 2008-07-03 11:58:52 UTC (rev 8342)
+++ trunk/exp-drd/tests/tc18_semabuse.stderr.exp 2008-07-03 12:29:16 UTC (rev 8343)
@@ -1,16 +1,16 @@
Semaphore reinitialization: semaphore 0x........
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc18_semabuse.c:26)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc18_semabuse.c:23)
- at 0x........: sem_init* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc18_semabuse.c:26)
Invalid semaphore: semaphore 0x........
+ at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc18_semabuse.c:34)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc18_semabuse.c:23)
- at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc18_semabuse.c:34)
ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
Modified: trunk/exp-drd/tests/tc20_verifywrap.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap.stderr.exp 2008-07-03 11:58:52 UTC (rev 8342)
+++ trunk/exp-drd/tests/tc20_verifywrap.stderr.exp 2008-07-03 12:29:16 UTC (rev 8343)
@@ -112,21 +112,21 @@
Semaphore reinitialization: semaphore 0x........
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:231)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_init* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:231)
FIXME: can't figure out how to verify wrap of sem_destroy
Invalid semaphore: semaphore 0x........
+ at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:242)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:242)
FIXME: can't figure out how to verify wrap of sem_post
Modified: trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 2008-07-03 11:58:52 UTC (rev 8342)
+++ trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 2008-07-03 12:29:16 UTC (rev 8343)
@@ -108,21 +108,21 @@
Semaphore reinitialization: semaphore 0x........
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:231)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_init* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:231)
FIXME: can't figure out how to verify wrap of sem_destroy
Invalid semaphore: semaphore 0x........
+ at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:242)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:242)
FIXME: can't figure out how to verify wrap of sem_post
Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp 2008-07-03 11:58:52 UTC (rev 8342)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp 2008-07-03 12:29:16 UTC (rev 8343)
@@ -138,11 +138,11 @@
[1/1] semaphore_init 0x........
Semaphore reinitialization: semaphore 0x........
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:231)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_init* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:231)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -150,11 +150,11 @@
[1/1] semaphore_post_wait 0x........
Invalid semaphore: semaphore 0x........
+ at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:242)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:242)
[1/1] semaphore_post 0x........
FIXME: can't figure out how to verify wrap of sem_post
Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2008-07-03 11:58:52 UTC (rev 8342)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2008-07-03 12:29:16 UTC (rev 8343)
@@ -132,11 +132,11 @@
[1/1] semaphore_init 0x........
Semaphore reinitialization: semaphore 0x........
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:231)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_init* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:231)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -144,11 +144,11 @@
[1/1] semaphore_post_wait 0x........
Invalid semaphore: semaphore 0x........
+ at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:242)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:242)
[1/1] semaphore_post 0x........
FIXME: can't figure out how to verify wrap of sem_post
Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b 2008-07-03 11:58:52 UTC (rev 8342)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b 2008-07-03 12:29:16 UTC (rev 8343)
@@ -37,18 +37,27 @@
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:116)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:121)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] mutex_unlock invalid mutex 0x........ rc 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
---------------- pthread_cond_wait et al ----------------
@@ -59,6 +68,9 @@
Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:145)
[1/1] cond_pre_wait cond 0x........
[1/1] cond_post_wait cond 0x........
[1/1] cond_post_wait error checking mutex 0x........ rc 0 owner 0
@@ -81,6 +93,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:179)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:178)
(1) no error on next line
(2) no error on next line
(3) ERROR on next line
@@ -88,10 +103,16 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:196)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
Reader-writer lock reinitialization: rwlock 0x.........
at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:199)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
(4) no error on next line
(5) no error on next line
(6) no error on next line
@@ -101,6 +122,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:212)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
---------------- sem_* ----------------
@@ -110,6 +134,9 @@
Semaphore reinitialization: semaphore 0x........
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:231)
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -119,6 +146,9 @@
Invalid semaphore: semaphore 0x........
at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:242)
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
[1/1] semaphore_post 0x........
FIXME: can't figure out how to verify wrap of sem_post
Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 2008-07-03 11:58:52 UTC (rev 8342)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 2008-07-03 12:29:16 UTC (rev 8343)
@@ -143,11 +143,11 @@
[1/1] semaphore_post_wait 0x........
Invalid semaphore: semaphore 0x........
+ at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:242)
semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:228)
- at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:242)
[1/1] semaphore_post 0x........
FIXME: can't figure out how to verify wrap of sem_post
|
|
From: <sv...@va...> - 2008-07-03 11:58:45
|
Author: bart
Date: 2008-07-03 12:58:52 +0100 (Thu, 03 Jul 2008)
New Revision: 8342
Log:
Updated more expected output files.
Modified:
trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3
trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
Modified: trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 2008-07-03 10:57:30 UTC (rev 8341)
+++ trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 2008-07-03 11:58:52 UTC (rev 8342)
@@ -31,14 +31,23 @@
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:116)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:121)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
---------------- pthread_cond_wait et al ----------------
Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2008-07-03 10:57:30 UTC (rev 8341)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2008-07-03 11:58:52 UTC (rev 8342)
@@ -37,18 +37,27 @@
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:116)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:121)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] mutex_unlock invalid mutex 0x........ rc 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:116)
---------------- pthread_cond_wait et al ----------------
|
|
From: Bart V. A. <bar...@gm...> - 2008-07-03 11:41:34
|
Hello Julian, I'd like to rename exp-drd into drd. Is this something I can do myself ? Bart. |
|
From: <sv...@va...> - 2008-07-03 10:57:24
|
Author: bart
Date: 2008-07-03 11:57:30 +0100 (Thu, 03 Jul 2008)
New Revision: 8341
Log:
Made error messages more verbose.
Modified:
trunk/exp-drd/drd_clientobj.c
trunk/exp-drd/drd_clientobj.h
trunk/exp-drd/drd_error.c
trunk/exp-drd/drd_mutex.c
trunk/exp-drd/tests/hold_lock_1.stderr.exp
trunk/exp-drd/tests/hold_lock_2.stderr.exp
trunk/exp-drd/tests/pth_barrier_reinit.stderr.exp
trunk/exp-drd/tests/pth_cond_race.stderr.exp
trunk/exp-drd/tests/pth_inconsistent_cond_wait.stderr.exp
trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp
trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp-glibc2.8
trunk/exp-drd/tests/tc10_rec_lock.stderr.exp
trunk/exp-drd/tests/tc12_rwl_trivial.stderr.exp
trunk/exp-drd/tests/tc18_semabuse.stderr.exp
trunk/exp-drd/tests/tc20_verifywrap.stderr.exp
trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3
trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.8
trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp
trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8
trunk/exp-drd/tests/tc22_exit_w_lock.stderr.exp-64bit
trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp
trunk/exp-drd/tests/trylock.stderr.exp
Modified: trunk/exp-drd/drd_clientobj.c
===================================================================
--- trunk/exp-drd/drd_clientobj.c 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/drd_clientobj.c 2008-07-03 10:57:30 UTC (rev 8341)
@@ -68,6 +68,15 @@
s_clientobj = 0;
}
+/** Return the data associated with the client object at client address addr.
+ * Return 0 if there is no client object in the set with the specified start
+ * address.
+ */
+DrdClientobj* clientobj_get_any(const Addr addr)
+{
+ return VG_(OSetGen_Lookup)(s_clientobj, &addr);
+}
+
/** Return the data associated with the client object at client address addr
* and that has object type t. Return 0 if there is no client object in the
* set with the specified start address.
@@ -121,6 +130,7 @@
VG_(memset)(p, 0, sizeof(*p));
p->any.a1 = a1;
p->any.type = t;
+ p->any.first_observed_at = VG_(record_ExeContext)(VG_(get_running_tid)(), 0);
VG_(OSetGen_Insert)(s_clientobj, p);
tl_assert(VG_(OSetGen_Lookup)(s_clientobj, &a1) == p);
drd_start_suppression(a1, a1 + 1, "clientobj");
@@ -200,3 +210,15 @@
return p;
}
+const char* clientobj_type_name(const ObjType t)
+{
+ switch (t)
+ {
+ case ClientMutex: return "mutex";
+ case ClientCondvar: return "cond";
+ case ClientSemaphore: return "semaphore";
+ case ClientBarrier: return "barrier";
+ case ClientRwlock: return "rwlock";
+ }
+ return "(unknown)";
+}
Modified: trunk/exp-drd/drd_clientobj.h
===================================================================
--- trunk/exp-drd/drd_clientobj.h 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/drd_clientobj.h 2008-07-03 10:57:30 UTC (rev 8341)
@@ -51,9 +51,10 @@
struct any
{
- Addr a1;
- ObjType type;
- void (*cleanup)(union drd_clientobj*);
+ Addr a1;
+ ObjType type;
+ void (*cleanup)(union drd_clientobj*);
+ ExeContext* first_observed_at;
};
struct mutex_info
@@ -61,23 +62,24 @@
Addr a1;
ObjType type;
void (*cleanup)(union drd_clientobj*);
+ ExeContext* first_observed_at;
MutexT mutex_type; // pthread_mutex_t or pthread_spinlock_t.
int recursion_count; // 0 if free, >= 1 if locked.
DrdThreadId owner; // owner if locked, last owner if free.
Segment* last_locked_segment;
ULong acquiry_time_ms;
- ExeContext* first_observed_at;
ExeContext* acquired_at;
};
struct cond_info
{
- Addr a1;
- ObjType type;
- void (*cleanup)(union drd_clientobj*);
- int waiter_count;
- Addr mutex; //Client mutex specified in pthread_cond_wait() call, and null
- //if no client threads are currently waiting on this cond.var.
+ Addr a1;
+ ObjType type;
+ void (*cleanup)(union drd_clientobj*);
+ ExeContext* first_observed_at;
+ int waiter_count;
+ Addr mutex; // Client mutex specified in pthread_cond_wait() call, and
+ // null if no client threads are currently waiting on this cond.var.
};
struct semaphore_info
@@ -85,6 +87,7 @@
Addr a1;
ObjType type;
void (*cleanup)(union drd_clientobj*);
+ ExeContext* first_observed_at;
UWord value; // Semaphore value.
UWord waiters; // Number of threads inside sem_wait().
DrdThreadId last_sem_post_tid; // Thread ID associated with last sem_post().
@@ -96,6 +99,7 @@
Addr a1;
ObjType type;
void (*cleanup)(union drd_clientobj*);
+ ExeContext* first_observed_at;
BarrierT barrier_type; // pthread_barrier or gomp_barrier.
Word count; // Participant count in a barrier wait.
Word pre_iteration; // pthread_barrier_wait() call count modulo two.
@@ -110,6 +114,7 @@
Addr a1;
ObjType type;
void (*cleanup)(union drd_clientobj*);
+ ExeContext* first_observed_at;
OSet* thread_info;
ULong acquiry_time_ms;
ExeContext* acquired_at;
@@ -131,6 +136,7 @@
void clientobj_set_trace(const Bool trace);
void clientobj_init(void);
void clientobj_cleanup(void);
+DrdClientobj* clientobj_get_any(const Addr addr);
DrdClientobj* clientobj_get(const Addr addr, const ObjType t);
Bool clientobj_present(const Addr a1, const Addr a2);
DrdClientobj* clientobj_add(const Addr a1, const ObjType t);
@@ -138,5 +144,7 @@
void clientobj_stop_using_mem(const Addr a1, const Addr a2);
void clientobj_resetiter(void);
DrdClientobj* clientobj_next(const ObjType t);
+const char* clientobj_type_name(const ObjType t);
+
#endif /* __DRD_CLIENTOBJ_H */
Modified: trunk/exp-drd/drd_error.c
===================================================================
--- trunk/exp-drd/drd_error.c 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/drd_error.c 2008-07-03 10:57:30 UTC (rev 8341)
@@ -70,21 +70,23 @@
}
}
-/** Report where a mutex has been observed for the first time. The printed
- * call stack will either refer to a pthread_mutex_init() or a
- * pthread_mutex_lock() call.
+/** Report where an object has been observed for the first time. The printed
+ * call stack will either refer to a pthread_*_init() or a pthread_*lock()
+ * call.
*/
-static void mutex_first_observed(const Addr mutex)
+static void first_observed(const Addr obj)
{
- struct mutex_info* mi;
+ DrdClientobj* cl;
- mi = mutex_get(mutex);
- if (mi)
+ cl = clientobj_get_any(obj);
+ if (cl)
{
- tl_assert(mi->first_observed_at);
+ tl_assert(cl->any.first_observed_at);
VG_(message)(Vg_UserMsg,
- "Mutex 0x%lx was first observed at:", mutex);
- VG_(pp_ExeContext)(mi->first_observed_at);
+ "%s 0x%lx was first observed at:",
+ clientobj_type_name(cl->any.type),
+ obj);
+ VG_(pp_ExeContext)(cl->any.first_observed_at);
}
}
@@ -176,6 +178,7 @@
p->mutex);
}
VG_(pp_ExeContext)(VG_(get_error_where)(e));
+ first_observed(p->mutex);
break;
}
case CondErr: {
@@ -185,6 +188,7 @@
VG_(get_error_string)(e),
cdei->cond);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
+ first_observed(cdei->cond);
break;
}
case CondDestrErr: {
@@ -195,7 +199,7 @@
cdi->cond, cdi->mutex,
DrdThreadIdToVgThreadId(cdi->tid), cdi->tid);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
- mutex_first_observed(cdi->mutex);
+ first_observed(cdi->mutex);
break;
}
case CondRaceErr: {
@@ -206,7 +210,8 @@
" by the signalling thread.",
cei->cond, cei->mutex);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
- mutex_first_observed(cei->mutex);
+ first_observed(cei->cond);
+ first_observed(cei->mutex);
break;
}
case CondWaitErr: {
@@ -218,8 +223,9 @@
cwei->mutex1,
cwei->mutex2);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
- mutex_first_observed(cwei->mutex1);
- mutex_first_observed(cwei->mutex2);
+ first_observed(cwei->cond);
+ first_observed(cwei->mutex1);
+ first_observed(cwei->mutex2);
break;
}
case SemaphoreErr: {
@@ -229,17 +235,19 @@
"%s: semaphore 0x%lx",
VG_(get_error_string)(e),
sei->semaphore);
+ first_observed(sei->semaphore);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
break;
}
case BarrierErr: {
- BarrierErrInfo* sei =(BarrierErrInfo*)(VG_(get_error_extra)(e));
- tl_assert(sei);
+ BarrierErrInfo* bei =(BarrierErrInfo*)(VG_(get_error_extra)(e));
+ tl_assert(bei);
VG_(message)(Vg_UserMsg,
"%s: barrier 0x%lx",
VG_(get_error_string)(e),
- sei->barrier);
+ bei->barrier);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
+ first_observed(bei->barrier);
break;
}
case RwlockErr: {
@@ -250,6 +258,7 @@
VG_(get_error_string)(e),
p->rwlock);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
+ first_observed(p->rwlock);
break;
}
case HoldtimeErr: {
@@ -265,6 +274,7 @@
p->hold_time_ms,
p->threshold_ms);
VG_(pp_ExeContext)(VG_(get_error_where)(e));
+ first_observed(p->synchronization_object);
break;
}
case GenericErr: {
Modified: trunk/exp-drd/drd_mutex.c
===================================================================
--- trunk/exp-drd/drd_mutex.c 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/drd_mutex.c 2008-07-03 10:57:30 UTC (rev 8341)
@@ -76,7 +76,6 @@
p->owner = DRD_INVALID_THREADID;
p->last_locked_segment = 0;
p->acquiry_time_ms = 0;
- p->first_observed_at = VG_(record_ExeContext)(VG_(get_running_tid)(), 0);
p->acquired_at = 0;
}
Modified: trunk/exp-drd/tests/hold_lock_1.stderr.exp
===================================================================
--- trunk/exp-drd/tests/hold_lock_1.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/hold_lock_1.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -6,6 +6,9 @@
Lock on mutex 0x........ was held during ... ms (threshold: 500 ms).
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (hold_lock.c:?)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (hold_lock.c:?)
Locking rwlock exclusively ...
Acquired at:
@@ -14,6 +17,9 @@
Lock on rwlock 0x........ was held during ... ms (threshold: 500 ms).
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (hold_lock.c:?)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (hold_lock.c:?)
Locking rwlock shared ...
Done.
Modified: trunk/exp-drd/tests/hold_lock_2.stderr.exp
===================================================================
--- trunk/exp-drd/tests/hold_lock_2.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/hold_lock_2.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -8,6 +8,9 @@
Lock on rwlock 0x........ was held during ... ms (threshold: 500 ms).
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (hold_lock.c:?)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (hold_lock.c:?)
Done.
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Modified: trunk/exp-drd/tests/pth_barrier_reinit.stderr.exp
===================================================================
--- trunk/exp-drd/tests/pth_barrier_reinit.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/pth_barrier_reinit.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -2,5 +2,8 @@
Barrier reinitializatoin: barrier 0x........
at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_barrier_reinit.c:?)
+barrier 0x........ was first observed at:
+ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_barrier_reinit.c:?)
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Modified: trunk/exp-drd/tests/pth_cond_race.stderr.exp
===================================================================
--- trunk/exp-drd/tests/pth_cond_race.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/pth_cond_race.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -6,7 +6,10 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
-Mutex 0x........ was first observed at:
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_cond_race.c:?)
+mutex 0x........ was first observed at:
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_cond_race.c:?)
Modified: trunk/exp-drd/tests/pth_inconsistent_cond_wait.stderr.exp
===================================================================
--- trunk/exp-drd/tests/pth_inconsistent_cond_wait.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/pth_inconsistent_cond_wait.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -6,10 +6,13 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
-Mutex 0x........ was first observed at:
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_inconsistent_cond_wait.c:?)
+mutex 0x........ was first observed at:
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_inconsistent_cond_wait.c:?)
-Mutex 0x........ was first observed at:
+mutex 0x........ was first observed at:
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_inconsistent_cond_wait.c:?)
@@ -17,14 +20,20 @@
Probably a race condition: condition variable 0x........ has been signaled but the associated mutex 0x........ is not locked by the signalling thread.
at 0x........: pthread_cond_signal* (drd_pthread_intercepts.c:?)
by 0x........: main (pth_inconsistent_cond_wait.c:?)
-Mutex 0x........ was first observed at:
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_inconsistent_cond_wait.c:?)
+mutex 0x........ was first observed at:
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_inconsistent_cond_wait.c:?)
Probably a race condition: condition variable 0x........ has been signaled but the associated mutex 0x........ is not locked by the signalling thread.
at 0x........: pthread_cond_signal* (drd_pthread_intercepts.c:?)
by 0x........: main (pth_inconsistent_cond_wait.c:?)
-Mutex 0x........ was first observed at:
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_inconsistent_cond_wait.c:?)
+mutex 0x........ was first observed at:
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_inconsistent_cond_wait.c:?)
Modified: trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -3,6 +3,10 @@
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: nearly_main (tc09_bad_unlock.c:27)
by 0x........: main (tc09_bad_unlock.c:49)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:23)
+ by 0x........: main (tc09_bad_unlock.c:49)
Thread 2:
Mutex not locked by calling thread: mutex 0x........, recursion count 1, owner 1.
@@ -11,6 +15,10 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:31)
+ by 0x........: main (tc09_bad_unlock.c:49)
Thread 1:
The object at address 0x........ is not a mutex.
@@ -26,6 +34,10 @@
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: nearly_main (tc09_bad_unlock.c:27)
by 0x........: main (tc09_bad_unlock.c:50)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:23)
+ by 0x........: main (tc09_bad_unlock.c:50)
Thread 2:
Mutex not locked by calling thread: mutex 0x........, recursion count 1, owner 1.
@@ -34,6 +46,10 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:31)
+ by 0x........: main (tc09_bad_unlock.c:50)
Thread 1:
The object at address 0x........ is not a mutex.
Modified: trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp-glibc2.8
===================================================================
--- trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp-glibc2.8 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc09_bad_unlock.stderr.exp-glibc2.8 2008-07-03 10:57:30 UTC (rev 8341)
@@ -3,6 +3,10 @@
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: nearly_main (tc09_bad_unlock.c:27)
by 0x........: main (tc09_bad_unlock.c:49)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:23)
+ by 0x........: main (tc09_bad_unlock.c:49)
Thread 2:
Mutex not locked by calling thread: mutex 0x........, recursion count 1, owner 1.
@@ -11,6 +15,10 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:31)
+ by 0x........: main (tc09_bad_unlock.c:49)
Thread 1:
The object at address 0x........ is not a mutex.
@@ -26,6 +34,10 @@
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: nearly_main (tc09_bad_unlock.c:27)
by 0x........: main (tc09_bad_unlock.c:50)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:23)
+ by 0x........: main (tc09_bad_unlock.c:50)
Thread 2:
Mutex not locked by calling thread: mutex 0x........, recursion count 1, owner 1.
@@ -34,6 +46,10 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:31)
+ by 0x........: main (tc09_bad_unlock.c:50)
Thread 1:
The object at address 0x........ is not a mutex.
Modified: trunk/exp-drd/tests/tc10_rec_lock.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc10_rec_lock.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc10_rec_lock.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -10,5 +10,9 @@
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: nearly_main (tc10_rec_lock.c:42)
by 0x........: main (tc10_rec_lock.c:47)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: nearly_main (tc10_rec_lock.c:24)
+ by 0x........: main (tc10_rec_lock.c:47)
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Modified: trunk/exp-drd/tests/tc12_rwl_trivial.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc12_rwl_trivial.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc12_rwl_trivial.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -2,5 +2,8 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc12_rwl_trivial.c:29)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc12_rwl_trivial.c:18)
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Modified: trunk/exp-drd/tests/tc18_semabuse.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc18_semabuse.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc18_semabuse.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -1,9 +1,15 @@
Semaphore reinitialization: semaphore 0x........
+semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc18_semabuse.c:23)
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc18_semabuse.c:26)
Invalid semaphore: semaphore 0x........
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc18_semabuse.c:23)
at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc18_semabuse.c:34)
Modified: trunk/exp-drd/tests/tc20_verifywrap.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc20_verifywrap.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -28,18 +28,30 @@
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:108)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:116)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:121)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
---------------- pthread_cond_wait et al ----------------
@@ -47,6 +59,9 @@
Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:145)
FIXME: can't figure out how to verify wrap of pthread_cond_signal
@@ -60,6 +75,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:179)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:178)
(1) no error on next line
(2) no error on next line
(3) ERROR on next line
@@ -67,10 +85,16 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:196)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
Reader-writer lock reinitialization: rwlock 0x.........
at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:199)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
(4) no error on next line
(5) no error on next line
(6) no error on next line
@@ -80,18 +104,27 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:212)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
---------------- sem_* ----------------
Semaphore reinitialization: semaphore 0x........
+semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:231)
FIXME: can't figure out how to verify wrap of sem_destroy
Invalid semaphore: semaphore 0x........
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:242)
Modified: trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 2008-07-03 10:57:30 UTC (rev 8341)
@@ -46,6 +46,9 @@
Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:145)
FIXME: can't figure out how to verify wrap of pthread_cond_signal
@@ -59,6 +62,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:179)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:178)
(1) no error on next line
(2) no error on next line
(3) ERROR on next line
@@ -66,10 +72,16 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:196)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
Reader-writer lock reinitialization: rwlock 0x.........
at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:199)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
(4) no error on next line
(5) no error on next line
(6) no error on next line
@@ -79,18 +91,27 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:212)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
---------------- sem_* ----------------
Semaphore reinitialization: semaphore 0x........
+semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:231)
FIXME: can't figure out how to verify wrap of sem_destroy
Invalid semaphore: semaphore 0x........
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:242)
Modified: trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.8
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.8 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.8 2008-07-03 10:57:30 UTC (rev 8341)
@@ -28,18 +28,30 @@
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:108)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:116)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:121)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
---------------- pthread_cond_wait et al ----------------
@@ -47,6 +59,9 @@
Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:145)
FIXME: can't figure out how to verify wrap of pthread_cond_signal
@@ -60,6 +75,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:179)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:178)
(1) no error on next line
(2) no error on next line
(3) ERROR on next line
@@ -67,10 +85,16 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:196)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
Reader-writer lock reinitialization: rwlock 0x.........
at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:199)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
(4) no error on next line
(5) no error on next line
(6) no error on next line
@@ -88,6 +112,9 @@
Invalid semaphore: semaphore 0x........
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:242)
Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -34,24 +34,36 @@
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:108)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:116)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:121)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] mutex_unlock invalid mutex 0x........ rc 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
---------------- pthread_cond_wait et al ----------------
@@ -62,6 +74,9 @@
Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:145)
[1/1] cond_pre_wait cond 0x........
[1/1] cond_post_wait cond 0x........
[1/1] cond_post_wait error checking mutex 0x........ rc 0 owner 0
@@ -84,6 +99,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:179)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:178)
(1) no error on next line
(2) no error on next line
(3) ERROR on next line
@@ -91,10 +109,16 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:196)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
Reader-writer lock reinitialization: rwlock 0x.........
at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:199)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
(4) no error on next line
(5) no error on next line
(6) no error on next line
@@ -104,6 +128,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:212)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
---------------- sem_* ----------------
@@ -111,7 +138,10 @@
[1/1] semaphore_init 0x........
Semaphore reinitialization: semaphore 0x........
+semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:231)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -120,6 +150,9 @@
[1/1] semaphore_post_wait 0x........
Invalid semaphore: semaphore 0x........
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:242)
[1/1] semaphore_post 0x........
Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2008-07-03 10:57:30 UTC (rev 8341)
@@ -59,6 +59,9 @@
Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:145)
[1/1] cond_pre_wait cond 0x........
[1/1] cond_post_wait cond 0x........
[1/1] cond_post_wait error checking mutex 0x........ rc 0 owner 0
@@ -81,6 +84,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:179)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:178)
(1) no error on next line
(2) no error on next line
(3) ERROR on next line
@@ -88,10 +94,16 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:196)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
Reader-writer lock reinitialization: rwlock 0x.........
at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:199)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
(4) no error on next line
(5) no error on next line
(6) no error on next line
@@ -101,6 +113,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:212)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
---------------- sem_* ----------------
@@ -108,7 +123,10 @@
[1/1] semaphore_init 0x........
Semaphore reinitialization: semaphore 0x........
+semaphore 0x........ was first observed at:
at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:231)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -117,6 +135,9 @@
[1/1] semaphore_post_wait 0x........
Invalid semaphore: semaphore 0x........
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:242)
[1/1] semaphore_post 0x........
Modified: trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8
===================================================================
--- trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.8 2008-07-03 10:57:30 UTC (rev 8341)
@@ -34,24 +34,36 @@
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:108)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:116)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:121)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
[1/1] mutex_unlock invalid mutex 0x........ rc 0
The object at address 0x........ is not a mutex.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:108)
---------------- pthread_cond_wait et al ----------------
@@ -62,6 +74,9 @@
Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:147)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:145)
[1/1] cond_pre_wait cond 0x........
[1/1] cond_post_wait cond 0x........
[1/1] cond_post_wait error checking mutex 0x........ rc 0 owner 0
@@ -84,6 +99,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:179)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:178)
(1) no error on next line
(2) no error on next line
(3) ERROR on next line
@@ -91,10 +109,16 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:196)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
Reader-writer lock reinitialization: rwlock 0x.........
at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:199)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
(4) no error on next line
(5) no error on next line
(6) no error on next line
@@ -104,6 +128,9 @@
Reader-writer lock not locked by calling thread: rwlock 0x.........
at 0x........: pthread_rwlock_unlock* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:212)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:186)
---------------- sem_* ----------------
@@ -116,6 +143,9 @@
[1/1] semaphore_post_wait 0x........
Invalid semaphore: semaphore 0x........
+semaphore 0x........ was first observed at:
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:228)
at 0x........: sem_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:242)
[1/1] semaphore_post 0x........
Modified: trunk/exp-drd/tests/tc22_exit_w_lock.stderr.exp-64bit
===================================================================
--- trunk/exp-drd/tests/tc22_exit_w_lock.stderr.exp-64bit 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc22_exit_w_lock.stderr.exp-64bit 2008-07-03 10:57:30 UTC (rev 8341)
@@ -2,5 +2,11 @@
Mutex still locked at thread exit: mutex 0x........, recursion count 1, owner 3.
at 0x........: pthread_join (drd_pthread_intercepts.c:?)
by 0x........: main (tc22_exit_w_lock.c:43)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
+ by 0x........: child_fn1 (tc22_exit_w_lock.c:18)
+ by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
+ by 0x........: (within libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Modified: trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp
===================================================================
--- trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/tc23_bogus_condwait.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -14,11 +14,17 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:56)
Thread 1:
Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:72)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:51)
Thread 3:
Probably a race condition: condition variable 0x........ has been signaled but the associated mutex 0x........ is not locked by the signalling thread.
@@ -27,7 +33,10 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
-Mutex 0x........ was first observed at:
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:56)
+mutex 0x........ was first observed at:
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:51)
@@ -35,10 +44,16 @@
The object at address 0x........ is not a mutex.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:75)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:57)
The object at address 0x........ is not a mutex.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:75)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:57)
Thread 3:
Probably a race condition: condition variable 0x........ has been signaled but the associated mutex 0x........ is not locked by the signalling thread.
@@ -47,11 +62,20 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:56)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:57)
Thread 1:
Mutex not locked by calling thread: mutex 0x........, recursion count 1, owner 2.
at 0x........: pthread_cond_wait* (drd_pthread_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:78)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:53)
Thread 3:
Probably a race condition: condition variable 0x........ has been signaled but the associated mutex 0x........ is not locked by the signalling thread.
@@ -60,7 +84,10 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
-Mutex 0x........ was first observed at:
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:56)
+mutex 0x........ was first observed at:
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (tc23_bogus_condwait.c:53)
The impossible happened: mutex 0x........ is locked simultaneously by two threads (recursion count 1, owners 2 and 1) !
@@ -72,5 +99,8 @@
by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
by 0x........: (within libpthread-?.?.so)
by 0x........: clone (in /...libc...)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:53)
ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
Modified: trunk/exp-drd/tests/trylock.stderr.exp
===================================================================
--- trunk/exp-drd/tests/trylock.stderr.exp 2008-07-03 09:11:41 UTC (rev 8340)
+++ trunk/exp-drd/tests/trylock.stderr.exp 2008-07-03 10:57:30 UTC (rev 8341)
@@ -9,6 +9,9 @@
Recursive writer locking not allowed: rwlock 0x.........
at 0x........: pthread_rwlock_wrlock* (drd_pthread_intercepts.c:?)
by 0x........: main (trylock.c:?)
+rwlock 0x........ was first observed at:
+ at 0x........: pthread_rwlock_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (trylock.c:?)
Locking mutex via pthread_mutex_trylock().
Locking mutex via pthread_mutex_lock().
Locking mutex via pthread_mutex_timedlock().
|
|
From: Bart V. A. <bar...@gm...> - 2008-07-03 09:47:17
|
On Wed, Jul 2, 2008 at 10:26 PM, Julian Seward <js...@ac...> wrote:
> Am I right to understand that VG_(xml_message)() and VG_(message) are
> functionally identical, or is that not so?
You are right -- in the patch I posted the source code of
VG_(message)() and VG_(xml_message)() is identical.
Is it OK if I apply the patch below to the trunk ? This patch contains
the following changes:
- Made %' a synonym of %, (insert thousands separator).
- Add support for multiple flags past %.
- Add support for %#.
- Add VG_(xml_message)().
- Replace some calls of VG_(message)() by calls to VG_(xml_message)().
These changes can also be found on the FORMATCHECK branch. Some of the
above changes were implemented by Dirk. Any errors are my
responsibility of course.
Bart.
--- coregrind/m_debuglog.c 2008-02-11 20:11:19.000000000 +0100
+++ ../valgrind-fmtcheck/coregrind/m_debuglog.c 2008-07-03
09:25:04.000000000 +0200
@@ -446,7 +446,7 @@ static void emit ( HChar* buf, Int n )
#define VG_MSG_LJUSTIFY 4 /* Must justify on the left. */
#define VG_MSG_PAREN 8 /* Parenthesize if present (for %y) */
#define VG_MSG_COMMA 16 /* Add commas to numbers (for %d, %u) */
-
+#define VG_MSG_ALTFORMAT 32 /* Convert the value to alternate format */
/* Copy a string into the buffer. */
static
@@ -647,25 +647,34 @@ VG_(debugLog_vprintf) (
flags = 0;
n_ls = 0;
width = 0; /* length of the field. */
- if (format[i] == '(') {
- flags |= VG_MSG_PAREN;
- i++;
- }
- /* If ',' follows '%', commas will be inserted. */
- if (format[i] == ',') {
- flags |= VG_MSG_COMMA;
- i++;
- }
- /* If '-' follows '%', justify on the left. */
- if (format[i] == '-') {
- flags |= VG_MSG_LJUSTIFY;
- i++;
- }
- /* If '0' follows '%', pads will be inserted. */
- if (format[i] == '0') {
- flags |= VG_MSG_ZJUSTIFY;
+ while (1) {
+ switch (format[i]) {
+ case '(':
+ flags |= VG_MSG_PAREN;
+ break;
+ case ',':
+ case '\'':
+ /* If ',' or '\'' follows '%', commas will be inserted. */
+ flags |= VG_MSG_COMMA;
+ break;
+ case '-':
+ /* If '-' follows '%', justify on the left. */
+ flags |= VG_MSG_LJUSTIFY;
+ break;
+ case '0':
+ /* If '0' follows '%', pads will be inserted. */
+ flags |= VG_MSG_ZJUSTIFY;
+ break;
+ case '#':
+ /* If '#' follows '%', alternative format will be used. */
+ flags |= VG_MSG_ALTFORMAT;
+ break;
+ default:
+ goto parse_fieldwidth;
+ }
i++;
}
+ parse_fieldwidth:
/* Compute the field length. */
while (format[i] >= '0' && format[i] <= '9') {
width *= 10;
@@ -711,6 +720,11 @@ VG_(debugLog_vprintf) (
case 'x': /* %x */
case 'X': /* %X */
caps = toBool(format[i] == 'X');
+ if (flags & VG_MSG_ALTFORMAT) {
+ ret += 2;
+ send('0',send_arg2);
+ send('x',send_arg2);
+ }
if (is_long)
ret += myvprintf_int64(send, send_arg2, flags, 16, width, caps,
(ULong)(va_arg (vargs, ULong)));
--- coregrind/m_errormgr.c 2008-05-02 20:53:42.000000000 +0200
+++ ../valgrind-fmtcheck/coregrind/m_errormgr.c 2008-07-03
09:25:43.000000000 +0200
@@ -709,7 +709,7 @@ static Bool show_used_suppressions ( voi
continue;
any_supp = True;
if (VG_(clo_xml)) {
- VG_(message)(Vg_DebugMsg,
+ VG_(xml_message)(Vg_DebugMsg,
" <pair>\n"
" <count>%d</count>\n"
" <name>%t</name>\n"
--- coregrind/m_libcprint.c 2008-04-17 18:57:42.000000000 +0200
+++ ../valgrind-fmtcheck/coregrind/m_libcprint.c 2008-07-03
10:45:07.000000000 +0200
@@ -365,6 +365,17 @@ UInt VG_(vmessage) ( VgMsgKind kind, con
return count;
}
+/* Send a single-part XML message. */
+UInt VG_(xml_message) ( VgMsgKind kind, const HChar* format, ... )
+{
+ UInt count;
+ va_list vargs;
+ va_start(vargs,format);
+ count = VG_(vmessage) ( kind, format, vargs );
+ va_end(vargs);
+ return count;
+}
+
/* Send a simple single-part message. */
UInt VG_(message) ( VgMsgKind kind, const HChar* format, ... )
{
--- coregrind/m_main.c 2008-06-06 19:04:59.000000000 +0200
+++ ../valgrind-fmtcheck/coregrind/m_main.c 2008-07-03 09:29:50.000000000 +0200
@@ -747,7 +747,7 @@ static void print_file_vars(Char* format
i++;
}
- VG_(message)(Vg_UserMsg, "<logfilequalifier> <var>%t</var> "
+ VG_(xml_message)(Vg_UserMsg, "<logfilequalifier> <var>%t</var> "
"<value>%t</value> </logfilequalifier>",
qualname,qual);
format[i] = '}';
@@ -853,7 +853,7 @@ static void print_preamble(Bool logging_
VG_(message)(Vg_UserMsg, "");
VG_(message)(Vg_UserMsg, "<pid>%d</pid>", VG_(getpid)());
VG_(message)(Vg_UserMsg, "<ppid>%d</ppid>", VG_(getppid)());
- VG_(message)(Vg_UserMsg, "<tool>%t</tool>", toolname);
+ VG_(xml_message)(Vg_UserMsg, "<tool>%t</tool>", toolname);
if (VG_(clo_log_name))
print_file_vars(VG_(clo_log_name));
if (VG_(clo_xml_user_comment)) {
@@ -868,26 +868,26 @@ static void print_preamble(Bool logging_
VG_(message)(Vg_UserMsg, " <vargv>");
if (VG_(name_of_launcher))
- VG_(message)(Vg_UserMsg, " <exe>%t</exe>",
- VG_(name_of_launcher));
+ VG_(xml_message)(Vg_UserMsg, " <exe>%t</exe>",
+ VG_(name_of_launcher));
else
- VG_(message)(Vg_UserMsg, " <exe>%t</exe>",
- "(launcher name unknown)");
+ VG_(xml_message)(Vg_UserMsg, " <exe>%t</exe>",
+ "(launcher name unknown)");
for (i = 0; i < VG_(sizeXA)( VG_(args_for_valgrind) ); i++) {
- VG_(message)(Vg_UserMsg,
- " <arg>%t</arg>",
- * (HChar**) VG_(indexXA)( VG_(args_for_valgrind), i ));
+ VG_(xml_message)(Vg_UserMsg,
+ " <arg>%t</arg>",
+ * (HChar**) VG_(indexXA)(
VG_(args_for_valgrind), i ));
}
VG_(message)(Vg_UserMsg, " </vargv>");
VG_(message)(Vg_UserMsg, " <argv>");
if (VG_(args_the_exename))
- VG_(message)(Vg_UserMsg, " <exe>%t</exe>",
- VG_(args_the_exename));
+ VG_(xml_message)(Vg_UserMsg, " <exe>%t</exe>",
+ VG_(args_the_exename));
for (i = 0; i < VG_(sizeXA)( VG_(args_for_client) ); i++) {
- VG_(message)(Vg_UserMsg,
- " <arg>%t</arg>",
- * (HChar**) VG_(indexXA)( VG_(args_for_client), i ));
+ VG_(xml_message)(Vg_UserMsg,
+ " <arg>%t</arg>",
+ * (HChar**) VG_(indexXA)( VG_(args_for_client), i ));
}
VG_(message)(Vg_UserMsg, " </argv>");
@@ -1934,11 +1934,12 @@ Int valgrind_main ( Int argc, HChar **ar
if (VG_(clo_xml)) {
HChar buf[50];
VG_(elapsed_wallclock_time)(buf);
- VG_(message)(Vg_UserMsg, "<status>\n"
- " <state>RUNNING</state>\n"
- " <time>%t</time>\n"
- "</status>",
- buf);
+ VG_(xml_message)(Vg_UserMsg,
+ "<status>\n"
+ " <state>RUNNING</state>\n"
+ " <time>%t</time>\n"
+ "</status>",
+ buf);
VG_(message)(Vg_UserMsg, "");
}
@@ -2045,11 +2046,12 @@ void shutdown_actions_NORETURN( ThreadId
VG_(message)(Vg_UserMsg, "");
}
VG_(elapsed_wallclock_time)(buf);
- VG_(message)(Vg_UserMsg, "<status>\n"
- " <state>FINISHED</state>\n"
- " <time>%t</time>\n"
- "</status>",
- buf);
+ VG_(xml_message)(Vg_UserMsg,
+ "<status>\n"
+ " <state>FINISHED</state>\n"
+ " <time>%t</time>\n"
+ "</status>",
+ buf);
VG_(message)(Vg_UserMsg, "");
}
--- include/pub_tool_libcprint.h 2008-06-26 09:26:45.000000000 +0200
+++ ../valgrind-fmtcheck/include/pub_tool_libcprint.h 2008-07-03
09:13:41.000000000 +0200
@@ -85,10 +84,22 @@ typedef
}
VgMsgKind;
-/* Send a single-part message. Appends a newline. */
-extern UInt VG_(message) ( VgMsgKind kind, const HChar* format,
... ) PRINTF_CHECK(2, 3);
+/* Send a single-part XML message. Appends a newline. The format
+ specification may contain any ISO C format specifier or %t.
+ No attempt is made to let the compiler verify consistency of the
+ format string and the argument list. */
+extern UInt VG_(xml_message)( VgMsgKind kind, const HChar* format, ... );
+/* Send a single-part message. Appends a newline. The format
+ specification may contain any ISO C format specifier. The gcc compiler
+ will verify consistency of the format string and the argument list. */
+extern UInt VG_(message)( VgMsgKind kind, const HChar* format, ... )
+ PRINTF_CHECK(2, 3);
+
+extern UInt VG_(vmessage)( VgMsgKind kind, const HChar* format, va_list vargs )
+ PRINTF_CHECK(2, 0);
+
+
-extern UInt VG_(vmessage) ( VgMsgKind kind, const HChar* format,
va_list vargs ) PRINTF_CHECK(2, 0);
#endif // __PUB_TOOL_LIBCPRINT_H
/*--------------------------------------------------------------------*/
--- memcheck/mc_errors.c 2008-05-02 20:53:42.000000000 +0200
+++ ../valgrind-fmtcheck/memcheck/mc_errors.c 2008-07-02
14:01:31.000000000 +0200
@@ -315,14 +315,14 @@ static void mc_pp_AddrInfo ( Addr a, Add
}
case Addr_DataSym:
- VG_(message)(Vg_UserMsg,
- "%sAddress 0x%llx is %llu bytes "
- "inside data symbol \"%t\"%s",
- xpre,
- (ULong)a,
- (ULong)ai->Addr.DataSym.offset,
- ai->Addr.DataSym.name,
- xpost);
+ VG_(xml_message)(Vg_UserMsg,
+ "%sAddress 0x%llx is %llu bytes "
+ "inside data symbol \"%t\"%s",
+ xpre,
+ (ULong)a,
+ (ULong)ai->Addr.DataSym.offset,
+ ai->Addr.DataSym.name,
+ xpost);
break;
case Addr_Variable:
@@ -335,13 +335,13 @@ static void mc_pp_AddrInfo ( Addr a, Add
break;
case Addr_SectKind:
- VG_(message)(Vg_UserMsg,
- "%sAddress 0x%llx is in the %t segment of %t%s",
- xpre,
- (ULong)a,
- VG_(pp_SectKind)(ai->Addr.SectKind.kind),
- ai->Addr.SectKind.objname,
- xpost);
+ VG_(xml_message)(Vg_UserMsg,
+ "%sAddress 0x%llx is in the %t segment of %t%s",
+ xpre,
+ (ULong)a,
+ VG_(pp_SectKind)(ai->Addr.SectKind.kind),
+ ai->Addr.SectKind.objname,
+ xpost);
break;
default:
@@ -568,8 +568,8 @@ void MC_(pp_Error) ( Error* err )
LossRecord* l = extra->Err.Leak.lossRecord;
if (VG_(clo_xml)) {
- VG_(message)(Vg_UserMsg, " <kind>%t</kind>",
- xml_leak_kind(l->loss_mode));
+ VG_(xml_message)(Vg_UserMsg, " <kind>%t</kind>",
+ xml_leak_kind(l->loss_mode));
} else {
VG_(message)(Vg_UserMsg, "");
}
|
|
From: <sv...@va...> - 2008-07-03 09:11:40
|
Author: bart
Date: 2008-07-03 10:11:41 +0100 (Thu, 03 Jul 2008)
New Revision: 8340
Log:
Removed a cast.
Modified:
trunk/exp-omega/o_main.c
Modified: trunk/exp-omega/o_main.c
===================================================================
--- trunk/exp-omega/o_main.c 2008-07-03 09:11:32 UTC (rev 8339)
+++ trunk/exp-omega/o_main.c 2008-07-03 09:11:41 UTC (rev 8340)
@@ -1632,7 +1632,7 @@
VG_(pp_ExeContext)(mb->leaked);
VG_(message)(Vg_UserMsg,
- " Block at %p allocated", (void*)(mb->hdr.key));
+ " Block at %#lx allocated", mb->hdr.key);
VG_(pp_ExeContext)(mb->where);
VG_(message)(Vg_UserMsg,"");
}
|
|
From: <sv...@va...> - 2008-07-03 09:11:31
|
Author: bart Date: 2008-07-03 10:11:32 +0100 (Thu, 03 Jul 2008) New Revision: 8339 Log: Added missing files. Added: branches/FORMATCHECK/exp-drd/tests/pth_barrier_reinit.stderr.exp branches/FORMATCHECK/exp-drd/tests/pth_barrier_reinit.vgtest Added: branches/FORMATCHECK/exp-drd/tests/pth_barrier_reinit.stderr.exp =================================================================== --- branches/FORMATCHECK/exp-drd/tests/pth_barrier_reinit.stderr.exp (rev 0) +++ branches/FORMATCHECK/exp-drd/tests/pth_barrier_reinit.stderr.exp 2008-07-03 09:11:32 UTC (rev 8339) @@ -0,0 +1,6 @@ + +Barrier reinitializatoin: barrier 0x........ + at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) + by 0x........: main (pth_barrier_reinit.c:?) + +ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0) Added: branches/FORMATCHECK/exp-drd/tests/pth_barrier_reinit.vgtest =================================================================== --- branches/FORMATCHECK/exp-drd/tests/pth_barrier_reinit.vgtest (rev 0) +++ branches/FORMATCHECK/exp-drd/tests/pth_barrier_reinit.vgtest 2008-07-03 09:11:32 UTC (rev 8339) @@ -0,0 +1,2 @@ +prereq: ./supported_libpthread +prog: pth_barrier_reinit |
|
From: <sv...@va...> - 2008-07-03 09:02:42
|
Author: bart
Date: 2008-07-03 10:02:49 +0100 (Thu, 03 Jul 2008)
New Revision: 8338
Log:
Merged r8306:8337 from trunk to FORMATCHECK branch.
Added:
branches/FORMATCHECK/exp-drd/drd.h
branches/FORMATCHECK/exp-drd/tests/hg05_race2.stderr.exp-powerpc
Removed:
branches/FORMATCHECK/exp-drd/priv_drd_clientreq.h
Modified:
branches/FORMATCHECK/callgrind/callgrind.h
branches/FORMATCHECK/exp-drd/Makefile.am
branches/FORMATCHECK/exp-drd/TODO.txt
branches/FORMATCHECK/exp-drd/docs/drd-manual.xml
branches/FORMATCHECK/exp-drd/drd_barrier.c
branches/FORMATCHECK/exp-drd/drd_clientreq.c
branches/FORMATCHECK/exp-drd/drd_clientreq.h
branches/FORMATCHECK/exp-drd/drd_main.c
branches/FORMATCHECK/exp-drd/drd_mutex.c
branches/FORMATCHECK/exp-drd/drd_rwlock.c
branches/FORMATCHECK/exp-drd/drd_semaphore.c
branches/FORMATCHECK/exp-drd/tests/fp_race.c
branches/FORMATCHECK/exp-drd/tests/omp_matinv.c
branches/FORMATCHECK/exp-drd/tests/omp_matinv.vgtest
branches/FORMATCHECK/exp-drd/tests/omp_matinv_racy.vgtest
branches/FORMATCHECK/exp-drd/tests/omp_prime.c
branches/FORMATCHECK/exp-drd/tests/omp_prime_racy.vgtest
branches/FORMATCHECK/exp-drd/tests/pth_cond_race.c
branches/FORMATCHECK/exp-drd/tests/pth_detached.c
branches/FORMATCHECK/exp-drd/tests/pth_detached_sem.c
branches/FORMATCHECK/exp-drd/tests/pth_inconsistent_cond_wait.c
branches/FORMATCHECK/exp-drd/tests/run_openmp_test
branches/FORMATCHECK/exp-drd/tests/rwlock_race.c
branches/FORMATCHECK/exp-drd/tests/sem_as_mutex.c
branches/FORMATCHECK/exp-drd/tests/sigalrm.c
branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3
branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b
branches/FORMATCHECK/glibc-2.X-drd.supp
branches/FORMATCHECK/helgrind/hg_main.c
Modified: branches/FORMATCHECK/callgrind/callgrind.h
===================================================================
--- branches/FORMATCHECK/callgrind/callgrind.h 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/callgrind/callgrind.h 2008-07-03 09:02:49 UTC (rev 8338)
@@ -49,7 +49,7 @@
----------------------------------------------------------------
Notice that the above BSD-style license applies to this one file
- (vgprof.h) only. The entire rest of Valgrind is licensed under
+ (callgrind.h) only. The entire rest of Valgrind is licensed under
the terms of the GNU General Public License, version 2. See the
COPYING file in the source distribution for details.
Modified: branches/FORMATCHECK/exp-drd/Makefile.am
===================================================================
--- branches/FORMATCHECK/exp-drd/Makefile.am 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/Makefile.am 2008-07-03 09:02:49 UTC (rev 8338)
@@ -100,6 +100,10 @@
drd_semaphore.c \
drd_suppression.c
+drdincludedir = $(includedir)/valgrind
+
+drdinclude_HEADERS = drd.h
+
noinst_HEADERS = \
drd_barrier.h \
drd_bitmap.h \
@@ -116,7 +120,6 @@
drd_thread.h \
drd_track.h \
drd_vc.h \
- priv_drd_clientreq.h \
pub_drd_bitmap.h
exp_drd_x86_linux_SOURCES = $(DRD_SOURCES_COMMON)
Modified: branches/FORMATCHECK/exp-drd/TODO.txt
===================================================================
--- branches/FORMATCHECK/exp-drd/TODO.txt 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/TODO.txt 2008-07-03 09:02:49 UTC (rev 8338)
@@ -1,18 +1,12 @@
-Last updated May 14, 2008.
+Last updated July 1, 2008.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Data-race detection algorithm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Find out why the following invocations run slowly (high number of mutex
- operations ?):
- (cd exp-drd/splash2/codes/apps/raytrace/inputs && time ../../../../../../vg-in-place --tool=exp-drd --check-stack-var=yes ../RAYTRACE balls4.env)
- (cd exp-drd/splash2/codes/apps/raytrace && time ../../../../../vg-in-place --tool=exp-drd --check-stack-var=yes ./RAYTRACE inputs/teapot.env)
-- Test whether file with DRD client requests is installed properly.
- Let DRD print a warning message when, after 30s runtime, the ratio of
the number of mutex lock / unlock calls to the number of executed basic
blocks exceeds a certain threshold. Test with Firefox and nautilus.
-- Continue discussion about unification of DRD and Helgrind client requests.
- Propose to rename exp-drd back to drd.
- Memory pool support.
- Add locking order checking. Start from the following information:
@@ -28,7 +22,6 @@
Testing
~~~~~~~
-- Find out the memory overhead for exp-drd on the SPLASH-2 benchmarks (ITC: 20x)
- Measure the performance and the memory overhead of exp-drd on the PARSEC
benchmark (http://parsec.cs.princeton.edu/license.htm).
- Test with Synfig Studio (see also http://bugs.kde.org/show_bug.cgi?id=158555)
@@ -37,24 +30,6 @@
Documentation
~~~~~~~~~~~~~
-- Document the command-line options of the exp-drd tool.
-- Explain that happens-before race detectors are also suited for certain
- classes of programs that do not follow a locking discipline
- (e.g. exp-drd/test/matinv.c).
-- Add a note about how much stack is needed for exp-drd itself.
- Explain how to handle transactions (with regard to locking order).
- Continue the discussion on the Valgrind mailing list about docbook and
'make dist'. See also http://bugs.kde.org/show_bug.cgi?id=162121.
-
-
-Limitations
-~~~~~~~~~~~
-- openSUSE 10.3, ppc: unless the glibc debuginfo packages is installed,
- false positives are reported on ld.so.
- See also https://bugzilla.novell.com/show_bug.cgi?id=396197.
-- ppc: reports false positives on atomic operations (VEX limitation). See also
- https://bugs.kde.org/show_bug.cgi?id=162354.
-- Does not work with a glibc library compiled with linuxthreads -- NPTL is
- required for proper operation.
-- Does not work when compiled with gcc 2.95 -- probably a bug in the
- optimizer of gcc 2.95.
Modified: branches/FORMATCHECK/exp-drd/docs/drd-manual.xml
===================================================================
--- branches/FORMATCHECK/exp-drd/docs/drd-manual.xml 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/docs/drd-manual.xml 2008-07-03 09:02:49 UTC (rev 8338)
@@ -504,7 +504,7 @@
<sect2 id="drd-manual.data-races" xreflabel="Data Races">
-<title>Data Races</title>
+<title>Detected Errors: Data Races</title>
<para>
DRD prints a message every time it detects a data race. You should be
@@ -662,7 +662,7 @@
<sect2 id="drd-manual.lock-contention" xreflabel="Lock Contention">
-<title>Lock Contention</title>
+<title>Detected Errors: Lock Contention</title>
<para>
Threads should be able to make progress without being blocked by other
@@ -706,7 +706,7 @@
<sect2 id="drd-manual.api-checks" xreflabel="API Checks">
-<title>Misuse of the POSIX threads API</title>
+<title>Detected Errors: Misuse of the POSIX threads API</title>
<para>
DRD is able to detect and report the following misuses of the POSIX
@@ -805,6 +805,103 @@
</itemizedlist>
</para>
+<para>
+There is one message that needs further explanation, namely sending a
+signal to a condition variable while no lock is held on the mutex
+associated with the signal. Consider e.g. the example <xref
+linkend="Racy use of pthread_cond_wait()"></xref>. In this example the
+code in thread 1 passes if <literal>flag != 0</literal>, or waits
+until it has been signaled by thread 2. If however the code of thread
+1 is scheduled after the <literal>pthread_mutex_unlock()</literal>
+call in thread 2 and before thread 2 calls
+<literal>pthread_cond_signal()</literal>, thread 1 will block
+indefinitely. The code in the example <xref linkend="Correct use of
+pthread_cond_wait()"></xref> never blocks indefinitely.
+</para>
+
+<para>
+Because most calls of <function>pthread_cond_signal()</function> or
+<function>pthread_cond_broadcast()</function> while no lock is held on
+the mutex associated with the condition variable are racy, by default
+DRD reports such calls.
+</para>
+
+<table
+ frame="none"
+ id="Racy use of pthread_cond_wait()"
+ xreflabel="Racy use of pthread_cond_wait()"
+>
+<title>Racy use of pthread_cond_wait()</title>
+<tgroup cols='2' align='left' colsep='1' rowsep='1'>
+ <colspec colname='thread1'/>
+ <colspec colname='thread2'/>
+ <thead>
+ <row>
+ <entry align="center">Thread 1</entry>
+ <entry align="center">Thread 2</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+<programlisting><![CDATA[
+pthread_mutex_lock(&mutex);
+if (! flag)
+ pthread_cond_wait(&cond, &mutex);
+pthread_mutex_unlock(&mutex);
+]]></programlisting>
+ </entry>
+ <entry>
+<programlisting><![CDATA[
+pthread_mutex_lock(&mutex);
+flag = 1;
+pthread_mutex_unlock(&mutex);
+pthread_cond_signal(&cond);
+]]></programlisting>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+</table>
+
+<table
+ frame="none"
+ id="Correct use of pthread_cond_wait()"
+ xreflabel="Correct use of pthread_cond_wait()"
+>
+<title>Correct use of pthread_cond_wait()</title>
+<tgroup cols='2' align='left' colsep='1' rowsep='1'>
+ <colspec colname='thread1'/>
+ <colspec colname='thread2'/>
+ <thead>
+ <row>
+ <entry align="center">Thread 1</entry>
+ <entry align="center">Thread 2</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+<programlisting><![CDATA[
+pthread_mutex_lock(&mutex);
+if (! flag)
+ pthread_cond_wait(&cond, &mutex);
+pthread_mutex_unlock(&mutex);
+]]></programlisting>
+ </entry>
+ <entry>
+<programlisting><![CDATA[
+pthread_mutex_lock(&mutex);
+flag = 1;
+pthread_cond_signal(&cond);
+pthread_mutex_unlock(&mutex);
+]]></programlisting>
+ </entry>
+ </row>
+ </tbody>
+</tgroup>
+</table>
+
</sect2>
@@ -812,10 +909,83 @@
<title>Client Requests</title>
<para>
-Just as for other Valgrind tools it is possible to pass information
-from a client program to the DRD tool.
+Just as for other Valgrind tools it is possible to let a client
+program interact with the DRD tool.
</para>
+<para>
+The interface between client programs and the DRD tool is defined in
+the header file <literal><valgrind/drd.h></literal>. The
+available client requests are:
+<itemizedlist>
+ <listitem>
+ <para>
+ <varname>VG_USERREQ__DRD_GET_VALGRIND_THREAD_ID</varname>.
+ Query the thread ID that was assigned by the Valgrind core to
+ the thread executing this client request. Valgrind's thread ID's
+ start at one and are recycled in case a thread stops.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <varname>VG_USERREQ__DRD_GET_DRD_THREAD_ID</varname>.
+ Query the thread ID that was assigned by DRD to
+ the thread executing this client request. DRD's thread ID's
+ start at one and are never recycled.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <varname>VG_USERREQ__DRD_START_SUPPRESSION</varname>. Some
+ applications contain intentional races. There exist
+ e.g. applications where the same value is assigned to a shared
+ variable from two different threads. It may be more convenient
+ to suppress such races than to solve these. This client request
+ allows to suppress such races. See also the macro
+ <literal>DRD_IGNORE_VAR(x)</literal> defined in
+ <literal><valgrind/drd.h></literal>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <varname>VG_USERREQ__DRD_FINISH_SUPPRESSION</varname>. Tell DRD
+ to no longer ignore data races in the address range that was
+ suppressed via
+ <varname>VG_USERREQ__DRD_START_SUPPRESSION</varname>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <varname>VG_USERREQ__DRD_START_TRACE_ADDR</varname>. Trace all
+ load and store activity on the specified address range. When DRD
+ reports a data race on a specified variable, and it's not
+ immediately clear which source code statements triggered the
+ conflicting accesses, it can be helpful to trace all activity on
+ the offending memory location. See also the macro
+ <literal>DRD_TRACE_VAR(x)</literal> defined in
+ <literal><valgrind/drd.h></literal>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <varname>VG_USERREQ__DRD_STOP_TRACE_ADDR</varname>. Do no longer
+ trace load and store activity for the specified address range.
+ range.
+ </para>
+ </listitem>
+</itemizedlist>
+</para>
+
+<para>
+Note: if you compiled Valgrind yourself, the header file
+<literal><valgrind/drd.h></literal> will have been installed in
+the directory <literal>/usr/include</literal> by the command
+<literal>make install</literal>. If you obtained Valgrind by
+installing it as a package however, you will probably have to install
+another package with a name like <literal>valgrind-devel</literal>
+before Valgrind's header files are present.
+</para>
+
</sect2>
@@ -823,6 +993,93 @@
<title>Debugging OpenMP Programs With DRD</title>
<para>
+OpenMP stands for <emphasis>Open Multi-Processing</emphasis>. The
+OpenMP standard consists of a set of compiler directives for C, C++
+and Fortran programs that allows a compiler to transform a sequential
+program into a parallel program. OpenMP is well suited for HPC
+applications and allows to work at a higher level compared to direct
+use of the POSIX threads API. While OpenMP ensures that the POSIX API
+is used correctly, OpenMP programs can still contain data races. So it
+makes sense to verify OpenMP programs with a thread checking tool.
+</para>
+
+<para>
+DRD supports OpenMP shared-memory programs generated by gcc. The gcc
+compiler supports OpenMP since version 4.2.0. Gcc's runtime support
+for OpenMP programs is provided by a library called
+<literal>libgomp</literal>. The synchronization primites implemented
+in this library use Linux' futex system call directly, unless the
+library has been configured with the
+<literal>--disable-linux-futex</literal> flag. DRD only supports
+libgomp libraries that have been configured with this flag and in
+which symbol information is present. For most Linux distributions this
+means that you will have to recompile gcc. See also the script
+<literal>exp-drd/scripts/download-and-build-gcc</literal> in the
+Valgrind source tree for an example of how to compile gcc. You will
+also have to make sure that the newly compiled
+<literal>libgomp.so</literal> library is loaded when OpenMP programs
+are started. This is possible by adding a line similar to the
+following to your shell startup script:
+</para>
+<programlisting><![CDATA[
+export LD_LIBRARY_PATH=~/gcc-4.3.1/lib64:~/gcc-4.3.1/lib:
+]]></programlisting>
+
+<para>
+As an example, the test OpenMP test program
+<literal>exp-drd/scripts/omp_matinv</literal> triggers a data race
+when the option -r has been specified on the command line. The data
+race is triggered by the following code:
+</para>
+<programlisting><![CDATA[
+#pragma omp parallel for private(j)
+for (j = 0; j < rows; j++)
+{
+ if (i != j)
+ {
+ const elem_t factor = a[j * cols + i];
+ for (k = 0; k < cols; k++)
+ {
+ a[j * cols + k] -= a[i * cols + k] * factor;
+ }
+ }
+}
+]]></programlisting>
+
+<para>
+The above code is racy because the variable <literal>k</literal> has
+not been declared private. DRD will print the following error message
+for the above code:
+</para>
+<programlisting><![CDATA[
+$ valgrind --check-stack-var=yes --var-info=yes --tool=exp-drd exp-drd/tests/omp_matinv 3 -t 2 -r
+...
+Conflicting store by thread 1/1 at 0x7fefffbc4 size 4
+ at 0x4014A0: gj.omp_fn.0 (omp_matinv.c:203)
+ by 0x401211: gj (omp_matinv.c:159)
+ by 0x40166A: invert_matrix (omp_matinv.c:238)
+ by 0x4019B4: main (omp_matinv.c:316)
+Allocation context: unknown.
+...
+]]></programlisting>
+<para>
+In the above output the function name <function>gj.omp_fn.0</function>
+has been generated by gcc from the function name
+<function>gj</function>. Unfortunately the variable name
+(<literal>k</literal>) is not shown as the allocation context -- it is
+not clear to me whether this is caused by Valgrind or whether this is
+caused by gcc. The most usable information in the above output is the
+source file name and the line number where the data race has been detected
+(<literal>omp_matinv.c:203</literal>).
+</para>
+
+<para>
+Note: DRD reports errors on the <literal>libgomp</literal> library
+included with gcc 4.2.0 up to and including 4.3.1. This might indicate
+a race condition in the POSIX version of <literal>libgomp</literal>.
+</para>
+
+<para>
For more information about OpenMP, see also
<ulink url="http://openmp.org/">openmp.org</ulink>.
</para>
@@ -830,6 +1087,114 @@
</sect2>
+<sect2 id="drd-manual.cust-mem-alloc" xreflabel="Custom Memory Allocators">
+<title>DRD and Custom Memory Allocators</title>
+
+<para>
+DRD tracks all memory allocation events that happen via either the
+standard memory allocation and deallocation functions
+(<function>malloc</function>, <function>free</function>,
+<function>new</function> and <function>delete</function>) or via entry
+and exit of stack frames. DRD uses memory allocation and deallocation
+information for two purposes:
+<itemizedlist>
+ <listitem>
+ <para>
+ To know where the scope ends of POSIX objects that have not been
+ destroyed explicitly. It is e.g. not required by the POSIX
+ threads standard to call
+ <function>pthread_mutex_destroy()</function> before freeing the
+ memory in which a mutex object resides.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ To know where the scope of variables ends. If e.g. heap memory
+ has been used by one thread, that thread frees that memory, and
+ another thread allocates and starts using that memory, no data
+ races must be reported for that memory.
+ </para>
+ </listitem>
+</itemizedlist>
+</para>
+
+<para>
+It is essential for correct operation of DRD that the tool knows about
+memory allocation and deallocation events. DRD does not yet support
+custom memory allocators, so you will have to make sure that any
+program which runs under DRD uses the standard memory allocation
+functions. As an example, the GNU libstdc++ library can be configured
+to use standard memory allocation functions instead of memory pools by
+setting the environment variable
+<literal>GLIBCXX_FORCE_NEW</literal>. For more information, see also
+the <ulink
+url="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt04ch11.html">libstdc++
+manual</ulink>.
+</para>
+
+</sect2>
+
+
+<sect2 id="drd-manual.drd-versus-memcheck" xreflabel="DRD Versus Memcheck">
+<title>DRD Versus Memcheck</title>
+
+<para>
+It is essential for correct operation of DRD that there are no memory
+errors like dangling pointers in the client program. Which means that
+it is a good idea to make sure that your program is memcheck-clean
+before you analyze it with DRD. It is possible however that some of
+the memcheck reports are caused by data races. In this case it makes
+sense to run DRD before memcheck.
+</para>
+
+<para>
+So which tool should be run first ? In case both DRD and memcheck
+complain about a program, a possible approach is to run both tools
+alternatingly and to fix as many errors as possible after each run of
+each tool until none of the two tools prints any more error messages.
+</para>
+
+</sect2>
+
+
+<sect2 id="drd-manual.resource requirements" xreflabel="Resource Requirements">
+<title>Resource Requirements</title>
+
+<para>
+The requirements of DRD with regard to heap and stack memory and the
+effect on the execution time of client programs are as follows:
+<itemizedlist>
+ <listitem>
+ <para>
+ When running a program under DRD with default DRD options,
+ between 1.1 and 3.6 times more memory will be needed compared to
+ a native run of the client program. More memory will be needed
+ if loading debug information has been enabled
+ (<literal>--var-info=yes</literal>).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ DRD allocates some of its temporary data structures on the stack
+ of the client program threads. This amount of data is limited to
+ 1 - 2 KB. Make sure that thread stacks are sufficiently large.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Most applications will run between 20 and 50 times slower under
+ DRD than a native single-threaded run. Applications such as
+ Firefox which perform very much mutex lock / unlock operations
+ however will run too slow to be usable under DRD. This issue
+ will be addressed in a future DRD version.
+ </para>
+ </listitem>
+</itemizedlist>
+</para>
+
+</sect2>
+
+
</sect1>
@@ -855,14 +1220,6 @@
</listitem>
<listitem>
<para>
- When running DRD on a PowerPC CPU, DRD will report false
- positives on atomic operations. See also Valgrind bug <ulink
- url="http://bugs.kde.org/show_bug.cgi?id=162354">
- 162354</ulink>.
- </para>
- </listitem>
- <listitem>
- <para>
DRD, just like memcheck, will refuse to start on Linux
distributions where all symbol information has been removed from
ld.so. This is a.o. the case for the PPC editions of openSUSE
@@ -885,11 +1242,18 @@
</listitem>
<listitem>
<para>
+ When address tracing is enabled, no information on atomic stores
+ will be displayed. This functionality is easy to add
+ however. Please contact the Valgrind authors if you would like
+ to see this functionality enabled.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
If you compile the DRD source code yourself, you need gcc 3.0 or
- later. gcc 2.95 is not supported.
+ later. Gcc 2.95 is not supported.
</para>
</listitem>
-
</itemizedlist>
</sect1>
@@ -903,7 +1267,7 @@
DRD, feel free to either post a message on the Valgrind users mailing
list or to file a bug report. See also <ulink
url="&vg-url;">&vg-url;</ulink> for more information about the
-Valgrind mailing lists and how to file a bug report.
+Valgrind mailing lists or about how to file a bug report.
</para>
</sect1>
Copied: branches/FORMATCHECK/exp-drd/drd.h (from rev 8337, trunk/exp-drd/drd.h)
===================================================================
--- branches/FORMATCHECK/exp-drd/drd.h (rev 0)
+++ branches/FORMATCHECK/exp-drd/drd.h 2008-07-03 09:02:49 UTC (rev 8338)
@@ -0,0 +1,144 @@
+
+/*
+ ----------------------------------------------------------------
+
+ Notice that the following BSD-style license applies to this one
+ file (drd.h) only. The rest of Valgrind is licensed under the
+ terms of the GNU General Public License, version 2, unless
+ otherwise indicated. See the COPYING file in the source
+ distribution for details.
+
+ ----------------------------------------------------------------
+
+ This file is part of drd, a Valgrind tool for verification of
+ multithreaded programs.
+
+ Copyright (C) 2006-2008 Bart Van Assche. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+ 3. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 4. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ ----------------------------------------------------------------
+
+ Notice that the above BSD-style license applies to this one file
+ (drd.h) only. The entire rest of Valgrind is licensed under
+ the terms of the GNU General Public License, version 2. See the
+ COPYING file in the source distribution for details.
+
+ ----------------------------------------------------------------
+*/
+
+#ifndef __VALGRIND_DRD_H
+#define __VALGRIND_DRD_H
+
+
+#include "valgrind.h"
+
+
+/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !!
+ This enum comprises an ABI exported by Valgrind to programs
+ which use client requests. DO NOT CHANGE THE ORDER OF THESE
+ ENTRIES, NOR DELETE ANY -- add new ones at the end.
+ */
+
+
+/** Tell DRD to suppress data race detection on the specified variable. */
+#define DRD_IGNORE_VAR(x) vg_drd_ignore_range(&(x), sizeof(x))
+
+/** Tell DRD to trace all memory accesses on the specified variable.
+ * until the memory that was allocated for the variable is freed.
+ */
+#define DRD_TRACE_VAR(x) vg_drd_trace_range(&(x), sizeof(x))
+
+
+enum
+{
+ /* Ask the core the thread ID assigned by Valgrind. */
+ VG_USERREQ__DRD_GET_VALGRIND_THREAD_ID = VG_USERREQ_TOOL_BASE('D','R'),
+ /* args: none. */
+ /* Ask the core the thread ID assigned by DRD. */
+ VG_USERREQ__DRD_GET_DRD_THREAD_ID,
+ /* args: none. */
+
+ /* To tell the drd tool to suppress data race detection on the specified */
+ /* address range. */
+ VG_USERREQ__DRD_START_SUPPRESSION,
+ /* args: start address, size in bytes */
+ /* To tell the drd tool no longer to suppress data race detection on the */
+ /* specified address range. */
+ VG_USERREQ__DRD_FINISH_SUPPRESSION,
+ /* args: start address, size in bytes */
+
+ /* To ask the drd tool to trace all accesses to the specified range. */
+ VG_USERREQ__DRD_START_TRACE_ADDR,
+ /* args: Addr, SizeT. */
+ /* To ask the drd tool to stop tracing accesses to the specified range. */
+ VG_USERREQ__DRD_STOP_TRACE_ADDR,
+ /* args: Addr, SizeT. */
+};
+
+
+static __inline__
+int vg_get_valgrind_threadid(void)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_GET_VALGRIND_THREAD_ID,
+ 0, 0, 0, 0, 0);
+ return res;
+}
+
+static __inline__
+int vg_get_drd_threadid(void)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_GET_DRD_THREAD_ID,
+ 0, 0, 0, 0, 0);
+ return res;
+}
+
+static __inline__
+void vg_drd_ignore_range(const void* const p, const int size)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_SUPPRESSION,
+ p, size, 0, 0, 0);
+}
+
+static __inline__
+void vg_drd_trace_range(const void* const p, const int size)
+{
+ int res;
+ VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_TRACE_ADDR,
+ p, size, 0, 0, 0);
+}
+
+
+#endif /* __VALGRIND_DRD_H */
Modified: branches/FORMATCHECK/exp-drd/drd_barrier.c
===================================================================
--- branches/FORMATCHECK/exp-drd/drd_barrier.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/drd_barrier.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -27,7 +27,6 @@
#include "drd_clientobj.h"
#include "drd_error.h"
#include "drd_suppression.h"
-#include "priv_drd_clientreq.h"
#include "pub_tool_errormgr.h" // VG_(maybe_record_error)()
#include "pub_tool_libcassert.h" // tl_assert()
#include "pub_tool_libcprint.h" // VG_(printf)()
@@ -227,7 +226,13 @@
{
if (p->pre_waiters_left != p->count || p->post_waiters_left != p->count)
{
- VG_(message)(Vg_UserMsg, "Error: reinitialization with active waiters");
+ BarrierErrInfo bei = { p->a1 };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ BarrierErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "Reinitialization of barrier with active"
+ " waiters",
+ &bei);
}
p->count = count;
}
@@ -261,6 +266,16 @@
return;
}
+ if (p->pre_waiters_left != p->count || p->post_waiters_left != p->count)
+ {
+ BarrierErrInfo bei = { p->a1 };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ BarrierErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "Destruction of a barrier with active waiters",
+ &bei);
+ }
+
clientobj_remove(p->a1, ClientBarrier);
}
@@ -345,7 +360,23 @@
struct barrier_thread_info* r;
q = VG_(OSetGen_Lookup)(p->oset, &word_tid);
- tl_assert(q);
+ if (q == 0)
+ {
+ BarrierErrInfo bei = { p->a1 };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ BarrierErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "Error in barrier implementation"
+ " -- barrier_wait() started before"
+ " barrier_destroy() and finished after"
+ " barrier_destroy()",
+ &bei);
+
+ q = VG_(OSetGen_AllocNode)(p->oset, sizeof(*q));
+ barrier_thread_initialize(q, tid, p->pre_iteration);
+ VG_(OSetGen_Insert)(p->oset, q);
+ tl_assert(VG_(OSetGen_Lookup)(p->oset, &word_tid) == q);
+ }
VG_(OSetGen_ResetIter)(p->oset);
for ( ; (r = VG_(OSetGen_Next)(p->oset)) != 0; )
{
Modified: branches/FORMATCHECK/exp-drd/drd_clientreq.c
===================================================================
--- branches/FORMATCHECK/exp-drd/drd_clientreq.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/drd_clientreq.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -31,7 +31,6 @@
#include "drd_thread.h"
#include "drd_track.h"
#include "drd_rwlock.h"
-#include "priv_drd_clientreq.h"
#include "pub_tool_basics.h" // Bool
#include "pub_tool_debuginfo.h" // VG_(describe_IP)()
#include "pub_tool_libcassert.h"
@@ -133,10 +132,14 @@
switch (arg[0])
{
- case VG_USERREQ__GET_THREAD_SELF:
+ case VG_USERREQ__DRD_GET_VALGRIND_THREAD_ID:
result = vg_tid;
break;
+ case VG_USERREQ__DRD_GET_DRD_THREAD_ID:
+ result = drd_tid;
+ break;
+
case VG_USERREQ__DRD_START_SUPPRESSION:
drd_start_suppression(arg[1], arg[1] + arg[2], "client");
break;
Modified: branches/FORMATCHECK/exp-drd/drd_clientreq.h
===================================================================
--- branches/FORMATCHECK/exp-drd/drd_clientreq.h 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/drd_clientreq.h 2008-07-03 09:02:49 UTC (rev 8338)
@@ -1,3 +1,28 @@
+/*
+ This file is part of drd, a data race detector.
+
+ Copyright (C) 2006-2008 Bart Van Assche
+ bar...@gm...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+
#ifndef __DRD_CLIENTREQ_H
#define __DRD_CLIENTREQ_H
@@ -2,35 +27,13 @@
-#include "valgrind.h" // VG_USERREQ_TOOL_BASE()
+#include "drd.h"
-#define DRD_IGNORE_VAR(x) { int res; VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_SUPPRESSION, &(x), sizeof(x), 0, 0, 0); }
-#define DRD_TRACE_VAR(x) { int res; VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_START_TRACE_ADDR, &(x), sizeof(x), 0, 0, 0); }
-
-
enum {
- /* Ask the core the thread ID assigned by Valgrind. */
- VG_USERREQ__GET_THREAD_SELF = VG_USERREQ_TOOL_BASE('D', 'R'),
- /* args: none. */
-
- /* To tell the drd tool to suppress data race detection on the specified */
- /* address range. */
- VG_USERREQ__DRD_START_SUPPRESSION,
- /* args: start address, size in bytes */
- /* To tell the drd tool no longer to suppress data race detection on the */
- /* specified address range. */
- VG_USERREQ__DRD_FINISH_SUPPRESSION,
- /* args: start address, size in bytes */
/* Ask drd to suppress data race reports on all currently allocated stack */
/* data of the current thread. */
- VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK,
+ VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK = VG_USERREQ_TOOL_BASE('D', 'r'),
/* args: none */
/* To ask the drd tool to start a new segment in the specified thread. */
VG_USERREQ__DRD_START_NEW_SEGMENT,
/* args: POSIX thread ID. */
- /* To ask the drd tool to trace all accesses to the specified range. */
- VG_USERREQ__DRD_START_TRACE_ADDR,
- /* args: Addr, SizeT. */
- /* To ask the drd tool to stop tracing accesses to the specified range. */
- VG_USERREQ__DRD_STOP_TRACE_ADDR,
- /* args: Addr, SizeT. */
/* Let the drd tool stop recording memory accesses in the calling thread. */
@@ -185,4 +188,7 @@
gomp_barrier = 2
} BarrierT;
+void drd_clientreq_init(void);
+
+
#endif // __DRD_CLIENTREQ_H
Modified: branches/FORMATCHECK/exp-drd/drd_main.c
===================================================================
--- branches/FORMATCHECK/exp-drd/drd_main.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/drd_main.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -39,7 +39,6 @@
#include "drd_track.h"
#include "drd_vc.h"
#include "libvex_guest_offsets.h"
-#include "priv_drd_clientreq.h"
#include "pub_drd_bitmap.h"
#include "pub_tool_vki.h" // Must be included before pub_tool_libcproc
#include "pub_tool_basics.h"
@@ -525,7 +524,7 @@
avma = VG_(seginfo_get_plt_avma)(di);
size = VG_(seginfo_get_plt_size)(di);
- if (a <= avma && avma + size <= a + len)
+ if (size > 0 && a <= avma && avma + size <= a + len)
{
#if 0
VG_(printf)("Suppressing .plt @ 0x%lx size %ld\n", avma, size);
@@ -536,7 +535,7 @@
avma = VG_(seginfo_get_gotplt_avma)(di);
size = VG_(seginfo_get_gotplt_size)(di);
- if (a <= avma && avma + size <= a + len)
+ if (size > 0 && a <= avma && avma + size <= a + len)
{
#if 0
VG_(printf)("Suppressing .got.plt @ 0x%lx size %ld\n", avma, size);
@@ -831,16 +830,11 @@
static
void drd_post_clo_init(void)
{
-# if defined(VGP_x86_linux) || defined(VGP_amd64_linux)
+# if defined(VGP_x86_linux) || defined(VGP_amd64_linux) \
+ || defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
/* fine */
-# elif defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
- VG_(printf)(
-"\nWARNING: support for PowerPC-specific atomic instructions like lwarx and\n"
-"stwcx is not yet complete. As a result, false positives will be reported on\n"
-"code that uses these instructions. This will happen e.g. when printf() is\n"
-"called from more than one thread.\n\n");
# else
- VG_(printf)("\nWARNING: DRD has only been tested on x86-linux and amd64-linux.\n\n");
+ VG_(printf)("\nWARNING: DRD has only been tested on Linux.\n\n");
# endif
if (s_drd_var_info)
@@ -1053,16 +1047,30 @@
switch (st->tag)
{
+ /* Note: the code for not instrumenting the code in .plt */
+ /* sections is only necessary on CentOS 3.0 x86 (kernel 2.4.21 */
+ /* + glibc 2.3.2 + NPTL 0.60 + binutils 2.14.90.0.4). */
+ /* This is because on this platform dynamic library symbols are */
+ /* relocated in another way than by later binutils versions. The */
+ /* linker e.g. does not generate .got.plt sections on CentOS 3.0. */
+ case Ist_IMark:
+ instrument = VG_(seginfo_sect_kind)(NULL, 0, st->Ist.IMark.addr)
+ != Vg_SectPLT;
+ addStmtToIRSB(bb, st);
+ break;
+
case Ist_MBE:
switch (st->Ist.MBE.event)
{
case Imbe_Fence:
break; /* not interesting */
case Imbe_BusLock:
+ case Imbe_SnoopedStoreBegin:
tl_assert(! bus_locked);
bus_locked = True;
break;
case Imbe_BusUnlock:
+ case Imbe_SnoopedStoreEnd:
tl_assert(bus_locked);
bus_locked = False;
break;
Modified: branches/FORMATCHECK/exp-drd/drd_mutex.c
===================================================================
--- branches/FORMATCHECK/exp-drd/drd_mutex.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/drd_mutex.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -26,7 +26,6 @@
#include "drd_clientobj.h"
#include "drd_error.h"
#include "drd_mutex.h"
-#include "priv_drd_clientreq.h"
#include "pub_tool_vki.h"
#include "pub_tool_errormgr.h" // VG_(maybe_record_error)()
#include "pub_tool_libcassert.h" // tl_assert()
Modified: branches/FORMATCHECK/exp-drd/drd_rwlock.c
===================================================================
--- branches/FORMATCHECK/exp-drd/drd_rwlock.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/drd_rwlock.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -26,7 +26,6 @@
#include "drd_clientobj.h"
#include "drd_error.h"
#include "drd_rwlock.h"
-#include "priv_drd_clientreq.h"
#include "pub_tool_vki.h"
#include "pub_tool_errormgr.h" // VG_(maybe_record_error)()
#include "pub_tool_libcassert.h" // tl_assert()
Modified: branches/FORMATCHECK/exp-drd/drd_semaphore.c
===================================================================
--- branches/FORMATCHECK/exp-drd/drd_semaphore.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/drd_semaphore.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -27,7 +27,6 @@
#include "drd_error.h"
#include "drd_semaphore.h"
#include "drd_suppression.h"
-#include "priv_drd_clientreq.h"
#include "pub_tool_errormgr.h" // VG_(maybe_record_error)()
#include "pub_tool_libcassert.h" // tl_assert()
#include "pub_tool_libcprint.h" // VG_(printf)()
Deleted: branches/FORMATCHECK/exp-drd/priv_drd_clientreq.h
===================================================================
--- branches/FORMATCHECK/exp-drd/priv_drd_clientreq.h 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/priv_drd_clientreq.h 2008-07-03 09:02:49 UTC (rev 8338)
@@ -1,30 +0,0 @@
-/*
- This file is part of drd, a data race detector.
-
- Copyright (C) 2006-2008 Bart Van Assche
- bar...@gm...
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307, USA.
-
- The GNU General Public License is contained in the file COPYING.
-*/
-
-#ifndef __PRIV_DRD_CLIENTREQ_H
-#define __PRIV_DRD_CLIENTREQ_H
-
-void drd_clientreq_init(void);
-
-#endif /* __PRIV_DRD_CLIENTREQ_H */
Modified: branches/FORMATCHECK/exp-drd/tests/fp_race.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/fp_race.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/fp_race.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -28,9 +28,9 @@
#include <stdio.h> // printf()
#include <pthread.h>
#include <unistd.h> // usleep()
-#include "../drd_clientreq.h"
+
// Local functions declarations.
static void* thread_func(void*);
Copied: branches/FORMATCHECK/exp-drd/tests/hg05_race2.stderr.exp-powerpc (from rev 8337, trunk/exp-drd/tests/hg05_race2.stderr.exp-powerpc)
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/hg05_race2.stderr.exp-powerpc (rev 0)
+++ branches/FORMATCHECK/exp-drd/tests/hg05_race2.stderr.exp-powerpc 2008-07-03 09:02:49 UTC (rev 8338)
@@ -0,0 +1,25 @@
+
+Thread 2:
+Conflicting load by thread 2/3 at 0x........ size 4
+ at 0x........: th (hg05_race2.c:17)
+ by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
+ by 0x........: (within libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Allocation context: unknown.
+Other segment start (thread 0/2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 0/2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 2/3 at 0x........ size 4
+ at 0x........: th (hg05_race2.c:17)
+ by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
+ by 0x........: (within libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Allocation context: unknown.
+Other segment start (thread 0/2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 0/2)
+ (thread finished, call stack no longer available)
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
Modified: branches/FORMATCHECK/exp-drd/tests/omp_matinv.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/omp_matinv.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/omp_matinv.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -299,6 +299,7 @@
if (optind + 1 != argc)
{
fprintf(stderr, "Error: wrong number of arguments.\n");
+ return 1;
}
matrix_size = atoi(argv[optind]);
Modified: branches/FORMATCHECK/exp-drd/tests/omp_matinv.vgtest
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/omp_matinv.vgtest 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/omp_matinv.vgtest 2008-07-03 09:02:49 UTC (rev 8338)
@@ -1,3 +1,4 @@
prereq: ./run_openmp_test ./omp_matinv
prog: omp_matinv
+vgopts: --check-stack-var=yes --var-info=yes
args: 30 -t 15 -q
Modified: branches/FORMATCHECK/exp-drd/tests/omp_matinv_racy.vgtest
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/omp_matinv_racy.vgtest 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/omp_matinv_racy.vgtest 2008-07-03 09:02:49 UTC (rev 8338)
@@ -1,4 +1,5 @@
prereq: ./run_openmp_test ./omp_matinv
prog: omp_matinv
+vgopts: --check-stack-var=yes --var-info=yes
args: 3 -t 2 -q -r
stderr_filter: filter_error_summary
Modified: branches/FORMATCHECK/exp-drd/tests/omp_prime.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/omp_prime.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/omp_prime.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -10,7 +10,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> // getopt()
-#include "../drd_clientreq.h"
static int is_prime(int* const pflag, int v)
@@ -58,6 +57,7 @@
if (optind + 1 != argc)
{
fprintf(stderr, "Error: wrong number of arguments.\n");
+ return 1;
}
n = atoi(argv[optind]);
Modified: branches/FORMATCHECK/exp-drd/tests/omp_prime_racy.vgtest
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/omp_prime_racy.vgtest 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/omp_prime_racy.vgtest 2008-07-03 09:02:49 UTC (rev 8338)
@@ -1,4 +1,5 @@
prereq: ./run_openmp_test ./omp_prime
prog: omp_prime
+vgopts: --check-stack-var=yes --var-info=yes
args: 4 -q
stderr_filter: filter_error_summary
Modified: branches/FORMATCHECK/exp-drd/tests/pth_cond_race.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/pth_cond_race.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/pth_cond_race.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -6,7 +6,6 @@
#include <stdio.h> // printf()
#include <pthread.h>
#include <unistd.h> // usleep()
-#include "../drd_clientreq.h"
// Local functions declarations.
Modified: branches/FORMATCHECK/exp-drd/tests/pth_detached.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/pth_detached.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/pth_detached.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -8,7 +8,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include "../drd_clientreq.h"
static int s_finished_count;
Modified: branches/FORMATCHECK/exp-drd/tests/pth_detached_sem.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/pth_detached_sem.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/pth_detached_sem.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -13,7 +13,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include "../drd_clientreq.h"
static sem_t s_sem;
Modified: branches/FORMATCHECK/exp-drd/tests/pth_inconsistent_cond_wait.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/pth_inconsistent_cond_wait.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/pth_inconsistent_cond_wait.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -44,6 +44,10 @@
pthread_create(&tid1, 0, &thread1, 0);
pthread_create(&tid2, 0, &thread2, 0);
sem_wait(&s_sem);
+ pthread_mutex_lock(&s_mutex1);
+ pthread_mutex_lock(&s_mutex2);
+ pthread_mutex_unlock(&s_mutex2);
+ pthread_mutex_unlock(&s_mutex1);
pthread_cond_signal(&s_cond);
pthread_cond_signal(&s_cond);
pthread_join(tid1, 0);
Modified: branches/FORMATCHECK/exp-drd/tests/run_openmp_test
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/run_openmp_test 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/run_openmp_test 2008-07-03 09:02:49 UTC (rev 8338)
@@ -8,6 +8,11 @@
./supported_libpthread || exit $?
+# Do not accept any statically linked executable.
+if /usr/bin/file "$1" | grep -q 'statically linked'; then
+ exit 1
+fi
+
if [ "$(uname)" = Linux ]; then
# Let the dynamic linker/loader print the path of libgomp. See also man ld.so
Modified: branches/FORMATCHECK/exp-drd/tests/rwlock_race.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/rwlock_race.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/rwlock_race.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -11,9 +11,9 @@
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
-#include "../drd_clientreq.h"
+
static pthread_rwlock_t s_rwlock;
static int s_racy;
Modified: branches/FORMATCHECK/exp-drd/tests/sem_as_mutex.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/sem_as_mutex.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/sem_as_mutex.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -29,9 +29,9 @@
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h> // usleep()
-#include "../drd_clientreq.h"
+
// Local functions declarations.
static void* thread_func(void*);
Modified: branches/FORMATCHECK/exp-drd/tests/sigalrm.c
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/sigalrm.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/sigalrm.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -9,8 +9,9 @@
#include <time.h>
#include <unistd.h>
#include <asm/unistd.h>
-#include "../drd_clientreq.h"
+#include "../drd.h"
+
static int s_debug = 0;
@@ -23,13 +24,6 @@
#endif
}
-static int getvgtid()
-{
- int res;
- VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__GET_THREAD_SELF, 0, 0, 0,0,0);
- return res;
-}
-
static void print_thread_id(const char* const label)
{
if (s_debug)
@@ -37,7 +31,7 @@
char msg[256];
snprintf(msg, sizeof(msg),
"%spid %d / kernel thread ID %d / Valgrind thread ID %d\n",
- label, getpid(), getktid(), getvgtid());
+ label, getpid(), getktid(), vg_get_valgrind_threadid());
write(STDOUT_FILENO, msg, strlen(msg));
}
}
@@ -67,7 +61,7 @@
if (argc > 1)
s_debug = 1;
- vgthreadid = getvgtid();
+ vgthreadid = vg_get_valgrind_threadid();
print_thread_id("main: ");
Modified: branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap.stderr.exp-glibc2.3 2008-07-03 09:02:49 UTC (rev 8338)
@@ -83,6 +83,10 @@
---------------- sem_* ----------------
+Semaphore reinitialization: semaphore 0x........
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:231)
+
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -102,4 +106,4 @@
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
at 0x........: main (tc20_verifywrap.c:262)
-ERROR SUMMARY: 14 errors from 14 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 15 errors from 15 contexts (suppressed: 0 from 0)
Modified: branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3 2008-07-03 09:02:49 UTC (rev 8338)
@@ -107,6 +107,10 @@
[1/1] semaphore_init 0x........
[1/1] semaphore_init 0x........
+Semaphore reinitialization: semaphore 0x........
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:231)
+
FIXME: can't figure out how to verify wrap of sem_destroy
[1/1] semaphore_pre_wait 0x........
@@ -180,4 +184,4 @@
[1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
[1/1] mutex_unlock recursive mutex 0x........ rc 1
-ERROR SUMMARY: 14 errors from 14 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 15 errors from 15 contexts (suppressed: 0 from 0)
Modified: branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b
===================================================================
--- branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/exp-drd/tests/tc20_verifywrap2.stderr.exp-glibc2.3-b 2008-07-03 09:02:49 UTC (rev 8338)
@@ -107,6 +107,10 @@
[1/1] semaphore_init 0x........
[1/1] semaphore_init 0x........
+Semaphore reinitialization: semaphore 0x........
+ at 0x........: sem_init* (drd_pthread_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:231)
+
FIXME: can't figure out how to verify wrap of sem_destroy
[1/1] semaphore_pre_wait 0x........
@@ -135,4 +139,4 @@
[1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 0
[1/1] mutex_unlock recursive mutex 0x........ rc 1
-ERROR SUMMARY: 14 errors from 14 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 15 errors from 15 contexts (suppressed: 0 from 0)
Modified: branches/FORMATCHECK/glibc-2.X-drd.supp
===================================================================
--- branches/FORMATCHECK/glibc-2.X-drd.supp 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/glibc-2.X-drd.supp 2008-07-03 09:02:49 UTC (rev 8338)
@@ -304,6 +304,16 @@
obj:/usr/lib*/libgomp.so*
}
{
+ libX11-XCreateFontSet
+ exp-drd:CondErr
+ fun:pthread_cond_init*
+ fun:_XReply
+ fun:XListFontsWithInfo
+ obj:/usr/lib*/libX11.so*
+ fun:XCreateOC
+ fun:XCreateFontSet
+}
+{
libxcb-xcb_wait_for_reply
exp-drd:CondErr
fun:pthread_cond_destroy*
Modified: branches/FORMATCHECK/helgrind/hg_main.c
===================================================================
--- branches/FORMATCHECK/helgrind/hg_main.c 2008-07-03 08:45:42 UTC (rev 8337)
+++ branches/FORMATCHECK/helgrind/hg_main.c 2008-07-03 09:02:49 UTC (rev 8338)
@@ -7349,6 +7349,11 @@
static void instrument_memory_bus_event ( IRSB* bbOut, IRMBusEvent event )
{
switch (event) {
+ case Imbe_SnoopedStoreBegin:
+ case Imbe_SnoopedStoreEnd:
+ /* These arise from ppc stwcx. insns. They should perhaps be
+ handled better. */
+ break;
case Imbe_Fence:
break; /* not interesting */
case Imbe_BusLock:
|
|
From: <sv...@va...> - 2008-07-03 08:47:47
|
Author: bart
Date: 2008-07-03 09:45:42 +0100 (Thu, 03 Jul 2008)
New Revision: 8337
Log:
Added VG_(xml_message)(). Removed VG_(ToXML)().
Modified:
branches/FORMATCHECK/coregrind/m_debuglog.c
branches/FORMATCHECK/coregrind/m_errormgr.c
branches/FORMATCHECK/coregrind/m_libcprint.c
branches/FORMATCHECK/coregrind/m_main.c
branches/FORMATCHECK/coregrind/pub_core_debuglog.h
branches/FORMATCHECK/include/pub_tool_libcprint.h
branches/FORMATCHECK/memcheck/mc_errors.c
Modified: branches/FORMATCHECK/coregrind/m_debuglog.c
===================================================================
--- branches/FORMATCHECK/coregrind/m_debuglog.c 2008-07-03 07:08:04 UTC (rev 8336)
+++ branches/FORMATCHECK/coregrind/m_debuglog.c 2008-07-03 08:45:42 UTC (rev 8337)
@@ -497,9 +497,10 @@
/* Copy a string into the buffer, escaping bad XML chars. */
+static
UInt myvprintf_str_XML_simplistic ( void(*send)(HChar,void*),
void* send_arg2,
- const HChar* str )
+ HChar* str )
{
UInt ret = 0;
Int i;
Modified: branches/FORMATCHECK/coregrind/m_errormgr.c
===================================================================
--- branches/FORMATCHECK/coregrind/m_errormgr.c 2008-07-03 07:08:04 UTC (rev 8336)
+++ branches/FORMATCHECK/coregrind/m_errormgr.c 2008-07-03 08:45:42 UTC (rev 8337)
@@ -699,7 +699,6 @@
{
Supp *su;
Bool any_supp;
- HChar xml_sname[128];
if (VG_(clo_xml))
VG_(message)(Vg_DebugMsg, "<suppcounts>");
@@ -710,13 +709,12 @@
continue;
any_supp = True;
if (VG_(clo_xml)) {
- VG_(message)(Vg_DebugMsg,
+ VG_(xml_message)(Vg_DebugMsg,
" <pair>\n"
" <count>%d</count>\n"
- " <name>%s</name>\n"
+ " <name>%t</name>\n"
" </pair>",
- su->count,
- VG_(ToXML)(xml_sname, sizeof(xml_sname), su->sname));
+ su->count, su->sname);
} else {
VG_(message)(Vg_DebugMsg, "supp: %6d %s", su->count, su->sname);
}
Modified: branches/FORMATCHECK/coregrind/m_libcprint.c
===================================================================
--- branches/FORMATCHECK/coregrind/m_libcprint.c 2008-07-03 07:08:04 UTC (rev 8336)
+++ branches/FORMATCHECK/coregrind/m_libcprint.c 2008-07-03 08:45:42 UTC (rev 8337)
@@ -285,47 +285,6 @@
/* ---------------------------------------------------------------------
- ToXML()
- ------------------------------------------------------------------ */
-
-struct xml_buf {
- HChar* cur;
- HChar* end;
-};
-
-static void append_to_xml_buf(const HChar ch, void* arg2)
-{
- struct xml_buf* const xml_buf = arg2;
-
- if (xml_buf->cur < xml_buf->end)
- {
- *xml_buf->cur++ = ch;
- }
- else
- {
- /* Make sure that it gets noticed if a buffer is too small. */
- vg_assert(False);
- }
-}
-
-/* Convert a string such that it can be inserted into an XML output stream. */
-
-extern HChar* VG_(ToXML)(HChar* const buf, const Int size,
- const HChar* str)
-{
- static struct xml_buf xml_buf;
-
- if (str == NULL)
- str = "(null)";
- xml_buf.cur = buf;
- xml_buf.end = buf + size - 1;
- myvprintf_str_XML_simplistic(append_to_xml_buf, &xml_buf, str);
- *xml_buf.cur++ = 0;
- return buf;
-}
-
-
-/* ---------------------------------------------------------------------
elapsed_wallclock_time()
------------------------------------------------------------------ */
@@ -406,6 +365,17 @@
return count;
}
+/* Send a single-part XML message. */
+UInt VG_(xml_message) ( VgMsgKind kind, const HChar* format, ... )
+{
+ UInt count;
+ va_list vargs;
+ va_start(vargs,format);
+ count = VG_(vmessage) ( kind, format, vargs );
+ va_end(vargs);
+ return count;
+}
+
/* Send a simple single-part message. */
UInt VG_(message) ( VgMsgKind kind, const HChar* format, ... )
{
Modified: branches/FORMATCHECK/coregrind/m_main.c
===================================================================
--- branches/FORMATCHECK/coregrind/m_main.c 2008-07-03 07:08:04 UTC (rev 8336)
+++ branches/FORMATCHECK/coregrind/m_main.c 2008-07-03 08:45:42 UTC (rev 8337)
@@ -734,9 +734,6 @@
// Get the env var name, print its contents.
Char* qualname;
Char* qual;
- Char xml_qualname[256];
- Char xml_qual[256];
-
i++;
qualname = &format[i];
while (True) {
@@ -750,11 +747,9 @@
i++;
}
- VG_(message)(Vg_UserMsg, "<logfilequalifier> <var>%s</var> "
- "<value>%s</value> </logfilequalifier>",
- VG_(ToXML)(xml_qualname, sizeof(xml_qualname),
- qualname),
- VG_(ToXML)(xml_qual, sizeof(xml_qual), qual));
+ VG_(xml_message)(Vg_UserMsg, "<logfilequalifier> <var>%t</var> "
+ "<value>%t</value> </logfilequalifier>",
+ qualname,qual);
format[i] = '}';
i++;
}
@@ -855,13 +850,10 @@
}
else
if (VG_(clo_xml)) {
- HChar xml_buf[256];
-
VG_(message)(Vg_UserMsg, "");
VG_(message)(Vg_UserMsg, "<pid>%d</pid>", VG_(getpid)());
VG_(message)(Vg_UserMsg, "<ppid>%d</ppid>", VG_(getppid)());
- VG_(message)(Vg_UserMsg, "<tool>%s</tool>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf), toolname));
+ VG_(xml_message)(Vg_UserMsg, "<tool>%t</tool>", toolname);
if (VG_(clo_log_name))
print_file_vars(VG_(clo_log_name));
if (VG_(clo_xml_user_comment)) {
@@ -876,31 +868,26 @@
VG_(message)(Vg_UserMsg, " <vargv>");
if (VG_(name_of_launcher))
- VG_(message)(Vg_UserMsg, " <exe>%s</exe>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- VG_(name_of_launcher)));
+ VG_(xml_message)(Vg_UserMsg, " <exe>%t</exe>",
+ VG_(name_of_launcher));
else
- VG_(message)(Vg_UserMsg, " <exe>%s</exe>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- "(launcher name unknown)"));
+ VG_(xml_message)(Vg_UserMsg, " <exe>%t</exe>",
+ "(launcher name unknown)");
for (i = 0; i < VG_(sizeXA)( VG_(args_for_valgrind) ); i++) {
- VG_(message)(Vg_UserMsg,
- " <arg>%s</arg>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- * (HChar**) VG_(indexXA)( VG_(args_for_valgrind), i )));
+ VG_(xml_message)(Vg_UserMsg,
+ " <arg>%t</arg>",
+ * (HChar**) VG_(indexXA)( VG_(args_for_valgrind), i ));
}
VG_(message)(Vg_UserMsg, " </vargv>");
VG_(message)(Vg_UserMsg, " <argv>");
if (VG_(args_the_exename))
- VG_(message)(Vg_UserMsg, " <exe>%s</exe>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- VG_(args_the_exename)));
+ VG_(xml_message)(Vg_UserMsg, " <exe>%t</exe>",
+ VG_(args_the_exename));
for (i = 0; i < VG_(sizeXA)( VG_(args_for_client) ); i++) {
- VG_(message)(Vg_UserMsg,
- " <arg>%s</arg>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- * (HChar**) VG_(indexXA)( VG_(args_for_client), i )));
+ VG_(xml_message)(Vg_UserMsg,
+ " <arg>%t</arg>",
+ * (HChar**) VG_(indexXA)( VG_(args_for_client), i ));
}
VG_(message)(Vg_UserMsg, " </argv>");
@@ -1946,14 +1933,13 @@
//--------------------------------------------------------------
if (VG_(clo_xml)) {
HChar buf[50];
- HChar xml_buf[256];
-
VG_(elapsed_wallclock_time)(buf);
- VG_(message)(Vg_UserMsg, "<status>\n"
- " <state>RUNNING</state>\n"
- " <time>%s</time>\n"
- "</status>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf), buf));
+ VG_(xml_message)(Vg_UserMsg,
+ "<status>\n"
+ " <state>RUNNING</state>\n"
+ " <time>%t</time>\n"
+ "</status>",
+ buf);
VG_(message)(Vg_UserMsg, "");
}
@@ -2055,18 +2041,17 @@
if (VG_(clo_xml)) {
HChar buf[50];
- HChar xml_buf[256];
-
if (VG_(needs).core_errors || VG_(needs).tool_errors) {
VG_(show_error_counts_as_XML)();
VG_(message)(Vg_UserMsg, "");
}
VG_(elapsed_wallclock_time)(buf);
- VG_(message)(Vg_UserMsg, "<status>\n"
- " <state>FINISHED</state>\n"
- " <time>%s</time>\n"
- "</status>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf), buf));
+ VG_(xml_message)(Vg_UserMsg,
+ "<status>\n"
+ " <state>FINISHED</state>\n"
+ " <time>%t</time>\n"
+ "</status>",
+ buf);
VG_(message)(Vg_UserMsg, "");
}
Modified: branches/FORMATCHECK/coregrind/pub_core_debuglog.h
===================================================================
--- branches/FORMATCHECK/coregrind/pub_core_debuglog.h 2008-07-03 07:08:04 UTC (rev 8336)
+++ branches/FORMATCHECK/coregrind/pub_core_debuglog.h 2008-07-03 08:45:42 UTC (rev 8337)
@@ -84,12 +84,7 @@
va_list vargs
);
-/* Copy a string into the buffer, escaping bad XML chars. */
-UInt myvprintf_str_XML_simplistic ( void(*send)(HChar,void*),
- void* send_arg2,
- const HChar* str );
-
#endif // __PUB_CORE_DEBUGLOG_H
/*--------------------------------------------------------------------*/
Modified: branches/FORMATCHECK/include/pub_tool_libcprint.h
===================================================================
--- branches/FORMATCHECK/include/pub_tool_libcprint.h 2008-07-03 07:08:04 UTC (rev 8336)
+++ branches/FORMATCHECK/include/pub_tool_libcprint.h 2008-07-03 08:45:42 UTC (rev 8337)
@@ -84,13 +84,20 @@
}
VgMsgKind;
-/* Send a single-part message. Appends a newline. */
-extern UInt VG_(message) ( VgMsgKind kind, const HChar* format, ... ) PRINTF_CHECK(2, 3);
+/* Send a single-part XML message. Appends a newline. The format
+ specification may contain any ISO C format specifier or %t.
+ No attempt is made to let the compiler verify consistency of the
+ format string and the argument list. */
+extern UInt VG_(xml_message)( VgMsgKind kind, const HChar* format, ... );
+/* Send a single-part message. Appends a newline. The format
+ specification may contain any ISO C format specifier. The gcc compiler
+ will verify consistency of the format string and the argument list. */
+extern UInt VG_(message)( VgMsgKind kind, const HChar* format, ... )
+ PRINTF_CHECK(2, 3);
-extern UInt VG_(vmessage) ( VgMsgKind kind, const HChar* format, va_list vargs ) PRINTF_CHECK(2, 0);
+extern UInt VG_(vmessage)( VgMsgKind kind, const HChar* format, va_list vargs )
+ PRINTF_CHECK(2, 0);
-/* Convert a string such that it can be inserted into an XML output stream. */
-extern HChar* VG_(ToXML)(HChar* buf, Int size, const HChar* str);
#endif // __PUB_TOOL_LIBCPRINT_H
Modified: branches/FORMATCHECK/memcheck/mc_errors.c
===================================================================
--- branches/FORMATCHECK/memcheck/mc_errors.c 2008-07-03 07:08:04 UTC (rev 8336)
+++ branches/FORMATCHECK/memcheck/mc_errors.c 2008-07-03 08:45:42 UTC (rev 8337)
@@ -262,7 +262,6 @@
{
HChar* xpre = VG_(clo_xml) ? " <auxwhat>" : " ";
HChar* xpost = VG_(clo_xml) ? "</auxwhat>" : "";
- HChar xml_buf[256];
switch (ai->tag) {
case Addr_Unknown:
@@ -316,15 +315,14 @@
}
case Addr_DataSym:
- VG_(message)(Vg_UserMsg,
- "%sAddress 0x%llx is %llu bytes "
- "inside data symbol \"%s\"%s",
- xpre,
- (ULong)a,
- (ULong)ai->Addr.DataSym.offset,
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- ai->Addr.DataSym.name),
- xpost);
+ VG_(xml_message)(Vg_UserMsg,
+ "%sAddress 0x%llx is %llu bytes "
+ "inside data symbol \"%t\"%s",
+ xpre,
+ (ULong)a,
+ (ULong)ai->Addr.DataSym.offset,
+ ai->Addr.DataSym.name,
+ xpost);
break;
case Addr_Variable:
@@ -337,15 +335,13 @@
break;
case Addr_SectKind:
- VG_(message)(Vg_UserMsg,
- "%sAddress 0x%llx is in the %s segment of %s%s",
- xpre,
- (ULong)a,
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- VG_(pp_SectKind)(ai->Addr.SectKind.kind)),
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- ai->Addr.SectKind.objname),
- xpost);
+ VG_(xml_message)(Vg_UserMsg,
+ "%sAddress 0x%llx is in the %t segment of %t%s",
+ xpre,
+ (ULong)a,
+ VG_(pp_SectKind)(ai->Addr.SectKind.kind),
+ ai->Addr.SectKind.objname,
+ xpost);
break;
default:
@@ -424,7 +420,6 @@
void MC_(pp_Error) ( Error* err )
{
MC_Error* extra = VG_(get_error_extra)(err);
- HChar xml_buf[256];
switch (VG_(get_error_kind)(err)) {
case Err_CoreMem: {
@@ -573,9 +568,8 @@
LossRecord* l = extra->Err.Leak.lossRecord;
if (VG_(clo_xml)) {
- VG_(message)(Vg_UserMsg, " <kind>%s</kind>",
- VG_(ToXML)(xml_buf, sizeof(xml_buf),
- xml_leak_kind(l->loss_mode)));
+ VG_(xml_message)(Vg_UserMsg, " <kind>%t</kind>",
+ xml_leak_kind(l->loss_mode));
} else {
VG_(message)(Vg_UserMsg, "");
}
|
|
From: <sv...@va...> - 2008-07-03 07:08:07
|
Author: bart Date: 2008-07-03 08:08:04 +0100 (Thu, 03 Jul 2008) New Revision: 8336 Log: Added a three more paragraphs. Modified: trunk/exp-drd/docs/drd-manual.xml Modified: trunk/exp-drd/docs/drd-manual.xml =================================================================== --- trunk/exp-drd/docs/drd-manual.xml 2008-07-02 11:50:37 UTC (rev 8335) +++ trunk/exp-drd/docs/drd-manual.xml 2008-07-03 07:08:04 UTC (rev 8336) @@ -504,7 +504,7 @@ <sect2 id="drd-manual.data-races" xreflabel="Data Races"> -<title>Data Races</title> +<title>Detected Errors: Data Races</title> <para> DRD prints a message every time it detects a data race. You should be @@ -662,7 +662,7 @@ <sect2 id="drd-manual.lock-contention" xreflabel="Lock Contention"> -<title>Lock Contention</title> +<title>Detected Errors: Lock Contention</title> <para> Threads should be able to make progress without being blocked by other @@ -706,7 +706,7 @@ <sect2 id="drd-manual.api-checks" xreflabel="API Checks"> -<title>Misuse of the POSIX threads API</title> +<title>Detected Errors: Misuse of the POSIX threads API</title> <para> DRD is able to detect and report the following misuses of the POSIX @@ -1087,6 +1087,114 @@ </sect2> +<sect2 id="drd-manual.cust-mem-alloc" xreflabel="Custom Memory Allocators"> +<title>DRD and Custom Memory Allocators</title> + +<para> +DRD tracks all memory allocation events that happen via either the +standard memory allocation and deallocation functions +(<function>malloc</function>, <function>free</function>, +<function>new</function> and <function>delete</function>) or via entry +and exit of stack frames. DRD uses memory allocation and deallocation +information for two purposes: +<itemizedlist> + <listitem> + <para> + To know where the scope ends of POSIX objects that have not been + destroyed explicitly. It is e.g. not required by the POSIX + threads standard to call + <function>pthread_mutex_destroy()</function> before freeing the + memory in which a mutex object resides. + </para> + </listitem> + <listitem> + <para> + To know where the scope of variables ends. If e.g. heap memory + has been used by one thread, that thread frees that memory, and + another thread allocates and starts using that memory, no data + races must be reported for that memory. + </para> + </listitem> +</itemizedlist> +</para> + +<para> +It is essential for correct operation of DRD that the tool knows about +memory allocation and deallocation events. DRD does not yet support +custom memory allocators, so you will have to make sure that any +program which runs under DRD uses the standard memory allocation +functions. As an example, the GNU libstdc++ library can be configured +to use standard memory allocation functions instead of memory pools by +setting the environment variable +<literal>GLIBCXX_FORCE_NEW</literal>. For more information, see also +the <ulink +url="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt04ch11.html">libstdc++ +manual</ulink>. +</para> + +</sect2> + + +<sect2 id="drd-manual.drd-versus-memcheck" xreflabel="DRD Versus Memcheck"> +<title>DRD Versus Memcheck</title> + +<para> +It is essential for correct operation of DRD that there are no memory +errors like dangling pointers in the client program. Which means that +it is a good idea to make sure that your program is memcheck-clean +before you analyze it with DRD. It is possible however that some of +the memcheck reports are caused by data races. In this case it makes +sense to run DRD before memcheck. +</para> + +<para> +So which tool should be run first ? In case both DRD and memcheck +complain about a program, a possible approach is to run both tools +alternatingly and to fix as many errors as possible after each run of +each tool until none of the two tools prints any more error messages. +</para> + +</sect2> + + +<sect2 id="drd-manual.resource requirements" xreflabel="Resource Requirements"> +<title>Resource Requirements</title> + +<para> +The requirements of DRD with regard to heap and stack memory and the +effect on the execution time of client programs are as follows: +<itemizedlist> + <listitem> + <para> + When running a program under DRD with default DRD options, + between 1.1 and 3.6 times more memory will be needed compared to + a native run of the client program. More memory will be needed + if loading debug information has been enabled + (<literal>--var-info=yes</literal>). + </para> + </listitem> + <listitem> + <para> + DRD allocates some of its temporary data structures on the stack + of the client program threads. This amount of data is limited to + 1 - 2 KB. Make sure that thread stacks are sufficiently large. + </para> + </listitem> + <listitem> + <para> + Most applications will run between 20 and 50 times slower under + DRD than a native single-threaded run. Applications such as + Firefox which perform very much mutex lock / unlock operations + however will run too slow to be usable under DRD. This issue + will be addressed in a future DRD version. + </para> + </listitem> +</itemizedlist> +</para> + +</sect2> + + </sect1> @@ -1105,15 +1213,6 @@ </listitem> <listitem> <para> - Most applications will run between 20 and 100 times slower under - DRD than natively. Applications which perform very much mutex - lock / unlock operations however will run too slow to be usable - under DRD. Examples are Firefox and Nautilus. This will be - addressed in a future DRD version. - </para> - </listitem> - <listitem> - <para> Of the two POSIX threads implementations for Linux, only the NPTL (Native POSIX Thread Library) is supported. The older LinuxThreads library is not supported. @@ -1152,7 +1251,7 @@ <listitem> <para> If you compile the DRD source code yourself, you need gcc 3.0 or - later. gcc 2.95 is not supported. + later. Gcc 2.95 is not supported. </para> </listitem> </itemizedlist> @@ -1168,7 +1267,7 @@ DRD, feel free to either post a message on the Valgrind users mailing list or to file a bug report. See also <ulink url="&vg-url;">&vg-url;</ulink> for more information about the -Valgrind mailing lists and how to file a bug report. +Valgrind mailing lists or about how to file a bug report. </para> </sect1> |
|
From: Tom H. <th...@cy...> - 2008-07-03 02:56:56
|
Nightly build on aston ( x86_64, Fedora Core 5 ) started at 2008-07-03 03:20:08 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 441 tests, 7 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc08_hbl2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 441 tests, 9 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) exp-drd/tests/pth_inconsistent_cond_wait (stderr) exp-drd/tests/tc08_hbl2 (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Jul 3 03:38:20 2008 --- new.short Thu Jul 3 03:57:02 2008 *************** *** 8,10 **** ! == 441 tests, 9 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/file_locking (stderr) --- 8,10 ---- ! == 441 tests, 7 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/file_locking (stderr) *************** *** 15,21 **** none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) - helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) - exp-drd/tests/pth_inconsistent_cond_wait (stderr) - exp-drd/tests/tc08_hbl2 (stdout) --- 15,19 ---- none/tests/mremap2 (stdout) + helgrind/tests/tc08_hbl2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-07-03 02:45:14
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-07-03 03:05:04 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 435 tests, 5 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-07-03 02:42:21
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-07-03 03:25:06 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 439 tests, 8 stderr failures, 5 stdout failures, 0 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/bug133694 (stdout) memcheck/tests/x86/bug133694 (stderr) memcheck/tests/x86/scalar (stderr) none/tests/cmdline1 (stdout) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-07-03 02:24:02
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-07-03 03:00:06 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 441 tests, 31 stderr failures, 3 stdout failures, 0 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap2 (stdout) none/tests/x86/insn_ssse3 (stdout) none/tests/x86/insn_ssse3 (stderr) none/tests/x86/ssse3_misaligned (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) |