Various build system clean-ups and simplifications:
- Created Makefile.tool-tests.am, put standard AM_CFLAGS et al for tests in
  it.
- A number of tests are shared between Helgrind and DRD.  They used to be
  built in both directories.  Now they are only built in helgrind/tests/,
  and the DRD .vgtest files just point to the executable in helgrind/tests/.
  Most of these (about 30) had the source files in helgrind/tests/;  I moved
  the three that were in drd/tests/ into helgrind/tests/ for consistency.
- Fixed rwlock_test, which was failing to run due to a wrong name in the
  .vgtest file.
- Removed remnants of unused 'hello' test for Memcheck.
- Avoided redundant flag specification in various places, esp.
  memcheck/tests/Makefile.am.
- Removed unnecessary _AIX guards in some Linux-only tests.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9202 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am
index aa82a36..630b4c9 100644
--- a/drd/tests/Makefile.am
+++ b/drd/tests/Makefile.am
@@ -1,5 +1,5 @@
-# For AM_FLAG_M3264_PRI
-include $(top_srcdir)/Makefile.flags.am
+
+include $(top_srcdir)/Makefile.tool-tests.am
 
 SUBDIRS = .
 
@@ -193,24 +193,11 @@
 	trylock.stderr.exp                          \
 	trylock.vgtest
 
-AM_CFLAGS   = $(WERROR) -Wall @FLAG_W_EXTRA@ -Wno-inline -Wno-unused-parameter\
-              -g $(AM_FLAG_M3264_PRI) -DVGA_$(VGCONF_ARCH_PRI)=1 \
-	      -DVGO_$(VGCONF_OS)=1 -DVGP_$(VGCONF_ARCH_PRI)_$(VGCONF_OS)=1
-AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \
-              -I$(top_builddir)/include -I$(top_srcdir)/VEX/pub
-AM_CXXFLAGS = $(AM_CFLAGS)
-
 check_PROGRAMS =      \
   atomic_var          \
   circular_buffer     \
   drd_bitmap_test     \
   fp_race             \
-  hg01_all_ok         \
-  hg02_deadlock       \
-  hg03_inherit        \
-  hg04_race           \
-  hg05_race2          \
-  hg06_readshared     \
   hold_lock           \
   linuxthreads_det    \
   memory_allocation   \
@@ -224,32 +211,8 @@
   pth_detached_sem    \
   pth_inconsistent_cond_wait \
   recursive_mutex     \
-  rwlock_race         \
-  rwlock_test         \
   sem_as_mutex        \
   sigalrm             \
-  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      \
-  tc21_pthonce        \
-  tc22_exit_w_lock    \
-  tc23_bogus_condwait \
-  tc24_nonzero_sem    \
   trylock
 
 if HAVE_BOOST_1_35
@@ -261,11 +224,7 @@
 endif
 
 if HAVE_PTHREAD_BARRIER
-check_PROGRAMS += bar_bad bar_trivial matinv pth_barrier pth_barrier_reinit
-endif
-
-if HAVE_PTHREAD_MUTEX_TIMEDLOCK
-check_PROGRAMS += tc20_verifywrap
+check_PROGRAMS += matinv pth_barrier_reinit
 endif
 
 if HAVE_PTHREAD_SPINLOCK
@@ -277,156 +236,18 @@
 endif
 
 
-atomic_var_SOURCES          = atomic_var.c
-atomic_var_LDADD            = -lpthread
+AM_CFLAGS += @FLAG_W_EXTRA@ -Wno-inline -Wno-unused-parameter
+LDADD = -lpthread
 
-circular_buffer_SOURCES     = circular_buffer.c
-circular_buffer_LDADD       = -lpthread
 
-drd_bitmap_test_SOURCES     = drd_bitmap_test.c
 drd_bitmap_test_CFLAGS      = $(AM_CFLAGS) -O2 \
                               -DENABLE_DRD_CONSISTENCY_CHECKS\
                               @FLAG_UNLIMITED_INLINE_UNIT_GROWTH@
