------ This is output for >= glibc 2.4 ------

---------------- pthread_create/join ----------------

---Thread-Announcement------------------------------------------

Thread #x is the program's root thread

---Thread-Announcement------------------------------------------

Thread #x was created
   ...
   by 0x........: pthread_create_WRK (hg_intercepts.c:...)
   by 0x........: pthread_create@* (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:76)

----------------------------------------------------------------

Possible data race during write of size 2 at 0x........ by thread #x
Locks held: none
   at 0x........: main (tc20_verifywrap.c:78)

This conflicts with a previous write of size 2 by thread #x
Locks held: none
   at 0x........: racy_child (tc20_verifywrap.c:34)
   by 0x........: mythread_wrapper (hg_intercepts.c:...)
   ...

Location 0x........ is 0 bytes inside global var "unprotected"
declared at tc20_verifywrap.c:27

----------------------------------------------------------------

Thread #x's call to pthread_join failed
   with error code 35 (EDEADLK: Resource deadlock would occur)
   at 0x........: pthread_join_WRK (hg_intercepts.c:...)
   by 0x........: pthread_join (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:83)


---------------- pthread_mutex_lock et al ----------------

----------------------------------------------------------------

Thread #x's call to pthread_mutex_init failed
   with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint)
   at 0x........: pthread_mutex_init (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:92)

----------------------------------------------------------------

Thread #x: pthread_mutex_destroy of a locked mutex
   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:102)

----------------------------------------------------------------

Thread #x's call to pthread_mutex_destroy failed
   with error code 16 (EBUSY: Device or resource busy)
   at 0x........: pthread_mutex_destroy (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:102)

----------------------------------------------------------------

Thread #x's call to pthread_mutex_lock failed
   with error code 22 (EINVAL: Invalid argument)
   at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:108)

----------------------------------------------------------------

Thread #x's call to pthread_mutex_trylock failed
   with error code 22 (EINVAL: Invalid argument)
   at 0x........: pthread_mutex_trylock (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:116)

----------------------------------------------------------------

Thread #x's call to pthread_mutex_timedlock failed
   with error code 22 (EINVAL: Invalid argument)
   at 0x........: pthread_mutex_timedlock (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:121)

----------------------------------------------------------------

Thread #x unlocked an invalid lock at 0x........
   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:125)

----------------------------------------------------------------

Thread #x's call to pthread_mutex_unlock failed
   with error code 22 (EINVAL: Invalid argument)
   at 0x........: pthread_mutex_unlock (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:125)


---------------- pthread_cond_wait et al ----------------

----------------------------------------------------------------

Thread #x: pthread_cond_{timed}wait called with un-held mutex
   at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
   by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:147)

----------------------------------------------------------------

Thread #x's call to pthread_cond_wait failed
   with error code 1 (EPERM: Operation not permitted)
   at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...)
   by 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:147)

----------------------------------------------------------------

Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
   at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...)
   by 0x........: pthread_cond_signal@* (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:152)


FIXME: can't figure out how to verify wrap of pthread_cond_signal

----------------------------------------------------------------

Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread
   at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...)
   by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:158)


FIXME: can't figure out how to verify wrap of pthread_broadcast_signal

----------------------------------------------------------------

Thread #x: pthread_cond_{timed}wait called with un-held mutex
   at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
   by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:165)

----------------------------------------------------------------

Thread #x's call to pthread_cond_timedwait failed
   with error code 22 (EINVAL: Invalid argument)
   at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...)
   by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:165)


---------------- pthread_rwlock_* ----------------

----------------------------------------------------------------

Thread #x unlocked a not-locked lock at 0x........
   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:179)
  Lock at 0x........ was first observed
   at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
   by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:178)

(1) no error on next line
(2) no error on next line
(3)    ERROR on next line
----------------------------------------------------------------

Thread #x unlocked a not-locked lock at 0x........
   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:196)
  Lock at 0x........ was first observed
   at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
   by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:186)

(4) no error on next line
(5) no error on next line
(6) no error on next line
(7) no error on next line
(8)    ERROR on next line
----------------------------------------------------------------

Thread #x unlocked a not-locked lock at 0x........
   at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...)
   by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:212)
  Lock at 0x........ was first observed
   at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...)
   by 0x........: pthread_rwlock_init (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:186)


---------------- sem_* ----------------

----------------------------------------------------------------

Thread #x's call to sem_init failed
   with error code 22 (EINVAL: Invalid argument)
   at 0x........: sem_init_WRK (hg_intercepts.c:...)
   by 0x........: sem_init@* (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:228)


FIXME: can't figure out how to verify wrap of sem_destroy

----------------------------------------------------------------

Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
   at 0x........: sem_wait_WRK (hg_intercepts.c:...)
   by 0x........: sem_wait (hg_intercepts.c:...)
   by 0x........: main (tc20_verifywrap.c:242)


FIXME: can't figure out how to verify wrap of sem_post


------------ dealloc of mem holding locks ------------

----------------------------------------------------------------

Thread #x: Exiting thread still holds 1 lock
   ...


ERROR SUMMARY: 22 errors from 22 contexts (suppressed: 0 from 0)