diff --git a/valgrind-3.11.0-pthread_barrier.patch b/valgrind-3.11.0-pthread_barrier.patch index bab74b6..5e316c2 100644 --- a/valgrind-3.11.0-pthread_barrier.patch +++ b/valgrind-3.11.0-pthread_barrier.patch @@ -58,26 +58,53 @@ index 75f121f..3581b08 100644 -ERROR SUMMARY: 7 errors from 6 contexts (suppressed: 0 from 0) +ERROR SUMMARY: 5 errors from 4 contexts (suppressed: 0 from 0) -diff --git a/drd/tests/bar_bad.stderr.exp b/drd/tests/bar_bad.stderr.exp-nohang -similarity index 79% -copy from drd/tests/bar_bad.stderr.exp -copy to drd/tests/bar_bad.stderr.exp-nohang -index 75f121f..44f9651 100644 ---- a/drd/tests/bar_bad.stderr.exp +diff --git a/drd/tests/bar_bad.stderr.exp-nohang b/drd/tests/bar_bad.stderr.exp-nohang +new file mode 100644 +index 0000000..44f9651 +--- /dev/null +++ b/drd/tests/bar_bad.stderr.exp-nohang -@@ -38,12 +38,5 @@ Not a barrier - at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?) - by 0x........: main (bar_bad.c:?) - --Destruction of barrier that is being waited upon: barrier 0x........ -- at 0x........: free (vg_replace_malloc.c:...) -- by 0x........: main (bar_bad.c:?) --barrier 0x........ was first observed at: -- at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) -- by 0x........: main (bar_bad.c:?) -- - --ERROR SUMMARY: 7 errors from 6 contexts (suppressed: 0 from 0) +@@ -0,0 +1,42 @@ ++ ++ ++initialise a barrier with zero count ++pthread_barrier_init: 'count' argument is zero: barrier 0x........ ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++initialise a barrier twice ++Barrier reinitialization: barrier 0x........ ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++barrier 0x........ was first observed at: ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++initialise a barrier which has threads waiting on it ++Barrier reinitialization: barrier 0x........ ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++barrier 0x........ was first observed at: ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++destroy a barrier that has waiting threads ++Destruction of a barrier with active waiters: barrier 0x........ ++ at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++barrier 0x........ was first observed at: ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++destroy a barrier that was never initialised ++Not a barrier ++ at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ +ERROR SUMMARY: 6 errors from 5 contexts (suppressed: 0 from 0) diff --git a/drd/tests/bar_bad_xml.stderr.exp b/drd/tests/bar_bad_xml.stderr.exp index acb9656..8539f75 100644 @@ -177,78 +204,276 @@ index acb9656..8539f75 100644 </errorcounts> <suppcounts>...</suppcounts> -diff --git a/drd/tests/bar_bad_xml.stderr.exp b/drd/tests/bar_bad_xml.stderr.exp-nohang -similarity index 82% -copy from drd/tests/bar_bad_xml.stderr.exp -copy to drd/tests/bar_bad_xml.stderr.exp-nohang -index acb9656..a47cd60 100644 ---- a/drd/tests/bar_bad_xml.stderr.exp +diff --git a/drd/tests/bar_bad_xml.stderr.exp-nohang b/drd/tests/bar_bad_xml.stderr.exp-nohang +new file mode 100644 +index 0000000..a47cd60 +--- /dev/null +++ b/drd/tests/bar_bad_xml.stderr.exp-nohang -@@ -229,53 +229,6 @@ destroy a barrier that was never initialised - </stack> - </error> - --<error> -- <unique>0x........</unique> -- <tid>...</tid> -- <kind>BarrierErr</kind> -- <what>Destruction of barrier that is being waited upon: barrier 0x........</what> -- <stack> -- <frame> -- <ip>0x........</ip> -- <obj>...</obj> -- <fn>free</fn> -- <dir>...</dir> -- <file>vg_replace_malloc.c</file> -- <line>...</line> -- </frame> -- <frame> -- <ip>0x........</ip> -- <obj>...</obj> -- <fn>main</fn> -- <dir>...</dir> -- <file>bar_bad.c</file> -- <line>...</line> -- </frame> -- </stack> -- <first_observed_at> -- <what>barrier</what> -- <address>0x........</address> -- <stack> -- <frame> -- <ip>0x........</ip> -- <obj>...</obj> -- <fn>pthread_barrier_init</fn> -- <dir>...</dir> -- <file>drd_pthread_intercepts.c</file> -- <line>...</line> -- </frame> -- <frame> -- <ip>0x........</ip> -- <obj>...</obj> -- <fn>main</fn> -- <dir>...</dir> -- <file>bar_bad.c</file> -- <line>...</line> -- </frame> -- </stack> -- </first_observed_at> --</error> -- - - <status> - <state>FINISHED</state> -@@ -303,10 +256,6 @@ destroy a barrier that was never initialised - <count>...</count> - <unique>0x........</unique> - </pair> -- <pair> -- <count>...</count> -- <unique>0x........</unique> -- </pair> - </errorcounts> - - <suppcounts>...</suppcounts> +@@ -0,0 +1,264 @@ ++<?xml version="1.0"?> ++ ++<valgrindoutput> ++ ++<protocolversion>4</protocolversion> ++<protocoltool>drd</protocoltool> ++ ++<preamble> ++ <line>...</line> ++ <line>...</line> ++ <line>...</line> ++ <line>...</line> ++</preamble> ++ ++<pid>...</pid> ++<ppid>...</ppid> ++<tool>drd</tool> ++ ++<args> ++ <vargv>...</vargv> ++ <argv> ++ <exe>./../../helgrind/tests/bar_bad</exe> ++ </argv> ++</args> ++ ++<status> ++ <state>RUNNING</state> ++ <time>...</time> ++</status> ++ ++ ++initialise a barrier with zero count ++<error> ++ <unique>0x........</unique> ++ <tid>...</tid> ++ <kind>BarrierErr</kind> ++ <what>pthread_barrier_init: 'count' argument is zero: barrier 0x........</what> ++ <stack> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>pthread_barrier_init</fn> ++ <dir>...</dir> ++ <file>drd_pthread_intercepts.c</file> ++ <line>...</line> ++ </frame> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>main</fn> ++ <dir>...</dir> ++ <file>bar_bad.c</file> ++ <line>...</line> ++ </frame> ++ </stack> ++</error> ++ ++ ++initialise a barrier twice ++<error> ++ <unique>0x........</unique> ++ <tid>...</tid> ++ <kind>BarrierErr</kind> ++ <what>Barrier reinitialization: barrier 0x........</what> ++ <stack> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>pthread_barrier_init</fn> ++ <dir>...</dir> ++ <file>drd_pthread_intercepts.c</file> ++ <line>...</line> ++ </frame> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>main</fn> ++ <dir>...</dir> ++ <file>bar_bad.c</file> ++ <line>...</line> ++ </frame> ++ </stack> ++ <first_observed_at> ++ <what>barrier</what> ++ <address>0x........</address> ++ <stack> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>pthread_barrier_init</fn> ++ <dir>...</dir> ++ <file>drd_pthread_intercepts.c</file> ++ <line>...</line> ++ </frame> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>main</fn> ++ <dir>...</dir> ++ <file>bar_bad.c</file> ++ <line>...</line> ++ </frame> ++ </stack> ++ </first_observed_at> ++</error> ++ ++ ++initialise a barrier which has threads waiting on it ++<error> ++ <unique>0x........</unique> ++ <tid>...</tid> ++ <kind>BarrierErr</kind> ++ <what>Barrier reinitialization: barrier 0x........</what> ++ <stack> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>pthread_barrier_init</fn> ++ <dir>...</dir> ++ <file>drd_pthread_intercepts.c</file> ++ <line>...</line> ++ </frame> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>main</fn> ++ <dir>...</dir> ++ <file>bar_bad.c</file> ++ <line>...</line> ++ </frame> ++ </stack> ++ <first_observed_at> ++ <what>barrier</what> ++ <address>0x........</address> ++ <stack> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>pthread_barrier_init</fn> ++ <dir>...</dir> ++ <file>drd_pthread_intercepts.c</file> ++ <line>...</line> ++ </frame> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>main</fn> ++ <dir>...</dir> ++ <file>bar_bad.c</file> ++ <line>...</line> ++ </frame> ++ </stack> ++ </first_observed_at> ++</error> ++ ++ ++destroy a barrier that has waiting threads ++<error> ++ <unique>0x........</unique> ++ <tid>...</tid> ++ <kind>BarrierErr</kind> ++ <what>Destruction of a barrier with active waiters: barrier 0x........</what> ++ <stack> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>pthread_barrier_destroy</fn> ++ <dir>...</dir> ++ <file>drd_pthread_intercepts.c</file> ++ <line>...</line> ++ </frame> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>main</fn> ++ <dir>...</dir> ++ <file>bar_bad.c</file> ++ <line>...</line> ++ </frame> ++ </stack> ++ <first_observed_at> ++ <what>barrier</what> ++ <address>0x........</address> ++ <stack> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>pthread_barrier_init</fn> ++ <dir>...</dir> ++ <file>drd_pthread_intercepts.c</file> ++ <line>...</line> ++ </frame> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>main</fn> ++ <dir>...</dir> ++ <file>bar_bad.c</file> ++ <line>...</line> ++ </frame> ++ </stack> ++ </first_observed_at> ++</error> ++ ++ ++destroy a barrier that was never initialised ++<error> ++ <unique>0x........</unique> ++ <tid>...</tid> ++ <kind>GenericErr</kind> ++ <what>Not a barrier</what> ++ <stack> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>pthread_barrier_destroy</fn> ++ <dir>...</dir> ++ <file>drd_pthread_intercepts.c</file> ++ <line>...</line> ++ </frame> ++ <frame> ++ <ip>0x........</ip> ++ <obj>...</obj> ++ <fn>main</fn> ++ <dir>...</dir> ++ <file>bar_bad.c</file> ++ <line>...</line> ++ </frame> ++ </stack> ++</error> ++ ++ ++<status> ++ <state>FINISHED</state> ++ <time>...</time> ++</status> ++ ++<errorcounts> ++ <pair> ++ <count>...</count> ++ <unique>0x........</unique> ++ </pair> ++ <pair> ++ <count>...</count> ++ <unique>0x........</unique> ++ </pair> ++ <pair> ++ <count>...</count> ++ <unique>0x........</unique> ++ </pair> ++ <pair> ++ <count>...</count> ++ <unique>0x........</unique> ++ </pair> ++ <pair> ++ <count>...</count> ++ <unique>0x........</unique> ++ </pair> ++</errorcounts> ++ ++<suppcounts>...</suppcounts> ++ ++</valgrindoutput> ++ diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am index 8a0d6e6..df82169 100644 --- a/helgrind/tests/Makefile.am @@ -427,60 +652,59 @@ index 74af4fa..d0901b2 100644 - by 0x........: main (bar_bad.c:80) + by 0x........: main (bar_bad.c:96) -diff --git a/helgrind/tests/bar_bad.stderr.exp b/helgrind/tests/bar_bad.stderr.exp-destroy-hang -similarity index 72% -copy from helgrind/tests/bar_bad.stderr.exp -copy to helgrind/tests/bar_bad.stderr.exp-destroy-hang -index 74af4fa..ddf5624 100644 ---- a/helgrind/tests/bar_bad.stderr.exp +diff --git a/helgrind/tests/bar_bad.stderr.exp-destroy-hang b/helgrind/tests/bar_bad.stderr.exp-destroy-hang +new file mode 100644 +index 0000000..ddf5624 +--- /dev/null +++ b/helgrind/tests/bar_bad.stderr.exp-destroy-hang -@@ -8,14 +8,14 @@ Thread #x is the program's root thread - - Thread #x: pthread_barrier_init: 'count' argument is zero - at 0x........: pthread_barrier_init (hg_intercepts.c:...) -- by 0x........: main (bar_bad.c:39) +@@ -0,0 +1,72 @@ ++ ++initialise a barrier with zero count ++---Thread-Announcement------------------------------------------ ++ ++Thread #x is the program's root thread ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_init: 'count' argument is zero ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) + by 0x........: main (bar_bad.c:43) - - ---------------------------------------------------------------- - - Thread #x's call to pthread_barrier_init failed - with error code 22 (EINVAL: Invalid argument) - at 0x........: pthread_barrier_init (hg_intercepts.c:...) -- by 0x........: main (bar_bad.c:39) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_barrier_init failed ++ with error code 22 (EINVAL: Invalid argument) ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) + by 0x........: main (bar_bad.c:43) - - - initialise a barrier twice -@@ -23,7 +23,7 @@ initialise a barrier twice - - Thread #x: pthread_barrier_init: barrier is already initialised - at 0x........: pthread_barrier_init (hg_intercepts.c:...) -- by 0x........: main (bar_bad.c:45) ++ ++ ++initialise a barrier twice ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_init: barrier is already initialised ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) + by 0x........: main (bar_bad.c:49) - - - initialise a barrier which has threads waiting on it -@@ -31,13 +31,13 @@ initialise a barrier which has threads waiting on it - - Thread #x: pthread_barrier_init: barrier is already initialised - at 0x........: pthread_barrier_init (hg_intercepts.c:...) -- by 0x........: main (bar_bad.c:57) ++ ++ ++initialise a barrier which has threads waiting on it ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_init: barrier is already initialised ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) + by 0x........: main (bar_bad.c:64) - - ---------------------------------------------------------------- - - Thread #x: pthread_barrier_init: threads are waiting at barrier - at 0x........: pthread_barrier_init (hg_intercepts.c:...) -- by 0x........: main (bar_bad.c:57) ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_init: threads are waiting at barrier ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) + by 0x........: main (bar_bad.c:64) - - - destroy a barrier that has waiting threads -@@ -45,14 +45,22 @@ destroy a barrier that has waiting threads - - Thread #x: pthread_barrier_destroy: threads are waiting at barrier - at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) -- by 0x........: main (bar_bad.c:69) ++ ++ ++destroy a barrier that has waiting threads ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_destroy: threads are waiting at barrier ++ at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) + by 0x........: main (bar_bad.c:82) + +---Thread-Announcement------------------------------------------ @@ -489,25 +713,20 @@ index 74af4fa..ddf5624 100644 + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) + by 0x........: main (bar_bad.c:76) - - ---------------------------------------------------------------- - --Thread #x's call to pthread_barrier_destroy failed -- with error code 16 (EBUSY: Device or resource busy) -- at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) -- by 0x........: main (bar_bad.c:69) ++ ++---------------------------------------------------------------- ++ +Thread #x: pthread_barrier_wait: barrier is uninitialised + at 0x........: pthread_barrier_wait (hg_intercepts.c:...) + by 0x........: sleep1 (bar_bad.c:22) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... - - - destroy a barrier that was never initialised -@@ -60,5 +68,5 @@ destroy a barrier that was never initialised - - Thread #x: pthread_barrier_destroy: barrier was never initialised - at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) -- by 0x........: main (bar_bad.c:80) ++ ++ ++destroy a barrier that was never initialised ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_destroy: barrier was never initialised ++ at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) + by 0x........: main (bar_bad.c:96) - ++