Changes:
- Generalized the behavior of happens-before / happens-after annotations such
  that not only 1:1 but also n:m patterns are supported.
- Dropped support for invoking happens-before / happens-after annotations on
  POSIX condition variables (pthread_cond_t).
- Report the details about the offending synchronization object in generic
  errors.
- Converted a few tl_assert() statements into error messages.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11073 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/drd_barrier.c b/drd/drd_barrier.c
index 90fa330..de8d67b 100644
--- a/drd/drd_barrier.c
+++ b/drd/drd_barrier.c
@@ -42,11 +42,11 @@
 struct barrier_thread_info
 {
    UWord       tid;           // A DrdThreadId declared as UWord because
-   // this member variable is the key of an OSet.
+                              // this member variable is the key of an OSet.
    Word        iteration;     // iteration of last pthread_barrier_wait()
-   // call thread tid participated in.
+                              // call thread tid participated in.
    Segment*    sg[2];         // Segments of the last two
-   // pthread_barrier() calls by thread tid.
+                              // pthread_barrier() calls by thread tid.
    ExeContext* wait_call_ctxt;// call stack for *_barrier_wait() call.
    Segment*    post_wait_sg;  // Segment created after *_barrier_wait() finished
 };
@@ -308,7 +308,10 @@
 
    if (p == 0)
    {
-      GenericErrInfo GEI = { DRD_(thread_get_running_tid)() };
+      GenericErrInfo GEI = {
+	 .tid = DRD_(thread_get_running_tid)(),
+	 .addr = barrier,
+      };
       VG_(maybe_record_error)(VG_(get_running_tid)(),
                               GenericErr,
                               VG_(get_IP)(VG_(get_running_tid)()),