fp_race.stderr.exp2 \
fp_race2.vgtest \
fp_race2.stdout.exp fp_race2.stderr.exp \
+ hg01_all_ok.vgtest \
+ hg01_all_ok.stderr.exp \
+ hg02_deadlock.vgtest \
+ hg02_deadlock.stderr.exp \
+ hg03_inherit.vgtest \
+ hg03_inherit.stderr.exp \
+ hg04_race.vgtest \
+ hg04_race.stderr.exp \
+ hg05_race2.vgtest \
+ hg05_race2.stderr.exp \
+ hg06_readshared.vgtest \
+ hg06_readshared.stderr.exp \
matinv.vgtest \
matinv.stdout.exp matinv.stderr.exp \
pth_barrier.vgtest \
sem_as_mutex.stderr.exp sem_as_mutex.stderr.exp2 \
sem_as_mutex2.vgtest \
sem_as_mutex2.stderr.exp \
- tc17_sembar.vgtest \
- tc17_sembar.stderr.exp \
- tc18_semabuse.vgtest \
- tc18_semabuse.stderr.exp \
+ tc01_simple_race.vgtest \
+ tc01_simple_race.stderr.exp \
+ tc02_simple_tls.vgtest \
+ tc02_simple_tls.stderr.exp \
+ tc03_re_excl.vgtest \
+ tc03_re_excl.stderr.exp \
+ tc04_free_lock.vgtest \
+ tc04_free_lock.stderr.exp \
+ tc07_hbl1.vgtest \
+ tc07_hbl1.stderr.exp \
+ tc09_bad_unlock.vgtest \
+ tc09_bad_unlock.stderr.exp \
+ tc10_rec_lock.vgtest \
+ tc10_rec_lock.stderr.exp \
+ tc11_XCHG.vgtest \
+ tc11_XCHG.stderr.exp \
+ tc12_rwl_trivial.vgtest \
+ tc12_rwl_trivial.stderr.exp \
+ tc13_laog1.vgtest \
+ tc13_laog1.stderr.exp \
+ tc15_laog_lockdel.vgtest \
+ tc15_laog_lockdel.stderr.exp \
+ tc16_byterace.vgtest \
+ tc16_byterace.stderr.exp \
+ tc17_sembar.vgtest \
+ tc17_sembar.stderr.exp \
+ tc18_semabuse.vgtest \
+ tc18_semabuse.stderr.exp \
+ tc19_shadowmem.vgtest \
+ tc19_shadowmem.stderr.exp \
+ tc20_verifywrap.vgtest \
+ tc20_verifywrap.stderr.exp \
+ tc21_pthonce.vgtest \
+ tc21_pthonce.stderr.exp \
+ tc22_exit_w_lock.vgtest \
+ tc22_exit_w_lock.stderr.exp \
+ tc23_bogus_condwait.vgtest \
+ tc23_bogus_condwait.stderr.exp \
+ tc24_nonzero_sem.vgtest \
+ tc24_nonzero_sem.stderr.exp \
sigalrm.vgtest \
sigalrm.stdout.exp sigalrm.stderr.exp
AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include -I$(top_builddir)/include
AM_CXXFLAGS = $(AM_CFLAGS)
-check_PROGRAMS = \
- fp_race \
- matinv \
- pth_barrier \
- pth_broadcast \
- pth_cond_race \
- pth_create_chain \
- pth_detached \
- sem_as_mutex \
- sigalrm \
- tc17_sembar \
- tc18_semabuse
+check_PROGRAMS = \
+ fp_race \
+ hg01_all_ok \
+ hg02_deadlock \
+ hg03_inherit \
+ hg04_race \
+ hg05_race2 \
+ hg06_readshared \
+ matinv \
+ pth_barrier \
+ pth_broadcast \
+ pth_cond_race \
+ pth_create_chain \
+ pth_detached \
+ sem_as_mutex \
+ sigalrm \
+ tc01_simple_race \
+ tc02_simple_tls \
+ tc03_re_excl \
+ tc04_free_lock \
+ tc07_hbl1 \
+ 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
-fp_race_SOURCES = fp_race.c
-fp_race_LDADD = -lpthread
+# tc05_simple_race -- result depends on scheduler.
+# tc06_two_races -- result depends on scheduler.
+# tc08_hbl2 -- result depends on scheduler.
+# tc14_laog_dinphils -- hangs.
-matinv_SOURCES = matinv.c
-matinv_LDADD = -lpthread -lm
-pth_barrier_SOURCES = pth_barrier.c
-pth_barrier_LDADD = -lpthread
+fp_race_SOURCES = fp_race.c
+fp_race_LDADD = -lpthread
-pth_broadcast_SOURCES = pth_broadcast.c
-pth_broadcast_LDADD = -lpthread
+hg01_all_ok_SOURCES = ../../helgrind/tests/hg01_all_ok.c
+hg01_all_ok_LDADD = -lpthread
-pth_cond_race_SOURCES = pth_cond_race.c
-pth_cond_race_LDADD = -lpthread
+hg02_deadlock_SOURCES = ../../helgrind/tests/hg02_deadlock.c
+hg02_deadlock_LDADD = -lpthread
-pth_create_chain_SOURCES = pth_create_chain.c
-pth_create_chain_LDADD = -lpthread
+hg03_inherit_SOURCES = ../../helgrind/tests/hg03_inherit.c
+hg03_inherit_LDADD = -lpthread
-pth_detached_SOURCES = pth_detached.c
-pth_detached_LDADD = -lpthread
+hg04_race_SOURCES = ../../helgrind/tests/hg04_race.c
+hg04_race_LDADD = -lpthread
-sem_as_mutex_SOURCES = sem_as_mutex.c
-sem_as_mutex_LDADD = -lpthread
+hg05_race2_SOURCES = ../../helgrind/tests/hg05_race2.c
+hg05_race2_LDADD = -lpthread
-sigalrm_SOURCES = sigalrm.c
-sigalrm_LDADD = -lpthread
+hg06_readshared_SOURCES = ../../helgrind/tests/hg06_readshared.c
+hg06_readshared_LDADD = -lpthread
-tc17_sembar_SOURCES = ../../helgrind/tests/tc17_sembar.c
-tc17_sembar_LDADD = -lpthread
+matinv_SOURCES = matinv.c
+matinv_LDADD = -lpthread -lm
-tc18_semabuse_SOURCES = ../../helgrind/tests/tc18_semabuse.c
-tc18_semabuse_LDADD = -lpthread
+pth_barrier_SOURCES = pth_barrier.c
+pth_barrier_LDADD = -lpthread
+
+pth_broadcast_SOURCES = pth_broadcast.c
+pth_broadcast_LDADD = -lpthread
+
+pth_cond_race_SOURCES = pth_cond_race.c
+pth_cond_race_LDADD = -lpthread
+
+pth_create_chain_SOURCES = pth_create_chain.c
+pth_create_chain_LDADD = -lpthread
+
+pth_detached_SOURCES = pth_detached.c
+pth_detached_LDADD = -lpthread
+
+sem_as_mutex_SOURCES = sem_as_mutex.c
+sem_as_mutex_LDADD = -lpthread
+
+sigalrm_SOURCES = sigalrm.c
+sigalrm_LDADD = -lpthread
+
+tc01_simple_race_SOURCES = ../../helgrind/tests/tc01_simple_race.c
+tc01_simple_race_LDADD = -lpthread
+
+tc02_simple_tls_SOURCES = ../../helgrind/tests/tc02_simple_tls.c
+tc02_simple_tls_LDADD = -lpthread
+
+tc03_re_excl_SOURCES = ../../helgrind/tests/tc03_re_excl.c
+tc03_re_excl_LDADD = -lpthread
+
+tc04_free_lock_SOURCES = ../../helgrind/tests/tc04_free_lock.c
+tc04_free_lock_LDADD = -lpthread
+
+tc07_hbl1_SOURCES = ../../helgrind/tests/tc07_hbl1.c
+tc07_hbl1_LDADD = -lpthread
+
+tc09_bad_unlock_SOURCES = ../../helgrind/tests/tc09_bad_unlock.c
+tc09_bad_unlock_LDADD = -lpthread
+
+tc10_rec_lock_SOURCES = ../../helgrind/tests/tc10_rec_lock.c
+tc10_rec_lock_LDADD = -lpthread
+
+tc11_XCHG_SOURCES = ../../helgrind/tests/tc11_XCHG.c
+tc11_XCHG_LDADD = -lpthread
+
+tc12_rwl_trivial_SOURCES = ../../helgrind/tests/tc12_rwl_trivial.c
+tc12_rwl_trivial_LDADD = -lpthread
+
+tc13_laog1_SOURCES = ../../helgrind/tests/tc13_laog1.c
+tc13_laog1_LDADD = -lpthread
+
+tc15_laog_lockdel_SOURCES = ../../helgrind/tests/tc15_laog_lockdel.c
+tc15_laog_lockdel_LDADD = -lpthread
+
+tc16_byterace_SOURCES = ../../helgrind/tests/tc16_byterace.c
+tc16_byterace_LDADD = -lpthread
+
+tc17_sembar_SOURCES = ../../helgrind/tests/tc17_sembar.c
+tc17_sembar_LDADD = -lpthread
+
+tc18_semabuse_SOURCES = ../../helgrind/tests/tc18_semabuse.c
+tc18_semabuse_LDADD = -lpthread
+
+tc19_shadowmem_SOURCES = ../../helgrind/tests/tc19_shadowmem.c
+tc19_shadowmem_LDADD = -lpthread
+
+tc20_verifywrap_SOURCES = ../../helgrind/tests/tc20_verifywrap.c
+tc20_verifywrap_LDADD = -lpthread
+
+tc21_pthonce_SOURCES = ../../helgrind/tests/tc21_pthonce.c
+tc21_pthonce_LDADD = -lpthread
+
+tc22_exit_w_lock_SOURCES = ../../helgrind/tests/tc22_exit_w_lock.c
+tc22_exit_w_lock_LDADD = -lpthread
+
+tc23_bogus_condwait_SOURCES = ../../helgrind/tests/tc23_bogus_condwait.c
+tc23_bogus_condwait_LDADD = -lpthread
+
+tc24_nonzero_sem_SOURCES = ../../helgrind/tests/tc24_nonzero_sem.c
+tc24_nonzero_sem_LDADD = -lpthread
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: hg01_all_ok
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: hg02_deadlock
--- /dev/null
+
+Thread 3:
+Conflicting store by thread 3 at 0x........ size 4
+ at 0x........: t2 (hg03_inherit.c:28)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Allocation context: unknown
+Other segment start (thread 1)
+ at 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (hg03_inherit.c:49)
+Other segment end (thread 1)
+ at 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (hg03_inherit.c:63)
+
+Conflicting store by thread 3 at 0x........ size 4
+ at 0x........: t2 (hg03_inherit.c:29)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Allocation context: unknown
+Other segment start (thread 1)
+ at 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (hg03_inherit.c:49)
+Other segment end (thread 1)
+ at 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (hg03_inherit.c:63)
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: hg03_inherit
--- /dev/null
+
+Thread 2:
+Conflicting load by thread 2 at 0x........ size 4
+ at 0x........: th (hg04_race.c:10)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 2 at 0x........ size 4
+ at 0x........: th (hg04_race.c:10)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: hg04_race
--- /dev/null
+
+Thread 2:
+Conflicting load by thread 2 at 0x........ size 4
+ at 0x........: th (hg05_race2.c:17)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Allocation context: stack of thread 1, offset -5584
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 2 at 0x........ size 4
+ at 0x........: th (hg05_race2.c:17)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Allocation context: stack of thread 1, offset -5584
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: hg05_race2
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: hg06_readshared
--- /dev/null
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: main (tc01_simple_race.c:28)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: main (tc01_simple_race.c:28)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc01_simple_race
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc02_simple_tls
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc03_re_excl
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc04_free_lock
--- /dev/null
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: main (tc07_hbl1.c:68)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: main (tc07_hbl1.c:68)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc07_hbl1
--- /dev/null
+
+Attempt to unlock a mutex that is not locked / mutex 0x........ (recursion count -1, owner 1)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:27)
+ by 0x........: main (tc09_bad_unlock.c:49)
+
+Thread 2:
+Mutex not unlocked by owner thread / mutex 0x........ (recursion count 1, owner 1)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: child_fn (tc09_bad_unlock.c:11)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+
+Thread 1:
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:41)
+ by 0x........: main (tc09_bad_unlock.c:49)
+
+Attempt to unlock a mutex that is not locked / mutex 0x........ (recursion count -1, owner 1)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:27)
+ by 0x........: main (tc09_bad_unlock.c:50)
+
+Thread 2:
+Mutex not unlocked by owner thread / mutex 0x........ (recursion count 1, owner 1)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: child_fn (tc09_bad_unlock.c:11)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+
+Thread 1:
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: nearly_main (tc09_bad_unlock.c:41)
+ by 0x........: main (tc09_bad_unlock.c:50)
+
+ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc09_bad_unlock
--- /dev/null
+
+before lock #1
+before lock #2
+before lock #3
+before unlock #1
+before unlock #2
+before unlock #3
+before unlock #4
+Attempt to unlock a mutex that is not locked / mutex 0x........ (recursion count -1, owner 1)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: nearly_main (tc10_rec_lock.c:42)
+ by 0x........: main (tc10_rec_lock.c:47)
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc10_rec_lock
--- /dev/null
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: main (tc11_XCHG.c:78)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: main (tc11_XCHG.c:78)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc11_XCHG
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc12_rwl_trivial
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc13_laog1
--- /dev/null
+
+Establish order 1 -> 2
+Try order 2 -> 1. This gives an error.
+Free 2 and re-allocate it. This gives it a new identity,
+so a second locking sequence 2 -> 1 should now be OK.
+done
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc15_laog_lockdel
--- /dev/null
+
+Conflicting load by thread 1 at 0x........ size 1
+ at 0x........: main (tc16_byterace.c:34)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 1
+ at 0x........: main (tc16_byterace.c:34)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc16_byterace
--- /dev/null
+valgrind: Bad option '--cmp-race-err-addrs=yes'; aborting.
+valgrind: Use --help for more information.
--- /dev/null
+prog: tc19_shadowmem
+vgopts: --cmp-race-err-addrs=yes --error-limit=no
--- /dev/null
+
+
+
+------ This is output for >= glibc 2.4 ------
+
+---------------- pthread_create/join ----------------
+
+Conflicting store by thread 1 at 0x........ size 2
+ at 0x........: main (tc20_verifywrap.c:78)
+Allocation context: unknown
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+---------------- pthread_mutex_lock et al ----------------
+
+
+Destroying locked mutex / mutex 0x........ (recursion count 1, owner 1)
+ at 0x........: pthread_mutex_destroy (drd_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:102)
+
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:125)
+
+---------------- pthread_cond_wait et al ----------------
+
+
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
+ by 0x........: main (tc20_verifywrap.c:147)
+
+FIXME: can't figure out how to verify wrap of pthread_cond_signal
+
+
+FIXME: can't figure out how to verify wrap of pthread_broadcast_signal
+
+
+---------------- pthread_rwlock_* ----------------
+
+(1) no error on next line
+(2) no error on next line
+(3) ERROR on next line
+(4) no error on next line
+(5) no error on next line
+(6) no error on next line
+(7) no error on next line
+(8) ERROR on next line
+
+---------------- sem_* ----------------
+
+
+FIXME: can't figure out how to verify wrap of sem_destroy
+
+
+FIXME: can't figure out how to verify wrap of sem_post
+
+
+------------ dealloc of mem holding locks ------------
+
+
+ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc20_verifywrap
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc21_pthonce
--- /dev/null
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache_lock (offset 0, size 4) in libpthread-?.?.so, libpthread.so.0:BSS
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache_lock (offset 0, size 4) in libpthread-?.?.so, libpthread.so.0:BSS
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 8
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_used (offset 8, size 16) in libpthread-?.?.so, libpthread.so.0:Data
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 8
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_used (offset 0, size 16) in libpthread-?.?.so, libpthread.so.0:Data
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 8
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache (offset 0, size 16) in libpthread-?.?.so, libpthread.so.0:Data
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 8
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache (offset 8, size 16) in libpthread-?.?.so, libpthread.so.0:Data
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 8
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache (offset 0, size 16) in libpthread-?.?.so, libpthread.so.0:Data
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 8
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache_actsize (offset 0, size 8) in libpthread-?.?.so, libpthread.so.0:BSS
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 8
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache_actsize (offset 0, size 8) in libpthread-?.?.so, libpthread.so.0:BSS
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache_lock (offset 0, size 4) in libpthread-?.?.so, libpthread.so.0:BSS
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+ at 0x........: __deallocate_stack (in libpthread-?.?.so)
+ by 0x........: pthread_join (in libpthread-?.?.so)
+ by 0x........: pthread_join (drd_intercepts.c:?)
+ by 0x........: main (tc22_exit_w_lock.c:43)
+Allocation context: stack_cache_lock (offset 0, size 4) in libpthread-?.?.so, libpthread.so.0:BSS
+Other segment start (thread 2)
+ (thread finished, call stack no longer available)
+Other segment end (thread 2)
+ (thread finished, call stack no longer available)
+
+ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc22_exit_w_lock
--- /dev/null
+
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:69)
+
+Thread 3:
+Race condition: condition variable 0x........ has been signalled but the associated mutex 0x........ is not locked by the signalling thread
+ at 0x........: pthread_cond_signal* (drd_intercepts.c:?)
+ by 0x........: rescue_me (tc23_bogus_condwait.c:20)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+
+Thread 1:
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:69)
+
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:69)
+
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:72)
+
+Thread 3:
+Race condition: condition variable 0x........ has been signalled but the associated mutex 0x........ is not locked by the signalling thread
+ at 0x........: pthread_cond_signal* (drd_intercepts.c:?)
+ by 0x........: rescue_me (tc23_bogus_condwait.c:24)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+
+Thread 1:
+Not a mutex / mutex 0x........ (recursion count 0, owner 0)
+ at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:75)
+
+Thread 3:
+Race condition: condition variable 0x........ has been signalled but the associated mutex 0x........ is not locked by the signalling thread
+ at 0x........: pthread_cond_signal* (drd_intercepts.c:?)
+ by 0x........: rescue_me (tc23_bogus_condwait.c:28)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+
+Thread 1:
+Mutex not unlocked by owner thread / mutex 0x........ (recursion count 1, owner 2)
+ at 0x........: pthread_cond_wait* (drd_intercepts.c:?)
+ by 0x........: main (tc23_bogus_condwait.c:78)
+
+Thread 3:
+Race condition: condition variable 0x........ has been signalled but the associated mutex 0x........ is not locked by the signalling thread
+ at 0x........: pthread_cond_signal* (drd_intercepts.c:?)
+ by 0x........: rescue_me (tc23_bogus_condwait.c:32)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+
+Thread 2:
+Mutex not unlocked by owner thread / mutex 0x........ (recursion count 1, owner 1)
+ at 0x........: pthread_mutex_unlock (drd_intercepts.c:?)
+ by 0x........: grab_the_lock (tc23_bogus_condwait.c:42)
+ by 0x........: vg_thread_wrapper (drd_intercepts.c:?)
+ by 0x........: start_thread (in libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+
+ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
--- /dev/null
+prog: tc23_bogus_condwait
--- /dev/null
+valgrind: Bad option '--hg-sanity-flags=111111'; aborting.
+valgrind: Use --help for more information.
--- /dev/null
+prog: tc24_nonzero_sem
+vgopts: --hg-sanity-flags=111111