Added more of Helgrind's regression tests.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7462 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/tests/Makefile.am b/exp-drd/tests/Makefile.am
index f7a6fd2..f935ec7 100644
--- a/exp-drd/tests/Makefile.am
+++ b/exp-drd/tests/Makefile.am
@@ -15,6 +15,18 @@
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 \
@@ -35,10 +47,46 @@
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
@@ -46,48 +94,150 @@
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
diff --git a/exp-drd/tests/hg01_all_ok.stderr.exp b/exp-drd/tests/hg01_all_ok.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/hg01_all_ok.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/hg01_all_ok.vgtest b/exp-drd/tests/hg01_all_ok.vgtest
new file mode 100644
index 0000000..9524976
--- /dev/null
+++ b/exp-drd/tests/hg01_all_ok.vgtest
@@ -0,0 +1 @@
+prog: hg01_all_ok
diff --git a/exp-drd/tests/hg02_deadlock.stderr.exp b/exp-drd/tests/hg02_deadlock.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/hg02_deadlock.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/hg02_deadlock.vgtest b/exp-drd/tests/hg02_deadlock.vgtest
new file mode 100644
index 0000000..ff0deb7
--- /dev/null
+++ b/exp-drd/tests/hg02_deadlock.vgtest
@@ -0,0 +1 @@
+prog: hg02_deadlock
diff --git a/exp-drd/tests/hg03_inherit.stderr.exp b/exp-drd/tests/hg03_inherit.stderr.exp
new file mode 100644
index 0000000..274c6a7
--- /dev/null
+++ b/exp-drd/tests/hg03_inherit.stderr.exp
@@ -0,0 +1,31 @@
+
+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)
diff --git a/exp-drd/tests/hg03_inherit.vgtest b/exp-drd/tests/hg03_inherit.vgtest
new file mode 100644
index 0000000..b3ac039
--- /dev/null
+++ b/exp-drd/tests/hg03_inherit.vgtest
@@ -0,0 +1 @@
+prog: hg03_inherit
diff --git a/exp-drd/tests/hg04_race.stderr.exp b/exp-drd/tests/hg04_race.stderr.exp
new file mode 100644
index 0000000..c713aff
--- /dev/null
+++ b/exp-drd/tests/hg04_race.stderr.exp
@@ -0,0 +1,25 @@
+
+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)
diff --git a/exp-drd/tests/hg04_race.vgtest b/exp-drd/tests/hg04_race.vgtest
new file mode 100644
index 0000000..92b7099
--- /dev/null
+++ b/exp-drd/tests/hg04_race.vgtest
@@ -0,0 +1 @@
+prog: hg04_race
diff --git a/exp-drd/tests/hg05_race2.stderr.exp b/exp-drd/tests/hg05_race2.stderr.exp
new file mode 100644
index 0000000..4d57a29
--- /dev/null
+++ b/exp-drd/tests/hg05_race2.stderr.exp
@@ -0,0 +1,25 @@
+
+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)
diff --git a/exp-drd/tests/hg05_race2.vgtest b/exp-drd/tests/hg05_race2.vgtest
new file mode 100644
index 0000000..a93db5e
--- /dev/null
+++ b/exp-drd/tests/hg05_race2.vgtest
@@ -0,0 +1 @@
+prog: hg05_race2
diff --git a/exp-drd/tests/hg06_readshared.stderr.exp b/exp-drd/tests/hg06_readshared.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/hg06_readshared.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/hg06_readshared.vgtest b/exp-drd/tests/hg06_readshared.vgtest
new file mode 100644
index 0000000..c5accee
--- /dev/null
+++ b/exp-drd/tests/hg06_readshared.vgtest
@@ -0,0 +1 @@
+prog: hg06_readshared
diff --git a/exp-drd/tests/tc01_simple_race.stderr.exp b/exp-drd/tests/tc01_simple_race.stderr.exp
new file mode 100644
index 0000000..8a2b91a
--- /dev/null
+++ b/exp-drd/tests/tc01_simple_race.stderr.exp
@@ -0,0 +1,18 @@
+
+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)
diff --git a/exp-drd/tests/tc01_simple_race.vgtest b/exp-drd/tests/tc01_simple_race.vgtest
new file mode 100644
index 0000000..44f3045
--- /dev/null
+++ b/exp-drd/tests/tc01_simple_race.vgtest
@@ -0,0 +1 @@
+prog: tc01_simple_race
diff --git a/exp-drd/tests/tc02_simple_tls.stderr.exp b/exp-drd/tests/tc02_simple_tls.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/tc02_simple_tls.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/tc02_simple_tls.vgtest b/exp-drd/tests/tc02_simple_tls.vgtest
new file mode 100644
index 0000000..57db35c
--- /dev/null
+++ b/exp-drd/tests/tc02_simple_tls.vgtest
@@ -0,0 +1 @@
+prog: tc02_simple_tls
diff --git a/exp-drd/tests/tc03_re_excl.stderr.exp b/exp-drd/tests/tc03_re_excl.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/tc03_re_excl.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/tc03_re_excl.vgtest b/exp-drd/tests/tc03_re_excl.vgtest
new file mode 100644
index 0000000..e12924a
--- /dev/null
+++ b/exp-drd/tests/tc03_re_excl.vgtest
@@ -0,0 +1 @@
+prog: tc03_re_excl
diff --git a/exp-drd/tests/tc04_free_lock.stderr.exp b/exp-drd/tests/tc04_free_lock.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/tc04_free_lock.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/tc04_free_lock.vgtest b/exp-drd/tests/tc04_free_lock.vgtest
new file mode 100644
index 0000000..27d28bf
--- /dev/null
+++ b/exp-drd/tests/tc04_free_lock.vgtest
@@ -0,0 +1 @@
+prog: tc04_free_lock
diff --git a/exp-drd/tests/tc07_hbl1.stderr.exp b/exp-drd/tests/tc07_hbl1.stderr.exp
new file mode 100644
index 0000000..10f0ca1
--- /dev/null
+++ b/exp-drd/tests/tc07_hbl1.stderr.exp
@@ -0,0 +1,18 @@
+
+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)
diff --git a/exp-drd/tests/tc07_hbl1.vgtest b/exp-drd/tests/tc07_hbl1.vgtest
new file mode 100644
index 0000000..71c463f
--- /dev/null
+++ b/exp-drd/tests/tc07_hbl1.vgtest
@@ -0,0 +1 @@
+prog: tc07_hbl1
diff --git a/exp-drd/tests/tc09_bad_unlock.stderr.exp b/exp-drd/tests/tc09_bad_unlock.stderr.exp
new file mode 100644
index 0000000..b3bc83a
--- /dev/null
+++ b/exp-drd/tests/tc09_bad_unlock.stderr.exp
@@ -0,0 +1,40 @@
+
+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)
diff --git a/exp-drd/tests/tc09_bad_unlock.vgtest b/exp-drd/tests/tc09_bad_unlock.vgtest
new file mode 100644
index 0000000..d09a702
--- /dev/null
+++ b/exp-drd/tests/tc09_bad_unlock.vgtest
@@ -0,0 +1 @@
+prog: tc09_bad_unlock
diff --git a/exp-drd/tests/tc10_rec_lock.stderr.exp b/exp-drd/tests/tc10_rec_lock.stderr.exp
new file mode 100644
index 0000000..d7ba119
--- /dev/null
+++ b/exp-drd/tests/tc10_rec_lock.stderr.exp
@@ -0,0 +1,14 @@
+
+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)
diff --git a/exp-drd/tests/tc10_rec_lock.vgtest b/exp-drd/tests/tc10_rec_lock.vgtest
new file mode 100644
index 0000000..bfd0f89
--- /dev/null
+++ b/exp-drd/tests/tc10_rec_lock.vgtest
@@ -0,0 +1 @@
+prog: tc10_rec_lock
diff --git a/exp-drd/tests/tc11_XCHG.stderr.exp b/exp-drd/tests/tc11_XCHG.stderr.exp
new file mode 100644
index 0000000..f715e4b
--- /dev/null
+++ b/exp-drd/tests/tc11_XCHG.stderr.exp
@@ -0,0 +1,18 @@
+
+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)
diff --git a/exp-drd/tests/tc11_XCHG.vgtest b/exp-drd/tests/tc11_XCHG.vgtest
new file mode 100644
index 0000000..342199b
--- /dev/null
+++ b/exp-drd/tests/tc11_XCHG.vgtest
@@ -0,0 +1 @@
+prog: tc11_XCHG
diff --git a/exp-drd/tests/tc12_rwl_trivial.stderr.exp b/exp-drd/tests/tc12_rwl_trivial.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/tc12_rwl_trivial.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/tc12_rwl_trivial.vgtest b/exp-drd/tests/tc12_rwl_trivial.vgtest
new file mode 100644
index 0000000..fdcd644
--- /dev/null
+++ b/exp-drd/tests/tc12_rwl_trivial.vgtest
@@ -0,0 +1 @@
+prog: tc12_rwl_trivial
diff --git a/exp-drd/tests/tc13_laog1.stderr.exp b/exp-drd/tests/tc13_laog1.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/tc13_laog1.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/tc13_laog1.vgtest b/exp-drd/tests/tc13_laog1.vgtest
new file mode 100644
index 0000000..9fa71cd
--- /dev/null
+++ b/exp-drd/tests/tc13_laog1.vgtest
@@ -0,0 +1 @@
+prog: tc13_laog1
diff --git a/exp-drd/tests/tc15_laog_lockdel.stderr.exp b/exp-drd/tests/tc15_laog_lockdel.stderr.exp
new file mode 100644
index 0000000..ac7a574
--- /dev/null
+++ b/exp-drd/tests/tc15_laog_lockdel.stderr.exp
@@ -0,0 +1,8 @@
+
+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)
diff --git a/exp-drd/tests/tc15_laog_lockdel.vgtest b/exp-drd/tests/tc15_laog_lockdel.vgtest
new file mode 100644
index 0000000..bd7a2ec
--- /dev/null
+++ b/exp-drd/tests/tc15_laog_lockdel.vgtest
@@ -0,0 +1 @@
+prog: tc15_laog_lockdel
diff --git a/exp-drd/tests/tc16_byterace.stderr.exp b/exp-drd/tests/tc16_byterace.stderr.exp
new file mode 100644
index 0000000..84db3ce
--- /dev/null
+++ b/exp-drd/tests/tc16_byterace.stderr.exp
@@ -0,0 +1,18 @@
+
+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)
diff --git a/exp-drd/tests/tc16_byterace.vgtest b/exp-drd/tests/tc16_byterace.vgtest
new file mode 100644
index 0000000..a8bf0f1
--- /dev/null
+++ b/exp-drd/tests/tc16_byterace.vgtest
@@ -0,0 +1 @@
+prog: tc16_byterace
diff --git a/exp-drd/tests/tc19_shadowmem.stderr.exp b/exp-drd/tests/tc19_shadowmem.stderr.exp
new file mode 100644
index 0000000..6b8bf05
--- /dev/null
+++ b/exp-drd/tests/tc19_shadowmem.stderr.exp
@@ -0,0 +1,2 @@
+valgrind: Bad option '--cmp-race-err-addrs=yes'; aborting.
+valgrind: Use --help for more information.
diff --git a/exp-drd/tests/tc19_shadowmem.vgtest b/exp-drd/tests/tc19_shadowmem.vgtest
new file mode 100644
index 0000000..233e8e4
--- /dev/null
+++ b/exp-drd/tests/tc19_shadowmem.vgtest
@@ -0,0 +1,2 @@
+prog: tc19_shadowmem
+vgopts: --cmp-race-err-addrs=yes --error-limit=no
diff --git a/exp-drd/tests/tc20_verifywrap.stderr.exp b/exp-drd/tests/tc20_verifywrap.stderr.exp
new file mode 100644
index 0000000..2ad2498
--- /dev/null
+++ b/exp-drd/tests/tc20_verifywrap.stderr.exp
@@ -0,0 +1,63 @@
+
+
+
+------ 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)
diff --git a/exp-drd/tests/tc20_verifywrap.vgtest b/exp-drd/tests/tc20_verifywrap.vgtest
new file mode 100644
index 0000000..bc61bd6
--- /dev/null
+++ b/exp-drd/tests/tc20_verifywrap.vgtest
@@ -0,0 +1 @@
+prog: tc20_verifywrap
diff --git a/exp-drd/tests/tc21_pthonce.stderr.exp b/exp-drd/tests/tc21_pthonce.stderr.exp
new file mode 100644
index 0000000..d18786f
--- /dev/null
+++ b/exp-drd/tests/tc21_pthonce.stderr.exp
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/exp-drd/tests/tc21_pthonce.vgtest b/exp-drd/tests/tc21_pthonce.vgtest
new file mode 100644
index 0000000..d9b9a81
--- /dev/null
+++ b/exp-drd/tests/tc21_pthonce.vgtest
@@ -0,0 +1 @@
+prog: tc21_pthonce
diff --git a/exp-drd/tests/tc22_exit_w_lock.stderr.exp b/exp-drd/tests/tc22_exit_w_lock.stderr.exp
new file mode 100644
index 0000000..8cdf780
--- /dev/null
+++ b/exp-drd/tests/tc22_exit_w_lock.stderr.exp
@@ -0,0 +1,123 @@
+
+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)
diff --git a/exp-drd/tests/tc22_exit_w_lock.vgtest b/exp-drd/tests/tc22_exit_w_lock.vgtest
new file mode 100644
index 0000000..4f85dd5
--- /dev/null
+++ b/exp-drd/tests/tc22_exit_w_lock.vgtest
@@ -0,0 +1 @@
+prog: tc22_exit_w_lock
diff --git a/exp-drd/tests/tc23_bogus_condwait.stderr.exp b/exp-drd/tests/tc23_bogus_condwait.stderr.exp
new file mode 100644
index 0000000..40ee726
--- /dev/null
+++ b/exp-drd/tests/tc23_bogus_condwait.stderr.exp
@@ -0,0 +1,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)
+
+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)
diff --git a/exp-drd/tests/tc23_bogus_condwait.vgtest b/exp-drd/tests/tc23_bogus_condwait.vgtest
new file mode 100644
index 0000000..31c3ed8
--- /dev/null
+++ b/exp-drd/tests/tc23_bogus_condwait.vgtest
@@ -0,0 +1 @@
+prog: tc23_bogus_condwait
diff --git a/exp-drd/tests/tc24_nonzero_sem.stderr.exp b/exp-drd/tests/tc24_nonzero_sem.stderr.exp
new file mode 100644
index 0000000..14a75de
--- /dev/null
+++ b/exp-drd/tests/tc24_nonzero_sem.stderr.exp
@@ -0,0 +1,2 @@
+valgrind: Bad option '--hg-sanity-flags=111111'; aborting.
+valgrind: Use --help for more information.
diff --git a/exp-drd/tests/tc24_nonzero_sem.vgtest b/exp-drd/tests/tc24_nonzero_sem.vgtest
new file mode 100644
index 0000000..1a43121
--- /dev/null
+++ b/exp-drd/tests/tc24_nonzero_sem.vgtest
@@ -0,0 +1,2 @@
+prog: tc24_nonzero_sem
+vgopts: --hg-sanity-flags=111111