-
-fp_race_SOURCES             = fp_race.c
-fp_race_LDADD               = -lpthread
-
-hg01_all_ok_SOURCES         = ../../helgrind/tests/hg01_all_ok.c
-hg01_all_ok_LDADD           = -lpthread
-
-hg02_deadlock_SOURCES       = ../../helgrind/tests/hg02_deadlock.c
-hg02_deadlock_LDADD         = -lpthread
-
-hg03_inherit_SOURCES        = ../../helgrind/tests/hg03_inherit.c
-hg03_inherit_LDADD          = -lpthread
-
-hg04_race_SOURCES           = ../../helgrind/tests/hg04_race.c
-hg04_race_LDADD             = -lpthread
-
-hg05_race2_SOURCES          = ../../helgrind/tests/hg05_race2.c
-hg05_race2_LDADD            = -lpthread
-
-hg06_readshared_SOURCES     = ../../helgrind/tests/hg06_readshared.c
-hg06_readshared_LDADD       = -lpthread
-
-hold_lock_SOURCES           = hold_lock.c
-hold_lock_LDADD             = -lpthread
-
-linuxthreads_det_SOURCES    = linuxthreads_det.c
-linuxthreads_det_LDADD      = -lpthread
-
-memory_allocation_SOURCES   = memory_allocation.c
+drd_bitmap_test_LDADD       = # nothing, ie. not -lpthread
 
 monitor_example_SOURCES     = monitor_example.cpp
-monitor_example_LDADD       = -lpthread
-
 new_delete_SOURCES          = new_delete.cpp
 
-pth_broadcast_SOURCES       = pth_broadcast.c
-pth_broadcast_LDADD         = -lpthread
-
-pth_cancel_locked_SOURCES   = pth_cancel_locked.c
-pth_cancel_locked_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
-
-pth_detached_sem_SOURCES    = pth_detached_sem.c
-pth_detached_sem_LDADD      = -lpthread
-
-pth_inconsistent_cond_wait_SOURCES = pth_inconsistent_cond_wait.c
-pth_inconsistent_cond_wait_LDADD   = -lpthread
-
-recursive_mutex_SOURCES     = recursive_mutex.c
-recursive_mutex_LDADD       = -lpthread
-
-rwlock_race_SOURCES         = rwlock_race.c
-rwlock_race_LDADD           = -lpthread
-
-rwlock_test_SOURCES         = rwlock_test.c
-rwlock_test_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
-
-tc05_simple_race_SOURCES    = ../../helgrind/tests/tc05_simple_race.c
-tc05_simple_race_LDADD      = -lpthread
-
-tc06_two_races_SOURCES      = ../../helgrind/tests/tc06_two_races.c
-tc06_two_races_LDADD        = -lpthread
-
-tc07_hbl1_SOURCES           = ../../helgrind/tests/tc07_hbl1.c
-tc07_hbl1_LDADD             = -lpthread
-
-tc08_hbl2_SOURCES           = ../../helgrind/tests/tc08_hbl2.c
-tc08_hbl2_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
-
-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
-
-trylock_SOURCES             = trylock.c
-trylock_LDADD               = -lpthread
-
 if HAVE_BOOST_1_35
 boost_thread_SOURCES        = boost_thread.cpp
 boost_thread_CXXFLAGS       = $(AM_CXXFLAGS) $(BOOST_CFLAGS)
@@ -434,59 +255,33 @@
 endif
 
 if HAVE_OPENMP
-omp_matinv_SOURCES          = omp_matinv.c
 omp_matinv_CFLAGS           = $(AM_CFLAGS) -fopenmp
 omp_matinv_LDFLAGS          = -fopenmp
-omp_matinv_LDADD            = -lm
+omp_matinv_LDADD            = $(LDADD) -lm
 
-omp_prime_SOURCES           = omp_prime.c
 omp_prime_CFLAGS            = $(AM_CFLAGS) -fopenmp
 omp_prime_LDFLAGS           = -fopenmp
-omp_prime_LDADD             = -lm
+omp_prime_LDADD             = $(LDADD) -lm
 
-omp_printf_SOURCES          = omp_printf.c
 omp_printf_CFLAGS           = $(AM_CFLAGS) -fopenmp
 omp_printf_LDFLAGS          = -fopenmp
