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
(9) |
|
2
(5) |
3
(8) |
4
(9) |
5
(9) |
6
(8) |
7
(4) |
8
(18) |
|
9
(9) |
10
(15) |
11
(4) |
12
(9) |
13
(9) |
14
(5) |
15
(4) |
|
16
(7) |
17
(15) |
18
(7) |
19
(13) |
20
(10) |
21
(10) |
22
(8) |
|
23
(4) |
24
(4) |
25
(6) |
26
(6) |
27
(5) |
28
(4) |
29
(4) |
|
30
(4) |
|
|
|
|
|
|
|
From: Tom H. <th...@cy...> - 2008-11-21 04:15:56
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-11-21 03:15: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 == 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-11-21 04:00:56
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-11-21 03:05: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 == 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-11-21 03:53:10
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-11-21 03:25:07 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-11-21 03:34:07
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-11-21 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) |
|
From: Dirk M. <dm...@gm...> - 2008-11-21 01:08:29
|
On Thursday 20 November 2008, Nicholas Nethercote wrote: > - In the docs, can you briefly explain why it's not read? Yes, but I don't want to go too much into the details because one usually doesn't document how to exploit possible security issues ;) > - Is it worth printing a warning message if it's not read? I think that's a good idea, added. > - A test would be nice. You can use the "prereq:" and "cleanup:' lines in > the .vgtest file to create and delete the .valgrindrc file. I'm not sure how to do that, given that the testsuite doesn't run as root, so I can't actually change the owner for testing purposes. or do you mean a verification that under normal conditions the file is still read? Greetings, Dirk |
|
From: <sv...@va...> - 2008-11-20 23:33:12
|
Author: sewardj
Date: 2008-11-20 23:33:05 +0000 (Thu, 20 Nov 2008)
New Revision: 8795
Log:
Helgrind's event-map garbage collector hammers VG_(OSetGen_Next).
Import an optimisation from the analogous function in m_wordfm.c.
Modified:
trunk/coregrind/m_oset.c
Modified: trunk/coregrind/m_oset.c
===================================================================
--- trunk/coregrind/m_oset.c 2008-11-20 23:17:01 UTC (rev 8794)
+++ trunk/coregrind/m_oset.c 2008-11-20 23:33:05 UTC (rev 8795)
@@ -751,15 +751,17 @@
// keeping this loop in this simpler form.
while (stackPop(t, &n, &i)) {
switch (i) {
- case 1:
+ case 1: case_1:
stackPush(t, n, 2);
- if (n->left) stackPush(t, n->left, 1);
+ /* if (n->left) stackPush(t, n->left, 1); */
+ if (n->left) { n = n->left; goto case_1; }
break;
case 2:
stackPush(t, n, 3);
return elem_of_node(n);
case 3:
- if (n->right) stackPush(t, n->right, 1);
+ /* if (n->right) stackPush(t, n->right, 1); */
+ if (n->right) { n = n->right; goto case_1; }
break;
}
}
|
|
From: <sv...@va...> - 2008-11-20 23:17:09
|
Author: sewardj
Date: 2008-11-20 23:17:01 +0000 (Thu, 20 Nov 2008)
New Revision: 8794
Log:
event_map_maybe_GC: use a flat array when computing the distribution
(counts) of generation numbers in the oldrefTree, instead of using a
WordFM as an associative array. This significantly accelerates the
event map garbage collector.
Modified:
trunk/helgrind/libhb_core.c
Modified: trunk/helgrind/libhb_core.c
===================================================================
--- trunk/helgrind/libhb_core.c 2008-11-20 11:20:50 UTC (rev 8793)
+++ trunk/helgrind/libhb_core.c 2008-11-20 23:17:01 UTC (rev 8794)
@@ -2218,6 +2218,7 @@
}
/* NOT TO BE CALLED FROM WITHIN libzsm. */
+__attribute__((noinline))
static void vts_tab__do_GC ( Bool show_stats )
{
UWord i, nTab, nLive, nFreed;
@@ -3008,14 +3009,18 @@
}
}
+__attribute__((noinline))
static void event_map_maybe_GC ( void )
{
OldRef* oldref;
UWord keyW, valW, retained, maxGen;
- WordFM* genMap;
XArray* refs2del;
Word i, j, n2del;
+ UWord* genMap = NULL;
+ UWord genMap_min = 0;
+ UWord genMap_size = 0;
+
if (LIKELY(oldrefTreeN < EVENT_MAP_GC_AT))
return;
@@ -3028,29 +3033,113 @@
/* Check the reference counts */
event_map__check_reference_counts( True/*before*/ );
- /* Compute the distribution of generation values in the ref tree */
+ /* Compute the distribution of generation values in the ref tree.
+ There are likely only to be a few different generation numbers
+ in the whole tree, but we don't know what they are. Hence use a
+ dynamically resized array of counters. The array is genMap[0
+ .. genMap_size-1], where genMap[0] is the count for the
+ generation number genMap_min, genMap[1] is the count for
+ genMap_min+1, etc. If a new number is seen outside the range
+ [genMap_min .. genMap_min + genMap_size - 1] then the array is
+ copied into a larger array, and genMap_min and genMap_size are
+ adjusted accordingly. */
+
/* genMap :: generation-number -> count-of-nodes-with-that-number */
- genMap = VG_(newFM)( HG_(zalloc), "libhb.emmG.1",
- HG_(free), NULL );
VG_(OSetGen_ResetIter)( oldrefTree );
while ( (oldref = VG_(OSetGen_Next)( oldrefTree )) ) {
+
+ UWord ea;
UWord key = oldref->gen;
- keyW = valW = 0;
- if (VG_(lookupFM)(genMap, &keyW, &valW, key )) {
- tl_assert(keyW == key);
- tl_assert(valW > 0);
+
+ /* BEGIN find 'ea', which is the index in genMap holding the
+ count for generation number 'key'. */
+ if (UNLIKELY(genMap == NULL)) {
+ /* deal with the first key to be seen, so that the following
+ cases don't need to handle the complexity of a NULL count
+ array. */
+ genMap_min = key;
+ genMap_size = 1;
+ genMap = HG_(zalloc)( "libhb.emmG.1a",
+ genMap_size * sizeof(UWord) );
+ ea = 0;
+ if (0) VG_(printf)("(%lu) case 1 [%lu .. %lu]\n",
+ key, genMap_min, genMap_min+genMap_size- 1 );
}
- /* now valW is the old count for generation 'key' */
- VG_(addToFM)(genMap, key, valW+1);
+ else
+ if (LIKELY(key >= genMap_min && key < genMap_min + genMap_size)) {
+ /* this is the expected (almost-always-happens) case: 'key'
+ is already mapped in the array. */
+ ea = key - genMap_min;
+ }
+ else
+ if (key < genMap_min) {
+ /* 'key' appears before the start of the current array.
+ Extend the current array by allocating a larger one and
+ copying the current one to the upper end of it. */
+ Word more;
+ UWord* map2;
+ more = genMap_min - key;
+ tl_assert(more > 0);
+ map2 = HG_(zalloc)( "libhb.emmG.1b",
+ (genMap_size + more) * sizeof(UWord) );
+ VG_(memcpy)( &map2[more], genMap, genMap_size * sizeof(UWord) );
+ HG_(free)( genMap );
+ genMap = map2;
+ genMap_size += more;
+ genMap_min -= more;
+ ea = 0;
+ tl_assert(genMap_min == key);
+ if (0) VG_(printf)("(%lu) case 2 [%lu .. %lu]\n",
+ key, genMap_min, genMap_min+genMap_size- 1 );
+ }
+ else {
+ /* 'key' appears after the end of the current array. Extend
+ the current array by allocating a larger one and copying
+ the current one to the lower end of it. */
+ Word more;
+ UWord* map2;
+ tl_assert(key >= genMap_min + genMap_size);
+ more = key - (genMap_min + genMap_size) + 1;
+ tl_assert(more > 0);
+ map2 = HG_(zalloc)( "libhb.emmG.1c",
+ (genMap_size + more) * sizeof(UWord) );
+ VG_(memcpy)( &map2[0], genMap, genMap_size * sizeof(UWord) );
+ HG_(free)( genMap );
+ genMap = map2;
+ genMap_size += more;
+ ea = genMap_size - 1;;
+ tl_assert(genMap_min + genMap_size - 1 == key);
+ if (0) VG_(printf)("(%lu) case 3 [%lu .. %lu]\n",
+ key, genMap_min, genMap_min+genMap_size- 1 );
+ }
+ /* END find 'ea' from 'key' */
+
+ tl_assert(ea >= 0 && ea < genMap_size);
+ /* and the whole point of this elaborate compuation of 'ea' is .. */
+ genMap[ea]++;
}
- tl_assert(VG_(sizeFM)(genMap) > 0);
+ tl_assert(genMap);
+ tl_assert(genMap_size > 0);
+ /* Sanity check what we just computed */
+ { UWord sum = 0;
+ for (i = 0; i < genMap_size; i++) {
+ if (0) VG_(printf)(" xxx: gen %ld has %lu\n",
+ i + genMap_min, genMap[i] );
+ sum += genMap[i];
+ }
+ tl_assert(sum == oldrefTreeN);
+ }
+
+ /* Figure out how many generations to throw away */
retained = oldrefTreeN;
maxGen = 0;
- VG_(initIterFM)( genMap );
- while (VG_(nextIterFM)( genMap, &keyW, &valW )) {
+
+ for (i = 0; i < genMap_size; i++) {
+ keyW = i + genMap_min;
+ valW = genMap[i];
tl_assert(keyW > 0); /* can't allow a generation # 0 */
if (0) VG_(printf)(" XXX: gen %lu has %lu\n", keyW, valW );
tl_assert(keyW >= maxGen);
@@ -3063,9 +3152,8 @@
break;
}
}
- VG_(doneIterFM)( genMap );
- VG_(deleteFM)( genMap, NULL, NULL );
+ HG_(free)(genMap);
tl_assert(retained >= 0 && retained <= oldrefTreeN);
@@ -3073,7 +3161,7 @@
delete. We can't simultaneously traverse the tree and delete
stuff from it, so first we need to copy them off somewhere
else. (sigh) */
- refs2del = VG_(newXA)( HG_(zalloc), "libhb.emmG.1",
+ refs2del = VG_(newXA)( HG_(zalloc), "libhb.emmG.2",
HG_(free), sizeof(OldRef*) );
if (retained < oldrefTreeN) {
|
|
From: <sv...@va...> - 2008-11-20 11:20:55
|
Author: sewardj
Date: 2008-11-20 11:20:50 +0000 (Thu, 20 Nov 2008)
New Revision: 8793
Log:
Re-set constraints in 'consistent' style after a race is detected,
instead of the more aggressive setting, which appeared to cause a
large number of extra race reports.
Modified:
trunk/helgrind/libhb_core.c
Modified: trunk/helgrind/libhb_core.c
===================================================================
--- trunk/helgrind/libhb_core.c 2008-11-20 00:01:21 UTC (rev 8792)
+++ trunk/helgrind/libhb_core.c 2008-11-20 11:20:50 UTC (rev 8793)
@@ -3288,8 +3288,15 @@
tl_assert(ordxx == POrd_EQ || ordxx == POrd_LT);
svNew = MSM_RACE2ERR
? SVal__mkE()
+#if 0
+ //std
: SVal__mkC( VtsID__join2(wmini,tviR),
VtsID__join2(wmini,tviW) );
+#else
+ // relaxed
+ : SVal__mkC( VtsID__join2(rmini,tviR),
+ VtsID__join2(wmini,tviW) );
+#endif
record_race_info( acc_thr, acc_addr, szB, False/*!isWrite*/,
svOld, svNew );
goto out;
@@ -3358,8 +3365,15 @@
tl_assert(ordxx == POrd_EQ || ordxx == POrd_LT);
svNew = MSM_RACE2ERR
? SVal__mkE()
+#if 0
+ // std
: SVal__mkC( VtsID__join2(wmini,tviR),
VtsID__join2(wmini,tviW) );
+#else
+ // relaxed
+ : SVal__mkC( VtsID__join2(rmini,tviR),
+ VtsID__join2(wmini,tviW) );
+#endif
record_race_info( acc_thr, acc_addr, szB, True/*isWrite*/,
svOld, svNew );
goto out;
|
|
From: Bart V. A. <bar...@gm...> - 2008-11-20 07:10:17
|
On Thu, Nov 20, 2008 at 12:59 AM, <sv...@va...> wrote: ... > Log: > glibc 2.9 support ... > +# Errors to suppress by default with glibc 2.8.x Hello Dirk, Nice to see that you added glibc 2.9 support. I guess that the above comment was copied from the glibc 2.8 suppression file and still needs to be updated ? Bart. |
|
From: Tom H. <th...@cy...> - 2008-11-20 04:15:34
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-11-20 03:15:03 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 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) ================================================= == 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 == 376 tests, 91 stderr failures, 2 stdout failures, 29 post failures == drd/tests/bar_bad (stderr) drd/tests/bar_trivial (stdout) drd/tests/bar_trivial (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/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) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Nov 20 03:47:39 2008 --- new.short Thu Nov 20 04:15:30 2008 *************** *** 8,13 **** ! == 376 tests, 91 stderr failures, 2 stdout failures, 29 post failures == ! drd/tests/bar_bad (stderr) ! drd/tests/bar_trivial (stdout) ! drd/tests/bar_trivial (stderr) exp-ptrcheck/tests/bad_percentify (stderr) --- 8,10 ---- ! == 374 tests, 89 stderr failures, 1 stdout failure, 29 post failures == exp-ptrcheck/tests/bad_percentify (stderr) |
|
From: Tom H. <th...@cy...> - 2008-11-20 04:01:40
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-11-20 03:05:06 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 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) ================================================= == 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 == 471 tests, 23 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/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) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Nov 20 03:30:13 2008 --- new.short Thu Nov 20 04:01:30 2008 *************** *** 8,10 **** ! == 471 tests, 23 stderr failures, 0 stdout failures, 0 post failures == exp-ptrcheck/tests/base (stderr) --- 8,10 ---- ! == 471 tests, 24 stderr failures, 0 stdout failures, 0 post failures == exp-ptrcheck/tests/base (stderr) *************** *** 14,15 **** --- 14,16 ---- exp-ptrcheck/tests/pth_specific (stderr) + helgrind/tests/bar_bad (stderr) helgrind/tests/hg03_inherit (stderr) |
|
From: Tom H. <th...@cy...> - 2008-11-20 03:50:42
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-11-20 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-11-20 03:33:57
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-11-20 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) |
|
From: Nicholas N. <nj...@cs...> - 2008-11-20 03:17:10
|
On Thu, 20 Nov 2008, Dirk Mueller wrote: > valgrind reads by default a .valgrindrc from the $PWD. in case you run binary > from a publically writeable directory on a multi user machine, any other user > can install you a config file and possibly execute code under your user (via > the db-command and db-attach=yes). > > this is a bit related to a gdb vulnerability pointed out some years ago and > fixed back then. I've ported the same patch idea to valgrind, namely to reject > any .valgrindrc which is not owned by the user or is world writeable. > > This is CVE-2008-4865, which is already public. > > Patch below, ok for commit? Sounds like a good idea. Three comments: - In the docs, can you briefly explain why it's not read? - Is it worth printing a warning message if it's not read? - A test would be nice. You can use the "prereq:" and "cleanup:' lines in the .vgtest file to create and delete the .valgrindrc file. Thanks! Nick |
|
From: <sv...@va...> - 2008-11-20 00:01:25
|
Author: dirk
Date: 2008-11-20 00:01:21 +0000 (Thu, 20 Nov 2008)
New Revision: 8792
Log:
add glibc 2.9 support to changelog
Modified:
trunk/docs/internals/3_3_BUGSTATUS.txt
Modified: trunk/docs/internals/3_3_BUGSTATUS.txt
===================================================================
--- trunk/docs/internals/3_3_BUGSTATUS.txt 2008-11-19 23:59:35 UTC (rev 8791)
+++ trunk/docs/internals/3_3_BUGSTATUS.txt 2008-11-20 00:01:21 UTC (rev 8792)
@@ -158,6 +158,8 @@
167483 LOW pend __libc_freeres error valgrind with shared libraries with
multiple --rpath (w/ repro case)
+n-i-bz Fixd 8760 glibc 2.9 support
+
**--P1--**
167640 HIGH,WF pend un-efficient memory management cause segmentation fault
w/ test case
|
|
From: <sv...@va...> - 2008-11-19 23:59:40
|
Author: dirk
Date: 2008-11-19 23:59:35 +0000 (Wed, 19 Nov 2008)
New Revision: 8791
Log:
glibc 2.9 support
Added:
branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp
Modified:
branches/VALGRIND_3_3_BRANCH/Makefile.am
branches/VALGRIND_3_3_BRANCH/configure.in
Modified: branches/VALGRIND_3_3_BRANCH/Makefile.am
===================================================================
--- branches/VALGRIND_3_3_BRANCH/Makefile.am 2008-11-19 23:58:36 UTC (rev 8790)
+++ branches/VALGRIND_3_3_BRANCH/Makefile.am 2008-11-19 23:59:35 UTC (rev 8791)
@@ -21,7 +21,7 @@
SUPP_FILES = \
glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp glibc-2.5.supp \
- glibc-2.6.supp glibc-2.7.supp glibc-2.8.supp \
+ glibc-2.6.supp glibc-2.7.supp glibc-2.8.supp glibc-2.9.supp \
aix5libc.supp xfree-3.supp xfree-4.supp \
glibc-2.34567-NPTL-helgrind.supp \
glibc-2.2-LinuxThreads-helgrind.supp \
Modified: branches/VALGRIND_3_3_BRANCH/configure.in
===================================================================
--- branches/VALGRIND_3_3_BRANCH/configure.in 2008-11-19 23:58:36 UTC (rev 8790)
+++ branches/VALGRIND_3_3_BRANCH/configure.in 2008-11-19 23:59:35 UTC (rev 8791)
@@ -479,6 +479,16 @@
],
libc="2.8")
+AC_EGREP_CPP([GLIBC_29], [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 9)
+ GLIBC_29
+ #endif
+#endif
+],
+libc="2.9")
+
AC_EGREP_CPP([AIX5_LIBC], [
#include <standards.h>
#if defined(_AIXVERSION_510) || defined(_AIXVERSION_520) || defined(_AIXVERSION_530)
@@ -535,6 +545,12 @@
DEFAULT_SUPP="glibc-2.8.supp ${DEFAULT_SUPP}"
DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
;;
+ 2.9)
+ AC_MSG_RESULT(2.9 family)
+ AC_DEFINE([GLIBC_2_9], 1, [Define to 1 if you're using glibc 2.9.x])
+ DEFAULT_SUPP="glibc-2.9.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ ;;
aix5)
AC_MSG_RESULT(AIX 5.1 or 5.2 or 5.3)
AC_DEFINE([AIX5_LIBC], 1, [Define to 1 if you're using AIX 5.1 or 5.2 or 5.3])
@@ -543,7 +559,7 @@
*)
AC_MSG_RESULT(unsupported version)
- AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.7])
+ AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.9])
AC_MSG_ERROR([or AIX 5.1 or 5.2 or 5.3 libc])
;;
esac
Copied: branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp (from rev 8789, branches/VALGRIND_3_3_BRANCH/glibc-2.8.supp)
===================================================================
--- branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp (rev 0)
+++ branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp 2008-11-19 23:59:35 UTC (rev 8791)
@@ -0,0 +1,95 @@
+
+# Errors to suppress by default with glibc 2.8.x
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+{
+ dl-hack3-cond-1
+ Memcheck:Cond
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+}
+{
+ dl-hack3-cond-2
+ Memcheck:Cond
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libc-2.8*.so*
+}
+{
+ dl-hack3-cond-3
+ Memcheck:Cond
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libc-2.8*.so*
+ obj:/lib*/libc-2.8*.so*
+}
+{
+ dl-hack3-cond-4
+ Memcheck:Cond
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libdl-2.8*.so*
+}
+
+{
+ dl-hack4-64bit-addr-1
+ Memcheck:Addr8
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+}
+{
+ dl-hack4-64bit-addr-2
+ Memcheck:Addr8
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libc-2.8*.so*
+}
+{
+ dl-hack4-64bit-addr-3
+ Memcheck:Addr8
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libdl-2.8*.so*
+}
+
+{
+ dl-hack5-32bit-addr-1
+ Memcheck:Addr4
+ obj:/lib/ld-2.8*.so
+ obj:/lib/ld-2.8*.so
+ obj:/lib/ld-2.8*.so
+}
+{
+ dl-hack5-32bit-addr-3
+ Memcheck:Addr4
+ obj:/lib/ld-2.8*.so
+ obj:/lib/ld-2.8*.so
+ obj:/lib/libdl-2.8*.so*
+}
+{
+ dl-hack5-32bit-addr-4
+ Memcheck:Addr4
+ obj:/lib/ld-2.8*.so
+ obj:/lib/libdl-2.8*.so*
+ obj:/lib/ld-2.8*.so
+}
Property changes on: branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp
___________________________________________________________________
Name: svn:mergeinfo
+
|
|
From: <sv...@va...> - 2008-11-19 23:58:44
|
Author: dirk
Date: 2008-11-19 23:58:36 +0000 (Wed, 19 Nov 2008)
New Revision: 8790
Log:
glibc 2.9 support
Modified:
trunk/configure.in
Modified: trunk/configure.in
===================================================================
--- trunk/configure.in 2008-11-19 17:51:44 UTC (rev 8789)
+++ trunk/configure.in 2008-11-19 23:58:36 UTC (rev 8790)
@@ -518,6 +518,16 @@
],
GLIBC_VERSION="2.8")
+AC_EGREP_CPP([GLIBC_29], [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 9)
+ GLIBC_29
+ #endif
+#endif
+],
+GLIBC_VERSION="2.9")
+
AC_EGREP_CPP([AIX5_LIBC], [
#include <standards.h>
#if defined(_AIXVERSION_510) || defined(_AIXVERSION_520) || defined(_AIXVERSION_530)
@@ -581,7 +591,13 @@
DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
;;
-
+ 2.9)
+ AC_MSG_RESULT(2.9 family)
+ AC_DEFINE([GLIBC_2_9], 1, [Define to 1 if you're using glibc 2.9.x])
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
aix5)
AC_MSG_RESULT(AIX 5.1 or 5.2 or 5.3)
AC_DEFINE([AIX5_LIBC], 1, [Define to 1 if you're using AIX 5.1 or 5.2 or 5.3])
@@ -590,7 +606,7 @@
*)
AC_MSG_RESULT(unsupported version)
- AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.8])
+ AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.9])
AC_MSG_ERROR([or AIX 5.1 or 5.2 or 5.3 GLIBC_VERSION])
;;
esac
|
|
From: Dirk M. <dm...@gm...> - 2008-11-19 23:58:14
|
Hi, valgrind reads by default a .valgrindrc from the $PWD. in case you run binary from a publically writeable directory on a multi user machine, any other user can install you a config file and possibly execute code under your user (via the db-command and db-attach=yes). this is a bit related to a gdb vulnerability pointed out some years ago and fixed back then. I've ported the same patch idea to valgrind, namely to reject any .valgrindrc which is not owned by the user or is world writeable. This is CVE-2008-4865, which is already public. Patch below, ok for commit? Greetings, Dirk |
|
From: <sv...@va...> - 2008-11-19 17:51:50
|
Author: bart Date: 2008-11-19 17:51:44 +0000 (Wed, 19 Nov 2008) New Revision: 8789 Log: Added prereq clause. Modified: trunk/drd/tests/bar_bad.vgtest trunk/drd/tests/bar_trivial.vgtest Modified: trunk/drd/tests/bar_bad.vgtest =================================================================== --- trunk/drd/tests/bar_bad.vgtest 2008-11-19 16:35:15 UTC (rev 8788) +++ trunk/drd/tests/bar_bad.vgtest 2008-11-19 17:51:44 UTC (rev 8789) @@ -1,2 +1,3 @@ +prereq: ./supported_libpthread prog: bar_bad vgopts: -q Modified: trunk/drd/tests/bar_trivial.vgtest =================================================================== --- trunk/drd/tests/bar_trivial.vgtest 2008-11-19 16:35:15 UTC (rev 8788) +++ trunk/drd/tests/bar_trivial.vgtest 2008-11-19 17:51:44 UTC (rev 8789) @@ -1,2 +1,3 @@ +prereq: ./supported_libpthread prog: bar_trivial vgopts: -q |
|
From: <sv...@va...> - 2008-11-19 16:35:21
|
Author: sewardj
Date: 2008-11-19 16:35:15 +0000 (Wed, 19 Nov 2008)
New Revision: 8788
Log:
Don't put raced-on locations in an (E)rror state; instead leave them
in a (C)onstraint state. The former approach can cause races to be
missed. Also, update state machine slightly following re-analysis
thereof.
Modified:
trunk/helgrind/libhb_core.c
Modified: trunk/helgrind/libhb_core.c
===================================================================
--- trunk/helgrind/libhb_core.c 2008-11-19 16:33:59 UTC (rev 8787)
+++ trunk/helgrind/libhb_core.c 2008-11-19 16:35:15 UTC (rev 8788)
@@ -3184,12 +3184,33 @@
// //
/////////////////////////////////////////////////////////
+/* Logic in msm_read/msm_write updated/verified after re-analysis,
+ 19 Nov 08. */
+
#define MSM_CONFACC 1
-#define MSM_RACE2ERR 1
-
#define MSM_CHECK 0
+/* 19 Nov 08: it seems that MSM_RACE2ERR == 1 is a bad idea. When
+ nonzero, the effect is that when a race is detected for a location,
+ that location is put into a special 'error' state and no further
+ checking of it is done until it returns to a 'normal' state, which
+ requires it to be deallocated and reallocated.
+
+ This is a bad idea, because of the interaction with suppressions.
+ Suppose there is a race on the location, but the error is
+ suppressed. The location now is marked as in-error. Now any
+ subsequent race -- including ones we want to see -- will never be
+ detected until the location is deallocated and reallocated.
+
+ Hence set MSM_CHECK to zero. This causes raced-on locations to
+ remain in the normal 'C' (constrained) state, but places on them
+ the constraint that the next accesses happen-after both the
+ existing constraint and the relevant vector clock of the thread
+ doing the racing access.
+*/
+#define MSM_RACE2ERR 0
+
static ULong stats__msm_read = 0;
static ULong stats__msm_read_change = 0;
static ULong stats__msm_write = 0;
@@ -3262,9 +3283,13 @@
svNew = SVal__mkC( rmini, VtsID__join2(wmini, tviW) );
goto out;
} else {
+ /* assert on sanity of constraints. */
+ POrd ordxx = VtsID__getOrdering(rmini,wmini);
+ tl_assert(ordxx == POrd_EQ || ordxx == POrd_LT);
svNew = MSM_RACE2ERR
? SVal__mkE()
- : SVal__mkC( rmini, VtsID__join2(wmini,tviR) );
+ : SVal__mkC( VtsID__join2(wmini,tviR),
+ VtsID__join2(wmini,tviW) );
record_race_info( acc_thr, acc_addr, szB, False/*!isWrite*/,
svOld, svNew );
goto out;
@@ -3326,10 +3351,14 @@
svNew = SVal__mkC( tviW, tviW );
goto out;
} else {
+ VtsID tviR = acc_thr->viR;
VtsID rmini = SVal__unC_Rmin(svOld);
+ /* assert on sanity of constraints. */
+ POrd ordxx = VtsID__getOrdering(rmini,wmini);
+ tl_assert(ordxx == POrd_EQ || ordxx == POrd_LT);
svNew = MSM_RACE2ERR
? SVal__mkE()
- : SVal__mkC( VtsID__join2(rmini,tviW),
+ : SVal__mkC( VtsID__join2(wmini,tviR),
VtsID__join2(wmini,tviW) );
record_race_info( acc_thr, acc_addr, szB, True/*isWrite*/,
svOld, svNew );
|
|
From: <sv...@va...> - 2008-11-19 16:34:05
|
Author: sewardj Date: 2008-11-19 16:33:59 +0000 (Wed, 19 Nov 2008) New Revision: 8787 Log: Fix comment typo. Modified: trunk/helgrind/hg_intercepts.c Modified: trunk/helgrind/hg_intercepts.c =================================================================== --- trunk/helgrind/hg_intercepts.c 2008-11-19 11:52:14 UTC (rev 8786) +++ trunk/helgrind/hg_intercepts.c 2008-11-19 16:33:59 UTC (rev 8787) @@ -1585,7 +1585,7 @@ /*----------------------------------------------------------------*/ /*--- Replacements for basic string functions, that don't ---*/ -/*--- the input arrays. ---*/ +/*--- overrun the input arrays. ---*/ /*----------------------------------------------------------------*/ /* Copied verbatim from memcheck/mc_replace_strmem.c. When copying |
|
From: <sv...@va...> - 2008-11-19 11:52:19
|
Author: sewardj
Date: 2008-11-19 11:52:14 +0000 (Wed, 19 Nov 2008)
New Revision: 8786
Log:
Add informal correctness argument for the logic in
evh__HG_PTHREAD_BARRIER_WAIT_PRE, as it is somewhat subtle.
Also, free the SO after use, else there's a space leak.
Modified:
trunk/helgrind/hg_main.c
Modified: trunk/helgrind/hg_main.c
===================================================================
--- trunk/helgrind/hg_main.c 2008-11-19 10:41:55 UTC (rev 8785)
+++ trunk/helgrind/hg_main.c 2008-11-19 11:52:14 UTC (rev 8786)
@@ -2670,6 +2670,46 @@
static void evh__HG_PTHREAD_BARRIER_WAIT_PRE ( ThreadId tid,
void* barrier )
{
+ /* This function gets called after a client thread calls
+ pthread_barrier_wait but before it arrives at the real
+ pthread_barrier_wait.
+
+ Why is the following correct? It's a bit subtle.
+
+ If this is not the last thread arriving at the barrier, we simply
+ note its presence and return. Because valgrind (at least as of
+ Nov 08) is single threaded, we are guaranteed safe from any race
+ conditions when in this function -- no other client threads are
+ running.
+
+ If this is the last thread, then we are again the only running
+ thread. All the other threads will have either arrived at the
+ real pthread_barrier_wait or are on their way to it, but in any
+ case are guaranteed not to be able to move past it, because this
+ thread is currently in this function and so has not yet arrived
+ at the real pthread_barrier_wait. That means that:
+
+ 1. While we are in this function, none of the other threads
+ waiting at the barrier can move past it.
+
+ 2. When this function returns (and simulated execution resumes),
+ this thread and all other waiting threads will be able to move
+ past the real barrier.
+
+ Because of this, it is now safe to update the vector clocks of
+ all threads, to represent the fact that they all arrived at the
+ barrier and have all moved on. There is no danger of any
+ complications to do with some threads leaving the barrier and
+ racing back round to the front, whilst others are still leaving
+ (which is the primary source of complication in correct handling/
+ implementation of barriers). That can't happen because we update
+ here our data structures so as to indicate that the threads have
+ passed the barrier, even though, as per (2) above, they are
+ guaranteed not to pass the barrier until we return.
+
+ This relies crucially on Valgrind being single threaded. If that
+ changes, this will need to be reconsidered.
+ */
Thread* thr;
Bar* bar;
SO* so;
@@ -2734,7 +2774,11 @@
}
/* finally, we must empty out the waiting vector */
- VG_(dropTailXA)(bar->waiting, VG_(sizeXA)(bar->waiting));
+ VG_(dropTailXA)(bar->waiting, VG_(sizeXA)(bar->waiting));
+
+ /* and we don't need this any more. Perhaps a stack-allocated
+ SO would be better? */
+ libhb_so_dealloc(so);
}
|
|
From: <sv...@va...> - 2008-11-19 10:42:02
|
Author: sewardj
Date: 2008-11-19 10:41:55 +0000 (Wed, 19 Nov 2008)
New Revision: 8785
Log:
Add some suppressions for Qt4-related code.
Modified:
trunk/glibc-2.34567-NPTL-helgrind.supp
Modified: trunk/glibc-2.34567-NPTL-helgrind.supp
===================================================================
--- trunk/glibc-2.34567-NPTL-helgrind.supp 2008-11-19 10:40:56 UTC (rev 8784)
+++ trunk/glibc-2.34567-NPTL-helgrind.supp 2008-11-19 10:41:55 UTC (rev 8785)
@@ -504,8 +504,42 @@
######------ qt4 specific (GNU mangling) ------######
{
- helgrind-qt4-QMutex::lock()-twice
+ helgrind-qt4---QMutex::lock()-QMutex::lock()
Helgrind:Race
fun:_ZN6QMutex4lockEv
fun:_ZN6QMutex4lockEv
}
+
+{
+ helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*)
+ Helgrind:Race
+ fun:pthread_setspecific
+ fun:_ZN14QThreadPrivate5startEPv
+}
+
+{
+ helgrind-qt4---free_stacks-__deallocate_stack
+ Helgrind:Race
+ fun:free_stacks
+ fun:__deallocate_stack
+}
+
+{
+ helgrind---pthread_setspecific
+ Helgrind:Race
+ fun:pthread_setspecific
+}
+
+{
+ helgrind---pthread_getspecific
+ Helgrind:Race
+ fun:pthread_getspecific
+}
+
+{
+ helgrind---ld.so-...-dlsym
+ Helgrind:Race
+ obj:/lib*/ld-2.*so*
+ ...
+ fun:dlsym
+}
|
|
From: <sv...@va...> - 2008-11-19 10:41:05
|
Author: sewardj
Date: 2008-11-19 10:40:56 +0000 (Wed, 19 Nov 2008)
New Revision: 8784
Log:
* Update Qt4 interceptors and add, as comments, findings of analysis
of Qt4 threading functions.
* Add a bunch of replacements for strlen etc, to avoid races from
optimised glibc versions that overread memory. Copied directly from
memcheck/mc_replace_strmem.c.
Modified:
trunk/helgrind/hg_intercepts.c
Modified: trunk/helgrind/hg_intercepts.c
===================================================================
--- trunk/helgrind/hg_intercepts.c 2008-11-18 23:40:00 UTC (rev 8783)
+++ trunk/helgrind/hg_intercepts.c 2008-11-19 10:40:56 UTC (rev 8784)
@@ -46,6 +46,7 @@
*/
#include "pub_tool_basics.h"
+#include "pub_tool_redir.h"
#include "valgrind.h"
#include "helgrind.h"
@@ -1258,34 +1259,93 @@
/*--- Qt 4 threading functions (w/ GNU name mangling) ---*/
/*----------------------------------------------------------------*/
-/* Handled: QMutex::lock()
- QMutex::unlock()
- QMutex::tryLock
- QReadWriteLock::lockForRead()
- QReadWriteLock::lockForWrite()
- QReadWriteLock::unlock()
+/* Handled:
+ QMutex::lock()
+ QMutex::unlock()
+ QMutex::tryLock()
+ QMutex::tryLock(int)
- Unhandled: QMutex::tryLock(int)
- QReadWriteLock::tryLockForRead(int)
- QReadWriteLock::tryLockForRead()
- QReadWriteLock::tryLockForWrite(int)
- QReadWriteLock::tryLockForWrite()
+ QMutex::QMutex(QMutex::RecursionMode) _ZN6QMutexC1ENS_13RecursionModeE
+ QMutex::QMutex(QMutex::RecursionMode) _ZN6QMutexC2ENS_13RecursionModeE
+ QMutex::~QMutex() _ZN6QMutexD1Ev
+ QMutex::~QMutex() _ZN6QMutexD2Ev
- maybe not the next 3; qt-4.3.1 on Unix merely
- implements QWaitCondition using pthread_cond_t
- QWaitCondition::wait(QMutex*, unsigned long)
- QWaitCondition::wakeAll()
- QWaitCondition::wakeOne()
+ Unhandled:
+ QReadWriteLock::lockForRead()
+ QReadWriteLock::lockForWrite()
+ QReadWriteLock::unlock()
+ QReadWriteLock::tryLockForRead(int)
+ QReadWriteLock::tryLockForRead()
+ QReadWriteLock::tryLockForWrite(int)
+ QReadWriteLock::tryLockForWrite()
+
+ QWaitCondition::wait(QMutex*, unsigned long)
+ QWaitCondition::wakeAll()
+ QWaitCondition::wakeOne()
+
+ QSemaphore::*
*/
+/* More comments, 19 Nov 08, based on assessment of qt-4.5.0TP1,
+ at least on Unix:
+ It's apparently only necessary to intercept QMutex, since that is
+ not implemented using pthread_mutex_t; instead Qt4 has its own
+ implementation based on atomics (to check the non-contended case)
+ and pthread_cond_wait (to wait in the contended case).
+
+ QReadWriteLock is built on top of QMutex, counters, and a wait
+ queue. So we don't need to handle it specially once QMutex
+ handling is correct -- presumably the dependencies through QMutex
+ are sufficient to avoid any false race reports. On the other hand,
+ it is an open question whether too many dependencies are observed
+ -- in which case we may miss races (false negatives). I suspect
+ this is likely to be the case, unfortunately.
+
+ QWaitCondition is built on pthread_cond_t, pthread_mutex_t, QMutex
+ and QReadWriteLock. Same compositional-correctness justificiation
+ and limitations as fro QReadWriteLock.
+
+ Ditto QSemaphore (from cursory examination).
+
+ Does it matter that only QMutex is handled directly? Open
+ question. From testing with drd/tests/qt4_* and with KDE4 apps, it
+ appears that no false errors are reported; however it is not clear
+ if this is causing false negatives.
+
+ Another problem with Qt4 is thread exiting. Threads are created
+ with pthread_create (fine); but they detach and simply exit when
+ done. There is no use of pthread_join, and the provided
+ wait-for-a-thread-to-exit mechanism (QThread::wait, I believe)
+ relies on a system of mutexes and flags. I suspect this also
+ causes too many dependencies to appear. Consequently H sometimes
+ fails to detect races at exit in some very short-lived racy
+ programs, because it appears that a thread can exit _and_ have an
+ observed dependency edge back to the main thread (presumably)
+ before the main thread reaps the child (that is, calls
+ QThread::wait).
+
+ This theory is supported by the observation that if all threads are
+ made to wait at a pthread_barrier_t immediately before they exit,
+ then H's detection of races in such programs becomes reliable;
+ without the barrier, it is varies from run to run, depending
+ (according to investigation) on whether aforementioned
+ exit-before-reaping behaviour happens or not.
+
+ Finally, why is it necessary to intercept the QMutex constructors
+ and destructors? The constructors are intercepted only as a matter
+ of convenience, so H can print accurate "first observed at"
+ clauses. However, it is actually necessary to intercept the
+ destructors (as it is with pthread_mutex_destroy) in order that
+ locks get removed from LAOG when they are destroyed.
+*/
+
// soname is libQtCore.so.4 ; match against libQtCore.so*
#define QT4_FUNC(ret_ty, f, args...) \
- ret_ty I_WRAP_SONAME_FNNAME_ZZ(libQtCoreZdsoZa,f)(args); \
- ret_ty I_WRAP_SONAME_FNNAME_ZZ(libQtCoreZdsoZa,f)(args)
+ ret_ty I_WRAP_SONAME_FNNAME_ZU(libQtCoreZdsoZa,f)(args); \
+ ret_ty I_WRAP_SONAME_FNNAME_ZU(libQtCoreZdsoZa,f)(args)
// QMutex::lock()
-QT4_FUNC(void, ZuZZN6QMutex4lockEv, // _ZN6QMutex4lockEv == QMutex::lock()
- void* self)
+QT4_FUNC(void, _ZN6QMutex4lockEv, void* self)
{
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
@@ -1307,8 +1367,7 @@
}
// QMutex::unlock()
-QT4_FUNC(void, ZuZZN6QMutex6unlockEv, // _ZN6QMutex6unlockEv == QMutex::unlock()
- void* self)
+QT4_FUNC(void, _ZN6QMutex6unlockEv, void* self)
{
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
@@ -1330,11 +1389,9 @@
}
}
-// QMutex::tryLock
-// _ZN6QMutex7tryLockEv == bool QMutex::tryLock()
+// bool QMutex::tryLock()
// using 'long' to mimic C++ 'bool'
-QT4_FUNC(long, ZuZZN6QMutex7tryLockEv,
- void* self)
+QT4_FUNC(long, _ZN6QMutex7tryLockEv, void* self)
{
OrigFn fn;
long ret;
@@ -1361,88 +1418,339 @@
return ret;
}
-
-// QReadWriteLock::lockForRead()
-// _ZN14QReadWriteLock11lockForReadEv == QReadWriteLock::lockForRead()
-QT4_FUNC(void, ZuZZN14QReadWriteLock11lockForReadEv,
- // _ZN14QReadWriteLock11lockForReadEv
- void* self)
+// bool QMutex::tryLock(int)
+// using 'long' to mimic C++ 'bool'
+QT4_FUNC(long, _ZN6QMutex7tryLockEi, void* self, long arg2)
{
OrigFn fn;
+ long ret;
VALGRIND_GET_ORIG_FN(fn);
if (TRACE_QT4_FNS) {
- fprintf(stderr, "<< QReadWriteLock::lockForRead %p", self);
+ fprintf(stderr, "<< QMutex::tryLock(int) %p %d", self, (int)arg2);
fflush(stderr);
}
- DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
- void*,self,
- long,0/*!isW*/, long,0/*!isTryLock*/);
+ DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_PRE,
+ void*,self, long,1/*isTryLock*/);
- CALL_FN_v_W(fn, self);
+ CALL_FN_W_WW(ret, fn, self,arg2);
- DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
- void*,self, long,0/*!isW*/);
+ // assumes that only the low 8 bits of the 'bool' are significant
+ if (ret & 0xFF) {
+ DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+ void*, self);
+ }
if (TRACE_QT4_FNS) {
- fprintf(stderr, " :: Q::lockForRead :: done >>\n");
+ fprintf(stderr, " :: Q::tryLock(int) -> %lu >>\n", ret);
}
+
+ return ret;
}
-// QReadWriteLock::lockForWrite()
-// _ZN14QReadWriteLock12lockForWriteEv == QReadWriteLock::lockForWrite()
-QT4_FUNC(void, ZuZZN14QReadWriteLock12lockForWriteEv,
- // _ZN14QReadWriteLock12lockForWriteEv
- void* self)
+
+// It's not really very clear what the args are here. But from
+// a bit of dataflow analysis of the generated machine code of
+// the original function, it appears this takes two args, and
+// returns nothing. Nevertheless preserve return value just in
+// case. A bit of debug printing indicates that the first arg
+// is that of the mutex and the second is either zero or one,
+// probably being the recursion mode, therefore.
+// QMutex::QMutex(QMutex::RecursionMode) ("C1ENS" variant)
+QT4_FUNC(void*, _ZN6QMutexC1ENS_13RecursionModeE,
+ void* mutex,
+ long recmode)
{
OrigFn fn;
+ long ret;
VALGRIND_GET_ORIG_FN(fn);
- if (TRACE_QT4_FNS) {
- fprintf(stderr, "<< QReadWriteLock::lockForWrite %p", self);
- fflush(stderr);
- }
+ CALL_FN_W_WW(ret, fn, mutex, recmode);
+ // fprintf(stderr, "QMutex constructor 1: %p <- %p %p\n", ret, arg1, arg2);
+ DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_INIT_POST,
+ void*,mutex, long,1/*mbRec*/);
+ return (void*)ret;
+}
- DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
- void*,self,
- long,1/*isW*/, long,0/*!isTryLock*/);
+// QMutex::~QMutex() ("D1Ev" variant)
+QT4_FUNC(void*, _ZN6QMutexD1Ev, void* mutex)
+{
+ OrigFn fn;
+ long ret;
+ VALGRIND_GET_ORIG_FN(fn);
+ DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_DESTROY_PRE,
+ void*,mutex);
+ CALL_FN_W_W(ret, fn, mutex);
+ return (void*)ret;
+}
- CALL_FN_v_W(fn, self);
- DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
- void*,self, long,1/*isW*/);
+// QMutex::QMutex(QMutex::RecursionMode) ("C2ENS" variant)
+QT4_FUNC(void*, _ZN6QMutexC2ENS_13RecursionModeE,
+ void* mutex,
+ long recmode)
+{
+ assert(0);
+}
- if (TRACE_QT4_FNS) {
- fprintf(stderr, " :: Q::lockForWrite :: done >>\n");
- }
+// QMutex::~QMutex() ("D2Ev" variant)
+QT4_FUNC(void*, _ZN6QMutexD2Ev, void* mutex)
+{
+ assert(0);
}
-// QReadWriteLock::unlock()
-// _ZN14QReadWriteLock6unlockEv == QReadWriteLock::unlock()
-QT4_FUNC(void, ZuZZN14QReadWriteLock6unlockEv,
- // _ZN14QReadWriteLock6unlockEv
- void* self)
-{
- OrigFn fn;
- VALGRIND_GET_ORIG_FN(fn);
- if (TRACE_QT4_FNS) {
- fprintf(stderr, "<< QReadWriteLock::unlock %p", self);
- fflush(stderr);
+
+// QReadWriteLock is not intercepted directly. See comments
+// above.
+
+//// QReadWriteLock::lockForRead()
+//// _ZN14QReadWriteLock11lockForReadEv == QReadWriteLock::lockForRead()
+//QT4_FUNC(void, ZuZZN14QReadWriteLock11lockForReadEv,
+// // _ZN14QReadWriteLock11lockForReadEv
+// void* self)
+//{
+// OrigFn fn;
+// VALGRIND_GET_ORIG_FN(fn);
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, "<< QReadWriteLock::lockForRead %p", self);
+// fflush(stderr);
+// }
+//
+// DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
+// void*,self,
+// long,0/*!isW*/, long,0/*!isTryLock*/);
+//
+// CALL_FN_v_W(fn, self);
+//
+// DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+// void*,self, long,0/*!isW*/);
+//
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, " :: Q::lockForRead :: done >>\n");
+// }
+//}
+//
+//// QReadWriteLock::lockForWrite()
+//// _ZN14QReadWriteLock12lockForWriteEv == QReadWriteLock::lockForWrite()
+//QT4_FUNC(void, ZuZZN14QReadWriteLock12lockForWriteEv,
+// // _ZN14QReadWriteLock12lockForWriteEv
+// void* self)
+//{
+// OrigFn fn;
+// VALGRIND_GET_ORIG_FN(fn);
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, "<< QReadWriteLock::lockForWrite %p", self);
+// fflush(stderr);
+// }
+//
+// DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
+// void*,self,
+// long,1/*isW*/, long,0/*!isTryLock*/);
+//
+// CALL_FN_v_W(fn, self);
+//
+// DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+// void*,self, long,1/*isW*/);
+//
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, " :: Q::lockForWrite :: done >>\n");
+// }
+//}
+//
+//// QReadWriteLock::unlock()
+//// _ZN14QReadWriteLock6unlockEv == QReadWriteLock::unlock()
+//QT4_FUNC(void, ZuZZN14QReadWriteLock6unlockEv,
+// // _ZN14QReadWriteLock6unlockEv
+// void* self)
+//{
+// OrigFn fn;
+// VALGRIND_GET_ORIG_FN(fn);
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, "<< QReadWriteLock::unlock %p", self);
+// fflush(stderr);
+// }
+//
+// DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE,
+// void*,self);
+//
+// CALL_FN_v_W(fn, self);
+//
+// DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST,
+// void*,self);
+//
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, " :: Q::unlock :: done >>\n");
+// }
+//}
+
+
+/*----------------------------------------------------------------*/
+/*--- Replacements for basic string functions, that don't ---*/
+/*--- the input arrays. ---*/
+/*----------------------------------------------------------------*/
+
+/* Copied verbatim from memcheck/mc_replace_strmem.c. When copying
+ new functions, please keep them in the same order as they appear in
+ mc_replace_strmem.c. */
+
+/* --------- Some handy Z-encoded names. --------- */
+
+/* --- Soname of the standard C library. --- */
+
+#if defined(VGO_linux)
+# define m_libc_soname libcZdsoZa // libc.so*
+#elif defined(VGP_ppc32_aix5)
+ /* AIX has both /usr/lib/libc.a and /usr/lib/libc_r.a. */
+# define m_libc_soname libcZaZdaZLshrZdoZR // libc*.a(shr.o)
+#elif defined(VGP_ppc64_aix5)
+# define m_libc_soname libcZaZdaZLshrZu64ZdoZR // libc*.a(shr_64.o)
+#else
+# error "Unknown platform"
+#endif
+
+/* --- Sonames for Linux ELF linkers. --- */
+
+#define m_ld_linux_so_2 ldZhlinuxZdsoZd2 // ld-linux.so.2
+#define m_ld_linux_x86_64_so_2 ldZhlinuxZhx86Zh64ZdsoZd2 // ld-linux-x86-64.so.2
+#define m_ld64_so_1 ld64ZdsoZd1 // ld64.so.1
+#define m_ld_so_1 ldZdsoZd1 // ld.so.1
+
+
+#define STRCHR(soname, fnname) \
+ char* VG_REPLACE_FUNCTION_ZU(soname,fnname) ( const char* s, int c ); \
+ char* VG_REPLACE_FUNCTION_ZU(soname,fnname) ( const char* s, int c ) \
+ { \
+ UChar ch = (UChar)((UInt)c); \
+ UChar* p = (UChar*)s; \
+ while (True) { \
+ if (*p == ch) return p; \
+ if (*p == 0) return NULL; \
+ p++; \
+ } \
}
- DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE,
- void*,self);
+// Apparently index() is the same thing as strchr()
+STRCHR(m_libc_soname, strchr)
+STRCHR(m_ld_linux_so_2, strchr)
+STRCHR(m_ld_linux_x86_64_so_2, strchr)
+STRCHR(m_libc_soname, index)
+STRCHR(m_ld_linux_so_2, index)
+STRCHR(m_ld_linux_x86_64_so_2, index)
- CALL_FN_v_W(fn, self);
- DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST,
- void*,self);
+// Note that this replacement often doesn't get used because gcc inlines
+// calls to strlen() with its own built-in version. This can be very
+// confusing if you aren't expecting it. Other small functions in this file
+// may also be inline by gcc.
+#define STRLEN(soname, fnname) \
+ SizeT VG_REPLACE_FUNCTION_ZU(soname,fnname)( const char* str ); \
+ SizeT VG_REPLACE_FUNCTION_ZU(soname,fnname)( const char* str ) \
+ { \
+ SizeT i = 0; \
+ while (str[i] != 0) i++; \
+ return i; \
+ }
- if (TRACE_QT4_FNS) {
- fprintf(stderr, " :: Q::unlock :: done >>\n");
+STRLEN(m_libc_soname, strlen)
+STRLEN(m_ld_linux_so_2, strlen)
+STRLEN(m_ld_linux_x86_64_so_2, strlen)
+
+
+#define STRCPY(soname, fnname) \
+ char* VG_REPLACE_FUNCTION_ZU(soname, fnname) ( char* dst, const char* src ); \
+ char* VG_REPLACE_FUNCTION_ZU(soname, fnname) ( char* dst, const char* src ) \
+ { \
+ const Char* dst_orig = dst; \
+ \
+ while (*src) *dst++ = *src++; \
+ *dst = 0; \
+ \
+ return (char*)dst_orig; \
}
-}
+STRCPY(m_libc_soname, strcpy)
+
+#define STRCMP(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2 ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2 ) \
+ { \
+ register unsigned char c1; \
+ register unsigned char c2; \
+ while (True) { \
+ c1 = *(unsigned char *)s1; \
+ c2 = *(unsigned char *)s2; \
+ if (c1 != c2) break; \
+ if (c1 == 0) break; \
+ s1++; s2++; \
+ } \
+ if ((unsigned char)c1 < (unsigned char)c2) return -1; \
+ if ((unsigned char)c1 > (unsigned char)c2) return 1; \
+ return 0; \
+ }
+
+STRCMP(m_libc_soname, strcmp)
+STRCMP(m_ld_linux_x86_64_so_2, strcmp)
+STRCMP(m_ld64_so_1, strcmp)
+
+
+#define MEMCPY(soname, fnname) \
+ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( void *dst, const void *src, SizeT len ); \
+ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( void *dst, const void *src, SizeT len ) \
+ { \
+ register char *d; \
+ register char *s; \
+ \
+ if (len == 0) \
+ return dst; \
+ \
+ if ( dst > src ) { \
+ d = (char *)dst + len - 1; \
+ s = (char *)src + len - 1; \
+ while ( len >= 4 ) { \
+ *d-- = *s--; \
+ *d-- = *s--; \
+ *d-- = *s--; \
+ *d-- = *s--; \
+ len -= 4; \
+ } \
+ while ( len-- ) { \
+ *d-- = *s--; \
+ } \
+ } else if ( dst < src ) { \
+ d = (char *)dst; \
+ s = (char *)src; \
+ while ( len >= 4 ) { \
+ *d++ = *s++; \
+ *d++ = *s++; \
+ *d++ = *s++; \
+ *d++ = *s++; \
+ len -= 4; \
+ } \
+ while ( len-- ) { \
+ *d++ = *s++; \
+ } \
+ } \
+ return dst; \
+ }
+
+MEMCPY(m_libc_soname, memcpy)
+MEMCPY(m_ld_so_1, memcpy) /* ld.so.1 */
+MEMCPY(m_ld64_so_1, memcpy) /* ld64.so.1 */
+/* icc9 blats these around all over the place. Not only in the main
+ executable but various .so's. They are highly tuned and read
+ memory beyond the source boundary (although work correctly and
+ never go across page boundaries), so give errors when run natively,
+ at least for misaligned source arg. Just intercepting in the exe
+ only until we understand more about the problem. See
+ http://bugs.kde.org/show_bug.cgi?id=139776
+ */
+MEMCPY(NONE, _intel_fast_memcpy)
+
+
/*--------------------------------------------------------------------*/
/*--- end tc_intercepts.c ---*/
/*--------------------------------------------------------------------*/
|
|
From: Tom H. <th...@cy...> - 2008-11-19 04:14:57
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-11-19 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 == 376 tests, 91 stderr failures, 2 stdout failures, 29 post failures == drd/tests/bar_bad (stderr) drd/tests/bar_trivial (stdout) drd/tests/bar_trivial (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/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) |