You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
1
(4) |
2
(3) |
3
(7) |
4
(7) |
5
(6) |
6
(5) |
|
7
(21) |
8
(14) |
9
(8) |
10
(10) |
11
(7) |
12
(4) |
13
|
|
14
(3) |
15
(11) |
16
(4) |
17
|
18
|
19
|
20
|
|
21
(3) |
22
(4) |
23
(2) |
24
(3) |
25
|
26
(4) |
27
(2) |
|
28
(6) |
29
|
30
(2) |
31
(7) |
|
|
|
|
From: <sv...@va...> - 2010-03-07 22:15:56
|
Author: njn
Date: 2010-03-07 22:15:48 +0000 (Sun, 07 Mar 2010)
New Revision: 11081
Log:
Document the default value of --stacks correctly.
Modified:
trunk/massif/docs/ms-manual.xml
Modified: trunk/massif/docs/ms-manual.xml
===================================================================
--- trunk/massif/docs/ms-manual.xml 2010-03-07 20:07:15 UTC (rev 11080)
+++ trunk/massif/docs/ms-manual.xml 2010-03-07 22:15:48 UTC (rev 11081)
@@ -640,7 +640,7 @@
<varlistentry id="opt.stacks" xreflabel="--stacks">
<term>
- <option><![CDATA[--stacks=<yes|no> [default: yes] ]]></option>
+ <option><![CDATA[--stacks=<yes|no> [default: no] ]]></option>
</term>
<listitem>
<para>Specifies whether stack profiling should be done. This option
|
|
From: Nicholas N. <n.n...@gm...> - 2010-03-07 20:25:41
|
On Mon, Mar 8, 2010 at 1:31 AM, Edd Barrett <ve...@gm...> wrote: > > Are there any plans to bring valgrind to OpenBSD? > > Out of curiosity I went adding targets to configure.in and figuring > out what data types need to be defined, but it seems quite in-depth. > It looks like a VKI must be written for OpenBSD (and probably more?). It's quite a lot of work. I believe there's an unofficial FreeBSD port that's reasonably function. http://wiki.freebsd.org/Valgrind looks like it, but others may have more to add. N |
|
From: <sv...@va...> - 2010-03-07 20:07:23
|
Author: bart
Date: 2010-03-07 20:07:15 +0000 (Sun, 07 Mar 2010)
New Revision: 11080
Log:
Do not suppress data races on user-annotated addresses.
Modified:
trunk/drd/drd_clientobj.c
Modified: trunk/drd/drd_clientobj.c
===================================================================
--- trunk/drd/drd_clientobj.c 2010-03-07 20:05:58 UTC (rev 11079)
+++ trunk/drd/drd_clientobj.c 2010-03-07 20:07:15 UTC (rev 11080)
@@ -144,7 +144,10 @@
p->any.first_observed_at = VG_(record_ExeContext)(VG_(get_running_tid)(), 0);
VG_(OSetGen_Insert)(s_clientobj_set, p);
tl_assert(VG_(OSetGen_Lookup)(s_clientobj_set, &a1) == p);
- DRD_(start_suppression)(a1, a1 + 1, "clientobj");
+ if (t == ClientHbvar)
+ DRD_(mark_hbvar)(a1);
+ else
+ DRD_(start_suppression)(a1, a1 + 1, "clientobj");
return p;
}
@@ -208,7 +211,7 @@
tl_assert(s_clientobj_set);
- if (! DRD_(is_any_suppressed)(a1, a2))
+ if (! DRD_(range_contains_suppression_or_hbvar)(a1, a2))
return;
VG_(OSetGen_ResetIterAt)(s_clientobj_set, &a1);
|
|
From: <sv...@va...> - 2010-03-07 20:06:05
|
Author: bart
Date: 2010-03-07 20:05:58 +0000 (Sun, 07 Mar 2010)
New Revision: 11079
Log:
Added missing newlines in debug tracing statements.
Modified:
trunk/drd/drd_segment.c
Modified: trunk/drd/drd_segment.c
===================================================================
--- trunk/drd/drd_segment.c 2010-03-07 20:05:23 UTC (rev 11078)
+++ trunk/drd/drd_segment.c 2010-03-07 20:05:58 UTC (rev 11079)
@@ -91,7 +91,7 @@
char* vc;
vc = DRD_(vc_aprint)(&sg->vc);
- VG_(message)(Vg_DebugMsg, "New segment for thread %d with vc %s",
+ VG_(message)(Vg_DebugMsg, "New segment for thread %d with vc %s\n",
created, vc);
VG_(free)(vc);
}
@@ -130,7 +130,7 @@
char* vc;
vc = DRD_(vc_aprint)(&sg->vc);
- VG_(message)(Vg_DebugMsg, "Discarding the segment with vector clock %s",
+ VG_(message)(Vg_DebugMsg, "Discarding the segment with vector clock %s\n",
vc);
VG_(free)(vc);
}
@@ -166,7 +166,7 @@
vc = DRD_(vc_aprint)(&sg->vc);
VG_(message)(Vg_DebugMsg,
- "Decrementing segment reference count %d -> %d with vc %s",
+ "Decrementing segment reference count %d -> %d with vc %s\n",
sg->refcnt, sg->refcnt - 1, vc);
VG_(free)(vc);
}
@@ -194,8 +194,8 @@
vc1 = DRD_(vc_aprint)(&sg1->vc);
vc2 = DRD_(vc_aprint)(&sg2->vc);
- VG_(message)(Vg_DebugMsg, "Merging segments with vector clocks %s and %s",
- vc1, vc2);
+ VG_(message)(Vg_DebugMsg,
+ "Merging segments with vector clocks %s and %s\n", vc1, vc2);
VG_(free)(vc1);
VG_(free)(vc2);
}
|
|
From: <sv...@va...> - 2010-03-07 20:05:30
|
Author: bart
Date: 2010-03-07 20:05:23 +0000 (Sun, 07 Mar 2010)
New Revision: 11078
Log:
Added support for marking happens-before annotated addresses in another way
than other client objects.
Modified:
trunk/drd/drd_suppression.c
trunk/drd/drd_suppression.h
Modified: trunk/drd/drd_suppression.c
===================================================================
--- trunk/drd/drd_suppression.c 2010-03-07 20:00:18 UTC (rev 11077)
+++ trunk/drd/drd_suppression.c 2010-03-07 20:05:23 UTC (rev 11078)
@@ -39,6 +39,7 @@
/* Local variables. */
static struct bitmap* DRD_(s_suppressed);
+static struct bitmap* DRD_(s_traced);
static Bool DRD_(s_trace_suppression);
@@ -52,8 +53,11 @@
void DRD_(suppression_init)(void)
{
tl_assert(DRD_(s_suppressed) == 0);
+ tl_assert(DRD_(s_traced) == 0);
DRD_(s_suppressed) = DRD_(bm_new)();
+ DRD_(s_traced) = DRD_(bm_new)();
tl_assert(DRD_(s_suppressed));
+ tl_assert(DRD_(s_traced));
}
void DRD_(start_suppression)(const Addr a1, const Addr a2,
@@ -66,7 +70,6 @@
}
tl_assert(a1 < a2);
- // tl_assert(! drd_is_any_suppressed(a1, a2));
DRD_(bm_access_range_store)(DRD_(s_suppressed), a1, a2);
}
@@ -80,14 +83,6 @@
}
tl_assert(a1 < a2);
-#if 0
- if (! DRD_(is_suppressed)(a1, a2))
- {
- VG_(message)(Vg_DebugMsg, "?? [0x%lx,0x%lx[ not suppressed ??\n", a1, a2);
- VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(), 12);
- tl_assert(False);
- }
-#endif
DRD_(bm_clear_store)(DRD_(s_suppressed), a1, a2);
}
@@ -111,11 +106,21 @@
return DRD_(bm_has_any_store)(DRD_(s_suppressed), a1, a2);
}
+void DRD_(mark_hbvar)(const Addr a1)
+{
+ DRD_(bm_access_range_load)(DRD_(s_suppressed), a1, a1 + 1);
+}
+
+Bool DRD_(range_contains_suppression_or_hbvar)(const Addr a1, const Addr a2)
+{
+ return DRD_(bm_has_any_access)(DRD_(s_suppressed), a1, a2);
+}
+
void DRD_(start_tracing_address_range)(const Addr a1, const Addr a2)
{
tl_assert(a1 < a2);
- DRD_(bm_access_range_load)(DRD_(s_suppressed), a1, a2);
+ DRD_(bm_access_range_load)(DRD_(s_traced), a1, a2);
if (! DRD_(g_any_address_traced))
{
DRD_(g_any_address_traced) = True;
@@ -126,17 +131,17 @@
{
tl_assert(a1 < a2);
- DRD_(bm_clear_load)(DRD_(s_suppressed), a1, a2);
+ DRD_(bm_clear_load)(DRD_(s_traced), a1, a2);
if (DRD_(g_any_address_traced))
{
DRD_(g_any_address_traced)
- = DRD_(bm_has_any_load)(DRD_(s_suppressed), 0, ~(Addr)0);
+ = DRD_(bm_has_any_load)(DRD_(s_traced), 0, ~(Addr)0);
}
}
Bool DRD_(is_any_traced)(const Addr a1, const Addr a2)
{
- return DRD_(bm_has_any_load)(DRD_(s_suppressed), a1, a2);
+ return DRD_(bm_has_any_load)(DRD_(s_traced), a1, a2);
}
void DRD_(suppression_stop_using_mem)(const Addr a1, const Addr a2)
@@ -157,4 +162,5 @@
tl_assert(a1);
tl_assert(a1 < a2);
DRD_(bm_clear)(DRD_(s_suppressed), a1, a2);
+ DRD_(bm_clear)(DRD_(s_traced), a1, a2);
}
Modified: trunk/drd/drd_suppression.h
===================================================================
--- trunk/drd/drd_suppression.h 2010-03-07 20:00:18 UTC (rev 11077)
+++ trunk/drd/drd_suppression.h 2010-03-07 20:05:23 UTC (rev 11078)
@@ -17,6 +17,8 @@
void DRD_(finish_suppression)(const Addr a1, const Addr a2);
Bool DRD_(is_suppressed)(const Addr a1, const Addr a2);
Bool DRD_(is_any_suppressed)(const Addr a1, const Addr a2);
+void DRD_(mark_hbvar)(const Addr a1);
+Bool DRD_(range_contains_suppression_or_hbvar)(const Addr a1, const Addr a2);
void DRD_(start_tracing_address_range)(const Addr a1, const Addr a2);
void DRD_(stop_tracing_address_range)(const Addr a1, const Addr a2);
Bool DRD_(is_any_traced)(const Addr a1, const Addr a2);
|
|
From: <sv...@va...> - 2010-03-07 20:00:25
|
Author: bart
Date: 2010-03-07 20:00:18 +0000 (Sun, 07 Mar 2010)
New Revision: 11077
Log:
Source code cleanup - no functionality has been changed.
Modified:
trunk/drd/drd_vc.h
Modified: trunk/drd/drd_vc.h
===================================================================
--- trunk/drd/drd_vc.h 2010-03-07 19:59:35 UTC (rev 11076)
+++ trunk/drd/drd_vc.h 2010-03-07 20:00:18 UTC (rev 11077)
@@ -108,14 +108,14 @@
for (i = 0; i < vc1->size; i++)
{
while (j < vc2->size && vc2->vc[j].threadid < vc1->vc[i].threadid)
- {
j++;
- }
if (j >= vc2->size || vc2->vc[j].threadid > vc1->vc[i].threadid)
return False;
#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- /* This assert statement has been commented out because of performance */
- /* reasons.*/
+ /*
+ * This assert statement has been commented out because of performance
+ * reasons.
+ */
tl_assert(j < vc2->size && vc2->vc[j].threadid == vc1->vc[i].threadid);
#endif
if (vc1->vc[i].count > vc2->vc[j].count)
|
|
From: <sv...@va...> - 2010-03-07 19:59:43
|
Author: bart
Date: 2010-03-07 19:59:35 +0000 (Sun, 07 Mar 2010)
New Revision: 11076
Log:
Added yet another regression test.
Added:
trunk/drd/tests/annotate_hb_race.c
trunk/drd/tests/annotate_hb_race.stderr.exp
trunk/drd/tests/annotate_hb_race.vgtest
Modified:
trunk/drd/tests/
trunk/drd/tests/Makefile.am
Property changes on: trunk/drd/tests
___________________________________________________________________
Name: svn:ignore
- *.dSYM
*.stderr.diff*
*.stderr.out
*.stdout.diff*
*.stdout.out
.deps
Makefile
Makefile.in
annotate_hb_err
annotate_ignore_rw
annotate_ignore_write
annotate_publish_hg
annotate_rwlock
annotate_smart_pointer
atomic_var
bar_bad
bar_trivial
boost_thread
circular_buffer
custom_alloc
drd_bitmap_test
fp_race
hg01_all_ok
hg02_deadlock
hg03_inherit
hg04_race
hg05_race2
hg06_readshared
hold_lock
linuxthreads_det
matinv
memory_allocation
monitor_example
new_delete
omp_matinv
omp_prime
omp_printf
pth_barrier
pth_barrier_race
pth_barrier_reinit
pth_broadcast
pth_cancel_locked
pth_cleanup_handler
pth_cond_race
pth_create_chain
pth_create_glibc_2_0
pth_detached
pth_detached_sem
pth_inconsistent_cond_wait
pth_mutex_reinit
pth_process_shared_mutex
pth_spinlock
qt4_atomic
qt4_mutex
qt4_rwlock
qt4_semaphore
recursive_mutex
rwlock_race
rwlock_test
rwlock_type_checking
sem_as_mutex
sem_open
sigalrm
tc01_simple_race
tc02_simple_tls
tc03_re_excl
tc04_free_lock
tc05_simple_race
tc06_two_races
tc07_hbl1
tc08_hbl2
tc09_bad_unlock
tc10_rec_lock
tc11_XCHG
tc12_rwl_trivial
tc13_laog1
tc15_laog_lockdel
tc16_byterace
tc17_sembar
tc18_semabuse
tc19_shadowmem
tc20_verifywrap
tc21_pthonce
tc22_exit_w_lock
tc23_bogus_condwait
tc24_nonzero_sem
thread_name
trylock
tsan_unittest
unit_bitmap
unit_vc
vg_regtest.tmp*
+ *.dSYM
*.stderr.diff*
*.stderr.out
*.stdout.diff*
*.stdout.out
.deps
Makefile
Makefile.in
annotate_hb_err
annotate_hb_race
annotate_ignore_rw
annotate_ignore_write
annotate_publish_hg
annotate_rwlock
annotate_smart_pointer
atomic_var
bar_bad
bar_trivial
boost_thread
circular_buffer
custom_alloc
drd_bitmap_test
fp_race
hg01_all_ok
hg02_deadlock
hg03_inherit
hg04_race
hg05_race2
hg06_readshared
hold_lock
linuxthreads_det
matinv
memory_allocation
monitor_example
new_delete
omp_matinv
omp_prime
omp_printf
pth_barrier
pth_barrier_race
pth_barrier_reinit
pth_broadcast
pth_cancel_locked
pth_cleanup_handler
pth_cond_race
pth_create_chain
pth_create_glibc_2_0
pth_detached
pth_detached_sem
pth_inconsistent_cond_wait
pth_mutex_reinit
pth_process_shared_mutex
pth_spinlock
qt4_atomic
qt4_mutex
qt4_rwlock
qt4_semaphore
recursive_mutex
rwlock_race
rwlock_test
rwlock_type_checking
sem_as_mutex
sem_open
sigalrm
tc01_simple_race
tc02_simple_tls
tc03_re_excl
tc04_free_lock
tc05_simple_race
tc06_two_races
tc07_hbl1
tc08_hbl2
tc09_bad_unlock
tc10_rec_lock
tc11_XCHG
tc12_rwl_trivial
tc13_laog1
tc15_laog_lockdel
tc16_byterace
tc17_sembar
tc18_semabuse
tc19_shadowmem
tc20_verifywrap
tc21_pthonce
tc22_exit_w_lock
tc23_bogus_condwait
tc24_nonzero_sem
thread_name
trylock
tsan_unittest
unit_bitmap
unit_vc
vg_regtest.tmp*
Modified: trunk/drd/tests/Makefile.am
===================================================================
--- trunk/drd/tests/Makefile.am 2010-03-07 18:39:33 UTC (rev 11075)
+++ trunk/drd/tests/Makefile.am 2010-03-07 19:59:35 UTC (rev 11076)
@@ -16,6 +16,8 @@
EXTRA_DIST = \
annotate_hb_err.stderr.exp \
annotate_hb_err.vgtest \
+ annotate_hb_race.stderr.exp \
+ annotate_hb_race.vgtest \
annotate_hbefore.stderr.exp \
annotate_hbefore.vgtest \
annotate_order_1.stderr.exp \
@@ -249,6 +251,7 @@
check_PROGRAMS = \
annotate_hb_err \
+ annotate_hb_race \
annotate_ignore_rw \
annotate_ignore_write \
annotate_publish_hg \
Added: trunk/drd/tests/annotate_hb_race.c
===================================================================
--- trunk/drd/tests/annotate_hb_race.c (rev 0)
+++ trunk/drd/tests/annotate_hb_race.c 2010-03-07 19:59:35 UTC (rev 11076)
@@ -0,0 +1,50 @@
+/*
+ * Test program with happens-before / happens-after annotations that triggers
+ * a data race. The data race will only be reported if happens-after
+ * annotations that occur in different threads are not totally ordered. Or:
+ * this is a test for the implementation of ordering annotations.
+ */
+
+
+#include <stdio.h>
+#include <pthread.h>
+#include "unified_annotations.h"
+
+
+static int s_i;
+
+
+static void* thread_func(void* arg)
+{
+ int i;
+
+ ANNOTATE_HAPPENS_AFTER(&s_i);
+ i = s_i;
+ ANNOTATE_HAPPENS_AFTER(&s_i);
+ *(int*)arg = i;
+ return NULL;
+}
+
+int main(int argc, char** argv)
+{
+ pthread_t tid[2];
+ int result[2];
+
+ ANNOTATE_HAPPENS_BEFORE(&s_i);
+ pthread_create(&tid[0], 0, thread_func, &result[0]);
+ pthread_create(&tid[1], 0, thread_func, &result[1]);
+ s_i = 1;
+
+ pthread_join(tid[0], NULL);
+ pthread_join(tid[1], NULL);
+
+ fprintf(stderr, "Done.\n");
+
+ return 0;
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 2
+ * End:
+ */
Added: trunk/drd/tests/annotate_hb_race.stderr.exp
===================================================================
--- trunk/drd/tests/annotate_hb_race.stderr.exp (rev 0)
+++ trunk/drd/tests/annotate_hb_race.stderr.exp 2010-03-07 19:59:35 UTC (rev 11076)
@@ -0,0 +1,9 @@
+
+Conflicting store by thread x at 0x........ size 4
+ at 0x........: main (annotate_hb_race.c:?)
+Location 0x........ is 0 bytes inside local var "s_i"
+declared at annotate_hb_race.c:14, in frame #? of thread x
+
+Done.
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Added: trunk/drd/tests/annotate_hb_race.vgtest
===================================================================
--- trunk/drd/tests/annotate_hb_race.vgtest (rev 0)
+++ trunk/drd/tests/annotate_hb_race.vgtest 2010-03-07 19:59:35 UTC (rev 11076)
@@ -0,0 +1,4 @@
+prereq: test -e annotate_hb_race && ./supported_libpthread
+vgopts: --read-var-info=yes --check-stack-var=yes --show-confl-seg=no
+prog: annotate_hb_race
+stderr_filter: filter_stderr_and_thread_no
|
|
From: <sv...@va...> - 2010-03-07 18:39:41
|
Author: bart
Date: 2010-03-07 18:39:33 +0000 (Sun, 07 Mar 2010)
New Revision: 11075
Log:
Follow-up for r11073: added missing segment creation statement.
Modified:
trunk/drd/drd_hb.c
Modified: trunk/drd/drd_hb.c
===================================================================
--- trunk/drd/drd_hb.c 2010-03-07 12:21:56 UTC (rev 11074)
+++ trunk/drd/drd_hb.c 2010-03-07 18:39:33 UTC (rev 11075)
@@ -239,6 +239,8 @@
p->done = True;
+ DRD_(thread_new_segment)(tid);
+
/*
* Combine all vector clocks that were stored because of happens-before
* annotations with the vector clock of the current thread.
|
|
From: Edd B. <ve...@gm...> - 2010-03-07 14:31:17
|
Hi, Are there any plans to bring valgrind to OpenBSD? Out of curiosity I went adding targets to configure.in and figuring out what data types need to be defined, but it seems quite in-depth. It looks like a VKI must be written for OpenBSD (and probably more?). Thanks -- Best Regards Edd Barrett http://www.theunixzoo.co.uk |
|
From: Rich C. <Ric...@me...> - 2010-03-07 13:00:49
|
Nightly build on macbook ( Darwin 9.8.0 i386 )
Started at 2010-03-06 23:05:01 CST
Ended at 2010-03-06 23:32:54 CST
Results unchanged from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 419 tests, 10 stderr failures, 1 stdout failure, 0 post failures ==
memcheck/tests/null_socket (stdout)
memcheck/tests/origin5-bz2 (stderr)
memcheck/tests/varinfo3 (stderr)
memcheck/tests/varinfo5 (stderr)
none/tests/async-sigs (stderr)
none/tests/faultstatus (stderr)
none/tests/pth_blockedsig (stderr)
helgrind/tests/rwlock_race (stderr)
helgrind/tests/tc06_two_races_xml (stderr)
helgrind/tests/tc18_semabuse (stderr)
helgrind/tests/tc23_bogus_condwait (stderr)
=================================================
./valgrind-new/helgrind/tests/rwlock_race.stderr.diff
=================================================
--- rwlock_race.stderr.exp 2010-03-06 23:19:08.000000000 -0600
+++ rwlock_race.stderr.out 2010-03-06 23:30:08.000000000 -0600
@@ -1,25 +1,4 @@
-Thread #x was created
- ...
- by 0x........: pthread_create@* (hg_intercepts.c:...)
- by 0x........: main (rwlock_race.c:48)
-
-Thread #x was created
- ...
- by 0x........: pthread_create@* (hg_intercepts.c:...)
- by 0x........: main (rwlock_race.c:47)
-
-Possible data race during write of size 4 at 0x........ by thread #x
- at 0x........: thread_func (rwlock_race.c:29)
- by 0x........: mythread_wrapper (hg_intercepts.c:...)
- ...
- This conflicts with a previous write of size 4 by thread #x
- at 0x........: thread_func (rwlock_race.c:29)
- by 0x........: mythread_wrapper (hg_intercepts.c:...)
- ...
- Location 0x........ is 0 bytes inside local var "s_racy"
- declared at rwlock_race.c:18, in frame #x of thread x
-
Result: 2
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/helgrind/tests/tc06_two_races_xml.stderr.diff
=================================================
--- tc06_two_races_xml.stderr.exp 2010-03-06 23:19:08.000000000 -0600
+++ tc06_two_races_xml.stderr.out 2010-03-06 23:30:24.000000000 -0600
@@ -39,17 +39,7 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>do_clone</fn>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>pthread_create@@GLIBC_2.2.5</fn>
+ <fn>__bsdthread_create</fn>
</frame>
<frame>
<ip>0x........</ip>
@@ -62,7 +52,7 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>pthread_create@*</fn>
+ <fn>pthread_create</fn>
<dir>...</dir>
<file>hg_intercepts.c</file>
<line>...</line>
@@ -120,12 +110,12 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
+ <fn>thread_start</fn>
</frame>
</stack>
<auxwhat>Location 0x........ is 0 bytes inside global var "unprot1"</auxwhat>
@@ -174,12 +164,12 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
+ <fn>thread_start</fn>
</frame>
</stack>
<auxwhat>Location 0x........ is 0 bytes inside global var "unprot1"</auxwhat>
@@ -228,12 +218,12 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
+ <fn>thread_start</fn>
</frame>
</stack>
<auxwhat>Location 0x........ is 0 bytes inside global var "unprot2"</auxwhat>
@@ -282,12 +272,12 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
+ <fn>thread_start</fn>
</frame>
</stack>
<auxwhat>Location 0x........ is 0 bytes inside global var "unprot2"</auxwhat>
=================================================
./valgrind-new/helgrind/tests/tc18_semabuse.stderr.diff-glibc25-amd64
=================================================
--- tc18_semabuse.stderr.exp-glibc25-amd64 2010-03-06 23:19:08.000000000 -0600
+++ tc18_semabuse.stderr.out 2010-03-06 23:30:38.000000000 -0600
@@ -2,14 +2,30 @@
Thread #x is the program's root thread
Thread #x's call to sem_init failed
- with error code 22 (EINVAL: Invalid argument)
- at 0x........: sem_init@* (hg_intercepts.c:...)
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_init (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:23)
-Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
+Thread #x's call to sem_init failed
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_init (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:26)
+
+Thread #x's call to sem_wait failed
+ with error code 9 (EBADF: Bad file number)
at 0x........: sem_wait_WRK (hg_intercepts.c:...)
- by 0x........: sem_wait (hg_intercepts.c:...)
+ by 0x........: sem_wait$* (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:34)
+Thread #x's call to sem_post failed
+ with error code 9 (EBADF: Bad file number)
+ at 0x........: sem_post (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:37)
+
+Thread #x's call to sem_destroy failed
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_destroy (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:39)
+
-ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/helgrind/tests/tc18_semabuse.stderr.diff-glibc28-amd64
=================================================
--- tc18_semabuse.stderr.exp-glibc28-amd64 2010-03-06 23:19:08.000000000 -0600
+++ tc18_semabuse.stderr.out 2010-03-06 23:30:38.000000000 -0600
@@ -2,20 +2,30 @@
Thread #x is the program's root thread
Thread #x's call to sem_init failed
- with error code 22 (EINVAL: Invalid argument)
- at 0x........: sem_init@* (hg_intercepts.c:...)
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_init (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:23)
-Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
+Thread #x's call to sem_init failed
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_init (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:26)
+
+Thread #x's call to sem_wait failed
+ with error code 9 (EBADF: Bad file number)
at 0x........: sem_wait_WRK (hg_intercepts.c:...)
- by 0x........: sem_wait (hg_intercepts.c:...)
+ by 0x........: sem_wait$* (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:34)
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:...)
+ with error code 9 (EBADF: Bad file number)
+ at 0x........: sem_post (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:37)
+Thread #x's call to sem_destroy failed
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_destroy (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:39)
+
-ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/helgrind/tests/tc23_bogus_condwait.stderr.diff
=================================================
--- tc23_bogus_condwait.stderr.exp 2010-03-06 23:19:08.000000000 -0600
+++ tc23_bogus_condwait.stderr.out 2010-03-06 23:31:14.000000000 -0600
@@ -2,32 +2,52 @@
Thread #x is the program's root thread
Thread #x: pthread_cond_{timed}wait called with invalid mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
+ by 0x........: main (tc23_bogus_condwait.c:69)
+
+Thread #x's call to pthread_cond_wait failed
+ with error code 22 (EINVAL: Invalid argument)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:69)
Thread #x: pthread_cond_{timed}wait called with un-held mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:72)
Thread #x: pthread_cond_{timed}wait: cond is associated with a different mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:72)
Thread #x: pthread_cond_{timed}wait called with mutex of type pthread_rwlock_t*
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:75)
Thread #x: pthread_cond_{timed}wait: cond is associated with a different mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
+ by 0x........: main (tc23_bogus_condwait.c:75)
+
+Thread #x's call to pthread_cond_wait failed
+ with error code 22 (EINVAL: Invalid argument)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:75)
Thread #x: pthread_cond_{timed}wait called with mutex held by a different thread
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:78)
Thread #x: pthread_cond_{timed}wait: cond is associated with a different mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:78)
+Thread #x: Bug in libpthread: write lock granted on mutex/rwlock which is currently wr-held by a different thread
+ at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+ by 0x........: _pthread_cond_wait (in /...libc...)
+ by 0x........: pthread_cond_wait$UNIX2003 (in /...libc...)
+ by 0x........: pthread_cond_wait* (hg_intercepts.c:...)
+ by 0x........: main (tc23_bogus_condwait.c:78)
+
+Thread #x: Exiting thread still holds 1 lock
+ ...
+
-ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/memcheck/tests/null_socket.stdout.diff
=================================================
--- /dev/null 2010-03-06 23:24:57.000000000 -0600
+++ null_socket.stdout.out 2010-03-06 23:25:15.000000000 -0600
@@ -0,0 +1 @@
+recvfrom succeeded?
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc25-amd64
=================================================
--- origin5-bz2.stderr.exp-glibc25-amd64 2010-03-06 23:19:15.000000000 -0600
+++ origin5-bz2.stderr.out 2010-03-06 23:25:30.000000000 -0600
@@ -11,7 +11,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: handle_compress (origin5-bz2.c:4686)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
@@ -19,7 +19,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: handle_compress (origin5-bz2.c:4686)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
@@ -27,7 +27,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: mainSort (origin5-bz2.c:2820)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -38,7 +38,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: mainSort (origin5-bz2.c:2823)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -49,8 +49,8 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2854)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2855)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
@@ -60,8 +60,8 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2858)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2859)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
@@ -71,7 +71,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -82,7 +82,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: mainSort (origin5-bz2.c:2964)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -93,7 +93,18 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2964)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
+ by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
+ by 0x........: handle_compress (origin5-bz2.c:4753)
+ by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
+ by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
+ by 0x........: main (origin5-bz2.c:6484)
+ Uninitialised value was created by a client request
+ at 0x........: main (origin5-bz2.c:6479)
+
+Use of uninitialised value of size 4
at 0x........: fallbackSort (origin5-bz2.c:2269)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -104,7 +115,7 @@
Uninitialised value was created by a client request
<truncated beyond 100 lines>
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc25-x86
=================================================
--- origin5-bz2.stderr.exp-glibc25-x86 2010-03-06 23:19:16.000000000 -0600
+++ origin5-bz2.stderr.out 2010-03-06 23:25:30.000000000 -0600
@@ -28,7 +28,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2820)
+ at 0x........: mainSort (origin5-bz2.c:2820)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -38,7 +39,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2823)
+ at 0x........: mainSort (origin5-bz2.c:2823)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -48,7 +50,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2855)
+ at 0x........: mainSort (origin5-bz2.c:2855)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -58,7 +61,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2859)
+ at 0x........: mainSort (origin5-bz2.c:2859)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -68,7 +72,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2963)
+ at 0x........: mainSort (origin5-bz2.c:2963)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -78,7 +83,19 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2964)
+ at 0x........: mainSort (origin5-bz2.c:2964)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
+ by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
+ by 0x........: handle_compress (origin5-bz2.c:4753)
+ by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
+ by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
+ by 0x........: main (origin5-bz2.c:6484)
+ Uninitialised value was created by a client request
+ at 0x........: main (origin5-bz2.c:6479)
+
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2964)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc27-ppc64
=================================================
--- origin5-bz2.stderr.exp-glibc27-ppc64 2010-03-06 23:19:15.000000000 -0600
+++ origin5-bz2.stderr.out 2010-03-06 23:25:30.000000000 -0600
@@ -1,7 +1,7 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6481)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Conditional jump or move depends on uninitialised value(s)
at 0x........: handle_compress (origin5-bz2.c:4686)
@@ -9,85 +9,102 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: handle_compress (origin5-bz2.c:4686)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: handle_compress (origin5-bz2.c:4686)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2820)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2820)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2823)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2823)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2854)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2855)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2858)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2859)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2963)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2963)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
<truncated beyond 100 lines>
=================================================
./valgrind-new/memcheck/tests/varinfo3.stderr.diff
=================================================
--- varinfo3.stderr.exp 2010-03-06 23:19:15.000000000 -0600
+++ varinfo3.stderr.out 2010-03-06 23:26:25.000000000 -0600
@@ -31,7 +31,7 @@
by 0x........: bar (varinfo3.c:42)
by 0x........: foo (varinfo3.c:58)
by 0x........: main (varinfo3.c:66)
- Address 0x........ is 5 bytes inside data symbol "static_local_def.XXXX"
+ Address 0x........ is in the Data segment of ./varinfo3
Uninitialised byte(s) found during client check request
at 0x........: croak (varinfo3.c:28)
@@ -46,7 +46,7 @@
by 0x........: bar (varinfo3.c:44)
by 0x........: foo (varinfo3.c:58)
by 0x........: main (varinfo3.c:66)
- Address 0x........ is 7 bytes inside data symbol "static_local_undef.XXXX"
+ Address 0x........ is in the Data segment of ./varinfo3
Uninitialised byte(s) found during client check request
at 0x........: croak (varinfo3.c:28)
=================================================
./valgrind-new/memcheck/tests/varinfo5.stderr.diff
=================================================
--- varinfo5.stderr.exp 2010-03-06 23:19:16.000000000 -0600
+++ varinfo5.stderr.out 2010-03-06 23:26:27.000000000 -0600
@@ -119,7 +119,7 @@
by 0x........: varinfo3_main (varinfo5so.c:118)
by 0x........: varinfo5_main (varinfo5so.c:156)
by 0x........: main (varinfo5.c:5)
- Address 0x........ is 5 bytes inside data symbol "static_local_def.XXXX"
+ Address 0x........ is in the Data segment of /Users/minime/src/vg/nightly/valgrind-new/memcheck/tests/varinfo5so.so
Uninitialised byte(s) found during client check request
at 0x........: croak (varinfo5so.c:29)
@@ -138,7 +138,7 @@
by 0x........: varinfo3_main (varinfo5so.c:118)
by 0x........: varinfo5_main (varinfo5so.c:156)
by 0x........: main (varinfo5.c:5)
- Address 0x........ is 7 bytes inside data symbol "static_local_undef.XXXX"
+ Address 0x........ is in the Data segment of /Users/minime/src/vg/nightly/valgrind-new/memcheck/tests/varinfo5so.so
Uninitialised byte(s) found during client check request
at 0x........: croak (varinfo5so.c:29)
=================================================
./valgrind-new/none/tests/async-sigs.stderr.diff
=================================================
--- async-sigs.stderr.exp 2010-03-06 23:19:26.000000000 -0600
+++ async-sigs.stderr.out 2010-03-06 23:27:53.000000000 -0600
@@ -1,8 +1,30 @@
-testing: blocking=0 caught=11 fatal=7... PASSED
+testing: blocking=0 caught=11 fatal=10...
+Process terminating with default action of signal 10 (SIGBUS)
+ Non-existent physical address at address 0x........
+ at 0x........: test (async-sigs.c:94)
+ by 0x........: main (async-sigs.c:129)
+PASSED
testing: blocking=0 caught=11 fatal=1... PASSED
-testing: blocking=0 caught=10 fatal=7... PASSED
-testing: blocking=0 caught=10 fatal=1... PASSED
-testing: blocking=1 caught=11 fatal=7... PASSED
+testing: blocking=0 caught=30 fatal=10...
+Process terminating with default action of signal 10 (SIGBUS)
+ Non-existent physical address at address 0x........
+ at 0x........: test (async-sigs.c:94)
+ by 0x........: main (async-sigs.c:131)
+PASSED
+testing: blocking=0 caught=30 fatal=1... PASSED
+testing: blocking=1 caught=11 fatal=10...
+Process terminating with default action of signal 10 (SIGBUS)
+ Non-existent physical address at address 0x........
+ at 0x........: __sigsuspend (in /...libc...)
+ by 0x........: test (async-sigs.c:95)
+ by 0x........: main (async-sigs.c:133)
+PASSED
testing: blocking=1 caught=11 fatal=1... PASSED
-testing: blocking=1 caught=10 fatal=7... PASSED
-testing: blocking=1 caught=10 fatal=1... PASSED
+testing: blocking=1 caught=30 fatal=10...
+Process terminating with default action of signal 10 (SIGBUS)
+ Non-existent physical address at address 0x........
+ at 0x........: __sigsuspend (in /...libc...)
+ by 0x........: test (async-sigs.c:95)
+ by 0x........: main (async-sigs.c:135)
+PASSED
+testing: blocking=1 caught=30 fatal=1... PASSED
=================================================
./valgrind-new/none/tests/faultstatus.stderr.diff
=================================================
--- faultstatus.stderr.exp 2010-03-06 23:19:27.000000000 -0600
+++ faultstatus.stderr.out 2010-03-06 23:27:59.000000000 -0600
@@ -1,6 +1,6 @@
-Test 1: PASS
-Test 2: PASS
-Test 3: PASS
-Test 4: PASS
+Test 1: FAIL: expected signal 11, not 10
+Test 2: FAIL: expected signal 11, not 10
+Test 3: FAIL: no fault, or handler returned
+Test 4: FAIL: expected si_code==7, not 0
=================================================
./valgrind-new/none/tests/pth_blockedsig.stderr.diff
=================================================
--- pth_blockedsig.stderr.exp 2010-03-06 23:19:26.000000000 -0600
+++ pth_blockedsig.stderr.out 2010-03-06 23:28:59.000000000 -0600
@@ -1,2 +1,4 @@
+UNKNOWN __pthread_sigmask is unsupported. This warning will not be repeated.
+SHOULD NOT BE HERE (SIGUSR1)!!!!
=================================================
./valgrind-old/helgrind/tests/rwlock_race.stderr.diff
=================================================
--- rwlock_race.stderr.exp 2010-03-06 23:05:18.000000000 -0600
+++ rwlock_race.stderr.out 2010-03-06 23:16:14.000000000 -0600
@@ -1,25 +1,4 @@
-Thread #x was created
- ...
- by 0x........: pthread_create@* (hg_intercepts.c:...)
- by 0x........: main (rwlock_race.c:48)
-
-Thread #x was created
- ...
- by 0x........: pthread_create@* (hg_intercepts.c:...)
- by 0x........: main (rwlock_race.c:47)
-
-Possible data race during write of size 4 at 0x........ by thread #x
- at 0x........: thread_func (rwlock_race.c:29)
- by 0x........: mythread_wrapper (hg_intercepts.c:...)
- ...
- This conflicts with a previous write of size 4 by thread #x
- at 0x........: thread_func (rwlock_race.c:29)
- by 0x........: mythread_wrapper (hg_intercepts.c:...)
- ...
- Location 0x........ is 0 bytes inside local var "s_racy"
- declared at rwlock_race.c:18, in frame #x of thread x
-
Result: 2
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
=================================================
./valgrind-old/helgrind/tests/tc06_two_races_xml.stderr.diff
=================================================
--- tc06_two_races_xml.stderr.exp 2010-03-06 23:05:18.000000000 -0600
+++ tc06_two_races_xml.stderr.out 2010-03-06 23:16:30.000000000 -0600
@@ -39,17 +39,7 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>do_clone</fn>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>pthread_create@@GLIBC_2.2.5</fn>
+ <fn>__bsdthread_create</fn>
</frame>
<frame>
<ip>0x........</ip>
@@ -62,7 +52,7 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>pthread_create@*</fn>
+ <fn>pthread_create</fn>
<dir>...</dir>
<file>hg_intercepts.c</file>
<line>...</line>
@@ -120,12 +110,12 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
+ <fn>thread_start</fn>
</frame>
</stack>
<auxwhat>Location 0x........ is 0 bytes inside global var "unprot1"</auxwhat>
@@ -174,12 +164,12 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
+ <fn>thread_start</fn>
</frame>
</stack>
<auxwhat>Location 0x........ is 0 bytes inside global var "unprot1"</auxwhat>
@@ -228,12 +218,12 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
+ <fn>thread_start</fn>
</frame>
</stack>
<auxwhat>Location 0x........ is 0 bytes inside global var "unprot2"</auxwhat>
@@ -282,12 +272,12 @@
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>start_thread</fn>
+ <fn>_pthread_start</fn>
</frame>
<frame>
<ip>0x........</ip>
<obj>...</obj>
- <fn>clone</fn>
+ <fn>thread_start</fn>
</frame>
</stack>
<auxwhat>Location 0x........ is 0 bytes inside global var "unprot2"</auxwhat>
=================================================
./valgrind-old/helgrind/tests/tc18_semabuse.stderr.diff-glibc25-amd64
=================================================
--- tc18_semabuse.stderr.exp-glibc25-amd64 2010-03-06 23:05:18.000000000 -0600
+++ tc18_semabuse.stderr.out 2010-03-06 23:16:44.000000000 -0600
@@ -2,14 +2,30 @@
Thread #x is the program's root thread
Thread #x's call to sem_init failed
- with error code 22 (EINVAL: Invalid argument)
- at 0x........: sem_init@* (hg_intercepts.c:...)
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_init (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:23)
-Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
+Thread #x's call to sem_init failed
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_init (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:26)
+
+Thread #x's call to sem_wait failed
+ with error code 9 (EBADF: Bad file number)
at 0x........: sem_wait_WRK (hg_intercepts.c:...)
- by 0x........: sem_wait (hg_intercepts.c:...)
+ by 0x........: sem_wait$* (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:34)
+Thread #x's call to sem_post failed
+ with error code 9 (EBADF: Bad file number)
+ at 0x........: sem_post (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:37)
+
+Thread #x's call to sem_destroy failed
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_destroy (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:39)
+
-ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
=================================================
./valgrind-old/helgrind/tests/tc18_semabuse.stderr.diff-glibc28-amd64
=================================================
--- tc18_semabuse.stderr.exp-glibc28-amd64 2010-03-06 23:05:18.000000000 -0600
+++ tc18_semabuse.stderr.out 2010-03-06 23:16:44.000000000 -0600
@@ -2,20 +2,30 @@
Thread #x is the program's root thread
Thread #x's call to sem_init failed
- with error code 22 (EINVAL: Invalid argument)
- at 0x........: sem_init@* (hg_intercepts.c:...)
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_init (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:23)
-Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
+Thread #x's call to sem_init failed
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_init (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:26)
+
+Thread #x's call to sem_wait failed
+ with error code 9 (EBADF: Bad file number)
at 0x........: sem_wait_WRK (hg_intercepts.c:...)
- by 0x........: sem_wait (hg_intercepts.c:...)
+ by 0x........: sem_wait$* (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:34)
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:...)
+ with error code 9 (EBADF: Bad file number)
+ at 0x........: sem_post (hg_intercepts.c:...)
by 0x........: main (tc18_semabuse.c:37)
+Thread #x's call to sem_destroy failed
+ with error code 78 (ENOSYS: Function not implemented)
+ at 0x........: sem_destroy (hg_intercepts.c:...)
+ by 0x........: main (tc18_semabuse.c:39)
+
-ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
=================================================
./valgrind-old/helgrind/tests/tc23_bogus_condwait.stderr.diff
=================================================
--- tc23_bogus_condwait.stderr.exp 2010-03-06 23:05:18.000000000 -0600
+++ tc23_bogus_condwait.stderr.out 2010-03-06 23:17:21.000000000 -0600
@@ -2,32 +2,52 @@
Thread #x is the program's root thread
Thread #x: pthread_cond_{timed}wait called with invalid mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
+ by 0x........: main (tc23_bogus_condwait.c:69)
+
+Thread #x's call to pthread_cond_wait failed
+ with error code 22 (EINVAL: Invalid argument)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:69)
Thread #x: pthread_cond_{timed}wait called with un-held mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:72)
Thread #x: pthread_cond_{timed}wait: cond is associated with a different mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:72)
Thread #x: pthread_cond_{timed}wait called with mutex of type pthread_rwlock_t*
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:75)
Thread #x: pthread_cond_{timed}wait: cond is associated with a different mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
+ by 0x........: main (tc23_bogus_condwait.c:75)
+
+Thread #x's call to pthread_cond_wait failed
+ with error code 22 (EINVAL: Invalid argument)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:75)
Thread #x: pthread_cond_{timed}wait called with mutex held by a different thread
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:78)
Thread #x: pthread_cond_{timed}wait: cond is associated with a different mutex
- at 0x........: pthread_cond_wait@* (hg_intercepts.c:...)
+ at 0x........: pthread_cond_wait* (hg_intercepts.c:...)
by 0x........: main (tc23_bogus_condwait.c:78)
+Thread #x: Bug in libpthread: write lock granted on mutex/rwlock which is currently wr-held by a different thread
+ at 0x........: pthread_mutex_lock (hg_intercepts.c:...)
+ by 0x........: _pthread_cond_wait (in /...libc...)
+ by 0x........: pthread_cond_wait$UNIX2003 (in /...libc...)
+ by 0x........: pthread_cond_wait* (hg_intercepts.c:...)
+ by 0x........: main (tc23_bogus_condwait.c:78)
+
+Thread #x: Exiting thread still holds 1 lock
+ ...
+
-ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)
=================================================
./valgrind-old/memcheck/tests/null_socket.stdout.diff
=================================================
--- /dev/null 2010-03-06 23:11:04.000000000 -0600
+++ null_socket.stdout.out 2010-03-06 23:11:21.000000000 -0600
@@ -0,0 +1 @@
+recvfrom succeeded?
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc25-amd64
=================================================
--- origin5-bz2.stderr.exp-glibc25-amd64 2010-03-06 23:05:26.000000000 -0600
+++ origin5-bz2.stderr.out 2010-03-06 23:11:36.000000000 -0600
@@ -11,7 +11,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: handle_compress (origin5-bz2.c:4686)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
@@ -19,7 +19,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: handle_compress (origin5-bz2.c:4686)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
@@ -27,7 +27,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: mainSort (origin5-bz2.c:2820)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -38,7 +38,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: mainSort (origin5-bz2.c:2823)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -49,8 +49,8 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2854)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2855)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
@@ -60,8 +60,8 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2858)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2859)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
@@ -71,7 +71,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -82,7 +82,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: mainSort (origin5-bz2.c:2964)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -93,7 +93,18 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2964)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
+ by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
+ by 0x........: handle_compress (origin5-bz2.c:4753)
+ by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
+ by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
+ by 0x........: main (origin5-bz2.c:6484)
+ Uninitialised value was created by a client request
+ at 0x........: main (origin5-bz2.c:6479)
+
+Use of uninitialised value of size 4
at 0x........: fallbackSort (origin5-bz2.c:2269)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -104,7 +115,7 @@
Uninitialised value was created by a client request
<truncated beyond 100 lines>
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc25-x86
=================================================
--- origin5-bz2.stderr.exp-glibc25-x86 2010-03-06 23:05:27.000000000 -0600
+++ origin5-bz2.stderr.out 2010-03-06 23:11:36.000000000 -0600
@@ -28,7 +28,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2820)
+ at 0x........: mainSort (origin5-bz2.c:2820)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -38,7 +39,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2823)
+ at 0x........: mainSort (origin5-bz2.c:2823)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -48,7 +50,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2855)
+ at 0x........: mainSort (origin5-bz2.c:2855)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -58,7 +61,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2859)
+ at 0x........: mainSort (origin5-bz2.c:2859)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -68,7 +72,8 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2963)
+ at 0x........: mainSort (origin5-bz2.c:2963)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -78,7 +83,19 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 4
- at 0x........: BZ2_blockSort (origin5-bz2.c:2964)
+ at 0x........: mainSort (origin5-bz2.c:2964)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
+ by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
+ by 0x........: handle_compress (origin5-bz2.c:4753)
+ by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
+ by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
+ by 0x........: main (origin5-bz2.c:6484)
+ Uninitialised value was created by a client request
+ at 0x........: main (origin5-bz2.c:6479)
+
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2964)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc27-ppc64
=================================================
--- origin5-bz2.stderr.exp-glibc27-ppc64 2010-03-06 23:05:26.000000000 -0600
+++ origin5-bz2.stderr.out 2010-03-06 23:11:36.000000000 -0600
@@ -1,7 +1,7 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6481)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Conditional jump or move depends on uninitialised value(s)
at 0x........: handle_compress (origin5-bz2.c:4686)
@@ -9,85 +9,102 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: handle_compress (origin5-bz2.c:4686)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
+Use of uninitialised value of size 4
at 0x........: handle_compress (origin5-bz2.c:4686)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2820)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2820)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2823)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2823)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2854)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2855)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2858)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2859)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
by 0x........: handle_compress (origin5-bz2.c:4753)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 8
- at 0x........: BZ2_blockSort (origin5-bz2.c:2963)
+Use of uninitialised value of size 4
+ at 0x........: mainSort (origin5-bz2.c:2963)
+ by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
<truncated beyond 100 lines>
=================================================
./valgrind-old/memcheck/tests/varinfo3.stderr.diff
=================================================
--- varinfo3.stderr.exp 2010-03-06 23:05:26.000000000 -0600
+++ varinfo3.stderr.out 2010-03-06 23:12:32.000000000 -0600
@@ -31,7 +31,7 @@
by 0x........: bar (varinfo3.c:42)
by 0x........: foo (varinfo3.c:58)
by 0x........: main (varinfo3.c:66)
- Address 0x........ is 5 bytes inside data symbol "static_local_def.XXXX"
+ Address 0x........ is in the Data segment of ./varinfo3
Uninitialised byte(s) found during client check request
at 0x........: croak (varinfo3.c:28)
@@ -46,7 +46,7 @@
by 0x........: bar (varinfo3.c:44)
by 0x........: foo (varinfo3.c:58)
by 0x........: main (varinfo3.c:66)
- Address 0x........ is 7 bytes inside data symbol "static_local_undef.XXXX"
+ Address 0x........ is in the Data segment of ./varinfo3
Uninitialised byte(s) found during client check request
at 0x........: croak (varinfo3.c:28)
=================================================
./valgrind-old/memcheck/tests/varinfo5.stderr.diff
=================================================
--- varinfo5.stderr.exp 2010-03-06 23:05:27.000000000 -0600
+++ varinfo5.stderr.out 2010-03-06 23:12:33.000000000 -0600
@@ -119,7 +119,7 @@
by 0x........: varinfo3_main (varinfo5so.c:118)
by 0x........: varinfo5_main (varinfo5so.c:156)
by 0x........: main (varinfo5.c:5)
- Address 0x........ is 5 bytes inside data symbol "static_local_def.XXXX"
+ Address 0x........ is in the Data segment of /Users/minime/src/vg/nightly/valgrind-old/memcheck/tests/varinfo5so.so
Uninitialised byte(s) found during client check request
at 0x........: croak (varinfo5so.c:29)
@@ -138,7 +138,7 @@
by 0x........: varinfo3_main (varinfo5so.c:118)
by 0x........: varinfo5_main (varinfo5so.c:156)
by 0x........: main (varinfo5.c:5)
- Address 0x........ is 7 bytes inside data symbol "static_local_undef.XXXX"
+ Address 0x........ is in the Data segment of /Users/minime/src/vg/nightly/valgrind-old/memcheck/tests/varinfo5so.so
Uninitialised byte(s) found during client check request
at 0x........: croak (varinfo5so.c:29)
=================================================
./valgrind-old/none/tests/async-sigs.stderr.diff
=================================================
--- async-sigs.stderr.exp 2010-03-06 23:05:35.000000000 -0600
+++ async-sigs.stderr.out 2010-03-06 23:14:00.000000000 -0600
@@ -1,8 +1,30 @@
-testing: blocking=0 caught=11 fatal=7... PASSED
+testing: blocking=0 caught=11 fatal=10...
+Process terminating with default action of signal 10 (SIGBUS)
+ Non-existent physical address at address 0x........
+ at 0x........: test (async-sigs.c:94)
+ by 0x........: main (async-sigs.c:129)
+PASSED
testing: blocking=0 caught=11 fatal=1... PASSED
-testing: blocking=0 caught=10 fatal=7... PASSED
-testing: blocking=0 caught=10 fatal=1... PASSED
-testing: blocking=1 caught=11 fatal=7... PASSED
+testing: blocking=0 caught=30 fatal=10...
+Process terminating with default action of signal 10 (SIGBUS)
+ Non-existent physical address at address 0x........
+ at 0x........: test (async-sigs.c:94)
+ by 0x........: main (async-sigs.c:131)
+PASSED
+testing: blocking=0 caught=30 fatal=1... PASSED
+testing: blocking=1 caught=11 fatal=10...
+Process terminating with default action of signal 10 (SIGBUS)
+ Non-existent physical address at address 0x........
+ at 0x........: __sigsuspend (in /...libc...)
+ by 0x........: test (async-sigs.c:95)
+ by 0x........: main (async-sigs.c:133)
+PASSED
testing: blocking=1 caught=11 fatal=1... PASSED
-testing: blocking=1 caught=10 fatal=7... PASSED
-testing: blocking=1 caught=10 fatal=1... PASSED
+testing: blocking=1 caught=30 fatal=10...
+Process terminating with default action of signal 10 (SIGBUS)
+ Non-existent physical address at address 0x........
+ at 0x........: __sigsuspend (in /...libc...)
+ by 0x........: test (async-sigs.c:95)
+ by 0x........: main (async-sigs.c:135)
+PASSED
+testing: blocking=1 caught=30 fatal=1... PASSED
=================================================
./valgrind-old/none/tests/faultstatus.stderr.diff
=================================================
--- faultstatus.stderr.exp 2010-03-06 23:05:36.000000000 -0600
+++ faultstatus.stderr.out 2010-03-06 23:14:05.000000000 -0600
@@ -1,6 +1,6 @@
-Test 1: PASS
-Test 2: PASS
-Test 3: PASS
-Test 4: PASS
+Test 1: FAIL: expected signal 11, not 10
+Test 2: FAIL: expected signal 11, not 10
+Test 3: FAIL: no fault, or handler returned
+Test 4: FAIL: expected si_code==7, not 0
=================================================
./valgrind-old/none/tests/pth_blockedsig.stderr.diff
=================================================
--- pth_blockedsig.stderr.exp 2010-03-06 23:05:35.000000000 -0600
+++ pth_blockedsig.stderr.out 2010-03-06 23:15:06.000000000 -0600
@@ -1,2 +1,4 @@
+UNKNOWN __pthread_sigmask is unsupported. This warning will not be repeated.
+SHOULD NOT BE HERE (SIGUSR1)!!!!
--
|
|
From: <sv...@va...> - 2010-03-07 12:31:03
|
Author: bart Date: 2010-03-07 12:21:56 +0000 (Sun, 07 Mar 2010) New Revision: 11074 Log: Updated gcc version. Modified: trunk/drd/scripts/download-and-build-gcc Modified: trunk/drd/scripts/download-and-build-gcc =================================================================== --- trunk/drd/scripts/download-and-build-gcc 2010-03-07 10:54:21 UTC (rev 11073) +++ trunk/drd/scripts/download-and-build-gcc 2010-03-07 12:21:56 UTC (rev 11074) @@ -6,7 +6,7 @@ # are called gmp-devel and mpfr-devel. -GCC_VERSION=4.4.2 +GCC_VERSION=4.4.3 FSF_MIRROR=ftp://ftp.easynet.be/gnu SRCDIR=$HOME/software DOWNLOADS=$SRCDIR/downloads |
|
From: <sv...@va...> - 2010-03-07 10:54:29
|
Author: bart
Date: 2010-03-07 10:54:21 +0000 (Sun, 07 Mar 2010)
New Revision: 11073
Log:
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.
Added:
trunk/drd/drd_hb.c
trunk/drd/drd_hb.h
Modified:
trunk/drd/Makefile.am
trunk/drd/drd_barrier.c
trunk/drd/drd_clientobj.c
trunk/drd/drd_clientobj.h
trunk/drd/drd_clientreq.c
trunk/drd/drd_clientreq.h
trunk/drd/drd_cond.c
trunk/drd/drd_cond.h
trunk/drd/drd_error.c
trunk/drd/drd_error.h
trunk/drd/drd_mutex.c
trunk/drd/drd_rwlock.c
trunk/drd/drd_semaphore.c
Modified: trunk/drd/Makefile.am
===================================================================
--- trunk/drd/Makefile.am 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/Makefile.am 2010-03-07 10:54:21 UTC (rev 11073)
@@ -17,6 +17,7 @@
drd_clientreq.h \
drd_cond.h \
drd_error.h \
+ drd_hb.h \
drd_load_store.h \
drd_malloc_wrappers.h \
drd_mutex.h \
@@ -56,6 +57,7 @@
drd_clientreq.c \
drd_cond.c \
drd_error.c \
+ drd_hb.c \
drd_load_store.c \
drd_main.c \
drd_malloc_wrappers.c \
Modified: trunk/drd/drd_barrier.c
===================================================================
--- trunk/drd/drd_barrier.c 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_barrier.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -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)()),
Modified: trunk/drd/drd_clientobj.c
===================================================================
--- trunk/drd/drd_clientobj.c 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_clientobj.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -249,6 +249,7 @@
{
case ClientMutex: return "mutex";
case ClientCondvar: return "cond";
+ case ClientHbvar: return "order annotation";
case ClientSemaphore: return "semaphore";
case ClientBarrier: return "barrier";
case ClientRwlock: return "rwlock";
Modified: trunk/drd/drd_clientobj.h
===================================================================
--- trunk/drd/drd_clientobj.h 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_clientobj.h 2010-03-07 10:54:21 UTC (rev 11073)
@@ -45,9 +45,10 @@
typedef enum {
ClientMutex = 1,
ClientCondvar = 2,
- ClientSemaphore = 3,
- ClientBarrier = 4,
- ClientRwlock = 5,
+ ClientHbvar = 3,
+ ClientSemaphore = 4,
+ ClientBarrier = 5,
+ ClientRwlock = 6,
} ObjType;
struct any
@@ -83,9 +84,20 @@
ExeContext* first_observed_at;
int waiter_count;
Addr mutex; // Client mutex specified in pthread_cond_wait() call, and
- // null if no client threads are currently waiting on this cond.var.
+ // null if no client threads are currently waiting on this cond.var.
};
+struct hb_info
+{
+ Addr a1;
+ ObjType type;
+ void (*cleanup)(union drd_clientobj*);
+ void (*delete_thread)(union drd_clientobj*, DrdThreadId);
+ ExeContext* first_observed_at;
+ OSet* oset; // Per-thread order annotation information.
+ Bool done; // Whether happens-done has already been invoked.
+};
+
struct semaphore_info
{
Addr a1;
@@ -135,6 +147,7 @@
struct any any;
struct mutex_info mutex;
struct cond_info cond;
+ struct hb_info hb;
struct semaphore_info semaphore;
struct barrier_info barrier;
struct rwlock_info rwlock;
Modified: trunk/drd/drd_clientreq.c
===================================================================
--- trunk/drd/drd_clientreq.c 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_clientreq.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -27,6 +27,7 @@
#include "drd_clientreq.h"
#include "drd_cond.h"
#include "drd_error.h"
+#include "drd_hb.h"
#include "drd_load_store.h"
#include "drd_malloc_wrappers.h"
#include "drd_mutex.h"
@@ -82,7 +83,10 @@
case VG_USERREQ__FREELIKE_BLOCK:
if (arg[1] && ! DRD_(freelike_block)(vg_tid, arg[1]/*addr*/))
{
- GenericErrInfo GEI = { DRD_(thread_get_running_tid)() };
+ GenericErrInfo GEI = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = 0,
+ };
VG_(maybe_record_error)(vg_tid,
GenericErr,
VG_(get_IP)(vg_tid),
@@ -112,30 +116,17 @@
break;
case VG_USERREQ__DRD_ANNOTATE_HAPPENS_BEFORE:
- {
- struct cond_info* const cond_p = DRD_(cond_get)(arg[1]);
- if (! cond_p)
- {
- DRD_(mutex_init)(arg[1], mutex_type_order_annotation);
- DRD_(mutex_pre_lock)(arg[1], mutex_type_order_annotation, False);
- DRD_(mutex_post_lock)(arg[1], mutex_type_order_annotation, False);
- DRD_(mutex_unlock)(arg[1], mutex_type_order_annotation);
- }
- }
+ DRD_(hb_happens_before)(drd_tid, arg[1]);
break;
case VG_USERREQ__DRD_ANNOTATE_HAPPENS_AFTER:
- {
- struct cond_info* const cond_p = DRD_(cond_get)(arg[1]);
- if (! cond_p)
- {
- DRD_(mutex_pre_lock)(arg[1], mutex_type_order_annotation, False);
- DRD_(mutex_post_lock)(arg[1], mutex_type_order_annotation, False);
- DRD_(mutex_unlock)(arg[1], mutex_type_order_annotation);
- }
- }
+ DRD_(hb_happens_after)(drd_tid, arg[1]);
break;
+ case VG_USERREQ__DRD_ANNOTATE_HAPPENS_DONE:
+ DRD_(hb_happens_done)(drd_tid, arg[1]);
+ break;
+
case VG_USERREQ__DRD_ANNOTATE_RWLOCK_CREATE:
if (arg[1])
{
Modified: trunk/drd/drd_clientreq.h
===================================================================
--- trunk/drd/drd_clientreq.h 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_clientreq.h 2010-03-07 10:54:21 UTC (rev 11073)
@@ -229,7 +229,6 @@
mutex_type_errorcheck_mutex = 2,
mutex_type_default_mutex = 3,
mutex_type_spinlock = 4,
- mutex_type_order_annotation = 5,
} MutexT;
/**
Modified: trunk/drd/drd_cond.c
===================================================================
--- trunk/drd/drd_cond.c 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_cond.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -27,12 +27,10 @@
#include "drd_cond.h"
#include "drd_error.h"
#include "drd_mutex.h"
-#include "drd_suppression.h"
#include "pub_tool_errormgr.h" /* VG_(maybe_record_error)() */
#include "pub_tool_libcassert.h" /* tl_assert() */
#include "pub_tool_libcprint.h" /* VG_(printf)() */
#include "pub_tool_machine.h" /* VG_(get_IP)() */
-#include "pub_tool_options.h" /* VG_(clo_backtrace_size) */
#include "pub_tool_threadstate.h" /* VG_(get_running_tid)() */
@@ -63,8 +61,8 @@
void DRD_(cond_initialize)(struct cond_info* const p, const Addr cond)
{
tl_assert(cond != 0);
- tl_assert(p->a1 == cond);
- tl_assert(p->type == ClientCondvar);
+ tl_assert(p->a1 == cond);
+ tl_assert(p->type == ClientCondvar);
p->cleanup = (void(*)(DrdClientobj*))(DRD_(cond_cleanup));
p->delete_thread = 0;
@@ -83,10 +81,13 @@
{
struct mutex_info* q;
q = &(DRD_(clientobj_get)(p->mutex, ClientMutex)->mutex);
- tl_assert(q);
{
- CondDestrErrInfo cde = { DRD_(thread_get_running_tid)(),
- p->a1, q->a1, q->owner };
+ CondDestrErrInfo cde = {
+ DRD_(thread_get_running_tid)(),
+ p->a1,
+ q ? q->a1 : 0,
+ q ? q->owner : DRD_INVALID_THREADID
+ };
VG_(maybe_record_error)(VG_(get_running_tid)(),
CondDestrErr,
VG_(get_IP)(VG_(get_running_tid)()),
@@ -97,17 +98,40 @@
}
}
+/**
+ * Report that the synchronization object at address 'addr' is of the
+ * wrong type.
+ */
+static void wrong_type(const Addr addr)
+{
+ GenericErrInfo gei = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = addr,
+ };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ GenericErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "wrong type of synchronization object",
+ &gei);
+}
+
static struct cond_info* cond_get_or_allocate(const Addr cond)
{
struct cond_info *p;
tl_assert(offsetof(DrdClientobj, cond) == 0);
p = &(DRD_(clientobj_get)(cond, ClientCondvar)->cond);
- if (p == 0)
+ if (p)
+ return p;
+
+ if (DRD_(clientobj_present)(cond, cond + 1))
{
- p = &(DRD_(clientobj_add)(cond, ClientCondvar)->cond);
- DRD_(cond_initialize)(p, cond);
+ wrong_type(cond);
+ return 0;
}
+
+ p = &(DRD_(clientobj_add)(cond, ClientCondvar)->cond);
+ DRD_(cond_initialize)(p, cond);
return p;
}
@@ -184,10 +208,11 @@
DRD_(clientobj_remove)(p->a1, ClientCondvar);
}
-/** Called before pthread_cond_wait(). Note: before this function is called,
- * mutex_unlock() has already been called from drd_clientreq.c.
+/**
+ * Called before pthread_cond_wait(). Note: before this function is called,
+ * mutex_unlock() has already been called from drd_clientreq.c.
*/
-int DRD_(cond_pre_wait)(const Addr cond, const Addr mutex)
+void DRD_(cond_pre_wait)(const Addr cond, const Addr mutex)
{
struct cond_info* p;
struct mutex_info* q;
@@ -201,7 +226,16 @@
}
p = cond_get_or_allocate(cond);
- tl_assert(p);
+ if (!p)
+ {
+ CondErrInfo cei = { .tid = DRD_(thread_get_running_tid)(), .cond = cond };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ CondErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "not a condition variable",
+ &cei);
+ return;
+ }
if (p->waiter_count == 0)
{
@@ -238,11 +272,13 @@
DRD_(not_a_mutex)(p->mutex);
}
- return ++p->waiter_count;
+ ++p->waiter_count;
}
-/** Called after pthread_cond_wait(). */
-int DRD_(cond_post_wait)(const Addr cond)
+/**
+ * Called after pthread_cond_wait().
+ */
+void DRD_(cond_post_wait)(const Addr cond)
{
struct cond_info* p;
@@ -255,55 +291,89 @@
}
p = DRD_(cond_get)(cond);
- if (p)
+ if (!p)
{
- if (p->waiter_count > 0)
+ struct mutex_info* q;
+ q = &(DRD_(clientobj_get)(p->mutex, ClientMutex)->mutex);
{
- --p->waiter_count;
- if (p->waiter_count == 0)
- {
- p->mutex = 0;
- }
+ CondDestrErrInfo cde = {
+ DRD_(thread_get_running_tid)(),
+ p->a1,
+ q ? q->a1 : 0,
+ q ? q->owner : DRD_INVALID_THREADID
+ };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ CondDestrErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "condition variable has been destroyed while"
+ " being waited upon",
+ &cde);
}
- return p->waiter_count;
+ return;
}
- return 0;
+
+ if (p->waiter_count > 0)
+ {
+ --p->waiter_count;
+ if (p->waiter_count == 0)
+ {
+ p->mutex = 0;
+ }
+ }
}
-static void DRD_(cond_signal)(Addr const cond)
+static void cond_signal(const DrdThreadId tid, struct cond_info* const cond_p)
{
const ThreadId vg_tid = VG_(get_running_tid)();
const DrdThreadId drd_tid = DRD_(VgThreadIdToDrdThreadId)(vg_tid);
- struct cond_info* const cond_p = DRD_(cond_get)(cond);
- if (cond_p && cond_p->waiter_count > 0)
+ tl_assert(cond_p);
+
+ if (cond_p->waiter_count > 0)
{
if (DRD_(s_report_signal_unlocked)
- && ! DRD_(mutex_is_locked_by)(cond_p->mutex, drd_tid))
+ && ! DRD_(mutex_is_locked_by)(cond_p->mutex, drd_tid))
{
- /* A signal is sent while the associated mutex has not been locked. */
- /* This can indicate but is not necessarily a race condition. */
- CondRaceErrInfo cei = { .tid = DRD_(thread_get_running_tid)(),
- .cond = cond,
- .mutex = cond_p->mutex,
- };
- VG_(maybe_record_error)(vg_tid,
- CondRaceErr,
- VG_(get_IP)(vg_tid),
- "CondErr",
- &cei);
+ /*
+ * A signal is sent while the associated mutex has not been locked.
+ * This can indicate but is not necessarily a race condition.
+ */
+ CondRaceErrInfo cei = { .tid = DRD_(thread_get_running_tid)(),
+ .cond = cond_p->a1,
+ .mutex = cond_p->mutex,
+ };
+ VG_(maybe_record_error)(vg_tid,
+ CondRaceErr,
+ VG_(get_IP)(vg_tid),
+ "CondErr",
+ &cei);
}
}
else
{
- /* No other thread is waiting for the signal, hence the signal will be */
- /* lost. This is normal in a POSIX threads application. */
+ /*
+ * No other thread is waiting for the signal, hence the signal will
+ * be lost. This is normal in a POSIX threads application.
+ */
}
}
+static void not_initialized(Addr const cond)
+{
+ CondErrInfo cei = { .tid = DRD_(thread_get_running_tid)(), .cond = cond };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ CondErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "condition variable has not been initialized",
+ &cei);
+}
+
/** Called before pthread_cond_signal(). */
void DRD_(cond_pre_signal)(Addr const cond)
{
+ struct cond_info* p;
+
+ p = DRD_(cond_get)(cond);
if (DRD_(s_trace_cond))
{
VG_(message)(Vg_UserMsg,
@@ -312,12 +382,20 @@
cond);
}
- DRD_(cond_signal)(cond);
+ if (!p)
+ {
+ not_initialized(cond);
+ return;
+ }
+
+ cond_signal(DRD_(thread_get_running_tid)(), p);
}
/** Called before pthread_cond_broadcast(). */
void DRD_(cond_pre_broadcast)(Addr const cond)
{
+ struct cond_info* p;
+
if (DRD_(s_trace_cond))
{
VG_(message)(Vg_UserMsg,
@@ -326,5 +404,12 @@
cond);
}
- DRD_(cond_signal)(cond);
+ p = DRD_(cond_get)(cond);
+ if (!p)
+ {
+ not_initialized(cond);
+ return;
+ }
+
+ cond_signal(DRD_(thread_get_running_tid)(), p);
}
Modified: trunk/drd/drd_cond.h
===================================================================
--- trunk/drd/drd_cond.h 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_cond.h 2010-03-07 10:54:21 UTC (rev 11073)
@@ -43,8 +43,8 @@
struct cond_info* DRD_(cond_get)(const Addr cond);
void DRD_(cond_pre_init)(const Addr cond);
void DRD_(cond_post_destroy)(const Addr cond);
-int DRD_(cond_pre_wait)(const Addr cond, const Addr mutex);
-int DRD_(cond_post_wait)(const Addr cond);
+void DRD_(cond_pre_wait)(const Addr cond, const Addr mutex);
+void DRD_(cond_post_wait)(const Addr cond);
void DRD_(cond_pre_signal)(const Addr cond);
void DRD_(cond_pre_broadcast)(const Addr cond);
Modified: trunk/drd/drd_error.c
===================================================================
--- trunk/drd/drd_error.c 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_error.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -371,9 +371,11 @@
break;
}
case GenericErr: {
- //GenericErrInfo* gei =(GenericErrInfo*)(VG_(get_error_extra)(e));
+ GenericErrInfo* gei = (GenericErrInfo*)(VG_(get_error_extra)(e));
VG_(message)(Vg_UserMsg, "%s\n", VG_(get_error_string)(e));
VG_(pp_ExeContext)(VG_(get_error_where)(e));
+ if (gei->addr)
+ first_observed(gei->addr);
break;
}
case InvalidThreadId: {
Modified: trunk/drd/drd_error.h
===================================================================
--- trunk/drd/drd_error.h 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_error.h 2010-03-07 10:54:21 UTC (rev 11073)
@@ -163,6 +163,7 @@
typedef struct {
DrdThreadId tid;
+ Addr addr;
} GenericErrInfo;
typedef struct {
Added: trunk/drd/drd_hb.c
===================================================================
--- trunk/drd/drd_hb.c (rev 0)
+++ trunk/drd/drd_hb.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -0,0 +1,287 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
+/*
+ This file is part of drd, a thread error detector.
+
+ Copyright (C) 2006-2009 Bart Van Assche <bar...@gm...>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+
+#include "drd_clientobj.h"
+#include "drd_hb.h"
+#include "drd_error.h"
+#include "pub_tool_errormgr.h" /* VG_(maybe_record_error)() */
+#include "pub_tool_libcassert.h" /* tl_assert() */
+#include "pub_tool_libcprint.h" /* VG_(printf)() */
+#include "pub_tool_machine.h" /* VG_(get_IP)() */
+#include "pub_tool_mallocfree.h" /* VG_(malloc)(), VG_(free)()*/
+#include "pub_tool_threadstate.h" /* VG_(get_running_tid)() */
+
+
+/* Type definitions. */
+
+/** Per-thread hb information. */
+struct hb_thread_info
+{
+ UWord tid; // A DrdThreadId declared as UWord because
+ // this member variable is the key of an OSet.
+ Segment* sg; // Segment created before most recent
+ // ANNOTATE_HAPPENS_BEFORE().
+};
+
+
+/* Local functions. */
+
+static void DRD_(hb_cleanup)(struct hb_info* p);
+
+
+/* Local variables. */
+
+static Bool DRD_(s_trace_hb);
+
+
+/* Function definitions. */
+
+void DRD_(hb_set_trace)(const Bool trace_hb)
+{
+ DRD_(s_trace_hb) = trace_hb;
+}
+
+/**
+ * Initialize the structure *p with the specified thread ID.
+ */
+static
+void DRD_(hb_thread_initialize)(struct hb_thread_info* const p,
+ const DrdThreadId tid)
+{
+ p->tid = tid;
+ p->sg = 0;
+}
+
+/**
+ * Deallocate the memory that is owned by members of struct hb_thread_info.
+ */
+static void DRD_(hb_thread_destroy)(struct hb_thread_info* const p)
+{
+ tl_assert(p);
+ DRD_(sg_put)(p->sg);
+}
+
+static
+void DRD_(hb_initialize)(struct hb_info* const p, const Addr hb)
+{
+ tl_assert(hb != 0);
+ tl_assert(p->a1 == hb);
+ tl_assert(p->type == ClientHbvar);
+
+ p->cleanup = (void(*)(DrdClientobj*))(DRD_(hb_cleanup));
+ p->delete_thread = 0;
+ p->oset = VG_(OSetGen_Create)(0, 0, VG_(malloc), "drd.hb",
+ VG_(free));
+ p->done = False;
+}
+
+/**
+ * Free the memory that was allocated by hb_initialize(). Called by
+ * DRD_(clientobj_remove)().
+ */
+static void DRD_(hb_cleanup)(struct hb_info* p)
+{
+ struct hb_thread_info* r;
+
+ tl_assert(p);
+ VG_(OSetGen_ResetIter)(p->oset);
+ for ( ; (r = VG_(OSetGen_Next)(p->oset)) != 0; )
+ DRD_(hb_thread_destroy)(r);
+ VG_(OSetGen_Destroy)(p->oset);
+}
+
+/**
+ * Report that the synchronization object at address 'addr' is of the
+ * wrong type.
+ */
+static void wrong_type(const Addr addr)
+{
+ GenericErrInfo gei = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = addr,
+ };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ GenericErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "wrong type of synchronization object",
+ &gei);
+}
+
+struct hb_info* DRD_(hb_get_or_allocate)(const Addr hb)
+{
+ struct hb_info *p;
+
+ tl_assert(offsetof(DrdClientobj, hb) == 0);
+ p = &(DRD_(clientobj_get)(hb, ClientHbvar)->hb);
+ if (p)
+ return p;
+
+ if (DRD_(clientobj_present)(hb, hb + 1))
+ {
+ wrong_type(hb);
+ return 0;
+ }
+
+ p = &(DRD_(clientobj_add)(hb, ClientHbvar)->hb);
+ DRD_(hb_initialize)(p, hb);
+ return p;
+}
+
+struct hb_info* DRD_(hb_get)(const Addr hb)
+{
+ tl_assert(offsetof(DrdClientobj, hb) == 0);
+ return &(DRD_(clientobj_get)(hb, ClientHbvar)->hb);
+}
+
+/** Called because of a happens-before annotation. */
+void DRD_(hb_happens_before)(const DrdThreadId tid, Addr const hb)
+{
+ const ThreadId vg_tid = VG_(get_running_tid)();
+ const DrdThreadId drd_tid = DRD_(VgThreadIdToDrdThreadId)(vg_tid);
+ const UWord word_tid = tid;
+ struct hb_info* p;
+ struct hb_thread_info* q;
+
+ p = DRD_(hb_get_or_allocate)(hb);
+ if (DRD_(s_trace_hb))
+ {
+ VG_(message)(Vg_UserMsg,
+ "[%d] happens_before 0x%lx\n",
+ DRD_(thread_get_running_tid)(),
+ hb);
+ }
+
+ if (!p)
+ return;
+
+ if (p->done)
+ {
+ GenericErrInfo gei = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = hb,
+ };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ GenericErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "happens-before after happens-after",
+ &gei);
+ return;
+ }
+
+ /* Allocate the per-thread data structure if necessary. */
+ q = VG_(OSetGen_Lookup)(p->oset, &word_tid);
+ if (!q)
+ {
+ q = VG_(OSetGen_AllocNode)(p->oset, sizeof(*q));
+ DRD_(hb_thread_initialize)(q, tid);
+ VG_(OSetGen_Insert)(p->oset, q);
+ tl_assert(VG_(OSetGen_Lookup)(p->oset, &word_tid) == q);
+ }
+
+ /*
+ * Store a pointer to the latest segment of the current thread in the
+ * per-thread data structure.
+ */
+ DRD_(thread_get_latest_segment)(&q->sg, tid);
+ DRD_(thread_new_segment)(drd_tid);
+}
+
+/** Called because of a happens-after annotation. */
+void DRD_(hb_happens_after)(const DrdThreadId tid, const Addr hb)
+{
+ struct hb_info* p;
+ struct hb_thread_info* q;
+ VectorClock old_vc;
+
+ p = DRD_(hb_get)(hb);
+
+ if (DRD_(s_trace_hb))
+ {
+ VG_(message)(Vg_UserMsg, "[%d] happens_after 0x%lx\n",
+ DRD_(thread_get_running_tid)(), hb);
+ }
+
+ if (!p)
+ {
+ GenericErrInfo gei = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = hb,
+ };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ GenericErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "missing happens-before annotation",
+ &gei);
+ return;
+ }
+
+ p->done = True;
+
+ /*
+ * Combine all vector clocks that were stored because of happens-before
+ * annotations with the vector clock of the current thread.
+ */
+ DRD_(vc_copy)(&old_vc, &DRD_(g_threadinfo)[tid].last->vc);
+ VG_(OSetGen_ResetIter)(p->oset);
+ for ( ; (q = VG_(OSetGen_Next)(p->oset)) != 0; )
+ {
+ if (q->tid != tid)
+ {
+ tl_assert(q->sg);
+ DRD_(vc_combine)(&DRD_(g_threadinfo)[tid].last->vc, &q->sg->vc);
+ }
+ }
+ DRD_(thread_update_conflict_set)(tid, &old_vc);
+ DRD_(vc_cleanup)(&old_vc);
+}
+
+/** Called because of a happens-done annotation. */
+void DRD_(hb_happens_done)(const DrdThreadId tid, const Addr hb)
+{
+ struct hb_info* p;
+
+ if (DRD_(s_trace_hb))
+ {
+ VG_(message)(Vg_UserMsg, "[%d] happens_done 0x%lx\n",
+ DRD_(thread_get_running_tid)(), hb);
+ }
+
+ p = DRD_(hb_get)(hb);
+ if (!p)
+ {
+ GenericErrInfo gei = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = hb,
+ };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ GenericErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "missing happens-before annotation",
+ &gei);
+ return;
+ }
+
+ DRD_(clientobj_remove)(p->a1, ClientHbvar);
+}
Added: trunk/drd/drd_hb.h
===================================================================
--- trunk/drd/drd_hb.h (rev 0)
+++ trunk/drd/drd_hb.h 2010-03-07 10:54:21 UTC (rev 11073)
@@ -0,0 +1,51 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
+/*
+ This file is part of drd, a thread error detector.
+
+ Copyright (C) 2006-2009 Bart Van Assche <bar...@gm...>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+
+#ifndef __DRD_HB_H
+#define __DRD_HB_H
+
+
+#include "drd_thread.h" /* DrdThreadid */
+#include "pub_tool_basics.h" /* Addr */
+
+
+/* Forward declarations. */
+
+struct hb_info;
+
+
+/* Function declarations. */
+
+void DRD_(hb_set_trace)(const Bool trace_hb);
+struct hb_info* DRD_(hb_get)(const Addr hb);
+struct hb_info* DRD_(hb_get_or_allocate)(const Addr hb);
+void DRD_(hb_init)(const Addr hb);
+void DRD_(hb_destroy)(const Addr hb);
+void DRD_(hb_happens_after)(const DrdThreadId tid, const Addr hb);
+void DRD_(hb_happens_before)(const DrdThreadId tid, const Addr hb);
+void DRD_(hb_happens_done)(const DrdThreadId tid, const Addr hb);
+
+
+#endif /* __DRD_HB_H */
Modified: trunk/drd/drd_mutex.c
===================================================================
--- trunk/drd/drd_mutex.c 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_mutex.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -114,7 +114,7 @@
p->last_locked_segment = 0;
}
-/** Let Valgrind report that there is no mutex object at address 'mutex'. */
+/** Report that address 'mutex' is not the address of a mutex object. */
void DRD_(not_a_mutex)(const Addr mutex)
{
MutexErrInfo MEI = { DRD_(thread_get_running_tid)(),
@@ -126,6 +126,21 @@
&MEI);
}
+/**
+ * Report that address 'mutex' is not the address of a mutex object of the
+ * expected type.
+ */
+static void wrong_mutex_type(const Addr mutex)
+{
+ MutexErrInfo MEI = { DRD_(thread_get_running_tid)(),
+ mutex, -1, DRD_INVALID_THREADID };
+ VG_(maybe_record_error)(VG_(get_running_tid)(),
+ MutexErr,
+ VG_(get_IP)(VG_(get_running_tid)()),
+ "Mutex type mismatch",
+ &MEI);
+}
+
static
struct mutex_info*
DRD_(mutex_get_or_allocate)(const Addr mutex, const MutexT mutex_type)
@@ -136,7 +151,13 @@
p = &(DRD_(clientobj_get)(mutex, ClientMutex)->mutex);
if (p)
{
- return p;
+ if (mutex_type == mutex_type_unknown || p->mutex_type == mutex_type)
+ return p;
+ else
+ {
+ wrong_mutex_type(mutex);
+ return 0;
+ }
}
if (DRD_(clientobj_present)(mutex, mutex + 1))
@@ -211,10 +232,11 @@
DRD_(clientobj_remove)(mutex, ClientMutex);
}
-/** Called before pthread_mutex_lock() is invoked. If a data structure for
- * the client-side object was not yet created, do this now. Also check whether
- * an attempt is made to lock recursively a synchronization object that must
- * not be locked recursively.
+/**
+ * Called before pthread_mutex_lock() is invoked. If a data structure for the
+ * client-side object was not yet created, do this now. Also check whether an
+ * attempt is made to lock recursively a synchronization object that must not
+ * be locked recursively.
*/
void DRD_(mutex_pre_lock)(const Addr mutex, MutexT mutex_type,
const Bool trylock)
@@ -222,7 +244,7 @@
struct mutex_info* p;
p = DRD_(mutex_get_or_allocate)(mutex, mutex_type);
- if (mutex_type == mutex_type_unknown)
+ if (p && mutex_type == mutex_type_unknown)
mutex_type = p->mutex_type;
if (s_trace_mutex)
@@ -464,11 +486,8 @@
return "mutex";
case mutex_type_spinlock:
return "spinlock";
- case mutex_type_order_annotation:
- return "order annotation mutex";
- default:
- tl_assert(0);
}
+ tl_assert(0);
return "?";
}
Modified: trunk/drd/drd_rwlock.c
===================================================================
--- trunk/drd/drd_rwlock.c 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_rwlock.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -294,7 +294,10 @@
if (DRD_(clientobj_present)(rwlock, rwlock + 1))
{
- GenericErrInfo GEI = { DRD_(thread_get_running_tid)() };
+ GenericErrInfo GEI = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = rwlock,
+ };
VG_(maybe_record_error)(VG_(get_running_tid)(),
GenericErr,
VG_(get_IP)(VG_(get_running_tid)()),
@@ -358,7 +361,10 @@
p = DRD_(rwlock_get)(rwlock);
if (p == 0)
{
- GenericErrInfo GEI = { DRD_(thread_get_running_tid)() };
+ GenericErrInfo GEI = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = rwlock,
+ };
VG_(maybe_record_error)(VG_(get_running_tid)(),
GenericErr,
VG_(get_IP)(VG_(get_running_tid)()),
@@ -542,7 +548,10 @@
p = DRD_(rwlock_get)(rwlock);
if (p == 0)
{
- GenericErrInfo GEI = { DRD_(thread_get_running_tid)() };
+ GenericErrInfo GEI = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = rwlock,
+ };
VG_(maybe_record_error)(VG_(get_running_tid)(),
GenericErr,
VG_(get_IP)(VG_(get_running_tid)()),
Modified: trunk/drd/drd_semaphore.c
===================================================================
--- trunk/drd/drd_semaphore.c 2010-03-07 10:48:34 UTC (rev 11072)
+++ trunk/drd/drd_semaphore.c 2010-03-07 10:54:21 UTC (rev 11073)
@@ -237,7 +237,10 @@
if (p == 0)
{
- GenericErrInfo GEI = { DRD_(thread_get_running_tid)() };
+ GenericErrInfo GEI = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = semaphore,
+ };
VG_(maybe_record_error)(VG_(get_running_tid)(),
GenericErr,
VG_(get_IP)(VG_(get_running_tid)()),
@@ -314,7 +317,10 @@
if (p == 0)
{
- GenericErrInfo GEI = { DRD_(thread_get_running_tid)() };
+ GenericErrInfo GEI = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = semaphore,
+ };
VG_(maybe_record_error)(VG_(get_running_tid)(),
GenericErr,
VG_(get_IP)(VG_(get_running_tid)()),
|
|
From: <sv...@va...> - 2010-03-07 10:48:41
|
Author: bart Date: 2010-03-07 10:48:34 +0000 (Sun, 07 Mar 2010) New Revision: 11072 Log: Updated Subversion ignore list. Modified: trunk/drd/tests/ Property changes on: trunk/drd/tests ___________________________________________________________________ Name: svn:ignore - *.dSYM *.stderr.diff* *.stderr.out *.stdout.diff* *.stdout.out .deps Makefile Makefile.in annotate_ignore_rw annotate_ignore_write annotate_publish_hg annotate_rwlock annotate_smart_pointer atomic_var bar_bad bar_trivial boost_thread circular_buffer custom_alloc drd_bitmap_test fp_race hg01_all_ok hg02_deadlock hg03_inherit hg04_race hg05_race2 hg06_readshared hold_lock linuxthreads_det matinv memory_allocation monitor_example new_delete omp_matinv omp_prime omp_printf pth_barrier pth_barrier_race pth_barrier_reinit pth_broadcast pth_cancel_locked pth_cleanup_handler pth_cond_race pth_create_chain pth_create_glibc_2_0 pth_detached pth_detached_sem pth_inconsistent_cond_wait pth_mutex_reinit pth_process_shared_mutex pth_spinlock qt4_atomic qt4_mutex qt4_rwlock qt4_semaphore recursive_mutex rwlock_race rwlock_test rwlock_type_checking sem_as_mutex sem_open sigalrm tc01_simple_race tc02_simple_tls tc03_re_excl tc04_free_lock tc05_simple_race tc06_two_races tc07_hbl1 tc08_hbl2 tc09_bad_unlock tc10_rec_lock tc11_XCHG tc12_rwl_trivial tc13_laog1 tc15_laog_lockdel tc16_byterace tc17_sembar tc18_semabuse tc19_shadowmem tc20_verifywrap tc21_pthonce tc22_exit_w_lock tc23_bogus_condwait tc24_nonzero_sem thread_name trylock tsan_unittest unit_bitmap unit_vc vg_regtest.tmp* + *.dSYM *.stderr.diff* *.stderr.out *.stdout.diff* *.stdout.out .deps Makefile Makefile.in annotate_hb_err annotate_ignore_rw annotate_ignore_write annotate_publish_hg annotate_rwlock annotate_smart_pointer atomic_var bar_bad bar_trivial boost_thread circular_buffer custom_alloc drd_bitmap_test fp_race hg01_all_ok hg02_deadlock hg03_inherit hg04_race hg05_race2 hg06_readshared hold_lock linuxthreads_det matinv memory_allocation monitor_example new_delete omp_matinv omp_prime omp_printf pth_barrier pth_barrier_race pth_barrier_reinit pth_broadcast pth_cancel_locked pth_cleanup_handler pth_cond_race pth_create_chain pth_create_glibc_2_0 pth_detached pth_detached_sem pth_inconsistent_cond_wait pth_mutex_reinit pth_process_shared_mutex pth_spinlock qt4_atomic qt4_mutex qt4_rwlock qt4_semaphore recursive_mutex rwlock_race rwlock_test rwlock_type_checking sem_as_mutex sem_open sigalrm tc01_simple_race tc02_simple_tls tc03_re_excl tc04_free_lock tc05_simple_race tc06_two_races tc07_hbl1 tc08_hbl2 tc09_bad_unlock tc10_rec_lock tc11_XCHG tc12_rwl_trivial tc13_laog1 tc15_laog_lockdel tc16_byterace tc17_sembar tc18_semabuse tc19_shadowmem tc20_verifywrap tc21_pthonce tc22_exit_w_lock tc23_bogus_condwait tc24_nonzero_sem thread_name trylock tsan_unittest unit_bitmap unit_vc vg_regtest.tmp* |
|
From: <sv...@va...> - 2010-03-07 10:48:08
|
Author: bart Date: 2010-03-07 10:47:59 +0000 (Sun, 07 Mar 2010) New Revision: 11071 Log: Updated Makefile.am. Modified: trunk/drd/tests/Makefile.am Modified: trunk/drd/tests/Makefile.am =================================================================== --- trunk/drd/tests/Makefile.am 2010-03-07 10:47:32 UTC (rev 11070) +++ trunk/drd/tests/Makefile.am 2010-03-07 10:47:59 UTC (rev 11071) @@ -14,6 +14,8 @@ tsan_thread_wrappers_pthread.h EXTRA_DIST = \ + annotate_hb_err.stderr.exp \ + annotate_hb_err.vgtest \ annotate_hbefore.stderr.exp \ annotate_hbefore.vgtest \ annotate_order_1.stderr.exp \ @@ -24,6 +26,8 @@ annotate_order_3.vgtest \ annotate_publish_hg.stderr.exp \ annotate_publish_hg.vgtest \ + annotate_smart_pointer.stderr.exp \ + annotate_smart_pointer.vgtest \ annotate_spinlock.stderr.exp \ annotate_spinlock.vgtest \ annotate_rwlock.stderr.exp \ @@ -244,6 +248,7 @@ check_PROGRAMS = \ + annotate_hb_err \ annotate_ignore_rw \ annotate_ignore_write \ annotate_publish_hg \ |
|
From: <sv...@va...> - 2010-03-07 10:47:39
|
Author: bart Date: 2010-03-07 10:47:32 +0000 (Sun, 07 Mar 2010) New Revision: 11070 Log: Added the necessary files to run the smart pointer test program as a regression test. Added: trunk/drd/tests/annotate_smart_pointer.stderr.exp trunk/drd/tests/annotate_smart_pointer.vgtest Added: trunk/drd/tests/annotate_smart_pointer.stderr.exp =================================================================== --- trunk/drd/tests/annotate_smart_pointer.stderr.exp (rev 0) +++ trunk/drd/tests/annotate_smart_pointer.stderr.exp 2010-03-07 10:47:32 UTC (rev 11070) @@ -0,0 +1,4 @@ + +Done. + +ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) Added: trunk/drd/tests/annotate_smart_pointer.vgtest =================================================================== --- trunk/drd/tests/annotate_smart_pointer.vgtest (rev 0) +++ trunk/drd/tests/annotate_smart_pointer.vgtest 2010-03-07 10:47:32 UTC (rev 11070) @@ -0,0 +1,5 @@ +prereq: test -e annotate_smart_pointer && ./supported_libpthread +vgopts: --read-var-info=yes --check-stack-var=yes --show-confl-seg=no +prog: annotate_smart_pointer +args: 50 5 +stderr_filter: filter_stderr_and_thread_no |
|
From: <sv...@va...> - 2010-03-07 10:46:51
|
Author: bart
Date: 2010-03-07 10:46:43 +0000 (Sun, 07 Mar 2010)
New Revision: 11069
Log:
Added a test program that triggers several happens-before usage errors.
Added:
trunk/drd/tests/annotate_hb_err.c
trunk/drd/tests/annotate_hb_err.stderr.exp
trunk/drd/tests/annotate_hb_err.vgtest
Added: trunk/drd/tests/annotate_hb_err.c
===================================================================
--- trunk/drd/tests/annotate_hb_err.c (rev 0)
+++ trunk/drd/tests/annotate_hb_err.c 2010-03-07 10:46:43 UTC (rev 11069)
@@ -0,0 +1,53 @@
+/* Test program that triggers several happens-before usage errors. */
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <pthread.h>
+#include "unified_annotations.h"
+
+
+int main(int argc, char** argv)
+{
+ pthread_mutex_t m;
+ pthread_cond_t cv;
+ int i[64];
+
+ pthread_mutex_init(&m, NULL);
+ pthread_cond_init(&cv, NULL);
+
+ /* happens-after without preceding happens-before. */
+ ANNOTATE_HAPPENS_AFTER(&i);
+
+ /* happens-after on a mutex. */
+ ANNOTATE_HAPPENS_BEFORE(&m);
+
+ /* happens-after on a condition variable. */
+ ANNOTATE_HAPPENS_BEFORE(&cv);
+
+ /* condition variable operation on a h.b. annotated object. */
+ ANNOTATE_HAPPENS_BEFORE(&i);
+ pthread_cond_init((pthread_cond_t*)&i, NULL);
+
+ /* The sequence below is fine. */
+ ANNOTATE_HAPPENS_DONE(&i);
+ ANNOTATE_HAPPENS_BEFORE(&i);
+ ANNOTATE_HAPPENS_AFTER(&i);
+ ANNOTATE_HAPPENS_DONE(&i);
+ ANNOTATE_HAPPENS_BEFORE(&i);
+ ANNOTATE_HAPPENS_DONE(&i);
+
+ /* happens-before after happens-after without intervening happens-done. */
+ ANNOTATE_HAPPENS_BEFORE(&i);
+ ANNOTATE_HAPPENS_AFTER(&i);
+ ANNOTATE_HAPPENS_BEFORE(&i);
+
+ fprintf(stderr, "Done.\n");
+ return 0;
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 2
+ * End:
+ */
Added: trunk/drd/tests/annotate_hb_err.stderr.exp
===================================================================
--- trunk/drd/tests/annotate_hb_err.stderr.exp (rev 0)
+++ trunk/drd/tests/annotate_hb_err.stderr.exp 2010-03-07 10:46:43 UTC (rev 11069)
@@ -0,0 +1,36 @@
+
+missing happens-before annotation
+ at 0x........: vgDrdCl_annotate_happens_after (drd.h:?)
+ by 0x........: main (annotate_hb_err.c:?)
+
+wrong type of synchronization object
+ at 0x........: vgDrdCl_annotate_happens_before (drd.h:?)
+ by 0x........: main (annotate_hb_err.c:?)
+mutex 0x........ was first observed at:
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_err.c:?)
+
+wrong type of synchronization object
+ at 0x........: vgDrdCl_annotate_happens_before (drd.h:?)
+ by 0x........: main (annotate_hb_err.c:?)
+cond 0x........ was first observed at:
+ at 0x........: pthread_cond_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_err.c:?)
+
+wrong type of synchronization object
+ at 0x........: pthread_cond_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (annotate_hb_err.c:?)
+order annotation 0x........ was first observed at:
+ at 0x........: vgDrdCl_annotate_happens_before (drd.h:?)
+ by 0x........: main (annotate_hb_err.c:?)
+
+happens-before after happens-after
+ at 0x........: vgDrdCl_annotate_happens_before (drd.h:?)
+ by 0x........: main (annotate_hb_err.c:?)
+order annotation 0x........ was first observed at:
+ at 0x........: vgDrdCl_annotate_happens_before (drd.h:?)
+ by 0x........: main (annotate_hb_err.c:?)
+
+Done.
+
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
Added: trunk/drd/tests/annotate_hb_err.vgtest
===================================================================
--- trunk/drd/tests/annotate_hb_err.vgtest (rev 0)
+++ trunk/drd/tests/annotate_hb_err.vgtest 2010-03-07 10:46:43 UTC (rev 11069)
@@ -0,0 +1,4 @@
+prereq: test -e annotate_hb_err && ./supported_libpthread
+vgopts: --read-var-info=yes --check-stack-var=yes --show-confl-seg=no
+prog: annotate_hb_err
+stderr_filter: filter_stderr_and_thread_no
|
|
From: <sv...@va...> - 2010-03-07 10:44:54
|
Author: bart Date: 2010-03-07 10:44:46 +0000 (Sun, 07 Mar 2010) New Revision: 11068 Log: Added a definition for a new annotation: ANNOTATE_HAPPENS_DONE(). Modified: trunk/drd/drd.h Modified: trunk/drd/drd.h =================================================================== --- trunk/drd/drd.h 2010-03-07 10:42:15 UTC (rev 11067) +++ trunk/drd/drd.h 2010-03-07 10:44:46 UTC (rev 11068) @@ -90,29 +90,34 @@ /** * @defgroup RaceDetectionAnnotations Data race detection annotations. * - * @see See also the source file <a href="http://code.google.com/p/google-perftools/source/browse/trunk/src/base/dynamic_annotations.h">dynamic_annotations.h</a> + * @see See also the source file <a href="http://code.google.com/p/data-race-test/source/browse/trunk/dynamic_annotations/dynamic_annotations.h</a> + * in the ThreadSanitizer project. */ /*@{*/ /** - * Tell DRD to insert a mark. addr is the address of an object that is not a - * pthread synchronization object. Inserting two 'happens before' annotations - * while no thread has passed by a 'happens after' annotation is an error. + * Tell DRD to insert a happens-before mark. addr is the address of an object + * that is not a pthread synchronization object. */ #define ANNOTATE_HAPPENS_BEFORE(addr) DRDCL_(annotate_happens_before)(addr) /** - * Tell DRD that the memory accesses executed after this annotation will happen - * after the memory accesses performed before the most recent + * Tell DRD that the memory accesses executed after this annotation will + * happen after all memory accesses performed before all preceding * ANNOTATE_HAPPENS_BEFORE(addr). addr is the address of an object that is not - * a pthread synchronization object. Inserting a 'happens after' annotation - * before any other thread has passed by a 'happens before' annotation for the + * a pthread synchronization object. Inserting a happens-after annotation + * before any other thread has passed by a happens-before annotation for the * same address is an error. */ #define ANNOTATE_HAPPENS_AFTER(addr) DRDCL_(annotate_happens_after)(addr) /** + * Tell DRD that no more happens-after annotations will follow. + */ +#define ANNOTATE_HAPPENS_DONE(addr) DRDCL_(annotate_happens_done)(addr) + +/** * Tell DRD that waiting on the condition variable at address cv has succeeded * and a lock on the mutex at address mtx is now held. Since DRD always inserts * a happens before relation between the pthread_cond_signal() or @@ -347,14 +352,17 @@ = VG_USERREQ_TOOL_BASE('H','G') + 256 + 32, /* args: Char*. */ - /* Tell DRD to insert a happens before annotation. */ + /* Tell DRD to insert a happens-before annotation. */ VG_USERREQ__DRD_ANNOTATE_HAPPENS_BEFORE = VG_USERREQ_TOOL_BASE('H','G') + 256 + 33, /* args: Addr. */ - /* Tell DRD to insert a happens after annotation. */ + /* Tell DRD to insert a happens-after annotation. */ VG_USERREQ__DRD_ANNOTATE_HAPPENS_AFTER = VG_USERREQ_TOOL_BASE('H','G') + 256 + 34, /* args: Addr. */ + /* Tell DRD to insert a happens-done annotation. */ + VG_USERREQ__DRD_ANNOTATE_HAPPENS_DONE, + /* args: Addr. */ }; @@ -456,6 +464,14 @@ } static __inline__ +void DRDCL_(annotate_happens_done)(const void* const addr) +{ + int res; + VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__DRD_ANNOTATE_HAPPENS_DONE, + addr, 0, 0, 0, 0); +} + +static __inline__ void DRDCL_(annotate_rwlock_create)(const void* const rwlock) { int res; |
|
From: <sv...@va...> - 2010-03-07 10:42:25
|
Author: bart
Date: 2010-03-07 10:42:15 +0000 (Sun, 07 Mar 2010)
New Revision: 11067
Log:
Made the behavior of the annotate_smart_pointer test program configurable
through command-line arguments, and made sure that the annotations present
in the source code are recognized by all Valgrind-based data race detection
tools.
Added:
trunk/drd/tests/unified_annotations.h
Modified:
trunk/drd/tests/annotate_smart_pointer.cpp
Modified: trunk/drd/tests/annotate_smart_pointer.cpp
===================================================================
--- trunk/drd/tests/annotate_smart_pointer.cpp 2010-03-06 19:38:56 UTC (rev 11066)
+++ trunk/drd/tests/annotate_smart_pointer.cpp 2010-03-07 10:42:15 UTC (rev 11067)
@@ -27,7 +27,7 @@
#include <cassert> // assert()
#include <climits> // PTHREAD_STACK_MIN
-#include <iostream> // std::cout
+#include <iostream> // std::cerr
#include <stdlib.h> // atoi()
#ifdef _WIN32
#include <process.h> // _beginthreadex()
@@ -35,9 +35,12 @@
#else
#include <pthread.h> // pthread_mutex_t
#endif
-#include "../../drd/drd.h"
+#include "unified_annotations.h"
+static bool s_enable_annotations = true;
+
+
#ifdef _WIN32
class AtomicInt32
@@ -232,10 +235,15 @@
{
if (m_count_ptr)
{
- ANNOTATE_HAPPENS_BEFORE(m_count_ptr);
+ if (s_enable_annotations)
+ ANNOTATE_HAPPENS_BEFORE(m_count_ptr);
if (--(*m_count_ptr) == 0)
{
- ANNOTATE_HAPPENS_AFTER(m_count_ptr);
+ if (s_enable_annotations)
+ {
+ ANNOTATE_HAPPENS_AFTER(m_count_ptr);
+ ANNOTATE_HAPPENS_DONE(m_count_ptr);
+ }
delete m_ptr;
m_ptr = NULL;
delete m_count_ptr;
@@ -300,17 +308,23 @@
int main(int argc, char** argv)
{
- smart_ptr<counter> p(new counter);
const int nthreads = std::max(argc > 1 ? atoi(argv[1]) : 1, 1);
- Thread T[nthreads];
+ const int iterations = std::max(argc > 2 ? atoi(argv[2]) : 1, 1);
+ s_enable_annotations = argc > 3 ? !!atoi(argv[3]) : true;
- p->post_increment();
- for (int i = 0; i < nthreads; ++i)
- T[i].Create(thread_func, new smart_ptr<counter>(p));
- p = NULL;
- for (int i = 0; i < nthreads; ++i)
- T[i].Join();
- std::cout << "Done.\n";
+ for (int j = 0; j < iterations; ++j)
+ {
+ Thread T[nthreads];
+
+ smart_ptr<counter> p(new counter);
+ p->post_increment();
+ for (int i = 0; i < nthreads; ++i)
+ T[i].Create(thread_func, new smart_ptr<counter>(p));
+ p = NULL;
+ for (int i = 0; i < nthreads; ++i)
+ T[i].Join();
+ }
+ std::cerr << "Done.\n";
return 0;
}
Added: trunk/drd/tests/unified_annotations.h
===================================================================
--- trunk/drd/tests/unified_annotations.h (rev 0)
+++ trunk/drd/tests/unified_annotations.h 2010-03-07 10:42:15 UTC (rev 11067)
@@ -0,0 +1,68 @@
+#ifndef _UNIFIED_ANNOTATIONS_H_
+#define _UNIFIED_ANNOTATIONS_H_
+
+
+#include "../../drd/drd.h"
+
+
+/*
+ * Redefine the happens before/after/done annotation macros such that these
+ * can be intercepted by DRD, Helgrind and ThreadSanitizer. See also
+ * http://code.google.com/p/data-race-test/source/browse/trunk/dynamic_annotations/dynamic_annotations.h
+ */
+#undef ANNOTATE_HAPPENS_BEFORE
+#define ANNOTATE_HAPPENS_BEFORE(addr) \
+ do { \
+ DRDCL_(annotate_happens_before)(addr); \
+ AnnotateCondVarSignal(__FILE__, __LINE__, addr); \
+ } while(0)
+#undef ANNOTATE_HAPPENS_AFTER
+#define ANNOTATE_HAPPENS_AFTER(addr) \
+ do { \
+ DRDCL_(annotate_happens_after)(addr); \
+ AnnotateCondVarWait(__FILE__, __LINE__, addr, NULL); \
+ } while(0)
+#undef ANNOTATE_HAPPENS_DONE
+#define ANNOTATE_HAPPENS_DONE(addr) \
+ do { \
+ DRDCL_(annotate_happens_done)(addr); \
+ } while(0)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+
+void __attribute__((weak,noinline))
+AnnotateCondVarSignal(const char *file, int line, const volatile void *cv)
+{
+ asm("");
+}
+
+void __attribute__((weak,noinline))
+AnnotateCondVarWait(const char *file, int line, const volatile void *cv,
+ const volatile void *lock)
+{
+ asm("");
+}
+
+
+#if 0
+{
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _UNIFIED_ANNOTATIONS_H_ */
+
+/*
+ * Local variables:
+ * c-basic-offset: 2
+ * End:
+ */
|
|
From: Bart V. A. <bar...@gm...> - 2010-03-07 08:21:55
|
Nightly build on cellbuzz-native ( cellbuzz, ppc64, Fedora 7, native ) Started at 2010-03-07 02:00:05 EST Ended at 2010-03-07 03:21:45 EST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... done Regression test results follow == 449 tests, 43 stderr failures, 10 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/linux/timerfd-syscall (stdout) memcheck/tests/linux-syscalls-2007 (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) none/tests/empty-exe (stderr) none/tests/linux/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/round (stdout) none/tests/ppc32/test_gx (stdout) none/tests/ppc64/jm-fp (stdout) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/round (stdout) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) none/tests/shell_zerolength (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/hsg (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) |
|
From: Tom H. <th...@cy...> - 2010-03-07 03:45:16
|
Nightly build on lloyd ( x86_64, Fedora 7 ) Started at 2010-03-07 03:05:10 GMT Ended at 2010-03-07 03:45:06 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 531 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) |
|
From: Tom H. <th...@cy...> - 2010-03-07 03:36:14
|
Nightly build on mg ( x86_64, Fedora 9 ) Started at 2010-03-07 03:10:06 GMT Ended at 2010-03-07 03:36:00 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 538 tests, 2 stderr failures, 0 stdout failures, 0 post failures == helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 538 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sun Mar 7 03:23:08 2010 --- new.short Sun Mar 7 03:36:00 2010 *************** *** 8,10 **** ! == 538 tests, 1 stderr failure, 0 stdout failures, 0 post failures == helgrind/tests/tc06_two_races_xml (stderr) --- 8,11 ---- ! == 538 tests, 2 stderr failures, 0 stdout failures, 0 post failures == ! helgrind/tests/pth_spinlock (stderr) helgrind/tests/tc06_two_races_xml (stderr) |