From a4c8036d0aa12ec3024478c02bc575eb7e03c762 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Jan 20 2016 18:45:41 +0000 Subject: Add valgrind-3.11.0-pthread_spin_destroy.patch --- diff --git a/valgrind-3.11.0-pthread_spin_destroy.patch b/valgrind-3.11.0-pthread_spin_destroy.patch new file mode 100644 index 0000000..1e83e18 --- /dev/null +++ b/valgrind-3.11.0-pthread_spin_destroy.patch @@ -0,0 +1,1244 @@ +commit c69445c1e07425e827ce936d7c416f7972b51aa2 +Author: iraisr +Date: Tue Jan 12 20:31:15 2016 +0000 + + Fix typo in Helgrind's wrapper of pthread_spin_destroy(). + Patch provided by: Jason Dillaman . + Fixes BZ #357871. + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15756 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/helgrind/hg_intercepts.c b/helgrind/hg_intercepts.c +index fd53208..ff36e93 100644 +--- a/helgrind/hg_intercepts.c ++++ b/helgrind/hg_intercepts.c +@@ -1854,13 +1854,13 @@ static int pthread_spin_destroy_WRK(pthread_spinlock_t *lock) + return ret; + } + #if defined(VGO_linux) +- PTH_FUNC(int, pthreadZuspinZusdestroy, // pthread_spin_destroy ++ PTH_FUNC(int, pthreadZuspinZudestroy, // pthread_spin_destroy + pthread_spinlock_t *lock) { + return pthread_spin_destroy_WRK(lock); + } + #elif defined(VGO_darwin) + #elif defined(VGO_solaris) +- PTH_FUNC(int, pthreadZuspinZusdestroy, // pthread_spin_destroy ++ PTH_FUNC(int, pthreadZuspinZudestroy, // pthread_spin_destroy + pthread_spinlock_t *lock) { + return pthread_spin_destroy_WRK(lock); + } +diff --git a/helgrind/tests/tc20_verifywrap.c b/helgrind/tests/tc20_verifywrap.c +index f71c7f8..c110000 100644 +--- a/helgrind/tests/tc20_verifywrap.c ++++ b/helgrind/tests/tc20_verifywrap.c +@@ -29,6 +29,11 @@ + #endif + #endif /* __sun__ */ + ++typedef union { ++ pthread_spinlock_t spinlock; ++ pthread_rwlock_t rwlock; ++} spin_rw_lock; ++ + short unprotected = 0; + + void* lazy_child ( void* v ) { +@@ -236,6 +241,20 @@ int main ( void ) + r= pthread_rwlock_init( &rwl3, NULL ); assert(!r); + r= pthread_rwlock_rdlock( &rwl3 ); assert(!r); + ++ /* --------- pthread_spin_* --------- */ ++ ++ fprintf(stderr, ++ "\n---------------- pthread_spin_* ----------------\n\n"); ++ ++ /* The following sequence verifies correct wrapping of pthread_spin_init() ++ and pthread_spin_destroy(). */ ++ spin_rw_lock srwl1; ++ pthread_spin_init(&srwl1.spinlock, PTHREAD_PROCESS_PRIVATE); ++ pthread_spin_destroy(&srwl1.spinlock); ++ ++ pthread_rwlock_init(&srwl1.rwlock, NULL); ++ pthread_rwlock_destroy(&srwl1.rwlock); ++ + /* ------------- sem_* ------------- */ + + /* This is pretty lame, and duplicates tc18_semabuse.c. */ +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp b/helgrind/tests/tc20_verifywrap.stderr.exp +index d9019d4..372daea 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp +@@ -14,21 +14,21 @@ Thread #x is the program's root thread + Thread #x was created + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + Location 0x........ is 0 bytes inside global var "unprotected" +- declared at tc20_verifywrap.c:32 ++ declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -36,7 +36,7 @@ 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:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -46,14 +46,14 @@ Thread #x's call to pthread_join failed + 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:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -61,7 +61,7 @@ Thread #x's call to pthread_mutex_destroy failed + with error code 16 (EBUSY: Device or resource busy) + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -69,7 +69,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -77,7 +77,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -85,14 +85,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -100,7 +100,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -110,7 +110,7 @@ Thread #x's call to pthread_mutex_unlock failed + 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -118,14 +118,14 @@ 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + 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:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -135,7 +135,7 @@ 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:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -145,7 +145,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -153,7 +153,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -164,13 +164,13 @@ 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:189) ++ by 0x........: main (tc20_verifywrap.c:194) + 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:188) ++ by 0x........: main (tc20_verifywrap.c:193) + Location 0x........ is 0 bytes inside local var "rwl" +- declared at tc20_verifywrap.c:52, in frame #x of thread x ++ declared at tc20_verifywrap.c:57, in frame #x of thread x + + + (1) no error on next line +@@ -182,13 +182,13 @@ 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:206) ++ by 0x........: main (tc20_verifywrap.c:211) + 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:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside local var "rwl2" +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x + + + (4) no error on next line +@@ -202,14 +202,17 @@ 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:227) ++ by 0x........: main (tc20_verifywrap.c:232) + 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:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside local var "rwl2" +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x ++ ++ + ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -220,7 +223,7 @@ 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:248) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy +@@ -230,7 +233,7 @@ 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:262) ++ by 0x........: main (tc20_verifywrap.c:281) + + ---------------------------------------------------------------- + +@@ -239,7 +242,7 @@ Thread #x's call to sem_post failed + at 0x........: sem_post_WRK (hg_intercepts.c:...) + by 0x........: sem_post (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:265) ++ by 0x........: main (tc20_verifywrap.c:284) + + + FIXME: can't figure out how to verify wrap of sem_post +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 +index f109673..b823d40 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 +@@ -14,21 +14,21 @@ Thread #x is the program's root thread + Thread #x was created + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + Location 0x........ is 0 bytes inside global var "unprotected" +- declared at tc20_verifywrap.c:32 ++ declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -36,7 +36,7 @@ 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:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -46,14 +46,14 @@ Thread #x's call to pthread_join failed + 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:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -61,7 +61,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -69,7 +69,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -77,14 +77,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -92,7 +92,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -102,7 +102,7 @@ Thread #x's call to pthread_mutex_unlock failed + 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -110,14 +110,14 @@ 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + 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:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -127,7 +127,7 @@ 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:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -137,7 +137,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -145,7 +145,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -156,11 +156,11 @@ 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:189) ++ by 0x........: main (tc20_verifywrap.c:194) + 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:188) ++ by 0x........: main (tc20_verifywrap.c:193) + + (1) no error on next line + (2) no error on next line +@@ -171,11 +171,11 @@ 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:206) ++ by 0x........: main (tc20_verifywrap.c:211) + 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:196) ++ by 0x........: main (tc20_verifywrap.c:201) + + (4) no error on next line + (5) no error on next line +@@ -187,11 +187,15 @@ Thread #x unlocked a not-locked lock at 0x........ + 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:227) ++ by 0x........: main (tc20_verifywrap.c:232) + 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:196) ++ by 0x........: main (tc20_verifywrap.c:201) ++ ++ ++ ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -202,7 +206,7 @@ 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:243) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy +@@ -212,7 +216,7 @@ 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:257) ++ by 0x........: main (tc20_verifywrap.c:281) + + ---------------------------------------------------------------- + +@@ -220,7 +224,7 @@ Thread #x's call to sem_post failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: sem_post_WRK (hg_intercepts.c:...) + by 0x........: sem_post (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:260) ++ by 0x........: main (tc20_verifywrap.c:284) + + + FIXME: can't figure out how to verify wrap of sem_post +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 +index 7f4eb21..2a2ee9b 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 +@@ -14,21 +14,21 @@ Thread #x is the program's root thread + Thread #x was created + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + Location 0x........ is 0 bytes inside global var "unprotected" +- declared at tc20_verifywrap.c:32 ++ declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -36,7 +36,7 @@ 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:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -46,14 +46,14 @@ Thread #x's call to pthread_join failed + 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:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -61,7 +61,7 @@ Thread #x's call to pthread_mutex_destroy failed + with error code 16 (EBUSY: Device or resource busy) + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -69,7 +69,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -77,7 +77,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -85,14 +85,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -100,7 +100,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -110,7 +110,7 @@ Thread #x's call to pthread_mutex_unlock failed + 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -118,14 +118,14 @@ 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + 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:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -135,7 +135,7 @@ 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:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -145,7 +145,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -153,7 +153,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -164,13 +164,13 @@ 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:189) ++ by 0x........: main (tc20_verifywrap.c:194) + 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:188) ++ by 0x........: main (tc20_verifywrap.c:193) + Location 0x........ is 0 bytes inside local var "rwl" +- declared at tc20_verifywrap.c:52, in frame #x of thread x ++ declared at tc20_verifywrap.c:57, in frame #x of thread x + + + (1) no error on next line +@@ -182,13 +182,13 @@ 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:206) ++ by 0x........: main (tc20_verifywrap.c:211) + 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:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside local var "rwl2" +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x + + + (4) no error on next line +@@ -202,14 +202,17 @@ 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:227) ++ by 0x........: main (tc20_verifywrap.c:232) + 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:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside local var "rwl2" +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x ++ ++ + ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -220,7 +223,7 @@ 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:248) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy +@@ -230,7 +233,7 @@ 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:262) ++ by 0x........: main (tc20_verifywrap.c:281) + + + FIXME: can't figure out how to verify wrap of sem_post +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-s390x b/helgrind/tests/tc20_verifywrap.stderr.exp-s390x +index 3f60f79..f19215e 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp-s390x ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-s390x +@@ -15,22 +15,22 @@ 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:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + + Location 0x........ is 0 bytes inside global var "unprotected" +-declared at tc20_verifywrap.c:32 ++declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -38,7 +38,7 @@ 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:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -48,14 +48,14 @@ Thread #x's call to pthread_join failed + 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:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -63,7 +63,7 @@ Thread #x's call to pthread_mutex_destroy failed + with error code 16 (EBUSY: Device or resource busy) + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -71,7 +71,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -79,7 +79,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -87,14 +87,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -102,7 +102,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -112,7 +112,7 @@ Thread #x's call to pthread_mutex_unlock failed + 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -120,14 +120,14 @@ 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + 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:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -137,7 +137,7 @@ 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:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -147,7 +147,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -155,7 +155,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -166,11 +166,11 @@ 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:189) ++ by 0x........: main (tc20_verifywrap.c:194) + 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:188) ++ by 0x........: main (tc20_verifywrap.c:193) + + (1) no error on next line + (2) no error on next line +@@ -181,11 +181,11 @@ 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:206) ++ by 0x........: main (tc20_verifywrap.c:211) + 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:196) ++ by 0x........: main (tc20_verifywrap.c:201) + + (4) no error on next line + (5) no error on next line +@@ -198,11 +198,15 @@ 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:227) ++ by 0x........: main (tc20_verifywrap.c:232) + 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:196) ++ by 0x........: main (tc20_verifywrap.c:201) ++ ++ ++ ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -213,7 +217,7 @@ 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:243) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy +@@ -223,7 +227,7 @@ 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:257) ++ by 0x........: main (tc20_verifywrap.c:281) + + + FIXME: can't figure out how to verify wrap of sem_post +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-solaris b/helgrind/tests/tc20_verifywrap.stderr.exp-solaris +index 921ebf5..072cc18 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp-solaris ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-solaris +@@ -14,21 +14,21 @@ Thread #x is the program's root thread + Thread #x was created + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + Location 0x........ is 0 bytes inside global var "unprotected" +- declared at tc20_verifywrap.c:32 ++ declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -36,7 +36,7 @@ Thread #x's call to pthread_join failed + with error code 45 (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:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -46,14 +46,14 @@ Thread #x's call to pthread_join failed + Thread #x's call to mutex_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -61,7 +61,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -69,7 +69,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -77,14 +77,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -92,7 +92,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -102,7 +102,7 @@ Thread #x's call to pthread_mutex_unlock failed + 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -110,14 +110,14 @@ 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:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + 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:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -127,7 +127,7 @@ 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:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -137,7 +137,7 @@ 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:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -145,7 +145,7 @@ Thread #x's call to pthread_cond_timedwait failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -156,13 +156,13 @@ 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:189) ++ by 0x........: main (tc20_verifywrap.c:194) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:188) ++ by 0x........: main (tc20_verifywrap.c:193) + Location 0x........ is 0 bytes inside rwl.__pthread_rwlock_readers, +- declared at tc20_verifywrap.c:52, in frame #x of thread x ++ declared at tc20_verifywrap.c:57, in frame #x of thread x + + + ---------------------------------------------------------------- +@@ -172,7 +172,7 @@ Thread #x's call to pthread_rwlock_unlock failed + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:189) ++ by 0x........: main (tc20_verifywrap.c:194) + + (1) no error on next line + (2) no error on next line +@@ -183,13 +183,13 @@ 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:206) ++ by 0x........: main (tc20_verifywrap.c:211) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside rwl2.__pthread_rwlock_readers, +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x + + + ---------------------------------------------------------------- +@@ -199,7 +199,7 @@ Thread #x's call to pthread_rwlock_unlock failed + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:206) ++ by 0x........: main (tc20_verifywrap.c:211) + + (4) no error on next line + (5) no error on next line +@@ -212,13 +212,13 @@ 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:227) ++ by 0x........: main (tc20_verifywrap.c:232) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside rwl2.__pthread_rwlock_readers, +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x + + + ---------------------------------------------------------------- +@@ -228,7 +228,11 @@ Thread #x's call to pthread_rwlock_unlock failed + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:227) ++ by 0x........: main (tc20_verifywrap.c:232) ++ ++ ++ ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -239,7 +243,7 @@ Thread #x's call to sema_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: sema_init (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:248) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy diff --git a/valgrind.spec b/valgrind.spec index e7caeee..f23a0e1 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -82,9 +82,12 @@ Patch11: valgrind-3.11.0-pthread_barrier.patch # KDE#357833 - Valgrind is broken on recent linux kernel (RLIMIT_DATA) Patch12: valgrind-3.11.0-rlimit_data.patch -# KDE##357887 VG_(fclose) ought to close the file, you silly. +# KDE#357887 VG_(fclose) ought to close the file, you silly. Patch13: valgrind-3.11.0-fclose.patch +# KDE#357871 Fix helgrind wrapper of pthread_spin_destroy +Patch14: valgrind-3.11.0-pthread_spin_destroy.patch + %if %{build_multilib} # Ensure glibc{,-devel} is installed for both multilib arches BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so @@ -202,6 +205,7 @@ Valgrind User Manual for details. %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 %build # We need to use the software collection compiler and binutils if available. @@ -380,6 +384,7 @@ echo ===============END TESTING=============== * Wed Jan 20 2016 Mark Wielaard - Add valgrind-3.11.0-rlimit_data.patch - Add valgrind-3.11.0-fclose.patch +- Add valgrind-3.11.0-pthread_spin_destroy.patch * Tue Jan 19 2016 Mark Wielaard - 3.11.0-7 - Add valgrind-3.11.0-pthread_barrier.patch