-omp_printf_LDADD            = -lm
+omp_printf_LDADD            = $(LDADD) -lm
 endif
 
 if HAVE_PTHREAD_BARRIER
-bar_bad_SOURCES             = ../../helgrind/tests/bar_bad.c
-bar_bad_LDADD               = -lpthread
-
-bar_trivial_SOURCES         = ../../helgrind/tests/bar_trivial.c
-bar_trivial_LDADD           = -lpthread
-
-matinv_SOURCES              = matinv.c
-matinv_LDADD                = -lpthread -lm
-
-pth_barrier_SOURCES         = pth_barrier.c
-pth_barrier_LDADD           = -lpthread
-
-pth_barrier_reinit_SOURCES  = pth_barrier_reinit.c
-pth_barrier_reinit_LDADD    = -lpthread
-endif
-
-if HAVE_PTHREAD_MUTEX_TIMEDLOCK
-tc20_verifywrap_SOURCES     = ../../helgrind/tests/tc20_verifywrap.c
-tc20_verifywrap_LDADD       = -lpthread
-endif
-
-if HAVE_PTHREAD_SPINLOCK
-pth_spinlock_SOURCES        = pth_spinlock.c
-pth_spinlock_LDADD          = -lpthread
+matinv_LDADD                = $(LDADD) -lm
 endif
 
 if HAVE_QTCORE
 qt4_mutex_SOURCES           = qt4_mutex.cpp
 qt4_mutex_CXXFLAGS          = $(AM_CXXFLAGS) $(QTCORE_CFLAGS)
-qt4_mutex_LDADD             = $(QTCORE_LIBS)
+qt4_mutex_LDADD             = $(LDADD) $(QTCORE_LIBS)
 
 qt4_rwlock_SOURCES          = qt4_rwlock.cpp
 qt4_rwlock_CXXFLAGS         = $(AM_CXXFLAGS) $(QTCORE_CFLAGS)
-qt4_rwlock_LDADD            = $(QTCORE_LIBS)
+qt4_rwlock_LDADD            = $(LDADD) $(QTCORE_LIBS)
 
 qt4_semaphore_SOURCES       = qt4_semaphore.cpp
 qt4_semaphore_CXXFLAGS      = $(AM_CXXFLAGS) $(QTCORE_CFLAGS)
-qt4_semaphore_LDADD         = $(QTCORE_LIBS)
+qt4_semaphore_LDADD         = $(LDADD) $(QTCORE_LIBS)
 endif
diff --git a/drd/tests/bar_bad.vgtest b/drd/tests/bar_bad.vgtest
index 8feedb3..f4946be 100644
--- a/drd/tests/bar_bad.vgtest
+++ b/drd/tests/bar_bad.vgtest
@@ -1,3 +1,3 @@
-prereq: test -e bar_bad && ./supported_libpthread
-prog: bar_bad
+prereq: test -e ../../helgrind/tests/bar_bad && ./supported_libpthread
+prog: ../../helgrind/tests/bar_bad
 vgopts: -q
diff --git a/drd/tests/bar_trivial.vgtest b/drd/tests/bar_trivial.vgtest
index 25fcee7..e67f1d6 100644
--- a/drd/tests/bar_trivial.vgtest
+++ b/drd/tests/bar_trivial.vgtest
@@ -1,3 +1,3 @@
-prereq: test -e bar_trivial && ./supported_libpthread
-prog: bar_trivial
+prereq: test -e ../../helgrind/tests/bar_trivial && ./supported_libpthread
+prog: ../../helgrind/tests/bar_trivial
 vgopts: -q
