<?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>

<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>
  <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>
  <pair>
    <count>...</count>
    <unique>0x........</unique>
  </pair>
</errorcounts>

<suppcounts>...</suppcounts>

</valgrindoutput>

