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
(12) |
2
(5) |
3
(12) |
4
(9) |
5
(4) |
6
(7) |
|
7
(6) |
8
(10) |
9
(5) |
10
(5) |
11
(4) |
12
(7) |
13
(19) |
|
14
(11) |
15
(9) |
16
(6) |
17
(21) |
18
(13) |
19
(12) |
20
(9) |
|
21
(22) |
22
(24) |
23
(21) |
24
(12) |
25
(6) |
26
(3) |
27
(4) |
|
28
(3) |
29
(5) |
30
(11) |
31
(7) |
|
|
|
|
From: <sv...@va...> - 2008-12-06 23:34:58
|
Author: sewardj
Date: 2008-12-06 23:34:52 +0000 (Sat, 06 Dec 2008)
New Revision: 8808
Log:
* Add a VG_(sizeSWA) function
* Fix spacing a bit
Modified:
trunk/coregrind/m_sparsewa.c
trunk/include/pub_tool_sparsewa.h
Modified: trunk/coregrind/m_sparsewa.c
===================================================================
--- trunk/coregrind/m_sparsewa.c 2008-12-06 22:10:54 UTC (rev 8807)
+++ trunk/coregrind/m_sparsewa.c 2008-12-06 23:34:52 UTC (rev 8808)
@@ -115,7 +115,6 @@
//////// SWA helper functions (iteration)
-inline
static void swa_PUSH ( SparseWA* swa, UWord partial_key, Int curr_ix,
void* curr_nd, Int resume_point )
{
@@ -130,7 +129,6 @@
swa->isUsed = sp+1;
}
-inline
static void swa_POP ( SparseWA* swa,
UWord* partial_key, Int* curr_ix,
void** curr_nd, Int* resume_point )
@@ -165,6 +163,7 @@
return level0;
}
+
//////// SWA public interface
void VG_(initIterSWA) ( SparseWA* swa )
@@ -173,6 +172,7 @@
if (swa->root) swa_PUSH(swa, 0, 0, swa->root, 1/*start_new_node*/);
}
+
Bool VG_(nextIterSWA)( SparseWA* swa,
/*OUT*/UWord* keyP, /*OUT*/UWord* valP )
{
@@ -230,6 +230,7 @@
goto dispatch;
}
+
SparseWA* VG_(newSWA) ( void*(*alloc_nofail)(HChar* cc, SizeT),
HChar* cc,
void(*dealloc)(void*) )
@@ -247,6 +248,7 @@
return swa;
}
+
static void swa_deleteSWA_wrk ( void(*dealloc)(void*), void* nd )
{
Int i;
@@ -263,7 +265,6 @@
}
dealloc(nd);
}
-
void VG_(deleteSWA) ( SparseWA* swa )
{
if (swa->root)
@@ -271,6 +272,7 @@
swa->dealloc(swa);
}
+
Bool VG_(lookupSWA) ( SparseWA* swa,
/*OUT*/UWord* keyP, /*OUT*/UWord* valP,
UWord key )
@@ -305,6 +307,7 @@
return True;
}
+
Bool VG_(addToSWA) ( SparseWA* swa, UWord key, UWord val )
{
Int i;
@@ -361,6 +364,7 @@
return already_present;
}
+
Bool VG_(delFromSWA) ( SparseWA* swa,
/*OUT*/UWord* oldK, /*OUT*/UWord* oldV, UWord key )
{
@@ -427,6 +431,48 @@
return True;
}
+
+static UWord swa_sizeSWA_wrk ( void* nd )
+{
+ Int i;
+ UWord sum = 0;
+ if (*(UWord*)nd == LevelN_MAGIC) {
+ LevelN* levelN = (LevelN*)nd;
+ for (i = 0; i < 256; i++) {
+ if (levelN->child[i]) {
+ sum += swa_sizeSWA_wrk( levelN->child[i] );
+ }
+ }
+ } else {
+ Level0* level0;
+ vg_assert(*(UWord*)nd == Level0_MAGIC);
+ level0 = (Level0*)nd;
+ for (i = 0; i < 256/8; i += 2) {
+ UWord x = level0->inUse[i+0]; /* assume zero-extend */
+ UWord y = level0->inUse[i+1]; /* assume zero-extend */
+ /* do 'sum += popcount(x) + popcount(y)' for byte-sized x, y */
+ /* unroll the loop twice so as to expose more ILP */
+ x = (x & 0x55) + ((x >> 1) & 0x55);
+ y = (y & 0x55) + ((y >> 1) & 0x55);
+ x = (x & 0x33) + ((x >> 2) & 0x33);
+ y = (y & 0x33) + ((y >> 2) & 0x33);
+ x = (x & 0x0F) + ((x >> 4) & 0x0F);
+ y = (y & 0x0F) + ((y >> 4) & 0x0F);
+ sum += x + y;
+ }
+ }
+ return sum;
+}
+UWord VG_(sizeSWA) ( SparseWA* swa )
+{
+ if (swa->root)
+ return swa_sizeSWA_wrk ( swa->root );
+ else
+ return 0;
+}
+
+
+
/*--------------------------------------------------------------------*/
/*--- end m_sparsewa.c ---*/
/*--------------------------------------------------------------------*/
Modified: trunk/include/pub_tool_sparsewa.h
===================================================================
--- trunk/include/pub_tool_sparsewa.h 2008-12-06 22:10:54 UTC (rev 8807)
+++ trunk/include/pub_tool_sparsewa.h 2008-12-06 23:34:52 UTC (rev 8808)
@@ -87,6 +87,10 @@
Bool VG_(nextIterSWA)( SparseWA* swa,
/*OUT*/UWord* keyP, /*OUT*/UWord* valP );
+// How many elements are there in 'swa'? NOTE: dangerous in the
+// sense that this is not an O(1) operation but rather O(N),
+// since it involves walking the whole tree.
+UWord VG_(sizeSWA) ( SparseWA* swa );
#endif // __PUB_TOOL_SPARSEWA_H
|
|
From: <sv...@va...> - 2008-12-06 22:15:36
|
Author: sewardj
Date: 2008-12-06 22:07:35 +0000 (Sat, 06 Dec 2008)
New Revision: 8806
Log:
Add a new container data type, a Sparse Word Array: an array of UWord
which is also indexed by UWord. This can be used as a replacement for
WordFM with unboxed keys, when the key ranges are dense. It is
implemented as a 256-way radix tree (4-deep on 32-bit platforms,
8-deep on 64-bit platforms).
Added:
trunk/coregrind/m_sparsewa.c
trunk/coregrind/pub_core_sparsewa.h
trunk/include/pub_tool_sparsewa.h
Modified:
trunk/coregrind/Makefile.am
trunk/include/Makefile.am
Modified: trunk/coregrind/Makefile.am
===================================================================
--- trunk/coregrind/Makefile.am 2008-12-04 00:07:30 UTC (rev 8805)
+++ trunk/coregrind/Makefile.am 2008-12-06 22:07:35 UTC (rev 8806)
@@ -123,6 +123,7 @@
pub_core_scheduler.h \
pub_core_sigframe.h \
pub_core_signals.h \
+ pub_core_sparsewa.h \
pub_core_stacks.h \
pub_core_stacktrace.h \
pub_core_syscall.h \
@@ -191,6 +192,7 @@
m_oset.c \
m_redir.c \
m_signals.c \
+ m_sparsewa.c \
m_stacks.c \
m_stacktrace.c \
m_syscall.c \
Added: trunk/coregrind/m_sparsewa.c
===================================================================
--- trunk/coregrind/m_sparsewa.c (rev 0)
+++ trunk/coregrind/m_sparsewa.c 2008-12-06 22:07:35 UTC (rev 8806)
@@ -0,0 +1,432 @@
+
+/*--------------------------------------------------------------------*/
+/*--- An sparse array (of words) implementation. ---*/
+/*--- m_sparsewa.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2008-2008 OpenWorks Ltd
+ in...@op...
+
+ 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 "pub_core_basics.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_sparsewa.h" /* self */
+
+/////////////////////////////////////////////////////////
+// //
+// SparseWA: Implementation //
+// //
+/////////////////////////////////////////////////////////
+
+//////// SWA data structures
+
+// (UInt) `echo "Level Zero Byte Map" | md5sum`
+#define Level0_MAGIC 0x458ec222
+
+// (UInt) `echo "Level N Byte Map" | md5sum`
+#define LevelN_MAGIC 0x0a280a1a
+
+/* It's important that the .magic field appears at offset zero in both
+ structs, so that we can reliably distinguish between them. */
+
+typedef
+ struct {
+ UWord magic;
+ UWord words[256];
+ Int nInUse;
+ UChar inUse[256/8];
+ }
+ Level0;
+
+typedef
+ struct {
+ UWord magic;
+ void* child[256]; /* either LevelN* or Level0* */
+ Int nInUse;
+ Int level; /* 3 .. 1 on 32-bit, 7 .. 1 on 64-bit */
+ }
+ LevelN;
+
+typedef
+ struct {
+ UWord partial_key;
+ Int curr_ix;
+ void* curr_nd; /* LevelN* or Level0* */
+ Int resume_point; /* 1, 2 or 3 */
+ }
+ SWAStackElem;
+
+struct _SparseWA {
+ void* (*alloc_nofail)(HChar*,SizeT);
+ HChar* cc;
+ void (*dealloc)(void*);
+ LevelN* root;
+ SWAStackElem iterStack[8];
+ Int isUsed;
+};
+
+//////// SWA helper functions (bitarray)
+
+static inline UWord swa_bitarray_read ( UChar* arr, UWord ix ) {
+ UWord bix = ix >> 3;
+ UWord off = ix & 7;
+ return (arr[bix] >> off) & 1;
+}
+
+static inline UWord swa_bitarray_read_then_set ( UChar* arr, UWord ix ) {
+ UWord bix = ix >> 3;
+ UWord off = ix & 7;
+ UChar old = arr[bix];
+ UChar nyu = old | (1 << off);
+ arr[bix] = nyu;
+ return (old >> off) & 1;
+}
+
+static inline UWord swa_bitarray_read_then_clear ( UChar* arr, UWord ix ) {
+ UWord bix = ix >> 3;
+ UWord off = ix & 7;
+ UChar old = arr[bix];
+ UChar nyu = old & ~(1 << off);
+ arr[bix] = nyu;
+ return (old >> off) & 1;
+}
+
+//////// SWA helper functions (iteration)
+
+inline
+static void swa_PUSH ( SparseWA* swa, UWord partial_key, Int curr_ix,
+ void* curr_nd, Int resume_point )
+{
+ Int sp = swa->isUsed;
+ const Int _3_or_7 = sizeof(void*) - 1;
+ // if (0) VG_(printf)("PUSH, old sp = %d\n", sp);
+ vg_assert(sp >= 0 && sp <= _3_or_7);
+ swa->iterStack[sp].partial_key = partial_key;
+ swa->iterStack[sp].curr_ix = curr_ix;
+ swa->iterStack[sp].curr_nd = curr_nd;
+ swa->iterStack[sp].resume_point = resume_point;
+ swa->isUsed = sp+1;
+}
+
+inline
+static void swa_POP ( SparseWA* swa,
+ UWord* partial_key, Int* curr_ix,
+ void** curr_nd, Int* resume_point )
+{
+ Int sp = swa->isUsed - 1;
+ const Int _3_or_7 = sizeof(void*) - 1;
+ // if (0) VG_(printf)("POP, old sp = %d\n", sp+1);
+ vg_assert(sp >= 0 && sp <= _3_or_7);
+ *partial_key = swa->iterStack[sp].partial_key;
+ *curr_ix = swa->iterStack[sp].curr_ix;
+ *curr_nd = swa->iterStack[sp].curr_nd;
+ *resume_point = swa->iterStack[sp].resume_point;
+ swa->isUsed = sp;
+}
+
+//////// SWA helper functions (allocation)
+
+static LevelN* swa_new_LevelN ( SparseWA* swa, Int level )
+{
+ LevelN* levelN = swa->alloc_nofail( swa->cc, sizeof(LevelN) );
+ VG_(memset)(levelN, 0, sizeof(*levelN));
+ levelN->magic = LevelN_MAGIC;
+ levelN->level = level;
+ return levelN;
+}
+
+static Level0* swa_new_Level0 ( SparseWA* swa )
+{
+ Level0* level0 = swa->alloc_nofail( swa->cc, sizeof(Level0) );
+ VG_(memset)(level0, 0, sizeof(*level0));
+ level0->magic = Level0_MAGIC;
+ return level0;
+}
+
+//////// SWA public interface
+
+void VG_(initIterSWA) ( SparseWA* swa )
+{
+ swa->isUsed = 0;
+ if (swa->root) swa_PUSH(swa, 0, 0, swa->root, 1/*start_new_node*/);
+}
+
+Bool VG_(nextIterSWA)( SparseWA* swa,
+ /*OUT*/UWord* keyP, /*OUT*/UWord* valP )
+{
+ UWord p_key;
+ Int curr_ix;
+ void* curr_nd;
+ Int resume_point;
+
+ /* dispatch whatever's on top of the stack; what that actually
+ means is to return to some previously-saved context. */
+ dispatch:
+
+ if (swa->isUsed == 0)
+ return False;
+
+ swa_POP(swa, &p_key, &curr_ix, &curr_nd, &resume_point);
+ switch (resume_point) {
+ case 1: goto start_new_node;
+ case 2: goto resume_leaf_node;
+ case 3: goto resume_nonleaf_node;
+ default: vg_assert(0);
+ }
+
+ start_new_node:
+ if (*(UWord*)curr_nd == Level0_MAGIC) {
+ /* curr_nd is a leaf node */
+ Level0* level0 = (Level0*)curr_nd;
+ for (curr_ix = 0; curr_ix < 256; curr_ix++) {
+ if (swa_bitarray_read(level0->inUse, curr_ix) == 1) {
+ swa_PUSH(swa, p_key, curr_ix, curr_nd, 2/*resume_leaf_node*/);
+ *keyP = (p_key << 8) + (UWord)curr_ix;
+ *valP = level0->words[curr_ix];
+ return True;
+ resume_leaf_node:
+ level0 = (Level0*)curr_nd;
+ }
+ }
+ } else {
+ /* curr_nd is a non-leaf node */
+ LevelN* levelN;
+ vg_assert(*(UWord*)curr_nd == LevelN_MAGIC);
+ levelN = (LevelN*)curr_nd;
+ for (curr_ix = 0; curr_ix < 256; curr_ix++) {
+ if (levelN->child[curr_ix]) {
+ swa_PUSH(swa, p_key, curr_ix, curr_nd, 3/*resume_nonleaf_node*/);
+ p_key = (p_key << 8) + (UWord)curr_ix;
+ curr_nd = levelN->child[curr_ix];
+ goto start_new_node;
+ resume_nonleaf_node:
+ levelN = (LevelN*)curr_nd;
+ }
+ }
+ }
+
+ goto dispatch;
+}
+
+SparseWA* VG_(newSWA) ( void*(*alloc_nofail)(HChar* cc, SizeT),
+ HChar* cc,
+ void(*dealloc)(void*) )
+{
+ SparseWA* swa;
+ vg_assert(alloc_nofail);
+ vg_assert(cc);
+ vg_assert(dealloc);
+ swa = alloc_nofail( cc, sizeof(SparseWA) );
+ VG_(memset)(swa, 0, sizeof(*swa));
+ swa->alloc_nofail = alloc_nofail;
+ swa->cc = cc;
+ swa->dealloc = dealloc;
+ swa->root = NULL;
+ return swa;
+}
+
+static void swa_deleteSWA_wrk ( void(*dealloc)(void*), void* nd )
+{
+ Int i;
+ vg_assert(nd);
+ if (*(UWord*)nd == LevelN_MAGIC) {
+ LevelN* levelN = (LevelN*)nd;
+ for (i = 0; i < 256; i++) {
+ if (levelN->child[i]) {
+ swa_deleteSWA_wrk( dealloc, levelN->child[i] );
+ }
+ }
+ } else {
+ vg_assert(*(UWord*)nd == Level0_MAGIC);
+ }
+ dealloc(nd);
+}
+
+void VG_(deleteSWA) ( SparseWA* swa )
+{
+ if (swa->root)
+ swa_deleteSWA_wrk( swa->dealloc, swa->root );
+ swa->dealloc(swa);
+}
+
+Bool VG_(lookupSWA) ( SparseWA* swa,
+ /*OUT*/UWord* keyP, /*OUT*/UWord* valP,
+ UWord key )
+{
+ Int i;
+ UWord ix;
+ Level0* level0;
+ LevelN* levelN;
+ const Int _3_or_7 = sizeof(void*) - 1;
+
+ vg_assert(swa);
+ levelN = swa->root;
+
+ /* levels 3/7 .. 1 */
+ for (i = _3_or_7; i >= 1; i--) {
+ if (!levelN) return False;
+ vg_assert(levelN->level == i);
+ vg_assert(levelN->nInUse > 0);
+ ix = (key >> (i*8)) & 0xFF;
+ levelN = levelN->child[ix];
+ }
+
+ /* level0 */
+ level0 = (Level0*)levelN;
+ if (!level0) return False;
+ vg_assert(level0->magic == Level0_MAGIC);
+ vg_assert(level0->nInUse > 0);
+ ix = key & 0xFF;
+ if (swa_bitarray_read(level0->inUse, ix) == 0) return False;
+ *keyP = key; /* this is stupid. only here to make it look like WordFM */
+ *valP = level0->words[ix];
+ return True;
+}
+
+Bool VG_(addToSWA) ( SparseWA* swa, UWord key, UWord val )
+{
+ Int i;
+ UWord ix;
+ Level0* level0;
+ LevelN* levelN;
+ Bool already_present;
+ const Int _3_or_7 = sizeof(void*) - 1;
+
+ vg_assert(swa);
+
+ if (!swa->root)
+ swa->root = swa_new_LevelN(swa, _3_or_7);
+ levelN = swa->root;
+
+ /* levels 3/7 .. 2 */
+ for (i = _3_or_7; i >= 2; i--) {
+ /* levelN is the level-i map */
+ vg_assert(levelN);
+ vg_assert(levelN->level == i);
+ ix = (key >> (i*8)) & 0xFF;
+ if (levelN->child[ix] == NULL) {
+ levelN->child[ix] = swa_new_LevelN(swa, i-1);
+ levelN->nInUse++;
+ }
+ vg_assert(levelN->nInUse >= 1 && levelN->nInUse <= 256);
+ levelN = levelN->child[ix];
+ }
+
+ /* levelN is the level-1 map */
+ vg_assert(levelN);
+ vg_assert(levelN->level == 1);
+ ix = (key >> (1*8)) & 0xFF;
+ if (levelN->child[ix] == NULL) {
+ levelN->child[ix] = swa_new_Level0(swa);
+ levelN->nInUse++;
+ }
+ vg_assert(levelN->nInUse >= 1 && levelN->nInUse <= 256);
+ level0 = levelN->child[ix];
+
+ /* level0 is the level-0 map */
+ vg_assert(level0);
+ vg_assert(level0->magic == Level0_MAGIC);
+ ix = key & 0xFF;
+ if (swa_bitarray_read_then_set(level0->inUse, ix) == 0) {
+ level0->nInUse++;
+ already_present = False;
+ } else {
+ already_present = True;
+ }
+ vg_assert(level0->nInUse >= 1 && level0->nInUse <= 256);
+ level0->words[ix] = val;
+
+ return already_present;
+}
+
+Bool VG_(delFromSWA) ( SparseWA* swa,
+ /*OUT*/UWord* oldK, /*OUT*/UWord* oldV, UWord key )
+{
+ Int i;
+ UWord ix;
+ Level0* level0;
+ LevelN* levelN;
+ const Int _3_or_7 = sizeof(void*) - 1;
+
+ LevelN* visited[_3_or_7];
+ UWord visitedIx[_3_or_7];
+ Int nVisited = 0;
+
+ vg_assert(swa);
+ levelN = swa->root;
+
+ /* levels 3/7 .. 1 */
+ for (i = _3_or_7; i >= 1; i--) {
+ /* level i */
+ if (!levelN) return False;
+ vg_assert(levelN->level == i);
+ vg_assert(levelN->nInUse > 0);
+ ix = (key >> (i*8)) & 0xFF;
+ visited[nVisited] = levelN;
+ visitedIx[nVisited++] = ix;
+ levelN = levelN->child[ix];
+ }
+
+ /* level 0 */
+ level0 = (Level0*)levelN;
+ if (!level0) return False;
+ vg_assert(level0->magic == Level0_MAGIC);
+ vg_assert(level0->nInUse > 0);
+ ix = key & 0xFF;
+
+ if (swa_bitarray_read_then_clear(level0->inUse, ix) == 0)
+ return False;
+
+ *oldK = key; /* this is silly */
+ *oldV = level0->words[ix];
+
+ level0->nInUse--;
+ if (level0->nInUse > 0)
+ return True;
+
+ vg_assert(nVisited == _3_or_7);
+ swa->dealloc( level0 );
+
+ /* levels 1 .. 3/7 */
+ for (i = 1; i <= _3_or_7; i++) {
+ /* level i */
+ nVisited--;
+ vg_assert(visited[nVisited]->child[ visitedIx[nVisited] ]);
+ visited[nVisited]->child[ visitedIx[nVisited] ] = NULL;
+ visited[nVisited]->nInUse--;
+ vg_assert(visited[nVisited]->nInUse >= 0);
+ if (visited[nVisited]->nInUse > 0)
+ return True;
+ swa->dealloc(visited[nVisited]);
+ }
+
+ vg_assert(nVisited == 0);
+ swa->root = NULL;
+ return True;
+}
+
+/*--------------------------------------------------------------------*/
+/*--- end m_sparsewa.c ---*/
+/*--------------------------------------------------------------------*/
Added: trunk/coregrind/pub_core_sparsewa.h
===================================================================
--- trunk/coregrind/pub_core_sparsewa.h (rev 0)
+++ trunk/coregrind/pub_core_sparsewa.h 2008-12-06 22:07:35 UTC (rev 8806)
@@ -0,0 +1,51 @@
+
+/*--------------------------------------------------------------------*/
+/*--- An sparse array (of words) implementation. ---*/
+/*--- pub_core_sparsewa.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2008-2008 OpenWorks Ltd
+ in...@op...
+
+ 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 __PUB_CORE_SPARSEWA_H
+#define __PUB_CORE_SPARSEWA_H
+
+//--------------------------------------------------------------------
+// PURPOSE: Provides an implementation of a sparse array of host words
+// (UWord). The indices are themselves host words. The implementation
+// uses a 256-way radix tree, which is therefore 4 levels deep on a
+// 32-bit platform and 8 levels deep on a 64-bit platform.
+//--------------------------------------------------------------------
+
+// No core-only exports; everything in this module is visible to both
+// the core and tools.
+
+#include "pub_tool_sparsewa.h"
+
+#endif // __PUB_CORE_SPARSEWA_H
+
+/*--------------------------------------------------------------------*/
+/*--- end pub_core_sparsewa.h ---*/
+/*--------------------------------------------------------------------*/
Modified: trunk/include/Makefile.am
===================================================================
--- trunk/include/Makefile.am 2008-12-04 00:07:30 UTC (rev 8805)
+++ trunk/include/Makefile.am 2008-12-06 22:07:35 UTC (rev 8806)
@@ -27,6 +27,7 @@
pub_tool_redir.h \
pub_tool_replacemalloc.h \
pub_tool_signals.h \
+ pub_tool_sparsewa.h \
pub_tool_stacktrace.h \
pub_tool_threadstate.h \
pub_tool_tooliface.h \
Added: trunk/include/pub_tool_sparsewa.h
===================================================================
--- trunk/include/pub_tool_sparsewa.h (rev 0)
+++ trunk/include/pub_tool_sparsewa.h 2008-12-06 22:07:35 UTC (rev 8806)
@@ -0,0 +1,95 @@
+
+/*--------------------------------------------------------------------*/
+/*--- An sparse array (of words) implementation. ---*/
+/*--- pub_tool_sparsewa.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2008-2008 OpenWorks Ltd
+ in...@op...
+
+ 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 __PUB_TOOL_SPARSEWA_H
+#define __PUB_TOOL_SPARSEWA_H
+
+//--------------------------------------------------------------------
+// PURPOSE: (see coregrind/pub_core_sparsewa.h for details)
+//--------------------------------------------------------------------
+
+/////////////////////////////////////////////////////////
+// //
+// SparseWA: Interface //
+// //
+/////////////////////////////////////////////////////////
+
+// This interface is a very cut-down version of WordFM.
+// If you understand how to use WordFM then it should be
+// trivial to use SparseWA.
+
+typedef struct _SparseWA SparseWA; /* opaque */
+
+// Create a new one, using the specified allocator/deallocator
+SparseWA* VG_(newSWA) ( void*(*alloc_nofail)(HChar* cc, SizeT),
+ HChar* cc,
+ void(*dealloc)(void*) );
+
+// Delete one, and free all associated storage
+void VG_(deleteSWA) ( SparseWA* swa );
+
+// Add the binding key -> val to this swa. Any existing binding is
+// overwritten. Returned Bool is True iff a previous binding existed.
+Bool VG_(addToSWA) ( SparseWA* swa, UWord key, UWord val );
+
+// Delete key from swa, returning associated key and val if found.
+// Note: returning associated key is stupid (it can only be the
+// key you just specified). This behaviour is retained to make it
+// easier to migrate from WordFM. Returned Bool is True iff
+// the key was actually bound in the mapping.
+Bool VG_(delFromSWA) ( SparseWA* swa,
+ /*OUT*/UWord* oldK, /*OUT*/UWord* oldV,
+ UWord key );
+
+// Indexes swa at 'key' (or, if you like, looks up 'key' in the
+// mapping), and returns the associated value, if any, in *valP. For
+// compatibility with WordFM, 'key' is also returned in *keyP. Returned
+// Bool is True iff a binding for 'key' actually existed.
+Bool VG_(lookupSWA) ( SparseWA* swa,
+ /*OUT*/UWord* keyP, /*OUT*/UWord* valP,
+ UWord key );
+
+// Set up 'swa' for iteration.
+void VG_(initIterSWA) ( SparseWA* swa );
+
+// Get the next key/val pair. Behaviour undefined (highly likely
+// to segfault) if 'swa' has been modified since initIterSWA was
+// called. Returned Bool is False iff there are no more pairs
+// that can be extracted.
+Bool VG_(nextIterSWA)( SparseWA* swa,
+ /*OUT*/UWord* keyP, /*OUT*/UWord* valP );
+
+
+#endif // __PUB_TOOL_SPARSEWA_H
+
+/*--------------------------------------------------------------------*/
+/*--- end pub_tool_sparsewa.h ---*/
+/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2008-12-06 22:10:58
|
Author: sewardj
Date: 2008-12-06 22:10:54 +0000 (Sat, 06 Dec 2008)
New Revision: 8807
Log:
Use the new SparseWA data type, rather than WordFM, to implement the
(primary) mapping of the conflicting-access mechanism. This speeds
up Helgrind by 0% to 30% depending on the workload.
Modified:
trunk/helgrind/libhb_core.c
Modified: trunk/helgrind/libhb_core.c
===================================================================
--- trunk/helgrind/libhb_core.c 2008-12-06 22:07:35 UTC (rev 8806)
+++ trunk/helgrind/libhb_core.c 2008-12-06 22:10:54 UTC (rev 8807)
@@ -36,6 +36,7 @@
#include "pub_tool_libcprint.h"
#include "pub_tool_mallocfree.h"
#include "pub_tool_wordfm.h"
+#include "pub_tool_sparsewa.h"
#include "pub_tool_xarray.h"
#include "pub_tool_oset.h"
#include "pub_tool_threadstate.h"
@@ -2887,7 +2888,8 @@
}
///////////////////////////////////////////////////////
-//// Part (2): A WordFM guest-addr -> OldRef, that refer to (1)
+//// Part (2):
+/// A SparseWA guest-addr -> OldRef, that refers to (1)
///
// (UInt) `echo "Old Reference Information" | md5sum`
@@ -2921,34 +2923,12 @@
}
//////////// END OldRef group allocator
-//////////// BEGIN oldrefTree node group allocator
-static GroupAlloc oldrefnd_group_allocator;
-static void* oldrefnd_first_alloc = NULL;
-static void* alloc_OldRef_nd ( HChar* cc, SizeT n ) {
- if (UNLIKELY(oldrefnd_first_alloc == NULL)) {
- oldrefnd_first_alloc = HG_(zalloc)( "libhb.alloc_OldRef_nd.1", n );
- return oldrefnd_first_alloc;
- } else {
- return gal_Alloc_w_size_check ( &oldrefnd_group_allocator, n );
- }
-}
+static SparseWA* oldrefTree = NULL; /* SparseWA* OldRef* */
+static UWord oldrefGen = 0; /* current LRU generation # */
+static UWord oldrefTreeN = 0; /* # elems in oldrefTree */
+static UWord oldrefGenIncAt = 0; /* inc gen # when size hits this */
-static void free_OldRef_nd ( void* p ) {
- if (UNLIKELY(p == oldrefnd_first_alloc)) {
- HG_(free)( oldrefnd_first_alloc );
- oldrefnd_first_alloc = NULL;
- } else {
- gal_Free( &oldrefnd_group_allocator, p );
- }
-}
-//////////// BEGIN oldrefTree node group allocator
-
-static WordFM* oldrefTree = NULL; /* WordFM* Addr OldRef* */
-static UWord oldrefGen = 0; /* current LRU generation # */
-static UWord oldrefTreeN = 0; /* # elems in oldrefTree */
-static UWord oldrefGenIncAt = 0; /* inc gen # when size hits this */
-
static void event_map_bind ( Addr a, Thr* thr )
{
OldRef* ref;
@@ -2957,7 +2937,7 @@
UWord keyW, valW;
Bool b;
- b = VG_(lookupFM)( oldrefTree, &keyW, &valW, a );
+ b = VG_(lookupSWA)( oldrefTree, &keyW, &valW, a );
if (b) {
@@ -3037,7 +3017,7 @@
ref->accs[j].thr = NULL;
ref->accs[j].rcec = NULL;
}
- VG_(addToFM)( oldrefTree, a, (UWord)ref );
+ VG_(addToSWA)( oldrefTree, a, (UWord)ref );
oldrefTreeN++;
}
@@ -3056,7 +3036,7 @@
tl_assert(thr_acc);
- b = VG_(lookupFM)( oldrefTree, &keyW, &valW, a );
+ b = VG_(lookupSWA)( oldrefTree, &keyW, &valW, a );
if (b) {
ref = (OldRef*)valW;
tl_assert(keyW == a);
@@ -3117,21 +3097,12 @@
"libhb.event_map_init.3 (OldRef groups)",
HG_(free) );
- /* Oldref node group allocator */
- init_GroupAlloc ( &oldrefnd_group_allocator,
- VG_(getNodeSizeFM)(),
- 1000 /* OldRefs per group */,
- HG_(zalloc),
- "libhb.event_map_init.3 (OldRef tree node groups)",
- HG_(free) );
-
/* Oldref tree */
tl_assert(!oldrefTree);
- oldrefTree = VG_(newFM)(
- alloc_OldRef_nd,
+ oldrefTree = VG_(newSWA)(
+ HG_(zalloc),
"libhb.event_map_init.4 (oldref tree)",
- free_OldRef_nd,
- NULL /* use unboxed cmp */
+ HG_(free)
);
tl_assert(oldrefTree);
@@ -3169,8 +3140,8 @@
tl_assert(stats__ctxt_tab_curr <= stats__ctxt_tab_max);
/* visit all the referencing points, inc check ref counts */
- VG_(initIterFM)( oldrefTree );
- while (VG_(nextIterFM)( oldrefTree, &keyW, &valW )) {
+ VG_(initIterSWA)( oldrefTree );
+ while (VG_(nextIterSWA)( oldrefTree, &keyW, &valW )) {
oldref = (OldRef*)valW;
tl_assert(oldref->magic == OldRef_MAGIC);
for (i = 0; i < N_OLDREF_ACCS; i++) {
@@ -3211,7 +3182,8 @@
VG_(printf)("libhb: event_map GC at size %lu\n", oldrefTreeN);
/* Check our counting is sane */
- tl_assert(oldrefTreeN == VG_(sizeFM)( oldrefTree ));
+#warning Fixme1
+ //tl_assert(oldrefTreeN == VG_(sizeFM)( oldrefTree ));
/* Check the reference counts */
event_map__check_reference_counts( True/*before*/ );
@@ -3229,8 +3201,8 @@
/* genMap :: generation-number -> count-of-nodes-with-that-number */
- VG_(initIterFM)( oldrefTree );
- while ( VG_(nextIterFM)( oldrefTree, &keyW, &valW )) {
+ VG_(initIterSWA)( oldrefTree );
+ while ( VG_(nextIterSWA)( oldrefTree, &keyW, &valW )) {
UWord ea, key;
oldref = (OldRef*)valW;
@@ -3352,8 +3324,8 @@
/* This is the normal (expected) case. We discard any ref whose
generation number <= maxGen. */
- VG_(initIterFM)( oldrefTree );
- while (VG_(nextIterFM)( oldrefTree, &keyW, &valW )) {
+ VG_(initIterSWA)( oldrefTree );
+ while (VG_(nextIterSWA)( oldrefTree, &keyW, &valW )) {
oldref = (OldRef*)valW;
tl_assert(oldref->magic == OldRef_MAGIC);
if (oldref->gen <= maxGen) {
@@ -3375,8 +3347,8 @@
tree, so we need to have some other way of deciding which
refs to throw away. Just throw out half of them randomly. */
tl_assert(retained == oldrefTreeN);
- VG_(initIterFM)( oldrefTree );
- while (VG_(nextIterFM)( oldrefTree, &keyW, &valW )) {
+ VG_(initIterSWA)( oldrefTree );
+ while (VG_(nextIterSWA)( oldrefTree, &keyW, &valW )) {
UInt n;
oldref = (OldRef*)valW;
tl_assert(oldref->magic == OldRef_MAGIC);
@@ -3402,7 +3374,7 @@
for (i = 0; i < n2del; i++) {
Bool b;
Addr ga2del = *(Addr*)VG_(indexXA)( refs2del, i );
- b = VG_(delFromFM)( oldrefTree, &keyW, &valW, ga2del );
+ b = VG_(delFromSWA)( oldrefTree, &keyW, &valW, ga2del );
tl_assert(b);
tl_assert(keyW == ga2del);
oldref = (OldRef*)valW;
@@ -3421,7 +3393,8 @@
VG_(deleteXA)( refs2del );
- tl_assert( VG_(sizeFM)( oldrefTree ) == retained );
+#warning Fixme2
+ //tl_assert( VG_(sizeFM)( oldrefTree ) == retained );
oldrefTreeN = retained;
oldrefGenIncAt = oldrefTreeN; /* start new gen right away */
|
|
From: Tom H. <th...@cy...> - 2008-12-06 04:11:36
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-12-06 03:15:03 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 == 374 tests, 89 stderr failures, 1 stdout failure, 29 post failures == 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/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) helgrind/tests/bar_bad (stderr) helgrind/tests/bar_trivial (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/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc04_free_lock (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) 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) 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/mismatches (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) 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) |
|
From: Tom H. <th...@cy...> - 2008-12-06 04:04:00
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-12-06 03:05:04 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 == 471 tests, 24 stderr failures, 0 stdout failures, 0 post failures == exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (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/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) |
|
From: Tom H. <th...@cy...> - 2008-12-06 03:52:38
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-12-06 03:25: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 == 475 tests, 23 stderr failures, 4 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (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/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/x86/bug133694 (stdout) memcheck/tests/x86/bug133694 (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/cmdline1 (stdout) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) |
|
From: Tom H. <th...@cy...> - 2008-12-06 03:33:16
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-12-06 03:00:02 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 == 477 tests, 37 stderr failures, 3 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) helgrind/tests/bar_bad (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/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (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) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) 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) |