diff --git a/drd/tests/hg01_all_ok.vgtest b/drd/tests/hg01_all_ok.vgtest
index 6cf7cda..f3409b6 100644
--- a/drd/tests/hg01_all_ok.vgtest
+++ b/drd/tests/hg01_all_ok.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: hg01_all_ok
+prog: ../../helgrind/tests/hg01_all_ok
diff --git a/drd/tests/hg02_deadlock.vgtest b/drd/tests/hg02_deadlock.vgtest
index b8fab93..8ee583c 100644
--- a/drd/tests/hg02_deadlock.vgtest
+++ b/drd/tests/hg02_deadlock.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: hg02_deadlock
+prog: ../../helgrind/tests/hg02_deadlock
diff --git a/drd/tests/hg03_inherit.vgtest b/drd/tests/hg03_inherit.vgtest
index e7b2431..a251867 100644
--- a/drd/tests/hg03_inherit.vgtest
+++ b/drd/tests/hg03_inherit.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --show-confl-seg=no --var-info=yes
-prog: hg03_inherit
+prog: ../../helgrind/tests/hg03_inherit
diff --git a/drd/tests/hg04_race.vgtest b/drd/tests/hg04_race.vgtest
index 173c17c..49c8633 100644
--- a/drd/tests/hg04_race.vgtest
+++ b/drd/tests/hg04_race.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --var-info=yes
-prog: hg04_race
+prog: ../../helgrind/tests/hg04_race
diff --git a/drd/tests/hg05_race2.vgtest b/drd/tests/hg05_race2.vgtest
index 21dbf5a..ba1044f 100644
--- a/drd/tests/hg05_race2.vgtest
+++ b/drd/tests/hg05_race2.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --var-info=yes --check-stack-var=yes
-prog: hg05_race2
+prog: ../../helgrind/tests/hg05_race2
diff --git a/drd/tests/hg06_readshared.vgtest b/drd/tests/hg06_readshared.vgtest
index 6111b7e..18cb7c4 100644
--- a/drd/tests/hg06_readshared.vgtest
+++ b/drd/tests/hg06_readshared.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: hg06_readshared
+prog: ../../helgrind/tests/hg06_readshared
diff --git a/drd/tests/pth_barrier.c b/drd/tests/pth_barrier.c
deleted file mode 100644
index e0b40a7..0000000
--- a/drd/tests/pth_barrier.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Test whether all data races are detected in a multithreaded program with
- * barriers.
- */
-
-
-#define _GNU_SOURCE
-
-/***********************/
-/* Include directives. */
-/***********************/
-
-#include <assert.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-/*********************/
-/* Type definitions. */
-/*********************/
-
-struct threadinfo
-{
-  pthread_barrier_t* b;
-  pthread_t          tid;
-  int*               array;
-  int                iterations;
-};
-
-
-/********************/
-/* Local variables. */
-/********************/
-
-static int s_silent;
-
-
-/*************************/
-/* Function definitions. */
-/*************************/
-
-/** Single thread, which touches p->iterations elements of array p->array.
- * Each modification of an element of p->array is a data race. */
-static void* threadfunc(struct threadinfo* p)
-{
-  int i;
-  int* const array = p->array;
-  pthread_barrier_t* const b = p->b;
-  if (! s_silent)
-    printf("thread %lx iteration 0\n", pthread_self());
-  pthread_barrier_wait(b);
-  for (i = 0; i < p->iterations; i++)
-  {
-    if (! s_silent)
-      printf("thread %lx iteration %d; writing to %p\n",
-             pthread_self(), i + 1, &array[i]);
-    array[i] = i;
-    pthread_barrier_wait(b);
-  }
-  return 0;
-}
-
-/** Actual test, consisting of nthread threads. */
-static void barriers_and_races(const int nthread, const int iterations)
-{
-  int i;
-  struct threadinfo* t;
-  pthread_barrier_t b;
-  int* array;
-
-  t = malloc(nthread * sizeof(struct threadinfo));
-  array = malloc(iterations * sizeof(array[0]));
-
-  if (! s_silent)
-    printf("&array[0] = %p\n", array);
-
-  pthread_barrier_init(&b, 0, nthread);
-
-  for (i = 0; i < nthread; i++)
-  {
-    t[i].b = &b;
-    t[i].array = array;
-    t[i].iterations = iterations;
-    pthread_create(&t[i].tid, 0, (void*(*)(void*))threadfunc, &t[i]);
-  }
-
-  for (i = 0; i < nthread; i++)
-  {
-    pthread_join(t[i].tid, 0);
-  }
-
-  pthread_barrier_destroy(&b);
-
-  free(array);
-  free(t);
-}
-
-int main(int argc, char** argv)
-{
-  int nthread;
-  int iterations;
-
-  nthread    = (argc > 1) ? atoi(argv[1]) : 2;
-  iterations = (argc > 2) ? atoi(argv[2]) : 3;
-  s_silent   = (argc > 3) ? atoi(argv[3]) : 0;
-
-  barriers_and_races(nthread, iterations);
-
-  return 0;
-}
diff --git a/drd/tests/pth_barrier.vgtest b/drd/tests/pth_barrier.vgtest
index adc781d..3f15c0e 100644
--- a/drd/tests/pth_barrier.vgtest
+++ b/drd/tests/pth_barrier.vgtest
@@ -1,4 +1,4 @@
-prereq: test -e pth_barrier && ./supported_libpthread
-prog: pth_barrier
+prereq: test -e ../../helgrind/tests/pth_barrier && ./supported_libpthread
+prog: ../../helgrind/tests/pth_barrier
 args: 2 1 1
 stderr_filter: filter_error_summary
