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
(33) |
2
(15) |
3
(20) |
4
(22) |
5
(13) |
|
6
(12) |
7
(32) |
8
(17) |
9
(31) |
10
(21) |
11
(7) |
12
(13) |
|
13
(13) |
14
(12) |
15
(10) |
16
(8) |
17
(7) |
18
(28) |
19
(5) |
|
20
(5) |
21
(7) |
22
(11) |
23
(7) |
24
(13) |
25
(7) |
26
(7) |
|
27
(7) |
28
(15) |
29
(30) |
30
(21) |
31
(6) |
|
|
|
From: Doug E. <dj...@go...> - 2008-07-14 22:04:25
|
Ping. Anyone have any news of progress on adding a gdb stub (or variation thereof) to valgrind? On Fri, Mar 14, 2008 at 5:22 PM, Philippe Waroquiers <phi...@sk...> wrote: > > ----- Original Message ----- From: "Doug Evans" <dj...@go...> > To: <val...@li...> > Sent: Saturday, March 15, 2008 12:35 AM > Subject: [Valgrind-developers] gdb stub support > > >> Hi. I've found a couple of references to work on adding a gdb stub to >> valgrind but I don't see anything in the repository. What's the state >> of this work and is there any source I can play with. [I've hacked on >> gdb and written gdb stubs in the past and am interested in helping >> out.] > > Hello Doug, > > I started working on this in February, and obtained a "basic" working gdb > stub. > For more details about the current state, see my post of 17 Feb 2008. > All this work was done based on valgrind 3.3.0, using gdbserver code from > gdb 6.7.. > > I have been (privately) contacted by someone telling that a contribution of > a port (and a stub > more complete than what I did) should be contributed soon. Since then, I > have put this > work on hold, waiting for the above to be integrated, and continue based on > that (e.g. to > implement breakpoints which are done neither in what I did, nor in what > should be contributed > soon). > > That was more than one month ago but it has not yet materialised (all the > legal paper takes time, I guess). > If the port and stub is not contributed (for whatever reason), then I can > provide > the state I have reached as a starting point. > > However, for this: > * I suppose some papers have to be signed (?) > * I suppose some patch files have to be then prepared > * and someone with write access has to put it in the repository (in a > branch I guess) > > Note that the changes I did in the valgrind code are relatively small > (something like > 150 lines added/changed to add a few basic "lib" services needed for > gdbserver stub). > The gdbserver code itself is bigger (a few thousands lines from the > gdbserver directory > "converted" to run under valgrind). > > I am not sure that the approach I have taken (which is to convert the > gdbserver code to valgrind) > is more appropriate than just starting from scratch : the gdbserver code is > very general, and so, > contains code which is not necessarily useful in a valgrind context. > > I have not done anything about breakpoints implementation, but I am now > thinking that the correct implementation > is to add a special "trap" instruction in the vex IR (but I had no time to > dig more). Not clear to me if this would work > for single step. > > Any feedback about the above points is welcome > > (and of course, some news about the "to be contributed" would be very > useful) > > Philippe > > > |
|
From: Ivan J. <aij...@an...> - 2008-07-14 18:52:04
|
Oops, I should have sent this a bit earlier and might have saved you some
trouble. I've been doing a little work on guest-arm. (I'm working on a
project that only uses the guest side of VEX, and my boss suddenly wants
ARM support.)
Anyways, I got it to compile, then had to change some things so the IR
would typecheck, and fixed at least one obvious bug. (Did the SSA
requirement get added after the ARM port started to bitrot?) The obvious
bug I found was that when translating ldb, it would load 1 byte from
memory, but then it would only write 1 byte to the register, rather than
zero extending it like the ARM doc says.
Anyways, I attached the diff of what I currently have. It obviously needs
some cleanup, but I figured if you're working on it, I should send it
right
away.
A few random thoughts:
It seems like ARM wouldn't need CC_OP and CC_DEP{1,2} like x86. The reason
it exists for x86 is to avoid computing the condition codes when they
wouldn't be needed. On ARM, each insturction can specify whether or not it
updates the CCs, and gcc at least seems to be smart enough to only update
them when subsequent instructions will depend on them.
ARM made some backwards incompatible changes between v4, v5, and v6. The
current code seems to aimed at v4 and v5, complaining where they are
different. What is your plan for dealing with the different versions?
I won't complain if you want to do all the work on the ARM port, :) but I
could continue to work on the guest side for a while.
Ivan
On Fri, 11 Jul 2008, Evan Geller wrote:
> First, I'm taking over the ARM port. I've got LibVEX working on small
> simple blocks of code.
>
> Second, how do I use the test_main.c/vex utility in the valgrind/VEX
> directory? It seems to be undocumented. I've just been writing my own
> test utils.
>
> -------------------------------------------------------------------------
> Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
> Studies have shown that voting for your favorite open source project,
> along with a healthy diet, reduces your potential for chronic lameness
> and boredom. Vote Now at http://www.sourceforge.net/community/cca08
> _______________________________________________
> Valgrind-developers mailing list
> Val...@li...
> https://lists.sourceforge.net/lists/listinfo/valgrind-developers
>
> |
|
From: <sv...@va...> - 2008-07-14 12:47:28
|
Author: bart
Date: 2008-07-14 13:47:34 +0100 (Mon, 14 Jul 2008)
New Revision: 8438
Log:
- Removed reference counting mechanism from bitmap implementation. The
bitmap implementation is now simpler. The performance impact of this
change is minimal.
- Modified prototype of bitmap computation function (argument of bm_new_cb()).
- Added bm_xor().
- Removed some unused code from drd/drd_thread.c.
- Fixed bug in drd/tests/drd_bitmap_test.c.
Modified:
branches/DRDDEV/drd/drd_bitmap.c
branches/DRDDEV/drd/drd_bitmap.h
branches/DRDDEV/drd/drd_main.c
branches/DRDDEV/drd/drd_segment.c
branches/DRDDEV/drd/drd_thread.c
branches/DRDDEV/drd/pub_drd_bitmap.h
branches/DRDDEV/drd/scripts/run-splash2
branches/DRDDEV/drd/tests/drd_bitmap_test.c
Modified: branches/DRDDEV/drd/drd_bitmap.c
===================================================================
--- branches/DRDDEV/drd/drd_bitmap.c 2008-07-14 09:58:38 UTC (rev 8437)
+++ branches/DRDDEV/drd/drd_bitmap.c 2008-07-14 12:47:34 UTC (rev 8438)
@@ -59,7 +59,7 @@
* @param compute_bitmap2 Callback function for computing the actual bitmap
* data.
*/
-struct bitmap* bm_new_cb(struct bitmap2* (*compute_bitmap2)(UWord))
+struct bitmap* bm_new_cb(void (*compute_bitmap2)(UWord, struct bitmap2*))
{
unsigned i;
struct bitmap* bm;
@@ -89,25 +89,8 @@
void bm_delete(struct bitmap* const bm)
{
- struct bitmap2* bm2;
- struct bitmap2ref* bm2ref;
-
tl_assert(bm);
- VG_(OSetGen_ResetIter)(bm->oset);
- for ( ; (bm2ref = VG_(OSetGen_Next)(bm->oset)) != 0; )
- {
- bm2 = bm2ref->bm2;
- if (bm2)
- {
- tl_assert(bm2->refcnt >= 1);
- if (--bm2->refcnt == 0)
- {
- VG_(free)(bm2);
- }
- }
- }
-
VG_(OSetGen_Destroy)(bm->oset);
VG_(free)(bm);
}
@@ -715,9 +698,7 @@
Bool bm_equal(struct bitmap* const lhs, struct bitmap* const rhs)
{
struct bitmap2* bm2l;
- struct bitmap2ref* bm2l_ref;
struct bitmap2* bm2r;
- const struct bitmap2ref* bm2r_ref;
/* It's not possible to have two independent iterators over the same OSet, */
/* so complain if lhs == rhs. */
@@ -726,18 +707,16 @@
VG_(OSetGen_ResetIter)(lhs->oset);
VG_(OSetGen_ResetIter)(rhs->oset);
- for ( ; (bm2l_ref = VG_(OSetGen_Next)(lhs->oset)) != 0; )
+ for ( ; (bm2l = VG_(OSetGen_Next)(lhs->oset)) != 0; )
{
- while (bm2l_ref
- && (bm2l = bm2l_ref->bm2)
- && bm2l
+ while (bm2l
&& ! bm_has_any_access(lhs,
make_address(bm2l->addr, 0),
make_address(bm2l->addr + 1, 0)))
{
- bm2l_ref = VG_(OSetGen_Next)(lhs->oset);
+ bm2l = VG_(OSetGen_Next)(lhs->oset);
}
- if (bm2l_ref == 0)
+ if (bm2l == 0)
break;
tl_assert(bm2l);
#if 0
@@ -745,15 +724,14 @@
make_address(bm2l->addr, 0));
#endif
- bm2r_ref = VG_(OSetGen_Next)(rhs->oset);
- if (bm2r_ref == 0)
+ bm2r = VG_(OSetGen_Next)(rhs->oset);
+ if (bm2r == 0)
{
#if 0
VG_(message)(Vg_DebugMsg, "bm_equal: no match found");
#endif
return False;
}
- bm2r = bm2r_ref->bm2;
tl_assert(bm2r);
tl_assert(bm_has_any_access(rhs,
make_address(bm2r->addr, 0),
@@ -794,37 +772,59 @@
}
/** Merge bitmaps *lhs and *rhs into *lhs. */
-void bm_merge2(struct bitmap* const lhs,
- struct bitmap* const rhs)
+void bm_merge(struct bitmap* const lhs, struct bitmap* const rhs)
{
struct bitmap2* bm2l;
- struct bitmap2ref* bm2l_ref;
struct bitmap2* bm2r;
- const struct bitmap2ref* bm2r_ref;
+ /* It's not possible to have two independent iterators over the same OSet, */
+ /* so complain if lhs == rhs. */
+ tl_assert(lhs != rhs);
+
VG_(OSetGen_ResetIter)(rhs->oset);
- for ( ; (bm2r_ref = VG_(OSetGen_Next)(rhs->oset)) != 0; )
+ for ( ; (bm2r = VG_(OSetGen_Next)(rhs->oset)) != 0; )
{
- bm2r = bm2r_ref->bm2;
- bm2l_ref = VG_(OSetGen_Lookup)(lhs->oset, &bm2r->addr);
- if (bm2l_ref)
+ bm2l = VG_(OSetGen_Lookup)(lhs->oset, &bm2r->addr);
+ if (bm2l)
{
- bm2l = bm2l_ref->bm2;
- if (bm2l != bm2r)
- {
- if (bm2l->refcnt > 1)
- bm2l = bm2_make_exclusive(lhs, bm2l_ref);
- bm2_merge(bm2l, bm2r);
- }
+ tl_assert(bm2l != bm2r);
+ bm2_merge(bm2l, bm2r);
}
else
{
- bm2_insert_addref(lhs, bm2r);
+ bm2_insert_copy(lhs, bm2r);
}
}
}
+/** Compute *lhs ^= *rhs. */
+void bm_xor(struct bitmap* const lhs, struct bitmap* const rhs)
+{
+ struct bitmap2* bm2l;
+ struct bitmap2* bm2r;
+
+ /* It's not possible to have two independent iterators over the same OSet, */
+ /* so complain if lhs == rhs. */
+ tl_assert(lhs != rhs);
+
+ VG_(OSetGen_ResetIter)(rhs->oset);
+
+ for ( ; (bm2r = VG_(OSetGen_Next)(rhs->oset)) != 0; )
+ {
+ bm2l = VG_(OSetGen_Lookup)(lhs->oset, &bm2r->addr);
+ if (bm2l)
+ {
+ tl_assert(bm2l != bm2r);
+ bm2_xor(bm2l, bm2r);
+ }
+ else
+ {
+ bm2_insert_copy(lhs, bm2r);
+ }
+ }
+}
+
/**
* Report whether there are any RW / WR / WW patterns in lhs and rhs.
* @param lhs First bitmap.
@@ -839,24 +839,20 @@
for (;;)
{
- const struct bitmap2ref* bm2l_ref;
- const struct bitmap2ref* bm2r_ref;
const struct bitmap2* bm2l;
const struct bitmap2* bm2r;
const struct bitmap1* bm1l;
const struct bitmap1* bm1r;
unsigned k;
- bm2l_ref = VG_(OSetGen_Next)(lhs->oset);
- bm2l = bm2l_ref->bm2;
- bm2r_ref = VG_(OSetGen_Next)(rhs->oset);
- bm2r = bm2r_ref->bm2;
+ bm2l = VG_(OSetGen_Next)(lhs->oset);
+ bm2r = VG_(OSetGen_Next)(rhs->oset);
while (bm2l && bm2r && bm2l->addr != bm2r->addr)
{
if (bm2l->addr < bm2r->addr)
- bm2l = (bm2l_ref = VG_(OSetGen_Next)(lhs->oset))->bm2;
+ bm2l = VG_(OSetGen_Next)(lhs->oset);
else
- bm2r = (bm2r_ref = VG_(OSetGen_Next)(rhs->oset))->bm2;
+ bm2r = VG_(OSetGen_Next)(rhs->oset);
}
if (bm2l == 0 || bm2r == 0)
break;
@@ -887,13 +883,13 @@
void bm_print(struct bitmap* const bm)
{
- struct bitmap2ref* bm2ref;
+ struct bitmap2* bm2;
for (VG_(OSetGen_ResetIter)(bm->oset);
- (bm2ref = VG_(OSetGen_Next)(bm->oset)) != 0;
+ (bm2 = VG_(OSetGen_Next)(bm->oset)) != 0;
)
{
- bm2_print(bm2ref->bm2);
+ bm2_print(bm2);
}
}
@@ -926,35 +922,11 @@
return s_bitmap_creation_count;
}
-ULong bm_get_bitmap2_node_creation_count(void)
-{
- return s_bitmap2_node_creation_count;
-}
-
ULong bm_get_bitmap2_creation_count(void)
{
return s_bitmap2_creation_count;
}
-/** Allocate a second level bitmap.
- *
- * @param a1 address_msb(client address).
- *
- * @note This function does not initialize the bitmap itself !!
- */
-struct bitmap2* bm2_new(const UWord a1)
-{
- struct bitmap2* bm2;
-
- bm2 = VG_(malloc)(sizeof(*bm2));
- bm2->addr = a1;
- bm2->refcnt = 1;
-
- s_bitmap2_creation_count++;
-
- return bm2;
-}
-
/** Clear the bitmap contents. */
void bm2_clear(struct bitmap2* const bm2)
{
@@ -962,56 +934,40 @@
VG_(memset)(&bm2->bm1, 0, sizeof(bm2->bm1));
}
-/** Make a copy of a shared second level bitmap such that the copy can be
- * modified.
- *
- * @param bm bitmap pointer.
- * @param bm2ref pointer to pointer to the second level bitmap.
- */
-static
-struct bitmap2* bm2_make_exclusive(struct bitmap* const bm,
- struct bitmap2ref* const bm2ref)
+/** Compute *bm2l |= *bm2r. */
+void bm2_merge(struct bitmap2* const bm2l, const struct bitmap2* const bm2r)
{
- UWord a1;
- struct bitmap2* bm2;
- struct bitmap2* bm2_copy;
+ unsigned k;
- tl_assert(bm);
- tl_assert(bm2ref);
- bm2 = bm2ref->bm2;
- tl_assert(bm2);
- tl_assert(bm2->refcnt > 1);
- bm2->refcnt--;
- tl_assert(bm2->refcnt >= 1);
- a1 = bm2->addr;
- bm2_copy = bm2_new(a1);
- tl_assert(bm2_copy);
- tl_assert(bm2_copy->addr == a1);
- tl_assert(bm2_copy->refcnt == 1);
- VG_(memcpy)(&bm2_copy->bm1, &bm2->bm1, sizeof(bm2->bm1));
- bm2ref->bm2 = bm2_copy;
+ tl_assert(bm2l);
+ tl_assert(bm2r);
+ tl_assert(bm2l->addr == bm2r->addr);
- bm_update_cache(bm, a1, bm2_copy);
-
- return bm2_copy;
+ for (k = 0; k < BITMAP1_UWORD_COUNT; k++)
+ {
+ bm2l->bm1.bm0_r[k] |= bm2r->bm1.bm0_r[k];
+ }
+ for (k = 0; k < BITMAP1_UWORD_COUNT; k++)
+ {
+ bm2l->bm1.bm0_w[k] |= bm2r->bm1.bm0_w[k];
+ }
}
-/** Compute *bm2l |= *bm2r. */
-void bm2_merge(struct bitmap2* const bm2l, const struct bitmap2* const bm2r)
+/** Compute *bm2l ^= *bm2r. */
+void bm2_xor(struct bitmap2* const bm2l, const struct bitmap2* const bm2r)
{
unsigned k;
tl_assert(bm2l);
tl_assert(bm2r);
tl_assert(bm2l->addr == bm2r->addr);
- tl_assert(bm2l->refcnt == 1);
for (k = 0; k < BITMAP1_UWORD_COUNT; k++)
{
- bm2l->bm1.bm0_r[k] |= bm2r->bm1.bm0_r[k];
+ bm2l->bm1.bm0_r[k] ^= bm2r->bm1.bm0_r[k];
}
for (k = 0; k < BITMAP1_UWORD_COUNT; k++)
{
- bm2l->bm1.bm0_w[k] |= bm2r->bm1.bm0_w[k];
+ bm2l->bm1.bm0_w[k] ^= bm2r->bm1.bm0_w[k];
}
}
Modified: branches/DRDDEV/drd/drd_bitmap.h
===================================================================
--- branches/DRDDEV/drd/drd_bitmap.h 2008-07-14 09:58:38 UTC (rev 8437)
+++ branches/DRDDEV/drd/drd_bitmap.h 2008-07-14 12:47:34 UTC (rev 8438)
@@ -177,7 +177,6 @@
/* Local variables. */
static ULong s_bitmap2_creation_count;
-static ULong s_bitmap2_node_creation_count;
@@ -219,7 +218,7 @@
#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
tl_assert(size > 0);
tl_assert(address_msb(make_address(0, a)) == 0);
- tl_assert(address_msb(make_address(0, a + size)) == 0);
+ tl_assert(address_msb(make_address(0, a + size - 1)) == 0);
tl_assert(uword_msb(a) == uword_msb(a + size - 1));
#endif
bm0[uword_msb(a)]
@@ -242,7 +241,7 @@
#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
tl_assert(size > 0);
tl_assert(address_msb(make_address(0, a)) == 0);
- tl_assert(address_msb(make_address(0, a + size)) == 0);
+ tl_assert(address_msb(make_address(0, a + size - 1)) == 0);
tl_assert(uword_msb(a) == uword_msb(a + size - 1));
#endif
bm0[uword_msb(a)] &= ~(((UWord)1 << size) - 1) << uword_lsb(a);
@@ -264,7 +263,7 @@
#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
tl_assert(size > 0);
tl_assert(address_msb(make_address(0, a)) == 0);
- tl_assert(address_msb(make_address(0, a + size)) == 0);
+ tl_assert(address_msb(make_address(0, a + size - 1)) == 0);
tl_assert(uword_msb(a) == uword_msb(a + size - 1));
#endif
return (bm0[uword_msb(a)] & ((((UWord)1 << size) - 1) << uword_lsb(a)));
@@ -281,17 +280,9 @@
struct bitmap2
{
Addr addr; ///< address_msb(...)
- int refcnt;
struct bitmap1 bm1;
};
-/* One node of bitmap::oset. */
-struct bitmap2ref
-{
- Addr addr; ///< address_msb(...)
- struct bitmap2* bm2;
-};
-
struct bm_cache_elem
{
Addr a1;
@@ -305,19 +296,15 @@
{
struct bm_cache_elem cache[N_CACHE_ELEM];
OSet* oset;
- struct bitmap2* (*compute_bitmap2)(const UWord a1);
+ void (*compute_bitmap2)(const UWord a1, struct bitmap2* bm2);
};
-static struct bitmap2* bm2_make_exclusive(struct bitmap* const bm,
- struct bitmap2ref* const bm2ref);
static __inline__
-void bm2_insert_empty(struct bitmap* const bm, const UWord a1);
-static __inline__
-struct bitmap2* bm2_insert_addref(struct bitmap* const bm,
- struct bitmap2* const bm2);
+struct bitmap2* bm2_insert(struct bitmap* const bm, const UWord a1);
+
/** Rotate elements cache[0..n-1] such that the element at position n-1 is
* moved to position 0. This allows to speed up future cache lookups.
*/
@@ -473,8 +460,7 @@
static __inline__
const struct bitmap2* bm2_lookup(struct bitmap* const bm, const UWord a1)
{
- struct bitmap2* bm2;
- struct bitmap2ref* bm2ref;
+ struct bitmap2* bm2;
#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
tl_assert(bm);
@@ -482,29 +468,19 @@
if (! bm_cache_lookup(bm, a1, &bm2))
{
- bm2ref = VG_(OSetGen_Lookup)(bm->oset, &a1);
- if (bm2ref)
+ bm2 = VG_(OSetGen_Lookup)(bm->oset, &a1);
+ if (bm2 == 0 && bm->compute_bitmap2)
{
- bm2 = bm2ref->bm2;
- }
- else if (bm->compute_bitmap2)
- {
+ bm2 = bm2_insert(bm, a1);
+ bm2_clear(bm2);
/* Compute the second-level bitmap, and insert the pointer to the
* computed bitmap. Note: this pointer may be NULL. */
- bm2 = (*bm->compute_bitmap2)(a1);
- if (bm2)
- {
- tl_assert(bm2->refcnt == 1);
- bm2->refcnt--;
- return bm2_insert_addref(bm, bm2);
- }
- else
- {
- bm2_insert_empty(bm, a1);
- return NULL;
- }
+ (*bm->compute_bitmap2)(a1, bm2);
}
- bm_update_cache(bm, a1, bm2);
+ else
+ {
+ bm_update_cache(bm, a1, bm2);
+ }
}
return bm2;
}
@@ -519,7 +495,6 @@
struct bitmap2*
bm2_lookup_exclusive(struct bitmap* const bm, const UWord a1)
{
- struct bitmap2ref* bm2ref;
struct bitmap2* bm2;
#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
@@ -527,41 +502,15 @@
tl_assert(bm->compute_bitmap2 == 0);
#endif
- bm2ref = 0;
- if (bm_cache_lookup(bm, a1, &bm2))
+ if (! bm_cache_lookup(bm, a1, &bm2))
{
- if (bm2 == 0)
- return 0;
- if (bm2->refcnt > 1)
- {
- bm2ref = VG_(OSetGen_Lookup)(bm->oset, &a1);
- }
+ bm2 = VG_(OSetGen_Lookup)(bm->oset, &a1);
}
- else
- {
- bm2ref = VG_(OSetGen_Lookup)(bm->oset, &a1);
- if (bm2ref == 0)
- return 0;
- bm2 = bm2ref->bm2;
- }
-#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- tl_assert(bm2);
-#endif
-
- if (bm2->refcnt > 1)
- {
-#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- tl_assert(bm2ref);
-#endif
- bm2 = bm2_make_exclusive(bm, bm2ref);
- }
-
return bm2;
}
-/** Insert a new node in bitmap bm for the address a1. The returned second
- * level bitmap has reference count one and hence may be modified.
+/** Insert an uninitialized second level bitmap for the address a1.
*
* @param bm bitmap pointer.
* @param a1 client address shifted right by ADDR_LSB_BITS.
@@ -569,78 +518,32 @@
static __inline__
struct bitmap2* bm2_insert(struct bitmap* const bm, const UWord a1)
{
- struct bitmap2ref* bm2ref;
struct bitmap2* bm2;
#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
tl_assert(bm);
#endif
- s_bitmap2_node_creation_count++;
- bm2ref = VG_(OSetGen_AllocNode)(bm->oset, sizeof(*bm2ref));
- bm2ref->addr = a1;
- bm2 = bm2_new(a1);
- bm2_clear(bm2);
- bm2ref->bm2 = bm2;
- VG_(OSetGen_Insert)(bm->oset, bm2ref);
-
- bm_update_cache(bm, a1, bm2);
+ s_bitmap2_creation_count++;
- return bm2;
-}
+ bm2 = VG_(OSetGen_AllocNode)(bm->oset, sizeof(*bm2));
+ bm2->addr = a1;
+ VG_(OSetGen_Insert)(bm->oset, bm2);
-/** Insert a new node in bitmap bm that points to the second level bitmap
- * *bm2. This means that *bm2 becomes shared over two or more bitmaps.
- *
- * @param bm bitmap pointer.
- * @param bm2 Second-level bitmap pointer. May be NULL.
- */
-static __inline__
-struct bitmap2* bm2_insert_addref(struct bitmap* const bm,
- struct bitmap2* const bm2)
-{
- struct bitmap2ref* bm2ref;
+ bm_update_cache(bm, a1, bm2);
-#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- tl_assert(bm);
- tl_assert(bm2);
- tl_assert(VG_(OSetGen_Lookup)(bm->oset, &bm2->addr) == 0);
-#endif
-
- s_bitmap2_node_creation_count++;
- bm2ref = VG_(OSetGen_AllocNode)(bm->oset, sizeof(*bm2ref));
- bm2ref->addr = bm2->addr;
- bm2ref->bm2 = bm2;
- bm2->refcnt++;
- VG_(OSetGen_Insert)(bm->oset, bm2ref);
-
- bm_update_cache(bm, bm2->addr, bm2);
-
return bm2;
}
-/** Insert an empty node in bitmap bm.
- *
- * @param bm bitmap pointer.
- * @param a1 client address shifted right by ADDR_LSB_BITS.
- */
static __inline__
-void bm2_insert_empty(struct bitmap* const bm, const UWord a1)
+struct bitmap2* bm2_insert_copy(struct bitmap* const bm,
+ struct bitmap2* const bm2)
{
- struct bitmap2ref* bm2ref;
+ struct bitmap2* bm2_copy;
-#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- tl_assert(bm);
- tl_assert(VG_(OSetGen_Lookup)(bm->oset, &a1) == 0);
-#endif
-
- s_bitmap2_node_creation_count++;
- bm2ref = VG_(OSetGen_AllocNode)(bm->oset, sizeof(*bm2ref));
- bm2ref->addr = a1;
- bm2ref->bm2 = NULL;
- VG_(OSetGen_Insert)(bm->oset, bm2ref);
-
- bm_update_cache(bm, a1, NULL);
+ bm2_copy = bm2_insert(bm, bm2->addr);
+ VG_(memcpy)(&bm2_copy->bm1, &bm2->bm1, sizeof(bm2->bm1));
+ return bm2_copy;
}
/** Look up the address a1 in bitmap bm, and insert it if not found.
@@ -652,7 +555,6 @@
static __inline__
struct bitmap2* bm2_lookup_or_insert(struct bitmap* const bm, const UWord a1)
{
- struct bitmap2ref* bm2ref;
struct bitmap2* bm2;
#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
@@ -665,18 +567,16 @@
if (bm2 == 0)
{
bm2 = bm2_insert(bm, a1);
+ bm2_clear(bm2);
}
}
else
{
- bm2ref = VG_(OSetGen_Lookup)(bm->oset, &a1);
- if (bm2ref)
+ bm2 = VG_(OSetGen_Lookup)(bm->oset, &a1);
+ if (! bm2)
{
- bm2 = bm2ref->bm2;
- }
- else
- {
bm2 = bm2_insert(bm, a1);
+ bm2_clear(bm2);
}
bm_update_cache(bm, a1, bm2);
}
@@ -693,24 +593,7 @@
struct bitmap2* bm2_lookup_or_insert_exclusive(struct bitmap* const bm,
const UWord a1)
{
- struct bitmap2* bm2;
-
-#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- tl_assert(bm);
- tl_assert(bm->compute_bitmap2 == 0);
-#endif
-
- bm2 = (struct bitmap2*)bm2_lookup_or_insert(bm, a1);
-#ifdef ENABLE_DRD_CONSISTENCY_CHECKS
- tl_assert(bm2);
-#endif
- if (bm2->refcnt > 1)
- {
- struct bitmap2ref* bm2ref;
- bm2ref = VG_(OSetGen_Lookup)(bm->oset, &a1);
- bm2 = bm2_make_exclusive(bm, bm2ref);
- }
- return bm2;
+ return bm2_lookup_or_insert(bm, a1);
}
static __inline__
Modified: branches/DRDDEV/drd/drd_main.c
===================================================================
--- branches/DRDDEV/drd/drd_main.c 2008-07-14 09:58:38 UTC (rev 8437)
+++ branches/DRDDEV/drd/drd_main.c 2008-07-14 12:47:34 UTC (rev 8438)
@@ -1208,9 +1208,8 @@
get_semaphore_segment_creation_count(),
get_barrier_segment_creation_count());
VG_(message)(Vg_UserMsg,
- " bitmaps: %lld level 1 / %lld level 2 bitmap refs",
- bm_get_bitmap_creation_count(),
- bm_get_bitmap2_node_creation_count());
+ " bitmaps: %lld level 1",
+ bm_get_bitmap_creation_count());
VG_(message)(Vg_UserMsg,
" and %lld level 2 bitmaps were allocated.",
bm_get_bitmap2_creation_count());
Modified: branches/DRDDEV/drd/drd_segment.c
===================================================================
--- branches/DRDDEV/drd/drd_segment.c 2008-07-14 09:58:38 UTC (rev 8437)
+++ branches/DRDDEV/drd/drd_segment.c 2008-07-14 12:47:34 UTC (rev 8438)
@@ -213,7 +213,7 @@
// Keep sg1->stacktrace.
// Keep sg1->vc.
// Merge sg2->bm into sg1->bm.
- bm_merge2(sg1->bm, sg2->bm);
+ bm_merge(sg1->bm, sg2->bm);
}
void sg_print(const Segment* const sg)
Modified: branches/DRDDEV/drd/drd_thread.c
===================================================================
--- branches/DRDDEV/drd/drd_thread.c 2008-07-14 09:58:38 UTC (rev 8437)
+++ branches/DRDDEV/drd/drd_thread.c 2008-07-14 12:47:34 UTC (rev 8438)
@@ -601,73 +601,6 @@
}
}
-/** Every change in the vector clock of a thread may cause segments that
- * were previously ordered to this thread to become unordered. Hence,
- * it may be necessary to recalculate the conflict set if the vector clock
- * of the current thread is updated. This function check whether such a
- * recalculation is necessary.
- *
- * @param tid Thread ID of the thread to which a new segment has been
- * appended.
- * @param new_sg Pointer to the most recent segment of thread tid.
- */
-static Bool conflict_set_update_needed(const DrdThreadId tid,
- const Segment* const new_sg)
-{
-#if 0
- unsigned i;
- const Segment* old_sg;
-
- tl_assert(new_sg);
-
- /* If a new segment was added to another thread than the running thread, */
- /* just tell the caller to update the conflict set. */
- if (tid != s_drd_running_tid)
- return True;
-
- /* Always let the caller update the conflict set after creation of the */
- /* first segment. */
- old_sg = new_sg->prev;
- if (old_sg == 0)
- return True;
-
- for (i = 0; i < sizeof(s_threadinfo) / sizeof(s_threadinfo[0]); i++)
- {
- Segment* q;
-
- if (i == s_drd_running_tid)
- continue;
-
- for (q = s_threadinfo[i].last; q; q = q->prev)
- {
- /* If the expression below evaluates to false, this expression will */
- /* also evaluate to false for all subsequent iterations. So stop */
- /* iterating. */
- if (vc_lte(&q->vc, &old_sg->vc))
- break;
- /* If the vector clock of the 2nd the last segment is not ordered */
- /* to the vector clock of segment q, and the last segment is, ask */
- /* the caller to update the conflict set. */
- if (! vc_lte(&old_sg->vc, &q->vc))
- {
- return True;
- }
- /* If the vector clock of the last segment is not ordered to the */
- /* vector clock of segment q, ask the caller to update the conflict */
- /* set. */
- if (! vc_lte(&q->vc, &new_sg->vc) && ! vc_lte(&new_sg->vc, &q->vc))
- {
- return True;
- }
- }
- }
-
- return False;
-#else
- return True;
-#endif
-}
-
/** Create a new segment for the specified thread, and discard any segments
* that cannot cause races anymore.
*/
@@ -681,11 +614,8 @@
new_sg = sg_new(tid, tid);
thread_append_segment(tid, new_sg);
- if (conflict_set_update_needed(tid, new_sg))
- {
- thread_compute_conflict_set(&s_conflict_set, s_drd_running_tid);
- s_conflict_set_new_segment_count++;
- }
+ thread_compute_conflict_set(&s_conflict_set, s_drd_running_tid);
+ s_conflict_set_new_segment_count++;
thread_discard_ordered_segments();
@@ -898,10 +828,11 @@
#define LAZY_CONFLICT_SET_EVALUATION 1
-static struct bitmap2* thread_compute_conflict_set_bitmap2(const UWord a1)
+static void
+thread_compute_conflict_set_bitmap2(const UWord a1,
+ struct bitmap2* const result)
{
const DrdThreadId tid = s_conflict_set_tid;
- struct bitmap2* result = 0;
if (s_trace_conflict_set)
{
@@ -953,11 +884,6 @@
&q->vc);
VG_(message)(Vg_UserMsg, "%s", msg);
}
- if (result == 0)
- {
- result = bm2_new(q_bm2->addr);
- bm2_clear(result);
- }
bm2_merge(result, q_bm2);
}
else
@@ -992,8 +918,6 @@
bm2_print(result);
}
}
-
- return result;
}
/** Compute a bitmap that represents the union of all memory accesses of all
Modified: branches/DRDDEV/drd/pub_drd_bitmap.h
===================================================================
--- branches/DRDDEV/drd/pub_drd_bitmap.h 2008-07-14 09:58:38 UTC (rev 8437)
+++ branches/DRDDEV/drd/pub_drd_bitmap.h 2008-07-14 12:47:34 UTC (rev 8438)
@@ -58,7 +58,7 @@
/* First level bitmaps. */
struct bitmap* bm_new(void);
-struct bitmap* bm_new_cb(struct bitmap2* (*compute_bitmap2)(UWord));
+struct bitmap* bm_new_cb(void (*compute_bitmap2)(UWord, struct bitmap2*));
void bm_delete(struct bitmap* const bm);
void bm_access_range(struct bitmap* const bm,
const Addr a1, const Addr a2,
@@ -111,8 +111,8 @@
const Addr a1, const Addr a2);
Bool bm_equal(struct bitmap* const lhs, struct bitmap* const rhs);
void bm_swap(struct bitmap* const bm1, struct bitmap* const bm2);
-void bm_merge2(struct bitmap* const lhs,
- struct bitmap* const rhs);
+void bm_merge(struct bitmap* const lhs, struct bitmap* const rhs);
+void bm_xor(struct bitmap* const lhs, struct bitmap* const rhs);
int bm_has_races(struct bitmap* const bm1,
struct bitmap* const bm2);
void bm_report_races(ThreadId const tid1, ThreadId const tid2,
@@ -122,11 +122,10 @@
ULong bm_get_bitmap_creation_count(void);
/* Second-level bitmaps. */
-struct bitmap2* bm2_new(const UWord a1);
void bm2_clear(struct bitmap2* const bm2);
void bm2_merge(struct bitmap2* const bm2l, const struct bitmap2* const bm2r);
+void bm2_xor(struct bitmap2* const bm2l, const struct bitmap2* const bm2r);
void bm2_print(const struct bitmap2* const bm2);
-ULong bm_get_bitmap2_node_creation_count(void);
ULong bm_get_bitmap2_creation_count(void);
Modified: branches/DRDDEV/drd/scripts/run-splash2
===================================================================
--- branches/DRDDEV/drd/scripts/run-splash2 2008-07-14 09:58:38 UTC (rev 8437)
+++ branches/DRDDEV/drd/scripts/run-splash2 2008-07-14 12:47:34 UTC (rev 8438)
@@ -136,17 +136,17 @@
# Results: native native native none none DRD DRD HG HG-hb ITC ITC
# -p1 -p2 -p4 -p1 -p4 -p4 -p4+f -p4 -p4 -p4 -p4+f
# ..................................................................................................................................
-# Cholesky 0.09 11880 0.06 21888 0.48 41541 12.2 5.07 5.4 1.92 19 2.33 15 2.33 18 3.63 20 4.53 239 82
-# FFT 0.02 6560 0.02 15443 0.02 31493 17.0 8.34 17.5 2.53 88 2.67 96 2.80 310 4.23 86 5.03 90 41
-# LU, contiguous 0.07 3968 0.06 12176 0.05 28584 12.6 13.1 18.8 2.69 103 2.80 88 2.95 206 4.49 185 5.36 428 128
-# Ocean, contiguous 0.22 16720 0.17 25256 0.15 42392 6.5 3.88 10.3 2.14 54 2.28 45 2.37 77 3.56 82 4.34 90 28
+# Cholesky 0.09 11880 0.06 21888 0.61 41882 12.2 5.07 4.4 2.14 15 1.49 12 2.31 14 3.60 16 4.49 239 82
+# FFT 0.02 6560 0.02 15443 0.02 31493 16.0 8.34 17.5 2.53 89 2.67 97 2.80 310 4.23 86 5.03 90 41
+# LU, contiguous 0.07 3968 0.04 12176 0.04 28584 12.3 13.1 22.3 2.69 129 2.80 110 2.95 257 4.49 231 5.36 428 128
+# Ocean, contiguous 0.22 16720 0.17 25256 0.15 42392 6.5 3.88 10.3 2.14 57 2.28 48 2.37 77 3.56 82 4.34 90 28
# Radiosity
-# Radix 0.20 15008 0.11 23200 0.11 39592 13.2 4.21 23.8 2.22 56 2.46 50 2.46 168 3.78 77 4.41 222 56
-# Raytrace 0.65 206976 0.48 215168 0.47 231893 8.4 1.23 11.7 1.21 241 1.48 94 1.48 109 2.10 91 4.73 172 53
-# Water-n2 0.17 10560 0.09 26944 0.10 59704 12.8 5.63 22.0 1.82 2659 2.44 165 2.37 123 3.09 109 3.66 189 39
-# Water-sp 0.19 4312 0.10 13400 0.10 30091 10.8 12.1 20.8 2.57 212 2.80 60 2.80 109 4.26 101 5.13 183 34
+# Radix 0.20 15008 0.11 23200 0.11 39592 13.2 4.21 23.8 2.22 58 2.46 51 2.46 180 3.78 77 4.41 222 56
+# Raytrace 0.62 206976 0.48 215168 0.47 231893 8.6 1.23 11.6 1.21 261 1.46 103 1.47 109 2.10 91 4.73 172 53
+# Water-n2 0.16 10560 0.09 26944 0.10 59704 13.7 5.63 22.0 1.82 2770 2.44 153 2.37 123 3.09 109 3.66 189 39
+# Water-sp 0.19 4312 0.10 13400 0.10 30091 10.8 12.1 20.6 2.57 242 2.80 59 2.80 109 4.26 101 5.13 183 34
# ..................................................................................................................................
-# geometric mean 0.14 12823 0.09 25650 0.12 47553 11.3 5.43 14.8 2.08 128 2.37 64 2.40 110 3.56 82 4.62 180 51
+# geometric mean 0.13 12823 0.09 25650 0.12 47553 11.3 5.43 14.8 2.08 133 2.24 64 2.40 110 3.55 82 4.61 180 51
# ..................................................................................................................................
# Hardware: dual-core Intel Core2 Duo E6750, 2.66 GHz, 4 MB L2 cache, 2 GB RAM.
# Software: openSUSE 11.0, 64-bit, gcc 4.3.1, runlevel 3.
Modified: branches/DRDDEV/drd/tests/drd_bitmap_test.c
===================================================================
--- branches/DRDDEV/drd/tests/drd_bitmap_test.c 2008-07-14 09:58:38 UTC (rev 8437)
+++ branches/DRDDEV/drd/tests/drd_bitmap_test.c 2008-07-14 12:47:34 UTC (rev 8438)
@@ -104,8 +104,8 @@
if (s_verbose)
VG_(printf)("Merge result:\n");
bm2 = bm_new();
- bm_merge2(bm2, bm);
- bm_merge2(bm2, bm);
+ bm_merge(bm2, bm);
+ bm_merge(bm2, bm);
if (s_verbose)
bm_print(bm2);
//assert(bm_equal(bm, bm2));
@@ -192,10 +192,10 @@
assert(bm_equal(bm1, bm2));
}
}
- bm_access_range_load (bm1, 0, ub);
- bm_access_range_store(bm1, 0, ub);
- bm_access_range_load (bm2, 0, ub);
- bm_access_range_store(bm2, 0, ub);
+ bm_access_range_load (bm1, 0, ub + 8);
+ bm_access_range_store(bm1, 0, ub + 8);
+ bm_access_range_load (bm2, 0, ub + 8);
+ bm_access_range_store(bm2, 0, ub + 8);
for (i = lb; i < ub; i += outer_loop_step)
{
for (j = i + 1; j < ub; j += inner_loop_step)
|
|
From: <sv...@va...> - 2008-07-14 09:58:31
|
Author: bart
Date: 2008-07-14 10:58:38 +0100 (Mon, 14 Jul 2008)
New Revision: 8437
Log:
Added to repository.
Added:
branches/DRDDEV/drd/tests/atomic_var.c
branches/DRDDEV/drd/tests/atomic_var.stderr.exp
branches/DRDDEV/drd/tests/atomic_var.vgtest
Added: branches/DRDDEV/drd/tests/atomic_var.c
===================================================================
--- branches/DRDDEV/drd/tests/atomic_var.c (rev 0)
+++ branches/DRDDEV/drd/tests/atomic_var.c 2008-07-14 09:58:38 UTC (rev 8437)
@@ -0,0 +1,72 @@
+/** Race condition around use of atomic variable.
+ * Note: for the i386 and x86_64 memory models, thread 2 must print y = 1.
+ * On PPC however, both y = 0 and y = 1 are legal results. This is because
+ * the PPC memory model allows different CPU's to observe stores to variables
+ * in different cache lines in a different order.
+ */
+
+
+#define _GNU_SOURCE
+
+#include "config.h"
+#include <pthread.h>
+#include <stdio.h> /* fprintf() */
+#include <stdlib.h> /* atoi() */
+
+
+/** Only gcc 4.1.0 and later have atomic builtins. */
+#ifndef HAVE_BUILTIN_ATOMIC
+static __inline__
+int __sync_add_and_fetch(int* p, int i)
+{
+ if (i == 0)
+ return *p;
+ return (*p += i);
+}
+#endif
+
+
+static int s_x = 0;
+/* s_dummy[] ensures that s_x and s_y are not in the same cache line. */
+static char s_dummy[512];
+static int s_y = 0;
+
+static void* thread_func_1(void* arg)
+{
+ s_y = 1;
+ (void) __sync_add_and_fetch(&s_x, 1);
+ return 0;
+}
+
+static void* thread_func_2(void* arg)
+{
+ while (__sync_add_and_fetch(&s_x, 0) == 0)
+ ;
+ fprintf(stderr, "y = %d\n", s_y);
+ return 0;
+}
+
+int main(int argc, char** argv)
+{
+#ifdef HAVE_BUILTIN_ATOMIC
+ int i;
+ const int n_threads = 2;
+ pthread_t tid[n_threads];
+
+ fprintf(stderr, "Start of test.\n");
+ pthread_create(&tid[0], 0, thread_func_1, 0);
+ pthread_create(&tid[1], 0, thread_func_2, 0);
+ for (i = 0; i < n_threads; i++)
+ pthread_join(tid[i], 0);
+ fprintf(stderr, "Test finished.\n");
+#else
+ fprintf(stderr,
+ "Sorry, but your compiler does not have built-in support for atomic"
+ " operations.\n");
+#endif
+
+ /* Suppress the compiler warning about s_dummy not being used. */
+ s_dummy[0]++;
+
+ return 0;
+}
Added: branches/DRDDEV/drd/tests/atomic_var.stderr.exp
===================================================================
--- branches/DRDDEV/drd/tests/atomic_var.stderr.exp (rev 0)
+++ branches/DRDDEV/drd/tests/atomic_var.stderr.exp 2008-07-14 09:58:38 UTC (rev 8437)
@@ -0,0 +1,14 @@
+
+Start of test.
+Thread 2:
+Conflicting load by thread 2/3 at 0x........ size 4
+ at 0x........: thread_func_2 (atomic_var.c:?)
+ by 0x........: vg_thread_wrapper (drd_pthread_intercepts.c:?)
+ by 0x........: (within libpthread-?.?.so)
+ by 0x........: clone (in /...libc...)
+Location 0x........ is 0 bytes inside local var "s_y"
+declared at atomic_var.c:32, in frame #? of thread 2
+y = 1
+Test finished.
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Added: branches/DRDDEV/drd/tests/atomic_var.vgtest
===================================================================
--- branches/DRDDEV/drd/tests/atomic_var.vgtest (rev 0)
+++ branches/DRDDEV/drd/tests/atomic_var.vgtest 2008-07-14 09:58:38 UTC (rev 8437)
@@ -0,0 +1,3 @@
+prereq: ./supported_libpthread
+vgopts: --var-info=yes --check-stack-var=yes --show-confl-seg=no
+prog: atomic_var
|
|
From: <sv...@va...> - 2008-07-14 07:46:43
|
Author: bart
Date: 2008-07-14 08:46:51 +0100 (Mon, 14 Jul 2008)
New Revision: 8436
Log:
Added DRD command-line option --first-race-only=yes. Updated results. Updated/corrected comments.
Modified:
branches/DRDDEV/drd/scripts/run-splash2
Modified: branches/DRDDEV/drd/scripts/run-splash2
===================================================================
--- branches/DRDDEV/drd/scripts/run-splash2 2008-07-14 07:41:22 UTC (rev 8435)
+++ branches/DRDDEV/drd/scripts/run-splash2 2008-07-14 07:46:51 UTC (rev 8436)
@@ -41,12 +41,14 @@
p=4
test_output="${1}-drd-with-stack-var-4.out" \
print_runtime_ratio ${avg4} ${stddev4} ${vsz4} ${vszdev4} \
- $VG --tool=drd --check-stack-var=yes "$@" -p${psep}${p} "${test_args}"
+ $VG --tool=drd --first-race-only=yes --check-stack-var=yes \
+ "$@" -p${psep}${p} "${test_args}"
p=4
test_output="${1}-drd-without-stack-var-4.out" \
print_runtime_ratio ${avg4} ${stddev4} ${vsz4} ${vszdev4} \
- $VG --tool=drd --check-stack-var=no "$@" -p${psep}${p} "${test_args}"
+ $VG --tool=drd --first-race-only=yes --check-stack-var=no \
+ "$@" -p${psep}${p} "${test_args}"
p=4
test_output="${1}-helgrind-4.out" \
@@ -117,31 +119,34 @@
# 21. Execution time ratio for Intel Thread Checker -p4 versus -p4.
#
# Notes:
-# - Both Helgrind and DRD use a granularity of four bytes for data race
-# detection.
+# - Helgrind uses a granularity of one byte for data race detection, while
+# DRD uses a granularity of four bytes.
+# - Helgrind does detect data races on stack variables. DRD only detects
+# data races on stack variables with --check-stack-var=yes.
# - Helgrind with --pure-happens-before=yes does not handle atomic variables
# correctly. Furthermore, there is an artificial upper limit on the number
# of segments (--max-segment-set-size=<n>). Both aspects will cause real
# data races to be suppressed.
-# - Not yet clear to me: whether or not Helgrind detects races on stack
-# variables.
# - The ITC tests have been run on a 4-way 2.5 GHz Pentium 4 workstation.
-# Not yet clear to me: 32-bit or 64-bit OS ? Which OS ? ITC granularity ?
+# Not yet clear to me: have these tests been run on a 32-bit or on a 64-bit
+# OS ? Which OS ? Which granularity does ITC use ? And which m4 macro's
+# have been used by ITC as implementation of the synchronization primitives ?
#
####################################################################################################################################
# Results: native native native none none DRD DRD HG HG-hb ITC ITC
# -p1 -p2 -p4 -p1 -p4 -p4 -p4+f -p4 -p4 -p4 -p4+f
# ..................................................................................................................................
-# Cholesky 0.08 21760 0.05 31728 0.55 72027 10.6 3.62 3.8 1.49 14 1.64 12 1.70 8 2.76 15 3.49 239 82
-# FFT 0.02 13024 0.01 86784 0.01 103168 17.0 5.37 36.0 0.92 175 0.98 185 1.02 701 1.70 182 1.97 90 41
-# LU, contiguous 0.08 10440 0.06 18640 0.05 35048 9.5 6.45 15.4 2.63 79 2.78 89 2.90 187 4.83 149 5.63 428 128
-# Ocean, contiguous 0.20 23208 0.17 31744 0.13 48888 4.5 3.45 7.6 2.17 46 2.33 42 2.41 77 3.94 71 4.96 90 28
-# Radix 0.18 33760 0.10 41952 0.09 58488 6.8 2.68 14.0 1.98 26 2.17 36 2.24 170 3.64 34 4.12 222 56
-# Raytrace 0.50 352832 0.37 382869 0.37 442944 9.1 1.16 12.2 0.98 234 1.20 111 1.20 109 1.75 93 4.02 172 53
-# Water-n2 0.13 17104 0.08 33480 0.08 66240 10.7 4.38 17.8 1.88 1496 2.46 176 2.44 107 3.42 105 4.15 189 39
-# Water-sp 0.12 10784 0.06 84352 0.06 144491 11.1 6.28 23.0 0.64 203 0.70 81 0.70 129 1.18 138 1.37 183 34
+# Cholesky 0.09 11880 0.06 21888 0.48 41541 12.2 5.07 5.4 1.92 19 2.33 15 2.33 18 3.63 20 4.53 239 82
+# FFT 0.02 6560 0.02 15443 0.02 31493 17.0 8.34 17.5 2.53 88 2.67 96 2.80 310 4.23 86 5.03 90 41
+# LU, contiguous 0.07 3968 0.06 12176 0.05 28584 12.6 13.1 18.8 2.69 103 2.80 88 2.95 206 4.49 185 5.36 428 128
+# Ocean, contiguous 0.22 16720 0.17 25256 0.15 42392 6.5 3.88 10.3 2.14 54 2.28 45 2.37 77 3.56 82 4.34 90 28
+# Radiosity
+# Radix 0.20 15008 0.11 23200 0.11 39592 13.2 4.21 23.8 2.22 56 2.46 50 2.46 168 3.78 77 4.41 222 56
+# Raytrace 0.65 206976 0.48 215168 0.47 231893 8.4 1.23 11.7 1.21 241 1.48 94 1.48 109 2.10 91 4.73 172 53
+# Water-n2 0.17 10560 0.09 26944 0.10 59704 12.8 5.63 22.0 1.82 2659 2.44 165 2.37 123 3.09 109 3.66 189 39
+# Water-sp 0.19 4312 0.10 13400 0.10 30091 10.8 12.1 20.8 2.57 212 2.80 60 2.80 109 4.26 101 5.13 183 34
# ..................................................................................................................................
-# geometric mean 0.12 24965 0.07 54148 0.09 86579 9.3 3.72 13.5 1.44 106 1.62 68 1.65 109 2.63 78 3.41 180 51
+# geometric mean 0.14 12823 0.09 25650 0.12 47553 11.3 5.43 14.8 2.08 128 2.37 64 2.40 110 3.56 82 4.62 180 51
# ..................................................................................................................................
# Hardware: dual-core Intel Core2 Duo E6750, 2.66 GHz, 4 MB L2 cache, 2 GB RAM.
# Software: openSUSE 11.0, 64-bit, gcc 4.3.1, runlevel 3.
@@ -191,8 +196,10 @@
run_test ${SPLASH2}/codes/apps/ocean/contiguous_partitions/OCEAN -n258
#run_test ${SPLASH2}/codes/apps/ocean/non_contiguous_partitions/OCEAN -n258
-# Radiosity.
+# Radiosity. Runs fine on a 32-bit OS, but deadlocks on a 64-bit OS. Not clear to me why.
+if [ $(uname -p) = "i686" ]; then
psep=' ' run_test ${SPLASH2}/codes/apps/radiosity/RADIOSITY -batch -room -ae 5000.0 -en 0.050 -bf 0.10
+fi
# Radix
run_test ${SPLASH2}/codes/kernels/radix/RADIX -n$((2**20)) -r1024
|
|
From: <sv...@va...> - 2008-07-14 07:41:15
|
Author: bart Date: 2008-07-14 08:41:22 +0100 (Mon, 14 Jul 2008) New Revision: 8435 Log: Refactoring: splash2-modified.patch is no longer downloaded but is now present in SVN. Added: branches/DRDDEV/drd/scripts/download-and-build-splash2 branches/DRDDEV/drd/scripts/splash2.patch.in Removed: branches/DRDDEV/drd/scripts/download-and-build-splash2.in Modified: branches/DRDDEV/configure.in [... diff too large to include ...] |
|
From: <sv...@va...> - 2008-07-14 07:36:46
|
Author: bart
Date: 2008-07-14 08:36:43 +0100 (Mon, 14 Jul 2008)
New Revision: 8434
Log:
Added command-line option --first-race-only=yes|no.
Modified:
branches/DRDDEV/drd/drd_main.c
Modified: branches/DRDDEV/drd/drd_main.c
===================================================================
--- branches/DRDDEV/drd/drd_main.c 2008-07-13 19:16:08 UTC (rev 8433)
+++ branches/DRDDEV/drd/drd_main.c 2008-07-14 07:36:43 UTC (rev 8434)
@@ -75,6 +75,7 @@
static Bool s_drd_print_stats = False;
static Bool s_drd_trace_fork_join = False;
static Bool s_drd_var_info = False;
+static Bool s_drd_first_race_only = False;
static Bool s_show_stack_usage = False;
@@ -102,6 +103,7 @@
VG_BOOL_CLO (arg, "--check-stack-var", s_drd_check_stack_accesses)
else VG_BOOL_CLO(arg, "--drd-stats", s_drd_print_stats)
+ else VG_BOOL_CLO(arg, "--first-race-only", s_drd_first_race_only)
else VG_BOOL_CLO(arg,"--report-signal-unlocked",s_drd_report_signal_unlocked)
else VG_BOOL_CLO(arg, "--segment-merging", segment_merging)
else VG_BOOL_CLO(arg, "--show-confl-seg", show_confl_seg)
@@ -173,6 +175,9 @@
" stack variables [no].\n"
" --exclusive-threshold=<n> Print an error message if any mutex or\n"
" writer lock is held longer than the specified time (in milliseconds).\n"
+" --first-race-only=yes|no Only report the first data race that occurs on\n"
+" a memory location instead of all races [no].\n"
+
" --report-signal-unlocked=yes|no Whether to report calls to\n"
" pthread_cond_signal() where the mutex associated\n"
" with the signal via pthread_cond_wait() is not\n"
@@ -277,6 +282,11 @@
VG_(get_IP)(VG_(get_running_tid)()),
"Conflicting accesses",
&drei);
+
+ if (s_drd_first_race_only)
+ {
+ drd_start_suppression(addr, addr + size, "no repetitive race reports");
+ }
}
static VG_REGPARM(2) void drd_trace_load(Addr addr, SizeT size)
|
|
From: Tom H. <th...@cy...> - 2008-07-14 03:07:13
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-07-14 03:15:03 BST 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 == 345 tests, 60 stderr failures, 1 stdout failure, 29 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin1-yes (stderr) memcheck/tests/origin4-many (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (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/x86/bug152022 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) massif/tests/alloc-fns-A (post) massif/tests/alloc-fns-B (post) massif/tests/basic (post) massif/tests/basic2 (post) massif/tests/big-alloc (post) massif/tests/culling1 (stderr) massif/tests/culling2 (stderr) massif/tests/custom_alloc (post) massif/tests/deep-A (post) massif/tests/deep-B (stderr) massif/tests/deep-B (post) massif/tests/deep-C (stderr) massif/tests/deep-C (post) massif/tests/deep-D (post) massif/tests/ignoring (post) massif/tests/insig (post) massif/tests/long-names (post) massif/tests/long-time (post) massif/tests/new-cpp (post) massif/tests/null (post) massif/tests/one (post) massif/tests/overloaded-new (post) massif/tests/peak (post) massif/tests/peak2 (stderr) massif/tests/peak2 (post) massif/tests/realloc (stderr) massif/tests/realloc (post) massif/tests/thresholds_0_0 (post) massif/tests/thresholds_0_10 (post) massif/tests/thresholds_10_0 (post) massif/tests/thresholds_10_10 (post) massif/tests/thresholds_5_0 (post) massif/tests/thresholds_5_10 (post) massif/tests/zero1 (post) massif/tests/zero2 (post) none/tests/blockfault (stderr) none/tests/mremap2 (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/hg06_readshared (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc11_XCHG (stderr) helgrind/tests/tc12_rwl_trivial (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) helgrind/tests/tc24_nonzero_sem (stderr) |
|
From: Tom H. <th...@cy...> - 2008-07-14 02:56:51
|
Nightly build on aston ( x86_64, Fedora Core 5 ) started at 2008-07-14 03:20:05 BST 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 == 443 tests, 8 stderr failures, 1 stdout failure, 2 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) massif/tests/new-cpp (post) massif/tests/overloaded-new (post) none/tests/blockfault (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (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 == 443 tests, 8 stderr failures, 1 stdout failure, 2 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) massif/tests/new-cpp (post) massif/tests/overloaded-new (post) none/tests/blockfault (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) drd/tests/pth_inconsistent_cond_wait (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Jul 14 03:38:22 2008 --- new.short Mon Jul 14 03:56:58 2008 *************** *** 18,21 **** helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) - drd/tests/pth_inconsistent_cond_wait (stderr) --- 18,21 ---- helgrind/tests/tc20_verifywrap (stderr) + helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-07-14 02:46:56
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-07-14 03:05:05 BST 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 == 437 tests, 5 stderr failures, 2 stdout failures, 2 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) massif/tests/new-cpp (post) massif/tests/overloaded-new (post) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-07-14 02:42:04
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-07-14 03:25:04 BST 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 == 441 tests, 7 stderr failures, 5 stdout failures, 2 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/bug133694 (stdout) memcheck/tests/x86/bug133694 (stderr) memcheck/tests/x86/scalar (stderr) massif/tests/new-cpp (post) massif/tests/overloaded-new (post) none/tests/cmdline1 (stdout) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2008-07-14 02:30:47
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-07-14 03:00:09 BST 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 == 443 tests, 32 stderr failures, 3 stdout failures, 2 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) massif/tests/new-cpp (post) massif/tests/overloaded-new (post) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap2 (stdout) none/tests/x86/insn_ssse3 (stdout) none/tests/x86/insn_ssse3 (stderr) none/tests/x86/ssse3_misaligned (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/atomic_var (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 == 443 tests, 32 stderr failures, 4 stdout failures, 2 post failures == memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) massif/tests/new-cpp (post) massif/tests/overloaded-new (post) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap2 (stdout) none/tests/x86/insn_ssse3 (stdout) none/tests/x86/insn_ssse3 (stderr) none/tests/x86/ssse3_misaligned (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) drd/tests/atomic_var (stderr) drd/tests/pth_detached2 (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Jul 14 03:18:59 2008 --- new.short Mon Jul 14 03:30:52 2008 *************** *** 8,10 **** ! == 443 tests, 32 stderr failures, 4 stdout failures, 2 post failures == memcheck/tests/file_locking (stderr) --- 8,10 ---- ! == 443 tests, 32 stderr failures, 3 stdout failures, 2 post failures == memcheck/tests/file_locking (stderr) *************** *** 46,48 **** drd/tests/atomic_var (stderr) - drd/tests/pth_detached2 (stdout) --- 46,47 ---- |