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
(7) |
2
(9) |
3
(7) |
4
(5) |
5
(5) |
6
(16) |
|
7
(20) |
8
(9) |
9
(15) |
10
(11) |
11
(13) |
12
(12) |
13
(10) |
|
14
(13) |
15
(6) |
16
(10) |
17
(12) |
18
(17) |
19
(3) |
20
(10) |
|
21
(11) |
22
(7) |
23
(6) |
24
(7) |
25
(5) |
26
(5) |
27
(14) |
|
28
(6) |
29
(4) |
30
(5) |
|
|
|
|
|
From: Aleksander M. <ale...@es...> - 2008-09-20 19:10:45
|
> Is it possible to suppress all memory leaks of a given function with a > single entry in the suppression files? I mean instead of writing an > entry for each memory leak caused in the execution of that function. > BTW, I write to this mailing list because I wouldn't mind to develop it myself if not already done :-) Is it a desirable feature? I'm thinking in Glib's g_type_init() function for example, where lots of memory allocations are done and never deallocated (there is no glib_type_deinit() or such). Cheers, -Aleksander |
|
From: Aleksander M. <ale...@es...> - 2008-09-20 18:54:02
|
Hi all, Is it possible to suppress all memory leaks of a given function with a single entry in the suppression files? I mean instead of writing an entry for each memory leak caused in the execution of that function. Cheers, -Aleksander |
|
From: <sv...@va...> - 2008-09-20 16:01:55
|
Author: sewardj
Date: 2008-09-20 17:01:41 +0100 (Sat, 20 Sep 2008)
New Revision: 8627
Log:
record_error_Race: defer attempt to generate a source-level
description of the raced-on address, until we're sure we want to
collect this error. Also, reenable var-info reading by default.
Modified:
branches/YARD/helgrind/hg_main.c
Modified: branches/YARD/helgrind/hg_main.c
===================================================================
--- branches/YARD/helgrind/hg_main.c 2008-09-20 00:13:23 UTC (rev 8626)
+++ branches/YARD/helgrind/hg_main.c 2008-09-20 16:01:41 UTC (rev 8627)
@@ -4227,11 +4227,30 @@
/* Updates the copy with address info if necessary. */
static UInt hg_update_extra ( Error* err )
{
- XError* extra = (XError*)VG_(get_error_extra)(err);
- tl_assert(extra);
+ XError* xe = (XError*)VG_(get_error_extra)(err);
+ tl_assert(xe);
//if (extra != NULL && Undescribed == extra->addrinfo.akind) {
// describe_addr ( VG_(get_error_address)(err), &(extra->addrinfo) );
//}
+
+ if (xe->tag == XE_Race) {
+ /* See if we can come up with a source level description of the
+ raced-upon address. This is potentially expensive, which is
+ why it's only done at the update_extra point, not when the
+ error is initially created. */
+ tl_assert(sizeof(xe->XE.Race.descr1) == sizeof(xe->XE.Race.descr2));
+ if (VG_(get_data_description)(
+ &xe->XE.Race.descr1[0],
+ &xe->XE.Race.descr2[0],
+ sizeof(xe->XE.Race.descr1)-1,
+ xe->XE.Race.data_addr )) {
+ tl_assert( xe->XE.Race.descr1
+ [ sizeof(xe->XE.Race.descr1)-1 ] == 0);
+ tl_assert( xe->XE.Race.descr2
+ [ sizeof(xe->XE.Race.descr2)-1 ] == 0);
+ }
+ }
+
return sizeof(XError);
}
@@ -4272,20 +4291,7 @@
// FIXME: tid vs thr
tl_assert(isWrite == False || isWrite == True);
// tl_assert(szB == 8 || szB == 4 || szB == 2 || szB == 1);
-
- tl_assert(sizeof(xe.XE.Race.descr1) == sizeof(xe.XE.Race.descr2));
xe.XE.Race.descr1[0] = xe.XE.Race.descr2[0] = 0;
- if (VG_(get_data_description)(
- &xe.XE.Race.descr1[0],
- &xe.XE.Race.descr2[0],
- sizeof(xe.XE.Race.descr1)-1,
- data_addr )) {
- tl_assert( xe.XE.Race.descr1
- [ sizeof(xe.XE.Race.descr1)-1 ] == 0);
- tl_assert( xe.XE.Race.descr2
- [ sizeof(xe.XE.Race.descr2)-1 ] == 0);
- }
-
VG_(maybe_record_error)( map_threads_reverse_lookup_SLOW(thr),
XE_Race, data_addr, NULL, &xe );
}
@@ -5042,10 +5048,8 @@
hg_cli__realloc,
HG_CLI__MALLOC_REDZONE_SZB );
- // VG_(needs_var_info)();
+ VG_(needs_var_info)(); /* optional */
- //VG_(needs_xml_output) ();
-
VG_(track_new_mem_startup) ( evh__new_mem_w_perms );
VG_(track_new_mem_stack_signal)( evh__new_mem_w_tid );
VG_(track_new_mem_brk) ( evh__new_mem_w_tid );
|
|
From: Florian K. <br...@ac...> - 2008-09-20 15:30:31
|
Hello,
I was looking at how to define a pattern for "add immediate"
which should match a subtree independent of whether the constant
is located in the first or second operand. Looking at irmatch
I see that it does not know about commutative operators.
So I'd have to define two patterns.. Hmm. I was trying to avoid
that.
VEX does not seem to guarantee that a constant is placed in
a defined operand position when the operator is commutative.
So I do need to consider both cases or accept that less efficient
code is generated.
How is this handled in other backends?
I was thinking of extending IRExpr_Binop to be aware of
commutative operators. What do you think of that approcach?
Florian
|
|
From: Tom H. <th...@cy...> - 2008-09-20 03:34:42
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-09-20 03:00:03 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 464 tests, 33 stderr failures, 4 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/cmdline2 (stdout) 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: Tom H. <th...@cy...> - 2008-09-20 03:27:36
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-09-20 03:15:02 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 366 tests, 80 stderr failures, 2 stdout failures, 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/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/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/hg06_readshared (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc11_XCHG (stderr) helgrind/tests/tc12_rwl_trivial (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) helgrind/tests/tc24_nonzero_sem (stderr) 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/file_locking (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin1-yes (stderr) memcheck/tests/origin4-many (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/bug152022 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) none/tests/blockfault (stderr) none/tests/cmdline2 (stdout) 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 == 366 tests, 80 stderr failures, 3 stdout failures, 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/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/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/hg06_readshared (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc11_XCHG (stderr) helgrind/tests/tc12_rwl_trivial (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) helgrind/tests/tc24_nonzero_sem (stderr) 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/file_locking (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin1-yes (stderr) memcheck/tests/origin4-many (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/bug152022 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) none/tests/blockfault (stderr) none/tests/cmdline2 (stdout) 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 Sat Sep 20 03:56:32 2008 --- new.short Sat Sep 20 04:27:30 2008 *************** *** 8,10 **** ! == 366 tests, 80 stderr failures, 3 stdout failures, 29 post failures == exp-ptrcheck/tests/bad_percentify (stderr) --- 8,10 ---- ! == 366 tests, 80 stderr failures, 2 stdout failures, 29 post failures == exp-ptrcheck/tests/bad_percentify (stderr) *************** *** 95,97 **** memcheck/tests/leak-tree (stderr) - memcheck/tests/leakotron (stdout) memcheck/tests/long_namespace_xml (stderr) --- 95,96 ---- |
|
From: Tom H. <th...@cy...> - 2008-09-20 03:04:56
|
Nightly build on aston ( x86_64, Fedora Core 5 ) started at 2008-09-20 03:20:05 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 464 tests, 10 stderr failures, 2 stdout failures, 0 post failures == exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) |
|
From: Tom H. <th...@cy...> - 2008-09-20 03:04:15
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-09-20 03:05:10 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 458 tests, 11 stderr failures, 3 stdout failures, 0 post failures == exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) |
|
From: Tom H. <th...@cy...> - 2008-09-20 02:47:17
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-09-20 03:25:09 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 462 tests, 13 stderr failures, 5 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/file_locking (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/bug133694 (stdout) memcheck/tests/x86/bug133694 (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/cmdline1 (stdout) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) |
|
From: <sv...@va...> - 2008-09-20 00:30:45
|
Author: sewardj
Date: 2008-09-20 01:13:23 +0100 (Sat, 20 Sep 2008)
New Revision: 8626
Log:
Improve the change-event map, so it distinguishes between accesses
by different threads. This is so as to stop Helgrind producing
stupid messages of the form
Possible data race during {read,write} ... thread #N
(backtrace)
This conflicts with a previous access by thread #N
(backtrace)
which, while technically correct, is confusing and unhelpful.
Also get rid of some redundant bits of memory-profiling code.
Modified:
branches/YARD/helgrind/libhb_core.c
Modified: branches/YARD/helgrind/libhb_core.c
===================================================================
--- branches/YARD/helgrind/libhb_core.c 2008-09-19 20:13:39 UTC (rev 8625)
+++ branches/YARD/helgrind/libhb_core.c 2008-09-20 00:13:23 UTC (rev 8626)
@@ -50,88 +50,13 @@
/* fwds for
Globals needed by other parts of the library. These are set
once at startup and then never changed. */
-static void* (*main_zalloc_P)( HChar*, SizeT ) = NULL;
-static void (*main_dealloc_P)( void* ) = NULL;
-static void* (*main_shadow_alloc_P)( SizeT ) = NULL;
+static void* (*main_zalloc)( HChar*, SizeT ) = NULL;
+static void (*main_dealloc)( void* ) = NULL;
+static void* (*main_shadow_alloc)( SizeT ) = NULL;
static void (*main_get_stacktrace)( Thr*, Addr*, UWord ) = NULL;
static struct EC_* (*main_stacktrace_to_EC)( Addr*, UWord ) = NULL;
static struct EC_* (*main_get_EC)( Thr* ) = NULL;
-static ULong stats__zallocd = 0;
-static ULong stats__freed = 0;
-static ULong stats__shadow_allocd = 0;
-
-#define XXX 500000
-static Bool xxx_tab_initted = False;
-static
- struct { Addr a; SizeT n; }
- xxx_tab[XXX];
-
-static void notify_malloc ( Addr a, SizeT n ) {
- Word i;
- if (!xxx_tab_initted) {
- VG_(memset)(xxx_tab, 0, sizeof(xxx_tab) );
- xxx_tab_initted = True;
- }
- for (i = 0; i < XXX; i++) {
- if (xxx_tab[i].a == 0)
- break;
- }
- tl_assert(i >= 0 && i < XXX);
- xxx_tab[i].a = a;
- xxx_tab[i].n = n;
-}
-static void notify_free ( Addr a ) {
- Word i;
- tl_assert(xxx_tab_initted);
- tl_assert(a);
- for (i = 0; i < XXX; i++) {
- if (xxx_tab[i].a == a)
- break;
- }
- tl_assert(i >= 0 && i < XXX);
- xxx_tab[i].a = 0;
- xxx_tab[i].n = 0;
-}
-
-
-static void* main_zalloc ( HChar* cc, SizeT n ) {
- void* v;
- tl_assert(n >= 0);
- stats__zallocd += (ULong)n;
- v = main_zalloc_P(cc,n);
- // notify_malloc( (Addr)v, n );
- return v;
-}
-static void main_dealloc ( void* p ) {
- //notify_free( (Addr)p );
- main_dealloc_P(p);
-}
-static void* main_shadow_alloc ( SizeT n ) {
- tl_assert(n >= 0);
- stats__shadow_allocd += (ULong)n;
- return main_shadow_alloc_P(n);
-}
-
-static void mem_report ( void ) {
- UWord i;
- UWord nBlocks = 0, inUse = 0;
-return;
- VG_(printf)( " libhb: %llu bytes zalloc'd, %llu bytes shadow_alloc'd\n",
- stats__zallocd, stats__shadow_allocd);
- for (i = 0; i < XXX; i++) {
- if (xxx_tab[i].a != 0) {
- nBlocks++;
- inUse += xxx_tab[i].n;
- } else {
- tl_assert(xxx_tab[i].n == 0);
- }
- }
- VG_(printf)( " libhb: zalloc: %lu bytes in use, %lu blocks in use, "
- "avg szB %lu/100\n",
- inUse, nBlocks, (100 * inUse) / nBlocks);
-}
-
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
// //
@@ -5184,107 +5109,12 @@
/////////////////////////////////////////////////////////
// //
-// Change-event map //
-// //
-/////////////////////////////////////////////////////////
-#if 0
-
-#define N_EVENT_MAPS 4
-#define N_EVENTS_PER_MAP (1*1000*1000)
-
-static WordFM* /* Addr -> (struct EC_*, Thr*) */
- event_map[N_EVENT_MAPS];
-
-static Word event_map_n[N_EVENT_MAPS];
-
-static Word event_map_curr;
-
-
-
-static void event_map_init ( void )
-{
- Word i;
- for (i = 0; i < N_EVENT_MAPS; i++) {
- event_map[i] = NULL;
- event_map_n[i] = 0;
- }
-
- event_map_curr = 0;
- event_map[event_map_curr]
- = HG_(newFM)( main_zalloc, main_dealloc,
- NULL/*unboxed word cmp*/ );
- VG_(printf)("libhb: event map %ld in use\n", event_map_curr);
-}
-
-static void event_map_bind ( Addr a, struct EC_* ec, Thr* thr )
-{
- Bool b;
- if (0) return;
- b = HG_(addToFM)( event_map[event_map_curr],
- (UWord)a, (UWord)ec, (UWord)thr );
- if (!b) {
- /* not already present */
- event_map_n[event_map_curr]++;
-
- if (event_map_n[event_map_curr] >= N_EVENTS_PER_MAP) {
- /* this tree is full. move on to the next one. */
- event_map_curr++;
- if (event_map_curr == N_EVENT_MAPS) event_map_curr = 0;
- tl_assert(event_map_curr >= 0 && event_map_curr < N_EVENT_MAPS);
- /* Throw away the contents of the oldest tree we have, if any. */
- if (event_map[event_map_curr]) {
- VG_(printf)("libhb: event map %ld dumped\n", event_map_curr);
- /* check the counting mechanism is working correctly */
- tl_assert(HG_(sizeFM)(event_map[event_map_curr])
- == event_map_n[event_map_curr]);
- HG_(deleteFM)(event_map[event_map_curr], NULL, NULL, NULL);
- event_map[event_map_curr] = NULL;
- event_map_n[event_map_curr] = 0;
- } else {
- tl_assert(event_map_n[event_map_curr] == 0);
- }
-
- VG_(printf)("libhb: event map %ld in use\n", event_map_curr);
- event_map[event_map_curr]
- = HG_(newFM)( main_zalloc, main_dealloc,
- NULL/*unboxed word cmp*/ );
- }
-
- }
-}
-
-static
-Bool event_map_lookup ( struct EC_** resEC, Thr** resThr, Addr a )
-{
- /* Look through all the event maps, from youngest to oldest. */
- UWord key, val, wal;
- Word i, n;
- n = event_map_curr;
- for (i = 0; i < N_EVENT_MAPS; i++) {
- WordFM* map = event_map[n];
- if (map && HG_(lookupFM)( map, &key, &val, &wal, (UWord)a )) {
- tl_assert(key == a);
- *resEC = (struct EC_*)val;
- *resThr = (Thr*)wal;
- return True;
- }
- n++;
- if (n == N_EVENT_MAPS) n = 0;
- tl_assert(n >= 0 && n < N_EVENT_MAPS);
- }
- return False;
-}
-
-#else
-
-/////////////////////////////////////////////////////////
-// //
// Change-event map2 //
// //
/////////////////////////////////////////////////////////
-#define EVENT_MAP_GC_AT 1000000
-#define EVENT_MAP_GC_DISCARD_FRACTION 0.5
+#define EVENT_MAP_GC_AT (1 * 1000 * 1000)
+#define EVENT_MAP_GC_DISCARD_FRACTION 0.5
/* This is in two parts:
@@ -5423,13 +5253,17 @@
// (UInt) `echo "Old Reference Information" | md5sum`
#define OldRef_MAGIC 0x30b1f075UL
+typedef struct { Thr* thr; RCEC* rcec; } Thr_n_RCEC;
+
+#define N_OLDREF_ACCS 3
+
typedef
struct {
UWord magic;
UWord gen; /* when most recently accessed */
Addr ea;
- RCEC* rcec;
- Thr* thr;
+ /* unused slots in this array have .thr == NULL */
+ Thr_n_RCEC accs[N_OLDREF_ACCS];
}
OldRef;
@@ -5450,57 +5284,129 @@
{
OldRef key, *ref;
RCEC* here;
+ Word i, j;
key.ea = a;
key.magic = OldRef_MAGIC;
ref = VG_(OSetGen_Lookup)( oldrefTree, &key );
+
if (ref) {
+
+ /* We already have a record for this address. We now need to
+ see if we have a stack trace pertaining to this thread's
+ access. */
tl_assert(ref->magic == OldRef_MAGIC);
- here = get_RCEC( thr );
- ctxt__rcinc( here );
- ctxt__rcdec( ref->rcec );
- ref->gen = oldrefGen;
- ref->ea = a;
- ref->rcec = here;
- ref->thr = thr;
+
+ tl_assert(thr);
+ for (i = 0; i < N_OLDREF_ACCS; i++) {
+ if (ref->accs[i].thr == thr)
+ break;
+ }
+
+ if (i < N_OLDREF_ACCS) {
+ /* thread 'thr' has an entry at index 'i'. Update it. */
+ if (i > 0) {
+ Thr_n_RCEC tmp = ref->accs[i-1];
+ ref->accs[i-1] = ref->accs[i];
+ ref->accs[i] = tmp;
+ i--;
+ }
+ here = get_RCEC( thr );
+ ctxt__rcinc( here );
+ ctxt__rcdec( ref->accs[i].rcec );
+ ref->accs[i].rcec = here;
+ tl_assert(ref->accs[i].thr == thr);
+ } else {
+ here = get_RCEC( thr );
+ ctxt__rcinc( here );
+ /* No entry for this thread. Shuffle all of them down one
+ slot, and put the new entry at the start of the array. */
+ if (ref->accs[N_OLDREF_ACCS-1].thr) {
+ /* the last slot is in use. We must dec the rc on the
+ associated rcec. */
+ tl_assert(ref->accs[N_OLDREF_ACCS-1].rcec);
+ ctxt__rcdec(ref->accs[N_OLDREF_ACCS-1].rcec);
+ } else {
+ tl_assert(!ref->accs[N_OLDREF_ACCS-1].rcec);
+ }
+ for (j = N_OLDREF_ACCS-1; j >= 1; j--)
+ ref->accs[j] = ref->accs[j-1];
+ ref->accs[0].thr = thr;
+ ref->accs[0].rcec = here;
+ tl_assert(thr); /* thr==NULL is used to signify an empty slot,
+ so we can't add a NULL thr. */
+ }
+
+ ref->gen = oldrefGen;
+ tl_assert(ref->ea == a);
+
} else {
+
+ /* We don't have a record for this address. Create a new one. */
if (oldrefTreeN >= oldrefGenIncAt) {
oldrefGen++;
oldrefGenIncAt = oldrefTreeN + 50000;
VG_(printf)("oldrefTree: new gen %lu at size %lu\n",
oldrefGen, oldrefTreeN );
}
-
here = get_RCEC( thr );
ctxt__rcinc(here);
ref = VG_(OSetGen_AllocNode)( oldrefTree, sizeof(OldRef) );
ref->magic = OldRef_MAGIC;
ref->gen = oldrefGen;
ref->ea = a;
- ref->rcec = here;
- ref->thr = thr;
+ ref->accs[0].rcec = here;
+ ref->accs[0].thr = thr;
+ tl_assert(thr); /* thr==NULL is used to signify an empty slot,
+ so we can't add a NULL thr. */
+ for (j = 1; j < N_OLDREF_ACCS; j++) {
+ ref->accs[j].thr = NULL;
+ ref->accs[j].rcec = NULL;
+ }
VG_(OSetGen_Insert)( oldrefTree, ref );
oldrefTreeN++;
+
}
}
static
Bool event_map_lookup ( /*OUT*/struct EC_** resEC,
- /*OUT*/Thr** resThr, Addr a )
+ /*OUT*/Thr** resThr,
+ Thr* thr_acc, Addr a )
{
+ Word i;
OldRef key, *ref;
+
+ tl_assert(thr_acc);
+
key.ea = a;
key.magic = OldRef_MAGIC;
ref = VG_(OSetGen_Lookup)( oldrefTree, &key );
if (ref) {
tl_assert(ref->magic == OldRef_MAGIC);
- tl_assert(ref->rcec);
- tl_assert(ref->rcec->magic == RCEC_MAGIC);
- *resEC = main_stacktrace_to_EC(&ref->rcec->frames[1], N_FRAMES);
- *resThr = ref->thr;
+ tl_assert(ref->accs[0].thr); /* first slot must always be used */
+
+ for (i = 0; i < N_OLDREF_ACCS; i++) {
+ if (ref->accs[i].thr != NULL
+ && ref->accs[i].thr != thr_acc)
+ break;
+ }
+ /* If we didn't find an entry for some thread other than
+ thr_acc, just return the entry for thread 0. It'll look
+ pretty stupid to the user though. */
+ if (i == N_OLDREF_ACCS)
+ i = 0;
+
+ tl_assert(i >= 0 && i < N_OLDREF_ACCS);
+ tl_assert(ref->accs[i].thr);
+ tl_assert(ref->accs[i].rcec);
+ tl_assert(ref->accs[i].rcec->magic == RCEC_MAGIC);
+
+ *resEC = main_stacktrace_to_EC(&ref->accs[i].rcec->frames[1], N_FRAMES);
+ *resThr = ref->accs[i].thr;
return True;
} else {
return False;
@@ -5536,6 +5442,7 @@
{
RCEC* rcec;
OldRef* oldref;
+ Word i;
/* Set the 'check' reference counts to zero */
VG_(OSetGen_ResetIter)( contextTree );
@@ -5549,9 +5456,15 @@
VG_(OSetGen_ResetIter)( oldrefTree );
while ( (oldref = VG_(OSetGen_Next)( oldrefTree )) ) {
tl_assert(oldref->magic == OldRef_MAGIC);
- tl_assert(oldref->rcec);
- tl_assert(oldref->rcec->magic == RCEC_MAGIC);
- oldref->rcec->rcX++;
+ for (i = 0; i < N_OLDREF_ACCS; i++) {
+ if (oldref->accs[i].thr) {
+ tl_assert(oldref->accs[i].rcec);
+ tl_assert(oldref->accs[i].rcec->magic == RCEC_MAGIC);
+ oldref->accs[i].rcec->rcX++;
+ } else {
+ tl_assert(!oldref->accs[i].rcec);
+ }
+ }
}
/* compare check ref counts with actual */
@@ -5563,10 +5476,11 @@
static void event_map_maybe_GC ( void )
{
- RCEC* rcec;
OldRef* oldref;
- UWord keyW, valW;
+ UWord keyW, valW, retained, maxGen;
WordFM* genMap;
+ XArray* refs2del;
+ Word i, j, n2del;
if (LIKELY(oldrefTreeN < EVENT_MAP_GC_AT))
return;
@@ -5597,7 +5511,8 @@
tl_assert(HG_(sizeFM)(genMap) > 0);
- UWord retained = oldrefTreeN, maxGen = 0;
+ retained = oldrefTreeN;
+ maxGen = 0;
HG_(initIterFM)( genMap );
while (HG_(nextIterFM)( genMap, &keyW, &valW, NULL )) {
tl_assert(keyW > 0); /* can't allow a generation # 0 */
@@ -5623,33 +5538,42 @@
/* If this fails, it means there's only one generation in the
entire tree. So we're kind of in a bad situation, and need to
do some stop-gap measure, such as randomly deleting half the
- entires. */
+ entries. */
tl_assert(retained < oldrefTreeN);
/* Now make up a big list of the oldrefTree entries we want to
delete. We can't simultaneously traverse the tree and delete
stuff from it, so first we need to copy them off somewhere
else. (sigh) */
- XArray* refs2del;
refs2del = VG_(newXA)( main_zalloc, "libhb.emmG.1",
main_dealloc, sizeof(OldRef*) );
VG_(OSetGen_ResetIter)( oldrefTree );
while ( (oldref = VG_(OSetGen_Next)( oldrefTree )) ) {
- if (oldref->gen <= maxGen)
+ tl_assert(oldref->magic == OldRef_MAGIC);
+ if (oldref->gen <= maxGen) {
VG_(addToXA)( refs2del, &oldref );
+ }
}
- Word i, n2del = VG_(sizeXA)( refs2del );
+ n2del = VG_(sizeXA)( refs2del );
tl_assert(n2del == (Word)(oldrefTreeN - retained));
VG_(printf)("%s","deleting entries\n");
for (i = 0; i < n2del; i++) {
+ void* nd;
OldRef* ref = *(OldRef**)VG_(indexXA)( refs2del, i );
tl_assert(ref);
tl_assert(ref->magic == OldRef_MAGIC);
- void* nd = VG_(OSetGen_Remove)( oldrefTree, ref );
- ctxt__rcdec( ref->rcec );
+ for (j = 0; j < N_OLDREF_ACCS; j++) {
+ if (ref->accs[j].rcec) {
+ tl_assert(ref->accs[j].thr);
+ ctxt__rcdec( ref->accs[j].rcec );
+ } else {
+ tl_assert(!ref->accs[j].thr);
+ }
+ }
+ nd = VG_(OSetGen_Remove)( oldrefTree, ref );
VG_(OSetGen_FreeNode)( oldrefTree, nd );
}
@@ -5668,7 +5592,6 @@
}
-#endif
/////////////////////////////////////////////////////////
// //
@@ -5708,7 +5631,7 @@
info->where = main_get_EC( info->acc_thr );
- found = event_map_lookup( &wherep, &thrp, info->ea );
+ found = event_map_lookup( &wherep, &thrp, info->acc_thr, info->ea );
if (found) {
tl_assert(wherep);
tl_assert(thrp);
@@ -5939,9 +5862,9 @@
tl_assert(get_stacktrace);
tl_assert(stacktrace_to_EC);
tl_assert(get_EC);
- main_zalloc_P = zalloc;
- main_dealloc_P = dealloc;
- main_shadow_alloc_P = shadow_alloc;
+ main_zalloc = zalloc;
+ main_dealloc = dealloc;
+ main_shadow_alloc = shadow_alloc;
main_get_stacktrace = get_stacktrace;
main_stacktrace_to_EC = stacktrace_to_EC;
main_get_EC = get_EC;
@@ -6083,7 +6006,6 @@
HG_(sizeFM)( vts_set ) );
//VG_(printf)( " libhb: %lu entries in event_map\n",
// HG_(sizeFM)( event_map ) );
- mem_report();
#if 0
VG_(printf)("sizeof(AvlNode) = %lu\n", sizeof(AvlNode));
|