diff --git a/drd/tests/pth_barrier2.vgtest b/drd/tests/pth_barrier2.vgtest
index 1fe9408..bedb841 100644
--- a/drd/tests/pth_barrier2.vgtest
+++ b/drd/tests/pth_barrier2.vgtest
@@ -1,4 +1,4 @@
-prereq: test -e pth_barrier && ./supported_libpthread
-prog: pth_barrier
+prereq: test -e ../../helgrind/tests/pth_barrier && ./supported_libpthread
+prog: ../../helgrind/tests/pth_barrier
 args: 2 32 1
 stderr_filter: filter_error_summary
diff --git a/drd/tests/pth_barrier3.vgtest b/drd/tests/pth_barrier3.vgtest
index c17edb1..562866e 100644
--- a/drd/tests/pth_barrier3.vgtest
+++ b/drd/tests/pth_barrier3.vgtest
@@ -1,4 +1,4 @@
-prereq: test -e pth_barrier && ./supported_libpthread
-prog: pth_barrier
+prereq: test -e ../../helgrind/tests/pth_barrier && ./supported_libpthread
+prog: ../../helgrind/tests/pth_barrier
 args: 32 1 1
 stderr_filter: filter_error_summary
diff --git a/drd/tests/rwlock_race.c b/drd/tests/rwlock_race.c
deleted file mode 100644
index e07524f..0000000
--- a/drd/tests/rwlock_race.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/** Cause a race inside code protected by a reader lock.
- */
-
-
-/* Needed for older glibc's (2.3 and older, at least) who don't
-   otherwise "know" about pthread_rwlock_anything or about
-   PTHREAD_MUTEX_RECURSIVE (amongst things). */
-
-#define _GNU_SOURCE 1
-
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-
-static pthread_rwlock_t s_rwlock;
-static int s_racy;
-
-static void sleep_ms(const int ms)
-{
-  struct timespec delay = { ms / 1000, (ms % 1000) * 1000 * 1000 };
-  nanosleep(&delay, 0);
-}
-
-static void* thread_func(void* arg)
-{
-  pthread_rwlock_rdlock(&s_rwlock);
-  s_racy++;
-  pthread_rwlock_unlock(&s_rwlock);
-  sleep_ms(100);
-  return 0;
-}
-
-int main(int argc, char** argv)
-{
-  pthread_t thread1;
-  pthread_t thread2;
-
-#if 0
-  int res;
-  VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_TRACE_ADDR,
-                             &s_racy, 0, 0, 0, 0);
-#endif
-
-  pthread_rwlock_init(&s_rwlock, 0);
-  pthread_create(&thread1, 0, thread_func, 0);
-  pthread_create(&thread2, 0, thread_func, 0);
-  pthread_join(thread1, 0);
-  pthread_join(thread2, 0);
-  pthread_rwlock_destroy(&s_rwlock);
-
-  fprintf(stderr, "Result: %d\n", s_racy);
-
-  return 0;
-}
diff --git a/drd/tests/rwlock_race.vgtest b/drd/tests/rwlock_race.vgtest
index 856138b..5a76b2c 100644
--- a/drd/tests/rwlock_race.vgtest
+++ b/drd/tests/rwlock_race.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --var-info=yes
-prog: rwlock_race
+prog: ../../helgrind/tests/rwlock_race
diff --git a/drd/tests/rwlock_test.c b/drd/tests/rwlock_test.c
deleted file mode 100644
index 87731f5..0000000
--- a/drd/tests/rwlock_test.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/** Multithreaded test program that triggers various access patterns without
- *  triggering any race conditions.
- */
-
-
-#define _GNU_SOURCE 1
-
-#include <pthread.h>
-#include <stdio.h>
-
-
-static pthread_rwlock_t s_rwlock;
-static int s_counter;
-
-static void* thread_func(void* arg)
-{
-  int i;
-  int sum = 0;
-
-  for (i = 0; i < 1000; i++)
-  {
-    pthread_rwlock_rdlock(&s_rwlock);
-    sum += s_counter;
-    pthread_rwlock_unlock(&s_rwlock);
-    pthread_rwlock_wrlock(&s_rwlock);
-    s_counter++;
-    pthread_rwlock_unlock(&s_rwlock);
-  }
-
-  return 0;
-}
-
-int main(int argc, char** argv)
-{
-  const int thread_count = 10;
-  pthread_t tid[thread_count];
-  int i;
-
-  for (i = 0; i < thread_count; i++)
-  {
-    pthread_create(&tid[i], 0, thread_func, 0);
-  }
-
-  for (i = 0; i < thread_count; i++)
-  {
-    pthread_join(tid[i], 0);
-  }
-
-  fprintf(stderr, "Finished.\n");
-
-  return 0;
-}
diff --git a/drd/tests/rwlock_test.stderr.exp b/drd/tests/rwlock_test.stderr.exp
index 876814f..a7089bb 100644
--- a/drd/tests/rwlock_test.stderr.exp
+++ b/drd/tests/rwlock_test.stderr.exp
@@ -1 +1,4 @@
-valgrind: ./rwlock_vgtest: No such file or directory
+
+Finished.
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/rwlock_test.vgtest b/drd/tests/rwlock_test.vgtest
index bb5a6a7..2188dc6 100644
--- a/drd/tests/rwlock_test.vgtest
+++ b/drd/tests/rwlock_test.vgtest
@@ -1 +1 @@
-prog: rwlock_vgtest
+prog: ../../helgrind/tests/rwlock_test
diff --git a/drd/tests/tc01_simple_race.vgtest b/drd/tests/tc01_simple_race.vgtest
index bfd0879..bb3582f 100644
--- a/drd/tests/tc01_simple_race.vgtest
+++ b/drd/tests/tc01_simple_race.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --var-info=yes
-prog: tc01_simple_race
+prog: ../../helgrind/tests/tc01_simple_race
diff --git a/drd/tests/tc02_simple_tls.vgtest b/drd/tests/tc02_simple_tls.vgtest
index 61425ec..016d749 100644
--- a/drd/tests/tc02_simple_tls.vgtest
+++ b/drd/tests/tc02_simple_tls.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc02_simple_tls
+prog: ../../helgrind/tests/tc02_simple_tls
diff --git a/drd/tests/tc03_re_excl.vgtest b/drd/tests/tc03_re_excl.vgtest
index e687aa2..ee5f031 100644
--- a/drd/tests/tc03_re_excl.vgtest
+++ b/drd/tests/tc03_re_excl.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc03_re_excl
+prog: ../../helgrind/tests/tc03_re_excl
diff --git a/drd/tests/tc04_free_lock.vgtest b/drd/tests/tc04_free_lock.vgtest
index a359d30..c8ae55c 100644
--- a/drd/tests/tc04_free_lock.vgtest
+++ b/drd/tests/tc04_free_lock.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --check-stack-var=yes
-prog: tc04_free_lock
+prog: ../../helgrind/tests/tc04_free_lock
diff --git a/drd/tests/tc05_simple_race.vgtest b/drd/tests/tc05_simple_race.vgtest
index f437c53..fe34a1f 100644
--- a/drd/tests/tc05_simple_race.vgtest
+++ b/drd/tests/tc05_simple_race.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
-prog: tc05_simple_race
+prog: ../../helgrind/tests/tc05_simple_race
 stderr_filter: filter_error_summary
diff --git a/drd/tests/tc06_two_races.vgtest b/drd/tests/tc06_two_races.vgtest
index d52f3a4..7f80dba 100644
--- a/drd/tests/tc06_two_races.vgtest
+++ b/drd/tests/tc06_two_races.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
-prog: tc06_two_races
+prog: ../../helgrind/tests/tc06_two_races
 stderr_filter: filter_error_summary
diff --git a/drd/tests/tc07_hbl1.vgtest b/drd/tests/tc07_hbl1.vgtest
index b9eba4e..b8eb639 100644
--- a/drd/tests/tc07_hbl1.vgtest
+++ b/drd/tests/tc07_hbl1.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc07_hbl1
+prog: ../../helgrind/tests/tc07_hbl1
diff --git a/drd/tests/tc08_hbl2.vgtest b/drd/tests/tc08_hbl2.vgtest
index 0d70d26..1ee1841 100644
--- a/drd/tests/tc08_hbl2.vgtest
+++ b/drd/tests/tc08_hbl2.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc08_hbl2
+prog: ../../helgrind/tests/tc08_hbl2
diff --git a/drd/tests/tc09_bad_unlock.vgtest b/drd/tests/tc09_bad_unlock.vgtest
index 980287b..6956620 100644
--- a/drd/tests/tc09_bad_unlock.vgtest
+++ b/drd/tests/tc09_bad_unlock.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --check-stack-var=yes
-prog: tc09_bad_unlock
+prog: ../../helgrind/tests/tc09_bad_unlock
diff --git a/drd/tests/tc10_rec_lock.vgtest b/drd/tests/tc10_rec_lock.vgtest
index 8176d8a..af3582f 100644
--- a/drd/tests/tc10_rec_lock.vgtest
+++ b/drd/tests/tc10_rec_lock.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc10_rec_lock
+prog: ../../helgrind/tests/tc10_rec_lock
diff --git a/drd/tests/tc11_XCHG.vgtest b/drd/tests/tc11_XCHG.vgtest
index e8376f3..75e4cfc 100644
--- a/drd/tests/tc11_XCHG.vgtest
+++ b/drd/tests/tc11_XCHG.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc11_XCHG
+prog: ../../helgrind/tests/tc11_XCHG
diff --git a/drd/tests/tc12_rwl_trivial.vgtest b/drd/tests/tc12_rwl_trivial.vgtest
index a9cbb54..0cb3825 100644
--- a/drd/tests/tc12_rwl_trivial.vgtest
+++ b/drd/tests/tc12_rwl_trivial.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc12_rwl_trivial
+prog: ../../helgrind/tests/tc12_rwl_trivial
diff --git a/drd/tests/tc13_laog1.vgtest b/drd/tests/tc13_laog1.vgtest
index b6beee0..67bae56 100644
--- a/drd/tests/tc13_laog1.vgtest
+++ b/drd/tests/tc13_laog1.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc13_laog1
+prog: ../../helgrind/tests/tc13_laog1
diff --git a/drd/tests/tc15_laog_lockdel.vgtest b/drd/tests/tc15_laog_lockdel.vgtest
index 72a05f7..0bed938 100644
--- a/drd/tests/tc15_laog_lockdel.vgtest
+++ b/drd/tests/tc15_laog_lockdel.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc15_laog_lockdel
+prog: ../../helgrind/tests/tc15_laog_lockdel
diff --git a/drd/tests/tc16_byterace.vgtest b/drd/tests/tc16_byterace.vgtest
index b6f47e6..18b16b7 100644
--- a/drd/tests/tc16_byterace.vgtest
+++ b/drd/tests/tc16_byterace.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --var-info=yes
-prog: tc16_byterace
+prog: ../../helgrind/tests/tc16_byterace
diff --git a/drd/tests/tc17_sembar.vgtest b/drd/tests/tc17_sembar.vgtest
index deb4d67..8cede49 100644
--- a/drd/tests/tc17_sembar.vgtest
+++ b/drd/tests/tc17_sembar.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc17_sembar
+prog: ../../helgrind/tests/tc17_sembar
diff --git a/drd/tests/tc18_semabuse.vgtest b/drd/tests/tc18_semabuse.vgtest
index fe82010..16b8ecc 100644
--- a/drd/tests/tc18_semabuse.vgtest
+++ b/drd/tests/tc18_semabuse.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc18_semabuse
+prog: ../../helgrind/tests/tc18_semabuse
diff --git a/drd/tests/tc19_shadowmem.vgtest b/drd/tests/tc19_shadowmem.vgtest
index d90d50a..2b2b1a2 100644
--- a/drd/tests/tc19_shadowmem.vgtest
+++ b/drd/tests/tc19_shadowmem.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
-prog: tc19_shadowmem
+prog: ../../helgrind/tests/tc19_shadowmem
 vgopts: --cmp-race-err-addrs=yes --error-limit=no
diff --git a/drd/tests/tc20_verifywrap.vgtest b/drd/tests/tc20_verifywrap.vgtest
index c707a6e..64a4960 100644
--- a/drd/tests/tc20_verifywrap.vgtest
+++ b/drd/tests/tc20_verifywrap.vgtest
@@ -1,3 +1,3 @@
-prereq: test -e tc20_verifywrap && ./supported_libpthread
+prereq: test -e ../../helgrind/tests/tc20_verifywrap && ./supported_libpthread
 vgopts: --var-info=yes --check-stack-var=yes
-prog: tc20_verifywrap
+prog: ../../helgrind/tests/tc20_verifywrap
diff --git a/drd/tests/tc20_verifywrap2.vgtest b/drd/tests/tc20_verifywrap2.vgtest
index 593e114..042ef42 100644
--- a/drd/tests/tc20_verifywrap2.vgtest
+++ b/drd/tests/tc20_verifywrap2.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
 vgopts: --trace-mutex=yes --trace-cond=yes --trace-semaphore=yes --var-info=yes --check-stack-var=yes
-prog: tc20_verifywrap
+prog: ../../helgrind/tests/tc20_verifywrap
diff --git a/drd/tests/tc21_pthonce.vgtest b/drd/tests/tc21_pthonce.vgtest
index 450fa12..b9fa8f7 100644
--- a/drd/tests/tc21_pthonce.vgtest
+++ b/drd/tests/tc21_pthonce.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc21_pthonce
+prog: ../../helgrind/tests/tc21_pthonce
diff --git a/drd/tests/tc22_exit_w_lock.vgtest b/drd/tests/tc22_exit_w_lock.vgtest
index b5718ad..c57698e 100644
--- a/drd/tests/tc22_exit_w_lock.vgtest
+++ b/drd/tests/tc22_exit_w_lock.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc22_exit_w_lock
+prog: ../../helgrind/tests/tc22_exit_w_lock
diff --git a/drd/tests/tc23_bogus_condwait.vgtest b/drd/tests/tc23_bogus_condwait.vgtest
index 1819fb1..87b4c3b 100644
--- a/drd/tests/tc23_bogus_condwait.vgtest
+++ b/drd/tests/tc23_bogus_condwait.vgtest
@@ -1,2 +1,2 @@
 prereq: ./supported_libpthread
-prog: tc23_bogus_condwait
+prog: ../../helgrind/tests/tc23_bogus_condwait
diff --git a/drd/tests/tc24_nonzero_sem.vgtest b/drd/tests/tc24_nonzero_sem.vgtest
index 936db2c..dbff051 100644
--- a/drd/tests/tc24_nonzero_sem.vgtest
+++ b/drd/tests/tc24_nonzero_sem.vgtest
@@ -1,3 +1,3 @@
 prereq: ./supported_libpthread
-prog: tc24_nonzero_sem
+prog: ../../helgrind/tests/tc24_nonzero_sem
 vgopts: --hg-sanity-flags=111111