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
(20) |
2
(19) |
3
(7) |
|
4
(13) |
5
(24) |
6
(9) |
7
(12) |
8
(8) |
9
(34) |
10
(28) |
|
11
(20) |
12
(23) |
13
(12) |
14
(10) |
15
(15) |
16
(24) |
17
(26) |
|
18
(17) |
19
(14) |
20
(14) |
21
(8) |
22
(12) |
23
(22) |
24
(10) |
|
25
(21) |
26
(21) |
27
(18) |
28
(8) |
29
(13) |
30
(15) |
|
|
From: <sv...@va...> - 2007-11-30 21:52:28
|
Author: sewardj Date: 2007-11-30 21:52:27 +0000 (Fri, 30 Nov 2007) New Revision: 7260 Log: Update contact details. Modified: trunk/exp-omega/o_main.c trunk/exp-omega/o_replace_memops.c trunk/exp-omega/omega.h Modified: trunk/exp-omega/o_main.c =================================================================== --- trunk/exp-omega/o_main.c 2007-11-30 21:41:40 UTC (rev 7259) +++ trunk/exp-omega/o_main.c 2007-11-30 21:52:27 UTC (rev 7260) @@ -9,7 +9,6 @@ leaks as they occur. Copyright (C) 2006-2007 Bryan "Brain Murders" Meredith - om...@br... (A note of personal thanks to my employers at Apertio (www.apertio.com) for allowing the use of their time, equipment for 64bit testing and providing moral support.) @@ -35,6 +34,8 @@ 02111-1307, USA. The GNU General Public License is contained in the file COPYING. + + The current maintainer is Rich Coe <ric...@me...>. */ /* @@ -3542,7 +3543,7 @@ VG_(details_description) ("an instant memory leak detector"); VG_(details_copyright_author)("Copyright (C) 2006-2007, and GNU GPL'd, " "by Bryan Meredith."); - VG_(details_bug_reports_to) ("omega at brainmurders d eclipse d co d uk"); + VG_(details_bug_reports_to) ("ric...@me..."); // Basic functions VG_(basic_tool_funcs) (o_post_clo_init, Modified: trunk/exp-omega/o_replace_memops.c =================================================================== --- trunk/exp-omega/o_replace_memops.c 2007-11-30 21:41:40 UTC (rev 7259) +++ trunk/exp-omega/o_replace_memops.c 2007-11-30 21:52:27 UTC (rev 7260) @@ -8,8 +8,7 @@ This file is part of Omega, a Valgrind tool for instantly detecting memory leaks. - Copyright (C) 2006 Bryan "Brain Murders" Meredith - om...@br... + Copyright (C) 2006-2007 Bryan "Brain Murders" Meredith Derived from mac_replace_strmem.c Copyright (C) 2000-2006 Julian Seward @@ -31,6 +30,8 @@ 02111-1307, USA. The GNU General Public License is contained in the file COPYING. + + The current maintainer is Rich Coe <ric...@me...>. */ #include <stdio.h> Modified: trunk/exp-omega/omega.h =================================================================== --- trunk/exp-omega/omega.h 2007-11-30 21:41:40 UTC (rev 7259) +++ trunk/exp-omega/omega.h 2007-11-30 21:52:27 UTC (rev 7260) @@ -8,8 +8,7 @@ This file is part of Omega, a Valgrind tool for instantly detecting memory leaks. - Copyright (C) 2006 Bryan "Brain Murders" Meredith - om...@br... + Copyright (C) 2006-2007 Bryan "Brain Murders" Meredith This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -27,6 +26,8 @@ 02111-1307, USA. The GNU General Public License is contained in the file COPYING. + + The current maintainer is Rich Coe <ric...@me...>. */ #ifndef __omega_h |
|
From: <sv...@va...> - 2007-11-30 21:41:37
|
Author: sewardj
Date: 2007-11-30 21:41:40 +0000 (Fri, 30 Nov 2007)
New Revision: 7259
Log:
New options for Memcheck, --malloc-fill=<hexnumber> and
--fill-free=<hexnumber>, which cause malloc'd(etc) and free'd(etc)
blocks to be filled with the specified value. This can apparently be
useful for shaking out hard-to-track-down memory corruption. The
definedness/addressability of said areas is not affected -- only the
contents. Documentation to follow.
Added:
trunk/memcheck/tests/malloc_free_fill.c
trunk/memcheck/tests/malloc_free_fill.stderr.exp
trunk/memcheck/tests/malloc_free_fill.stdout.exp
trunk/memcheck/tests/malloc_free_fill.vgtest
Modified:
trunk/include/pub_tool_options.h
trunk/memcheck/mc_include.h
trunk/memcheck/mc_main.c
trunk/memcheck/mc_malloc_wrappers.c
trunk/memcheck/tests/Makefile.am
Modified: trunk/include/pub_tool_options.h
===================================================================
--- trunk/include/pub_tool_options.h 2007-11-30 21:24:05 UTC (rev 7258)
+++ trunk/include/pub_tool_options.h 2007-11-30 21:41:40 UTC (rev 7259)
@@ -72,6 +72,18 @@
if ((qq_var) > (qq_hi)) (qq_var) = (qq_hi); \
}
+/* Bounded hexadecimal arg */
+#define VG_BHEX_CLO(qq_arg, qq_option, qq_var, qq_lo, qq_hi) \
+ if (VG_CLO_STREQN(VG_(strlen)(qq_option)+1, qq_arg, qq_option"=")) { \
+ Char* s; \
+ Long n = VG_(strtoll16)( &qq_arg[ VG_(strlen)(qq_option)+1 ], &s );\
+ (qq_var) = n; \
+ /* Check for non-numeralness, or overflow */ \
+ if ('\0' != s[0] || (qq_var) != n) VG_(err_bad_option)(qq_arg); \
+ if ((qq_var) < (qq_lo)) (qq_var) = (qq_lo); \
+ if ((qq_var) > (qq_hi)) (qq_var) = (qq_hi); \
+ }
+
/* Double arg */
#define VG_DBL_CLO(qq_arg, qq_option, qq_var) \
if (VG_CLO_STREQN(VG_(strlen)(qq_option)+1, qq_arg, qq_option"=")) { \
Modified: trunk/memcheck/mc_include.h
===================================================================
--- trunk/memcheck/mc_include.h 2007-11-30 21:24:05 UTC (rev 7258)
+++ trunk/memcheck/mc_include.h 2007-11-30 21:41:40 UTC (rev 7259)
@@ -282,7 +282,16 @@
* default: YES */
extern Bool MC_(clo_undef_value_errors);
+/* Fill malloc-d/free-d client blocks with a specific value? -1 if
+ not, else 0x00 .. 0xFF indicating the fill value to use. Can be
+ useful for causing programs with bad heap corruption to fail in
+ more repeatable ways. Note that malloc-filled and free-filled
+ areas are still undefined and noaccess respectively. This merely
+ causes them to contain the specified values. */
+extern Int MC_(clo_malloc_fill);
+extern Int MC_(clo_free_fill);
+
/*------------------------------------------------------------*/
/*--- Instrumentation ---*/
/*------------------------------------------------------------*/
Modified: trunk/memcheck/mc_main.c
===================================================================
--- trunk/memcheck/mc_main.c 2007-11-30 21:24:05 UTC (rev 7258)
+++ trunk/memcheck/mc_main.c 2007-11-30 21:41:40 UTC (rev 7259)
@@ -4373,6 +4373,8 @@
Bool MC_(clo_show_reachable) = False;
Bool MC_(clo_workaround_gcc296_bugs) = False;
Bool MC_(clo_undef_value_errors) = True;
+Int MC_(clo_malloc_fill) = -1;
+Int MC_(clo_free_fill) = -1;
static Bool mc_process_cmd_line_options(Char* arg)
{
@@ -4429,6 +4431,9 @@
}
}
+ else VG_BHEX_CLO(arg, "--malloc-fill", MC_(clo_malloc_fill), 0x00, 0xFF)
+ else VG_BHEX_CLO(arg, "--free-fill", MC_(clo_free_fill), 0x00, 0xFF)
+
else
return VG_(replacement_malloc_process_cmd_line_option)(arg);
@@ -4446,6 +4451,8 @@
" --freelist-vol=<number> volume of freed blocks queue [10000000]\n"
" --workaround-gcc296-bugs=no|yes self explanatory [no]\n"
" --ignore-ranges=0xPP-0xQQ[,0xRR-0xSS] assume given addresses are OK\n"
+" --malloc-fill=<hexnumber> fill malloc'd areas with given value\n"
+" --free-fill=<hexnumber> fill free'd areas with given value\n"
);
VG_(replacement_malloc_print_usage)();
}
Modified: trunk/memcheck/mc_malloc_wrappers.c
===================================================================
--- trunk/memcheck/mc_malloc_wrappers.c 2007-11-30 21:24:05 UTC (rev 7258)
+++ trunk/memcheck/mc_malloc_wrappers.c 2007-11-30 21:41:40 UTC (rev 7259)
@@ -182,8 +182,8 @@
/* Allocate memory and note change in memory available */
void* MC_(new_block) ( ThreadId tid,
- Addr p, SizeT szB, SizeT alignB, UInt rzB,
- Bool is_zeroed, MC_AllocKind kind, VgHashTable table)
+ Addr p, SizeT szB, SizeT alignB, UInt rzB,
+ Bool is_zeroed, MC_AllocKind kind, VgHashTable table)
{
cmalloc_n_mallocs ++;
@@ -196,7 +196,13 @@
if (!p) {
return NULL;
}
- if (is_zeroed) VG_(memset)((void*)p, 0, szB);
+ if (is_zeroed) {
+ VG_(memset)((void*)p, 0, szB);
+ } else
+ if (MC_(clo_malloc_fill) != -1) {
+ tl_assert(MC_(clo_malloc_fill) >= 0x00 && MC_(clo_malloc_fill) <= 0xFF);
+ VG_(memset)((void*)p, MC_(clo_malloc_fill), szB);
+ }
}
// Only update this stat if allocation succeeded.
@@ -270,6 +276,11 @@
static
void die_and_free_mem ( ThreadId tid, MC_Chunk* mc, SizeT rzB )
{
+ if (MC_(clo_free_fill) != -1) {
+ tl_assert(MC_(clo_free_fill) >= 0x00 && MC_(clo_free_fill) <= 0xFF);
+ VG_(memset)((void*)mc->data, MC_(clo_free_fill), mc->szB);
+ }
+
/* Note: make redzones noaccess again -- just in case user made them
accessible with a client request... */
MC_(make_mem_noaccess)( mc->data-rzB, mc->szB + 2*rzB );
@@ -363,11 +374,19 @@
mc->szB = new_szB;
mc->where = VG_(record_ExeContext)(tid, 0/*first_ip_delta*/);
p_new = p_old;
+ /* Possibly fill freed area with specified junk. */
+ if (MC_(clo_free_fill) != -1) {
+ tl_assert(MC_(clo_free_fill) >= 0x00 && MC_(clo_free_fill) <= 0xFF);
+ VG_(memset)((void*)(mc->data+new_szB), MC_(clo_free_fill),
+ old_szB-new_szB);
+ }
} else {
/* new size is bigger */
+ Addr a_new;
+ tl_assert(old_szB < new_szB);
/* Get new memory */
- Addr a_new = (Addr)VG_(cli_malloc)(VG_(clo_alignment), new_szB);
+ a_new = (Addr)VG_(cli_malloc)(VG_(clo_alignment), new_szB);
if (a_new) {
/* First half kept and copied, second half new, red zones as normal */
@@ -376,9 +395,23 @@
MC_(make_mem_undefined)( a_new+mc->szB, new_szB-mc->szB );
MC_(make_mem_noaccess) ( a_new+new_szB, MC_MALLOC_REDZONE_SZB );
+ /* Possibly fill new area with specified junk */
+ if (MC_(clo_malloc_fill) != -1) {
+ tl_assert(MC_(clo_malloc_fill) >= 0x00
+ && MC_(clo_malloc_fill) <= 0xFF);
+ VG_(memset)((void*)(a_new+old_szB), MC_(clo_malloc_fill),
+ new_szB-old_szB);
+ }
+
/* Copy from old to new */
VG_(memcpy)((void*)a_new, p_old, mc->szB);
+ /* Possibly fill freed area with specified junk. */
+ if (MC_(clo_free_fill) != -1) {
+ tl_assert(MC_(clo_free_fill) >= 0x00 && MC_(clo_free_fill) <= 0xFF);
+ VG_(memset)((void*)p_old, MC_(clo_free_fill), old_szB);
+ }
+
/* Free old memory */
/* Nb: we have to allocate a new MC_Chunk for the new memory rather
than recycling the old one, so that any erroneous accesses to the
Modified: trunk/memcheck/tests/Makefile.am
===================================================================
--- trunk/memcheck/tests/Makefile.am 2007-11-30 21:24:05 UTC (rev 7258)
+++ trunk/memcheck/tests/Makefile.am 2007-11-30 21:41:40 UTC (rev 7259)
@@ -66,6 +66,8 @@
leakotron.vgtest leakotron.stdout.exp leakotron.stderr.exp \
long_namespace_xml.vgtest long_namespace_xml.stdout.exp \
long_namespace_xml.stderr.exp \
+ malloc_free_fill.vgtest malloc_free_fill.stdout.exp \
+ malloc_free_fill.stderr.exp \
malloc_usable.stderr.exp malloc_usable.vgtest \
malloc1.stderr.exp malloc1.vgtest \
malloc2.stderr.exp malloc2.vgtest \
@@ -157,6 +159,7 @@
fprw fwrite hello inits inline \
leak-0 leak-cycle leak-pool leak-tree leak-regroot leakotron \
long_namespace_xml \
+ malloc_free_fill \
malloc_usable malloc1 malloc2 malloc3 manuel1 manuel2 manuel3 \
match-overrun \
memalign_test memalign2 memcmptest mempool mmaptest \
Added: trunk/memcheck/tests/malloc_free_fill.c
===================================================================
--- trunk/memcheck/tests/malloc_free_fill.c (rev 0)
+++ trunk/memcheck/tests/malloc_free_fill.c 2007-11-30 21:41:40 UTC (rev 7259)
@@ -0,0 +1,64 @@
+
+/* Test for correct functioning of the --malloc-fill and --free-fill
+ flags. Needs --malloc-fill=0x55 and --free-fill=0x77. */
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+
+int main ( void )
+{
+ int *r, *oldr, *a;
+
+
+ fprintf(stderr, "test simple malloc/free:\n");
+
+ a = malloc(10 * sizeof(int)); assert(a);
+ fprintf(stderr, "(should be malloc-filled) a[4] = %x\n", a[4]);
+
+ free(a);
+ fprintf(stderr, "(should be free-filled) a[5] = %x\n", a[5]);
+
+
+
+ fprintf(stderr, "test realloc-larger:\n");
+
+ r = malloc(30 * sizeof(int)); assert(r);
+ fprintf(stderr, "(should be malloc-filled) r[25] = %x\n", r[25]);
+
+ /* Make larger */
+ oldr = r;
+ r = realloc(r, 40 * sizeof(int)); assert(r);
+
+ fprintf(stderr, "(should be free-filled) oldr[26] = %x\n", oldr[26]);
+ fprintf(stderr, "(should be malloc-filled) r[35] = %x\n", r[35]);
+
+ free(r);
+
+
+
+ fprintf(stderr, "test realloc-smaller:\n");
+
+ r = malloc(30 * sizeof(int)); assert(r);
+ fprintf(stderr, "(should be malloc-filled) r[25] = %x\n", r[25]);
+
+ /* Make smaller */
+ oldr = r;
+ r = realloc(r, 20 * sizeof(int)); assert(r);
+
+ fprintf(stderr, "(should be free-filled) oldr[26] = %x\n", oldr[26]);
+
+ free(r);
+
+
+
+ fprintf(stderr, "test calloc:\n");
+ a = calloc(100, sizeof(int)); assert(r);
+
+ fprintf(stderr, "(should be zero) a[42] = %x\n", a[42]);
+
+ free(a);
+
+
+ return 0;
+}
Added: trunk/memcheck/tests/malloc_free_fill.stderr.exp
===================================================================
--- trunk/memcheck/tests/malloc_free_fill.stderr.exp (rev 0)
+++ trunk/memcheck/tests/malloc_free_fill.stderr.exp 2007-11-30 21:41:40 UTC (rev 7259)
@@ -0,0 +1,57 @@
+
+test simple malloc/free:
+Use of uninitialised value of size 8
+ at 0x........: _itoa_word (in /...libc...)
+ by 0x........: ...
+ by 0x........: ...
+ by 0x........: ...
+ by 0x........: ...
+ by 0x........: main (malloc_free_fill.c:17)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: _itoa_word (in /...libc...)
+ by 0x........: ...
+ by 0x........: ...
+ by 0x........: ...
+ by 0x........: ...
+ by 0x........: main (malloc_free_fill.c:17)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: vfprintf (in /...libc...)
+ by 0x........: ...
+ by 0x........: ...
+ by 0x........: ...
+ by 0x........: main (malloc_free_fill.c:17)
+(should be malloc-filled) a[4] = 55555555
+
+Invalid read of size 4
+ at 0x........: main (malloc_free_fill.c:20)
+ Address 0x........ is 20 bytes inside a block of size 40 free'd
+ at 0x........: free (vg_replace_malloc.c:...)
+ by 0x........: main (malloc_free_fill.c:19)
+(should be free-filled) a[5] = 77777777
+test realloc-larger:
+(should be malloc-filled) r[25] = 55555555
+
+Invalid read of size 4
+ at 0x........: main (malloc_free_fill.c:33)
+ Address 0x........ is 104 bytes inside a block of size 120 free'd
+ at 0x........: realloc (vg_replace_malloc.c:...)
+ by 0x........: main (malloc_free_fill.c:31)
+(should be free-filled) oldr[26] = 77777777
+(should be malloc-filled) r[35] = 55555555
+test realloc-smaller:
+(should be malloc-filled) r[25] = 55555555
+
+Invalid read of size 4
+ at 0x........: main (malloc_free_fill.c:49)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+(should be free-filled) oldr[26] = 77777777
+test calloc:
+(should be zero) a[42] = 0
+
+ERROR SUMMARY: 67 errors from 6 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 6 allocs, 6 frees, 920 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
Added: trunk/memcheck/tests/malloc_free_fill.stdout.exp
===================================================================
Added: trunk/memcheck/tests/malloc_free_fill.vgtest
===================================================================
--- trunk/memcheck/tests/malloc_free_fill.vgtest (rev 0)
+++ trunk/memcheck/tests/malloc_free_fill.vgtest 2007-11-30 21:41:40 UTC (rev 7259)
@@ -0,0 +1,2 @@
+prog: malloc_free_fill
+vgopts: --malloc-fill=0x55 --free-fill=0x77
|
|
From: <sv...@va...> - 2007-11-30 21:24:05
|
Author: sewardj Date: 2007-11-30 21:24:05 +0000 (Fri, 30 Nov 2007) New Revision: 7258 Log: Marginally enhance help message. Modified: trunk/tests/vg_regtest.in Modified: trunk/tests/vg_regtest.in =================================================================== --- trunk/tests/vg_regtest.in 2007-11-30 17:50:44 UTC (rev 7257) +++ trunk/tests/vg_regtest.in 2007-11-30 21:24:05 UTC (rev 7258) @@ -89,7 +89,11 @@ #---------------------------------------------------------------------------- # Global vars #---------------------------------------------------------------------------- -my $usage="vg_regtest [--all, --valgrind, --valgrind-lib]\n"; +my $usage="\n" + . "Usage:\n" + . " vg_regtest [--all, --valgrind, --valgrind-lib]\n" + . " Use EXTRA_REGTEST_OPTS to supply extra args for all tests\n" + . "\n"; my $tmp="vg_regtest.tmp.$$"; |
|
From: Bart V. A. <bar...@gm...> - 2007-11-30 18:33:32
|
On Nov 22, 2007 7:53 PM, Julian Seward <js...@ac...> wrote: > > Greetings all. > > I'm trying to wrap up the long overdue 3.3.0 release. Regarding the 3.3.0 release, a question about the nightly build: from the nightly build output I can see that the exp-drd source code and regression tests are compiled, but are the exp-drd regression tests run during the nightly build ? I could not find any reference to exp-drd's regression test results in the last few nightly build e-mails. The nightly build mails I receive indicate that the nightly build is run on the following systems: * alvis ( i686, Red Hat 7.3 ) * lloyd ( x86_64, Fedora 7 ) * dellow ( x86_64, Fedora 8 ) * gill ( x86_64, Fedora Core 2 ) * g5 ( SuSE 10.1, ppc970 ) Regards, Bart. |
|
From: <sv...@va...> - 2007-11-30 17:50:43
|
Author: sewardj
Date: 2007-11-30 17:50:44 +0000 (Fri, 30 Nov 2007)
New Revision: 7257
Log:
Get rid of VG_NUMW_CLO, as it is pretty much identical to VG_NUM_CLO,
and only used in one place.
Modified:
trunk/coregrind/m_main.c
trunk/include/pub_tool_options.h
Modified: trunk/coregrind/m_main.c
===================================================================
--- trunk/coregrind/m_main.c 2007-11-30 17:19:36 UTC (rev 7256)
+++ trunk/coregrind/m_main.c 2007-11-30 17:50:44 UTC (rev 7257)
@@ -368,7 +368,7 @@
else VG_BOOL_CLO(arg, "--error-limit", VG_(clo_error_limit))
else VG_NUM_CLO (arg, "--error-exitcode", VG_(clo_error_exitcode))
else VG_BOOL_CLO(arg, "--show-emwarns", VG_(clo_show_emwarns))
- else VG_NUMW_CLO(arg, "--max-stackframe", VG_(clo_max_stackframe))
+ else VG_NUM_CLO (arg, "--max-stackframe", VG_(clo_max_stackframe))
else VG_BOOL_CLO(arg, "--run-libc-freeres", VG_(clo_run_libc_freeres))
else VG_BOOL_CLO(arg, "--show-below-main", VG_(clo_show_below_main))
else VG_BOOL_CLO(arg, "--time-stamp", VG_(clo_time_stamp))
Modified: trunk/include/pub_tool_options.h
===================================================================
--- trunk/include/pub_tool_options.h 2007-11-30 17:19:36 UTC (rev 7256)
+++ trunk/include/pub_tool_options.h 2007-11-30 17:50:44 UTC (rev 7257)
@@ -50,6 +50,7 @@
(qq_var) = &qq_arg[ VG_(strlen)(qq_option)+1 ]; \
}
+/* Unbounded integer arg */
#define VG_NUM_CLO(qq_arg, qq_option, qq_var) \
if (VG_CLO_STREQN(VG_(strlen)(qq_option)+1, qq_arg, qq_option"=")) { \
Char* s; \
@@ -59,17 +60,6 @@
if ('\0' != s[0] || (qq_var) != n) VG_(err_bad_option)(qq_arg); \
}
-/* Same as VG_NUM_CLO but does not coerce the result value to 32 bits
- on 64-bit platforms. */
-#define VG_NUMW_CLO(qq_arg, qq_option, qq_var) \
- if (VG_CLO_STREQN(VG_(strlen)(qq_option)+1, qq_arg, qq_option"=")) { \
- Char* s; \
- Long n = VG_(strtoll10)( &qq_arg[ VG_(strlen)(qq_option)+1 ], &s );\
- (qq_var) = n; \
- /* Check for non-numeralness */ \
- if ('\0' != s[0]) VG_(err_bad_option)(qq_arg); \
- }
-
/* Bounded integer arg */
#define VG_BNUM_CLO(qq_arg, qq_option, qq_var, qq_lo, qq_hi) \
if (VG_CLO_STREQN(VG_(strlen)(qq_option)+1, qq_arg, qq_option"=")) { \
|
|
From: <sv...@va...> - 2007-11-30 17:19:34
|
Author: sewardj
Date: 2007-11-30 17:19:36 +0000 (Fri, 30 Nov 2007)
New Revision: 7256
Log:
Make the freed-block-queue volume metrics 64-bit throughout, to avoid
any wierdness on very large machines in the future. Also, double the
default size from 5MB to 10MB, on the basis that programs are now on
average twice as lardy as they were when it was set to 5MB, whenever
that was.
Modified:
trunk/memcheck/docs/mc-manual.xml
trunk/memcheck/mc_include.h
trunk/memcheck/mc_main.c
trunk/memcheck/mc_malloc_wrappers.c
Modified: trunk/memcheck/docs/mc-manual.xml
===================================================================
--- trunk/memcheck/docs/mc-manual.xml 2007-11-30 15:28:13 UTC (rev 7255)
+++ trunk/memcheck/docs/mc-manual.xml 2007-11-30 17:19:36 UTC (rev 7256)
@@ -122,7 +122,7 @@
<varlistentry id="opt.freelist-vol" xreflabel="--freelist-vol">
<term>
- <option><![CDATA[--freelist-vol=<number> [default: 5000000] ]]></option>
+ <option><![CDATA[--freelist-vol=<number> [default: 10000000] ]]></option>
</term>
<listitem>
<para>When the client program releases memory using
@@ -137,7 +137,7 @@
have been freed.</para>
<para>This flag specifies the maximum total size, in bytes, of the
- blocks in the queue. The default value is five million bytes.
+ blocks in the queue. The default value is ten million bytes.
Increasing this increases the total amount of memory used by
<constant>memcheck</constant> but may detect invalid uses of freed
blocks which would otherwise go undetected.</para>
Modified: trunk/memcheck/mc_include.h
===================================================================
--- trunk/memcheck/mc_include.h 2007-11-30 15:28:13 UTC (rev 7255)
+++ trunk/memcheck/mc_include.h 2007-11-30 17:19:36 UTC (rev 7256)
@@ -255,7 +255,7 @@
extern Bool MC_(clo_partial_loads_ok);
/* Max volume of the freed blocks queue. */
-extern SSizeT MC_(clo_freelist_vol);
+extern Long MC_(clo_freelist_vol);
/* Do leak check at exit? default: NO */
extern LeakCheckMode MC_(clo_leak_check);
Modified: trunk/memcheck/mc_main.c
===================================================================
--- trunk/memcheck/mc_main.c 2007-11-30 15:28:13 UTC (rev 7255)
+++ trunk/memcheck/mc_main.c 2007-11-30 17:19:36 UTC (rev 7256)
@@ -4367,7 +4367,7 @@
/*------------------------------------------------------------*/
Bool MC_(clo_partial_loads_ok) = False;
-SSizeT MC_(clo_freelist_vol) = 5000000;
+Long MC_(clo_freelist_vol) = 10*1000*1000LL;
LeakCheckMode MC_(clo_leak_check) = LC_Summary;
VgRes MC_(clo_leak_resolution) = Vg_LowRes;
Bool MC_(clo_show_reachable) = False;
@@ -4382,7 +4382,8 @@
else VG_BOOL_CLO(arg, "--undef-value-errors", MC_(clo_undef_value_errors))
- else VG_BNUM_CLO(arg, "--freelist-vol", MC_(clo_freelist_vol), 0, 1000000000)
+ else VG_BNUM_CLO(arg, "--freelist-vol", MC_(clo_freelist_vol),
+ 0, 10*1000*1000*1000LL)
else if (VG_CLO_STREQ(arg, "--leak-check=no"))
MC_(clo_leak_check) = LC_Off;
@@ -4442,7 +4443,7 @@
" --show-reachable=no|yes show reachable blocks in leak check? [no]\n"
" --undef-value-errors=no|yes check for undefined value errors [yes]\n"
" --partial-loads-ok=no|yes too hard to explain here; see manual [no]\n"
-" --freelist-vol=<number> volume of freed blocks queue [5000000]\n"
+" --freelist-vol=<number> volume of freed blocks queue [10000000]\n"
" --workaround-gcc296-bugs=no|yes self explanatory [no]\n"
" --ignore-ranges=0xPP-0xQQ[,0xRR-0xSS] assume given addresses are OK\n"
);
Modified: trunk/memcheck/mc_malloc_wrappers.c
===================================================================
--- trunk/memcheck/mc_malloc_wrappers.c 2007-11-30 15:28:13 UTC (rev 7255)
+++ trunk/memcheck/mc_malloc_wrappers.c 2007-11-30 17:19:36 UTC (rev 7256)
@@ -71,22 +71,27 @@
/* Records blocks after freeing. */
static MC_Chunk* freed_list_start = NULL;
static MC_Chunk* freed_list_end = NULL;
-static SSizeT freed_list_volume = 0;
+static Long freed_list_volume = 0;
/* Put a shadow chunk on the freed blocks queue, possibly freeing up
some of the oldest blocks in the queue at the same time. */
static void add_to_freed_queue ( MC_Chunk* mc )
{
+ const Bool show = False;
+
/* Put it at the end of the freed list */
if (freed_list_end == NULL) {
tl_assert(freed_list_start == NULL);
freed_list_end = freed_list_start = mc;
- freed_list_volume = mc->szB;
+ freed_list_volume = (Long)mc->szB;
} else {
tl_assert(freed_list_end->next == NULL);
freed_list_end->next = mc;
freed_list_end = mc;
- freed_list_volume += mc->szB;
+ freed_list_volume += (Long)mc->szB;
+ if (show)
+ VG_(printf)("mc_freelist: acquire: volume now %lld\n",
+ freed_list_volume);
}
mc->next = NULL;
@@ -100,8 +105,10 @@
tl_assert(freed_list_end != NULL);
mc1 = freed_list_start;
- freed_list_volume -= mc1->szB;
- /* VG_(printf)("volume now %d\n", freed_list_volume); */
+ freed_list_volume -= (Long)mc1->szB;
+ if (show)
+ VG_(printf)("mc_freelist: discard: volume now %lld\n",
+ freed_list_volume);
tl_assert(freed_list_volume >= 0);
if (freed_list_start == freed_list_end) {
@@ -174,7 +181,6 @@
}
/* Allocate memory and note change in memory available */
-__inline__
void* MC_(new_block) ( ThreadId tid,
Addr p, SizeT szB, SizeT alignB, UInt rzB,
Bool is_zeroed, MC_AllocKind kind, VgHashTable table)
@@ -278,7 +284,6 @@
}
}
-__inline__
void MC_(handle_free) ( ThreadId tid, Addr p, UInt rzB, MC_AllocKind kind )
{
MC_Chunk* mc;
|
|
From: <sv...@va...> - 2007-11-30 15:28:12
|
Author: sewardj Date: 2007-11-30 15:28:13 +0000 (Fri, 30 Nov 2007) New Revision: 7255 Log: Include headers in tarball. Modified: trunk/exp-drd/Makefile.am Modified: trunk/exp-drd/Makefile.am =================================================================== --- trunk/exp-drd/Makefile.am 2007-11-30 11:22:35 UTC (rev 7254) +++ trunk/exp-drd/Makefile.am 2007-11-30 15:28:13 UTC (rev 7255) @@ -79,6 +79,20 @@ drd_thread.c \ drd_vc.c +noinst_HEADERS = drd_bitmap.h \ + drd_mutex.h \ + drd_vc.h \ + drd_clientreq.h \ + drd_segment.h \ + priv_drd_clientreq.h \ + drd_cond.h \ + drd_suppression.h \ + pub_drd_bitmap.h \ + drd_error.h \ + drd_thread.h \ + drd_malloc_wrappers.h \ + drd_track.h + AM_CFLAGS_X86_LINUX += -I$(top_srcdir)/coregrind AM_CFLAGS_AMD64_LINUX += -I$(top_srcdir)/coregrind AM_CFLAGS_PPC32_LINUX += -I$(top_srcdir)/coregrind |
|
From: <sv...@va...> - 2007-11-30 11:22:33
|
Author: sewardj
Date: 2007-11-30 11:22:35 +0000 (Fri, 30 Nov 2007)
New Revision: 7254
Log:
Add a test case for semaphores with nonzero initial values.
Added:
trunk/helgrind/tests/tc24_nonzero_sem.c
trunk/helgrind/tests/tc24_nonzero_sem.stderr.exp-glibc25-amd64
trunk/helgrind/tests/tc24_nonzero_sem.stdout.exp
trunk/helgrind/tests/tc24_nonzero_sem.vgtest
Modified:
trunk/helgrind/tests/Makefile.am
Modified: trunk/helgrind/tests/Makefile.am
===================================================================
--- trunk/helgrind/tests/Makefile.am 2007-11-30 11:11:02 UTC (rev 7253)
+++ trunk/helgrind/tests/Makefile.am 2007-11-30 11:22:35 UTC (rev 7254)
@@ -81,7 +81,9 @@
tc22_exit_w_lock.stderr.exp-glibc25-x86 \
tc23_bogus_condwait.vgtest tc23_bogus_condwait.stdout.exp \
tc23_bogus_condwait.stderr.exp-glibc25-amd64 \
- tc23_bogus_condwait.stderr.exp-glibc25-x86
+ tc23_bogus_condwait.stderr.exp-glibc25-x86 \
+ tc24_nonzero_sem.vgtest tc24_nonzero_sem.stdout.exp \
+ tc24_nonzero_sem.stderr.exp-glibc25-amd64
check_PROGRAMS = \
hg01_all_ok \
@@ -112,7 +114,8 @@
tc20_verifywrap \
tc21_pthonce \
tc22_exit_w_lock \
- tc23_bogus_condwait
+ tc23_bogus_condwait \
+ tc24_nonzero_sem
AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \
-I$(top_srcdir)/coregrind -I$(top_builddir)/include \
Added: trunk/helgrind/tests/tc24_nonzero_sem.c
===================================================================
--- trunk/helgrind/tests/tc24_nonzero_sem.c (rev 0)
+++ trunk/helgrind/tests/tc24_nonzero_sem.c 2007-11-30 11:22:35 UTC (rev 7254)
@@ -0,0 +1,41 @@
+
+/* Check that Helgrind does not complain about semaphores with a
+ nonzero initial value, when said semaphores are correctly used.
+ Also useful for generating VCG of simple semaphore activity, for
+ inspection. */
+
+#include <pthread.h>
+#include <semaphore.h>
+#include <assert.h>
+
+#define N_THREADS 3
+
+void* child_fn ( void* semV )
+{
+ int r;
+ sem_t* sem = (sem_t*)semV;
+ r= sem_wait(sem); assert(!r);
+ return NULL;
+}
+
+int main ( void )
+{
+ int r, i;
+ sem_t sem;
+ pthread_t child[N_THREADS];
+
+ r= sem_init(&sem, 0, N_THREADS); assert(!r);
+
+ for (i = 0; i < N_THREADS; i++) {
+ r= pthread_create( &child[i], NULL, child_fn, (void*)&sem );
+ assert(!r);
+ }
+
+ for (i = 0; i < N_THREADS; i++) {
+ r= pthread_join( child[i], NULL );
+ assert(!r);
+ }
+
+ sem_destroy(&sem);
+ return 0;
+}
Added: trunk/helgrind/tests/tc24_nonzero_sem.stderr.exp-glibc25-amd64
===================================================================
--- trunk/helgrind/tests/tc24_nonzero_sem.stderr.exp-glibc25-amd64 (rev 0)
+++ trunk/helgrind/tests/tc24_nonzero_sem.stderr.exp-glibc25-amd64 2007-11-30 11:22:35 UTC (rev 7254)
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Added: trunk/helgrind/tests/tc24_nonzero_sem.stdout.exp
===================================================================
Added: trunk/helgrind/tests/tc24_nonzero_sem.vgtest
===================================================================
--- trunk/helgrind/tests/tc24_nonzero_sem.vgtest (rev 0)
+++ trunk/helgrind/tests/tc24_nonzero_sem.vgtest 2007-11-30 11:22:35 UTC (rev 7254)
@@ -0,0 +1,2 @@
+prog: tc24_nonzero_sem
+vgopts: --hg-sanity-flags=111111
|
|
From: <sv...@va...> - 2007-11-30 11:11:01
|
Author: sewardj
Date: 2007-11-30 11:11:02 +0000 (Fri, 30 Nov 2007)
New Revision: 7253
Log:
Correctly handle semaphores with nonzero initial values. Fixes bug
observed by Matthieu Castet. Also, add another sanity-check flag.
Modified:
trunk/helgrind/docs/hg-manual.xml
trunk/helgrind/helgrind.h
trunk/helgrind/hg_intercepts.c
trunk/helgrind/hg_main.c
Modified: trunk/helgrind/docs/hg-manual.xml
===================================================================
--- trunk/helgrind/docs/hg-manual.xml 2007-11-30 08:30:29 UTC (rev 7252)
+++ trunk/helgrind/docs/hg-manual.xml 2007-11-30 11:11:02 UTC (rev 7253)
@@ -1228,24 +1228,26 @@
</listitem>
</varlistentry>
- <varlistentry id="opt.tc-sanity-flags" xreflabel="--tc-sanity-flags">
+ <varlistentry id="opt.hg-sanity-flags" xreflabel="--hg-sanity-flags">
<term>
- <option><![CDATA[--tc-sanity-flags=<XXXXX> (X = 0|1) [00000]
+ <option><![CDATA[--hg-sanity-flags=<XXXXXX> (X = 0|1) [000000]
]]></option>
</term>
<listitem>
<para>Run extensive sanity checks on Helgrind's internal
data structures at events defined by the bitstring, as
follows:</para>
- <para><computeroutput>10000 </computeroutput>after changes to
+ <para><computeroutput>100000 </computeroutput>at every query
+ to the happens-before graph</para>
+ <para><computeroutput>010000 </computeroutput>after changes to
the lock order acquisition graph</para>
- <para><computeroutput>01000 </computeroutput>after every client
+ <para><computeroutput>001000 </computeroutput>after every client
memory access (NB: not currently used)</para>
- <para><computeroutput>00100 </computeroutput>after every client
+ <para><computeroutput>000100 </computeroutput>after every client
memory range permission setting of 256 bytes or greater</para>
- <para><computeroutput>00010 </computeroutput>after every client
+ <para><computeroutput>000010 </computeroutput>after every client
lock or unlock event</para>
- <para><computeroutput>00001 </computeroutput>after every client
+ <para><computeroutput>000001 </computeroutput>after every client
thread creation or joinage event</para>
<para>Note these will make Helgrind run very slowly, often to
the point of being completely unusable.</para>
Modified: trunk/helgrind/helgrind.h
===================================================================
--- trunk/helgrind/helgrind.h 2007-11-30 08:30:29 UTC (rev 7252)
+++ trunk/helgrind/helgrind.h 2007-11-30 11:11:02 UTC (rev 7253)
@@ -88,9 +88,10 @@
_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST, /* pth_rwlk_t*, long isW */
_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE, /* pth_rwlk_t* */
_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST, /* pth_rwlk_t* */
- _VG_USERREQ__HG_POSIX_SEMPOST_PRE, /* sem_t* */
- _VG_USERREQ__HG_POSIX_SEMWAIT_POST, /* sem_t* */
- _VG_USERREQ__HG_POSIX_SEM_ZAPSTACK, /* sem_t* */
+ _VG_USERREQ__HG_POSIX_SEM_INIT_POST, /* sem_t*, ulong value */
+ _VG_USERREQ__HG_POSIX_SEM_DESTROY_PRE, /* sem_t* */
+ _VG_USERREQ__HG_POSIX_SEM_POST_PRE, /* sem_t* */
+ _VG_USERREQ__HG_POSIX_SEM_WAIT_POST, /* sem_t* */
_VG_USERREQ__HG_GET_MY_SEGMENT /* -> Segment* */
} Vg_TCheckClientRequest;
Modified: trunk/helgrind/hg_intercepts.c
===================================================================
--- trunk/helgrind/hg_intercepts.c 2007-11-30 08:30:29 UTC (rev 7252)
+++ trunk/helgrind/hg_intercepts.c 2007-11-30 11:11:02 UTC (rev 7253)
@@ -913,8 +913,8 @@
CALL_FN_W_WWW(ret, fn, sem,pshared,value);
if (ret == 0) {
- /* Probably overly paranoid, but still ... */
- DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_ZAPSTACK, sem_t*,sem);
+ DO_CREQ_v_WW(_VG_USERREQ__HG_POSIX_SEM_INIT_POST,
+ sem_t*, sem, unsigned long, value);
} else {
DO_PthAPIerror( "sem_init", errno );
}
@@ -941,7 +941,7 @@
fflush(stderr);
}
- DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_ZAPSTACK, sem_t*,sem);
+ DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_DESTROY_PRE, sem_t*, sem);
CALL_FN_W_W(ret, fn, sem);
@@ -975,7 +975,7 @@
CALL_FN_W_W(ret, fn, sem);
if (ret == 0) {
- DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEMWAIT_POST, sem_t*,sem);
+ DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_WAIT_POST, sem_t*,sem);
} else {
DO_PthAPIerror( "sem_wait", errno );
}
@@ -1010,7 +1010,7 @@
fflush(stderr);
}
- DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEMPOST_PRE, sem_t*,sem);
+ DO_CREQ_v_W(_VG_USERREQ__HG_POSIX_SEM_POST_PRE, sem_t*,sem);
CALL_FN_W_W(ret, fn, sem);
Modified: trunk/helgrind/hg_main.c
===================================================================
--- trunk/helgrind/hg_main.c 2007-11-30 08:30:29 UTC (rev 7252)
+++ trunk/helgrind/hg_main.c 2007-11-30 11:11:02 UTC (rev 7253)
@@ -59,22 +59,11 @@
/*--- ---*/
/*----------------------------------------------------------------*/
-/* Note there are a whole bunch of ugly double casts of the form
- (Word*)(HChar*)&p. These placate gcc at -O2. The obvious form
- (Word*)&p causes gcc to complain that 'dereferencing a type-punned
- pointer ill break strict-aliasing rules'. It stops complaining
- when the intermediate HChar* type is inserted.
-
- HChar is the same as plain 'char' (see
- VEX/pub/libvex_basictypes.h). The ANSI C standard says "An object
- shall have its stored value accessed only by an lvalue that has one
- of the following types: [..] A character type."
-
- (http://gcc.gnu.org/ml/gcc/1999-09n/msg00419.html)
-
- Hence it would appear that casting via an intermediate char* type
- is a standards-compliant (== future-proof) way to circumvent the
- aliasing rules in places where it is convenient to do so.
+/* Note this needs to be compiled with -fno-strict-aliasing, since it
+ contains a whole bunch of calls to lookupFM etc which cast between
+ Word and pointer types. gcc rightly complains this breaks ANSI C
+ strict aliasing rules, at -O2. No complaints at -O, but -O2 gives
+ worthwhile performance benefits over -O.
*/
// FIXME what is supposed to happen to locks in memory which
@@ -111,6 +100,7 @@
#define SCE_BIGRANGE (1<<2) // Sanity check at big mem range events
#define SCE_ACCESS (1<<3) // Sanity check at mem accesses
#define SCE_LAOG (1<<4) // Sanity check at significant LAOG events
+#define SCE_HBEFORE (1<<5) // Crosscheck VTS vs Explicit h-before-graph
#define SCE_BIGRANGE_T 256 // big mem range minimum size
@@ -139,7 +129,8 @@
// 0 = no segments at all
// 1 = segments at thread create/join
-// 2 = as 1 + segments at condition variable signal/broadcast/wait too
+// 2 = as 1 + segments at condition variable signal/broadcast/wait
+// + segments at sem_wait/sem_post
static Int clo_happens_before = 2; /* default setting */
/* Generate .vcg output of the happens-before graph?
@@ -2156,7 +2147,7 @@
tl_assert(seg2->vts);
hbV = cmpGEQ_VTS( seg2->vts, seg1->vts );
- if (0) {
+ if (clo_sanity_flags & SCE_HBEFORE) {
/* Crosscheck the vector-timestamp comparison result against that
obtained from the explicit graph approach. Can be very
slow. */
@@ -6326,7 +6317,7 @@
/* --------------- events to do with semaphores --------------- */
-/* This is similar but not identical the handling for condition
+/* This is similar to but not identical to the handling for condition
variables. */
/* For each semaphore, we maintain a stack of Segments. When a 'post'
@@ -6348,6 +6339,15 @@
twice on S. T3 cannot complete its waits without both T1 and T2
posting. The above mechanism will ensure that T3 acquires
dependencies on both T1 and T2.
+
+ When a semaphore is initialised with value N, the initialising
+ thread starts a new segment, the semaphore's stack is emptied out,
+ and the old segment is pushed on the stack N times. This allows up
+ to N waits on the semaphore to acquire a dependency on the
+ initialisation point, which AFAICS is the correct behaviour.
+
+ We don't emit an error for DESTROY_PRE on a semaphore we don't know
+ about. We should.
*/
/* sem_t* -> XArray* Segment* */
@@ -6396,17 +6396,16 @@
}
}
-static void evh__HG_POSIX_SEM_ZAPSTACK ( ThreadId tid, void* sem )
+static void evh__HG_POSIX_SEM_DESTROY_PRE ( ThreadId tid, void* sem )
{
Segment* seg;
- /* Empty out the semaphore's segment stack. Occurs at
- sem_init and sem_destroy time. */
if (SHOW_EVENTS >= 1)
- VG_(printf)("evh__HG_POSIX_SEM_ZAPSTACK(ctid=%d, sem=%p)\n",
+ VG_(printf)("evh__HG_POSIX_SEM_DESTROY_PRE(ctid=%d, sem=%p)\n",
(Int)tid, (void*)sem );
- /* This is stupid, but at least it's easy. */
+ /* Empty out the semaphore's segment stack. This way of doing it
+ is stupid, but at least it's easy. */
do {
seg = mb_pop_Segment_for_sem( sem );
} while (seg);
@@ -6414,8 +6413,57 @@
tl_assert(!seg);
}
-static void evh__HG_POSIX_SEMPOST_PRE ( ThreadId tid, void* sem )
+static
+void evh__HG_POSIX_SEM_INIT_POST ( ThreadId tid, void* sem, UWord value )
{
+ Segment* seg;
+
+ if (SHOW_EVENTS >= 1)
+ VG_(printf)("evh__HG_POSIX_SEM_INIT_POST(ctid=%d, sem=%p, value=%lu)\n",
+ (Int)tid, (void*)sem, value );
+
+ /* Empty out the semaphore's segment stack. This way of doing it
+ is stupid, but at least it's easy. */
+ do {
+ seg = mb_pop_Segment_for_sem( sem );
+ } while (seg);
+ tl_assert(!seg);
+
+ /* Now create a new segment for the thread, and push the old
+ segment on the stack 'value' times. Skip this if the initial
+ value is zero -- no point in creating unnecessary segments. */
+ if (value > 0) {
+ /* create a new segment ... */
+ SegmentID new_segid = 0; /* bogus */
+ Segment* new_seg = NULL;
+ Thread* thr = map_threads_maybe_lookup( tid );
+ tl_assert(thr); /* cannot fail - Thread* must already exist */
+
+ evhH__start_new_segment_for_thread( &new_segid, &new_seg, thr );
+ tl_assert( is_sane_SegmentID(new_segid) );
+ tl_assert( is_sane_Segment(new_seg) );
+ tl_assert( new_seg->thr == thr );
+ tl_assert( is_sane_Segment(new_seg->prev) );
+ tl_assert( new_seg->prev->vts );
+ new_seg->vts = tick_VTS( new_seg->thr, new_seg->prev->vts );
+
+ if (value > 10000) {
+ /* If we don't do this, the following while loop runs us out
+ of memory for stupid initial values of 'sem'. */
+ record_error_Misc(
+ thr, "sem_init: initial value exceeds 10000; using 10000" );
+ value = 10000;
+ }
+
+ while (value > 0) {
+ push_Segment_for_sem( sem, new_seg->prev );
+ value--;
+ }
+ }
+}
+
+static void evh__HG_POSIX_SEM_POST_PRE ( ThreadId tid, void* sem )
+{
/* 'tid' has posted on 'sem'. Start a new segment for this thread,
and push the old segment on a stack of segments associated with
'sem'. This is later used by other thread(s) which successfully
@@ -6428,7 +6476,7 @@
Segment* new_seg;
if (SHOW_EVENTS >= 1)
- VG_(printf)("evh__HG_POSIX_SEMPOST_PRE(ctid=%d, sem=%p)\n",
+ VG_(printf)("evh__HG_POSIX_SEM_POST_PRE(ctid=%d, sem=%p)\n",
(Int)tid, (void*)sem );
thr = map_threads_maybe_lookup( tid );
@@ -6453,7 +6501,7 @@
}
}
-static void evh__HG_POSIX_SEMWAIT_POST ( ThreadId tid, void* sem )
+static void evh__HG_POSIX_SEM_WAIT_POST ( ThreadId tid, void* sem )
{
/* A sem_wait(sem) completed successfully. Start a new segment for
this thread. Pop the posting-segment for the 'sem' in the
@@ -6466,7 +6514,7 @@
Segment* posting_seg;
if (SHOW_EVENTS >= 1)
- VG_(printf)("evh__HG_POSIX_SEMWAIT_POST(ctid=%d, sem=%p)\n",
+ VG_(printf)("evh__HG_POSIX_SEM_WAIT_POST(ctid=%d, sem=%p)\n",
(Int)tid, (void*)sem );
thr = map_threads_maybe_lookup( tid );
@@ -7620,18 +7668,22 @@
evh__HG_PTHREAD_RWLOCK_UNLOCK_POST( tid, (void*)args[1] );
break;
- case _VG_USERREQ__HG_POSIX_SEMPOST_PRE: /* sem_t* */
- evh__HG_POSIX_SEMPOST_PRE( tid, (void*)args[1] );
+ case _VG_USERREQ__HG_POSIX_SEM_INIT_POST: /* sem_t*, unsigned long */
+ evh__HG_POSIX_SEM_INIT_POST( tid, (void*)args[1], args[2] );
break;
- case _VG_USERREQ__HG_POSIX_SEMWAIT_POST: /* sem_t* */
- evh__HG_POSIX_SEMWAIT_POST( tid, (void*)args[1] );
+ case _VG_USERREQ__HG_POSIX_SEM_DESTROY_PRE: /* sem_t* */
+ evh__HG_POSIX_SEM_DESTROY_PRE( tid, (void*)args[1] );
break;
- case _VG_USERREQ__HG_POSIX_SEM_ZAPSTACK: /* sem_t* */
- evh__HG_POSIX_SEM_ZAPSTACK( tid, (void*)args[1] );
+ case _VG_USERREQ__HG_POSIX_SEM_POST_PRE: /* sem_t* */
+ evh__HG_POSIX_SEM_POST_PRE( tid, (void*)args[1] );
break;
+ case _VG_USERREQ__HG_POSIX_SEM_WAIT_POST: /* sem_t* */
+ evh__HG_POSIX_SEM_WAIT_POST( tid, (void*)args[1] );
+ break;
+
case _VG_USERREQ__HG_GET_MY_SEGMENT: { // -> Segment*
Thread* thr;
SegmentID segid;
@@ -8498,21 +8550,21 @@
}
else VG_BNUM_CLO(arg, "--trace-level", clo_trace_level, 0, 2)
- /* "stuvw" --> stuvw (binary) */
- else if (VG_CLO_STREQN(18, arg, "--tc-sanity-flags=")) {
+ /* "stuvwx" --> stuvwx (binary) */
+ else if (VG_CLO_STREQN(18, arg, "--hg-sanity-flags=")) {
Int j;
Char* opt = & arg[18];
- if (5 != VG_(strlen)(opt)) {
+ if (6 != VG_(strlen)(opt)) {
VG_(message)(Vg_UserMsg,
- "--tc-sanity-flags argument must have 5 digits");
+ "--hg-sanity-flags argument must have 6 digits");
return False;
}
- for (j = 0; j < 5; j++) {
+ for (j = 0; j < 6; j++) {
if ('0' == opt[j]) { /* do nothing */ }
- else if ('1' == opt[j]) clo_sanity_flags |= (1 << (5-1-j));
+ else if ('1' == opt[j]) clo_sanity_flags |= (1 << (6-1-j));
else {
- VG_(message)(Vg_UserMsg, "--tc-sanity-flags argument can "
+ VG_(message)(Vg_UserMsg, "--hg-sanity-flags argument can "
"only contain 0s and 1s");
return False;
}
@@ -8544,16 +8596,17 @@
"in .vcg format [no]\n");
VG_(printf)(" --cmp-race-err-addrs=no|yes are data addresses in "
"race errors significant? [no]\n");
- VG_(printf)(" --tc-sanity-flags=<XXXXX> sanity check "
- " at events (X = 0|1) [00000]\n");
- VG_(printf)(" --tc-sanity-flags values:\n");
- VG_(printf)(" 10000 after changes to "
+ VG_(printf)(" --hg-sanity-flags=<XXXXXX> sanity check "
+ " at events (X = 0|1) [000000]\n");
+ VG_(printf)(" --hg-sanity-flags values:\n");
+ VG_(printf)(" 100000 crosscheck happens-before-graph searches\n");
+ VG_(printf)(" 010000 after changes to "
"lock-order-acquisition-graph\n");
- VG_(printf)(" 01000 at memory accesses (NB: not curently used)\n");
- VG_(printf)(" 00100 at mem permission setting for "
+ VG_(printf)(" 001000 at memory accesses (NB: not currently used)\n");
+ VG_(printf)(" 000100 at mem permission setting for "
"ranges >= %d bytes\n", SCE_BIGRANGE_T);
- VG_(printf)(" 00010 at lock/unlock events\n");
- VG_(printf)(" 00001 at thread create/join events\n");
+ VG_(printf)(" 000010 at lock/unlock events\n");
+ VG_(printf)(" 000001 at thread create/join events\n");
}
static void hg_post_clo_init ( void )
|
|
From: <sv...@va...> - 2007-11-30 08:30:38
|
Author: sewardj
Date: 2007-11-30 08:30:29 +0000 (Fri, 30 Nov 2007)
New Revision: 7252
Log:
Remove pthread_object_size.h and associated hardwired constants.
(Bart Van Assche)
Added:
trunk/exp-drd/priv_drd_clientreq.h
Removed:
trunk/exp-drd/pthread_object_size.h
Modified:
trunk/exp-drd/TODO.txt
trunk/exp-drd/drd_clientreq.c
trunk/exp-drd/drd_clientreq.h
trunk/exp-drd/drd_cond.c
trunk/exp-drd/drd_cond.h
trunk/exp-drd/drd_main.c
trunk/exp-drd/drd_mutex.c
trunk/exp-drd/drd_mutex.h
trunk/exp-drd/drd_preloaded.c
trunk/exp-drd/drd_thread.c
trunk/exp-drd/drd_track.h
trunk/exp-drd/tests/Makefile.am
Modified: trunk/exp-drd/TODO.txt
===================================================================
--- trunk/exp-drd/TODO.txt 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/TODO.txt 2007-11-30 08:30:29 UTC (rev 7252)
@@ -19,7 +19,6 @@
AMD64).
- Change s_threadinfo[] from an array into an OSet or VgHashTable, in order to
make ThreadId <> DrdThreadId <> pthread_t conversions faster.
-- Write a configure test that figures out sizeof(pthread_mutex_t) etc.
- [AMD64] Find out why removing 'write(1, "", 0)' in drd_preloaded.c triggers
a crash on AMD64. Is this a drd or a VEX bug ?
- Reintroduce the const keyword in the function declarations of the OSet
Modified: trunk/exp-drd/drd_clientreq.c
===================================================================
--- trunk/exp-drd/drd_clientreq.c 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_clientreq.c 2007-11-30 08:30:29 UTC (rev 7252)
@@ -4,7 +4,7 @@
#include "drd_suppression.h" // drd_start_suppression()
#include "drd_thread.h"
#include "drd_track.h"
-#include "pthread_object_size.h"
+#include "priv_drd_clientreq.h"
#include "pub_core_tooliface.h" // VG_TRACK()
#include "pub_tool_basics.h" // Bool
#include "pub_tool_libcassert.h"
@@ -20,24 +20,26 @@
struct mutex_info* mutex_p = mutex_get(spinlock);
if (mutex_p)
{
- mutex_unlock(spinlock);
+ mutex_unlock(spinlock, mutex_type_spinlock);
}
else
{
- mutex_init(spinlock, size);
+ mutex_init(spinlock, size, mutex_type_spinlock);
}
}
-static void drd_pre_cond_wait(const Addr cond, const Addr mutex)
+static void drd_pre_cond_wait(const Addr cond, const SizeT cond_size,
+ const Addr mutex)
{
- mutex_unlock(mutex);
- cond_pre_wait(cond, mutex);
+ mutex_unlock(mutex, mutex_type_mutex);
+ cond_pre_wait(cond, cond_size, mutex);
}
-static void drd_post_cond_wait(const Addr cond, const Addr mutex)
+static void drd_post_cond_wait(const Addr cond, const Addr mutex,
+ const SizeT size)
{
cond_post_wait(cond);
- mutex_lock(mutex, PTHREAD_MUTEX_SIZE);
+ mutex_lock(mutex, size, mutex_type_mutex);
}
static void drd_pre_cond_signal(const Addr cond)
@@ -105,7 +107,7 @@
break;
case VG_USERREQ__PRE_MUTEX_INIT:
- drd_pre_mutex_init(arg[1], arg[2]);
+ drd_pre_mutex_init(arg[1], arg[2], arg[3]);
break;
case VG_USERREQ__POST_MUTEX_DESTROY:
@@ -113,15 +115,15 @@
break;
case VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK:
- drd_pre_mutex_lock(thread_get_running_tid(), arg[1], arg[2]);
+ drd_pre_mutex_lock(thread_get_running_tid(), arg[1], arg[2], arg[3]);
break;
case VG_USERREQ__POST_PTHREAD_MUTEX_LOCK:
- drd_post_mutex_lock(thread_get_running_tid(), arg[1], arg[2]);
+ drd_post_mutex_lock(thread_get_running_tid(), arg[1], arg[2], arg[3]);
break;
case VG_USERREQ__PRE_PTHREAD_MUTEX_UNLOCK:
- drd_pre_mutex_unlock(thread_get_running_tid(), arg[1]);
+ drd_pre_mutex_unlock(thread_get_running_tid(), arg[1], arg[3]);
break;
case VG_USERREQ__SPIN_INIT_OR_UNLOCK:
@@ -133,15 +135,16 @@
break;
case VG_USERREQ__PRE_PTHREAD_COND_DESTROY:
- drd_pre_cond_destroy(arg[1], arg[2]);
+ drd_pre_cond_destroy(arg[1]);
break;
case VG_USERREQ__PRE_PTHREAD_COND_WAIT:
- drd_pre_cond_wait(arg[1], arg[2]);
+ drd_pre_cond_wait(arg[1]/*cond*/, arg[2]/*cond_size*/, arg[3]/*mutex*/);
break;
case VG_USERREQ__POST_PTHREAD_COND_WAIT:
- drd_post_cond_wait(arg[1], arg[2]);
+ drd_post_cond_wait(arg[1]/*cond*/, arg[3]/*mutex*/,
+ arg[4]/*mutex_size*/);
break;
case VG_USERREQ__PRE_PTHREAD_COND_SIGNAL:
Modified: trunk/exp-drd/drd_clientreq.h
===================================================================
--- trunk/exp-drd/drd_clientreq.h 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_clientreq.h 2007-11-30 08:30:29 UTC (rev 7252)
@@ -54,16 +54,16 @@
/* To notify the core of a pthread_mutex_init call */
VG_USERREQ__PRE_MUTEX_INIT,
- /* args: Addr, SizeT */
+ /* args: Addr, MutexT */
/* To notify the core of a pthread_mutex_destroy call */
VG_USERREQ__POST_MUTEX_DESTROY,
- /* args: Addr, SizeT */
+ /* args: Addr, SizeT, MutexT */
/* To notify the core of pthread_mutex_lock calls */
VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK,
- /* args: Addr, SizeT */
+ /* args: Addr, SizeT, MutexT */
/* To notify the core of pthread_mutex_lock calls */
VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
- /* args: Addr, SizeT */
+ /* args: Addr, SizeT, MutexT */
/* To notify the core of pthread_mutex_unlock calls */
VG_USERREQ__PRE_PTHREAD_MUTEX_UNLOCK,
/* args: Addr */
@@ -73,14 +73,14 @@
/* To notify the core of a pthread_cond_init call */
VG_USERREQ__POST_PTHREAD_COND_INIT,
- /* args: Addr, SizeT */
+ /* args: Addr */
/* To notify the core of a pthread_cond_destroy call */
VG_USERREQ__PRE_PTHREAD_COND_DESTROY,
- /* args: Addr, SizeT */
+ /* args: Addr cond, SizeT cond_size, Addr mutex, SizeT mutex_size */
VG_USERREQ__PRE_PTHREAD_COND_WAIT,
- /* args: Addr cond, Addr mutex */
+ /* args: Addr cond, SizeT cond_size, Addr mutex, SizeT mutex_size */
VG_USERREQ__POST_PTHREAD_COND_WAIT,
- /* args: Addr cond, Addr mutex */
+ /* args: Addr cond, SizeT cond_size, Addr mutex, SizeT mutex_size */
VG_USERREQ__PRE_PTHREAD_COND_SIGNAL,
/* args: Addr cond */
VG_USERREQ__PRE_PTHREAD_COND_BROADCAST,
@@ -88,7 +88,11 @@
};
-void drd_clientreq_init(void);
+typedef enum
+{
+ mutex_type_mutex = 1,
+ mutex_type_spinlock = 2,
+} MutexT;
#endif // __DRD_CLIENTREQ_H
Modified: trunk/exp-drd/drd_cond.c
===================================================================
--- trunk/exp-drd/drd_cond.c 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_cond.c 2007-11-30 08:30:29 UTC (rev 7252)
@@ -27,7 +27,6 @@
#include "drd_error.h"
#include "drd_mutex.h"
#include "drd_suppression.h"
-#include "pthread_object_size.h"
#include "pub_tool_errormgr.h" // VG_(maybe_record_error)()
#include "pub_tool_libcassert.h" // tl_assert()
#include "pub_tool_libcprint.h" // VG_(printf)()
@@ -46,29 +45,37 @@
}
static
-void cond_initialize(struct cond_info* const p, const Addr cond)
+void cond_initialize(struct cond_info* const p, const Addr cond,
+ const SizeT size)
{
tl_assert(cond != 0);
p->cond = cond;
+ p->size = size;
p->waiter_count = 0;
p->mutex = 0;
}
-static struct cond_info* cond_get_or_allocate(const Addr cond)
+static struct cond_info*
+cond_get_or_allocate(const Addr cond, const SizeT size)
{
int i;
for (i = 0; i < sizeof(s_cond)/sizeof(s_cond[0]); i++)
+ {
if (s_cond[i].cond == cond)
+ {
+ tl_assert(s_cond[i].size == size);
return &s_cond[i];
+ }
+ }
for (i = 0; i < sizeof(s_cond)/sizeof(s_cond[0]); i++)
{
if (s_cond[i].cond == 0)
{
- cond_initialize(&s_cond[i], cond);
+ cond_initialize(&s_cond[i], cond, size);
/* TO DO: replace the constant below by a symbolic constant referring */
/* to sizeof(pthread_cond_t). */
- drd_start_suppression(cond, cond + PTHREAD_COND_SIZE, "cond");
+ drd_start_suppression(cond, cond + size, "cond");
return &s_cond[i];
}
}
@@ -76,7 +83,7 @@
return 0;
}
-void cond_init(const Addr cond)
+void cond_init(const Addr cond, const SizeT size)
{
if (s_trace_cond)
{
@@ -85,7 +92,8 @@
VG_(clo_backtrace_size));
}
tl_assert(cond_get(cond) == 0);
- cond_get_or_allocate(cond);
+ tl_assert(size > 0);
+ cond_get_or_allocate(cond, size);
}
void cond_destroy(struct cond_info* const p)
@@ -100,7 +108,7 @@
// TO DO: print a proper error message if waiter_count != 0.
tl_assert(p->waiter_count == 0);
- drd_finish_suppression(p->cond, p->cond + PTHREAD_COND_SIZE);
+ drd_finish_suppression(p->cond, p->cond + p->size);
p->cond = 0;
p->waiter_count = 0;
@@ -116,11 +124,11 @@
return 0;
}
-int cond_pre_wait(const Addr cond, const Addr mutex)
+int cond_pre_wait(const Addr cond, const SizeT cond_size, const Addr mutex)
{
struct cond_info* p;
- p = cond_get_or_allocate(cond);
+ p = cond_get_or_allocate(cond, cond_size);
if (p->waiter_count == 0)
{
p->mutex = mutex;
@@ -194,7 +202,7 @@
{
if (a1 <= s_cond[i].cond && s_cond[i].cond < a2)
{
- tl_assert(s_cond[i].cond + PTHREAD_COND_SIZE <= a2);
+ tl_assert(s_cond[i].cond + s_cond[i].size <= a2);
cond_destroy(&s_cond[i]);
}
}
Modified: trunk/exp-drd/drd_cond.h
===================================================================
--- trunk/exp-drd/drd_cond.h 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_cond.h 2007-11-30 08:30:29 UTC (rev 7252)
@@ -38,17 +38,18 @@
struct cond_info
{
- Addr cond; // Pointer to client condition variable.
- int waiter_count;
- Addr mutex; // Client mutex specified in pthread_cond_wait() call, and null
+ Addr cond; // Pointer to client condition variable.
+ SizeT size; // sizeof(pthread_cond_t)
+ int waiter_count;
+ Addr mutex; // Client mutex specified in pthread_cond_wait() call, and null
// if no client threads are currently waiting on this cond.var.
};
void cond_set_trace(const Bool trace_cond);
-void cond_init(const Addr cond);
+void cond_init(const Addr cond, const SizeT size);
void cond_destroy(struct cond_info* const p);
struct cond_info* cond_get(Addr const mutex);
-int cond_pre_wait(const Addr cond, const Addr mutex);
+int cond_pre_wait(const Addr cond, const SizeT cond_size, const Addr mutex);
int cond_post_wait(const Addr cond);
void cond_pre_signal(Addr const cond);
void cond_pre_broadcast(Addr const cond);
Modified: trunk/exp-drd/drd_main.c
===================================================================
--- trunk/exp-drd/drd_main.c 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_main.c 2007-11-30 08:30:29 UTC (rev 7252)
@@ -34,7 +34,7 @@
#include "drd_thread.h"
#include "drd_track.h"
#include "drd_vc.h"
-#include "pthread_object_size.h"
+#include "priv_drd_clientreq.h"
#include "pub_core_mallocfree.h"
#include "pub_core_options.h"
#include "pub_tool_vki.h"
@@ -469,12 +469,12 @@
thread_finished(drd_tid);
}
-void drd_pre_mutex_init(Addr mutex, SizeT size)
+void drd_pre_mutex_init(Addr mutex, SizeT size, MutexT mutex_type)
{
- mutex_init(mutex, size);
+ mutex_init(mutex, size, mutex_type);
}
-void drd_post_mutex_destroy(Addr mutex, SizeT size)
+void drd_post_mutex_destroy(Addr mutex, MutexT mutex_type)
{
struct mutex_info* p;
@@ -490,29 +490,32 @@
void drd_pre_mutex_lock(const DrdThreadId drd_tid,
const Addr mutex,
- const SizeT size)
+ const SizeT size,
+ const MutexT mutex_type)
{
if (mutex_get(mutex) == 0)
{
- mutex_init(mutex, size);
+ mutex_init(mutex, size, mutex_type);
}
}
void drd_post_mutex_lock(const DrdThreadId drd_tid,
const Addr mutex,
- const SizeT size)
+ const SizeT size,
+ const MutexT mutex_type)
{
- mutex_lock(mutex, size);
+ mutex_lock(mutex, size, mutex_type);
}
-void drd_pre_mutex_unlock(const DrdThreadId drd_tid, Addr mutex)
+void drd_pre_mutex_unlock(const DrdThreadId drd_tid,
+ const Addr mutex,
+ const MutexT mutex_type)
{
- mutex_unlock(mutex);
+ mutex_unlock(mutex, mutex_type);
}
void drd_post_cond_init(Addr cond, SizeT s)
{
- tl_assert(s == PTHREAD_COND_SIZE);
if (cond_get(cond))
{
CondErrInfo cei = { .cond = cond };
@@ -522,14 +525,13 @@
"initialized twice",
&cei);
}
- cond_init(cond);
+ cond_init(cond, s);
}
-void drd_pre_cond_destroy(Addr cond, SizeT s)
+void drd_pre_cond_destroy(Addr cond)
{
struct cond_info* cond_p;
- tl_assert(s == PTHREAD_COND_SIZE);
cond_p = cond_get(cond);
if (cond_p)
{
Modified: trunk/exp-drd/drd_mutex.c
===================================================================
--- trunk/exp-drd/drd_mutex.c 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_mutex.c 2007-11-30 08:30:29 UTC (rev 7252)
@@ -26,7 +26,7 @@
#include "drd_error.h"
#include "drd_mutex.h"
#include "drd_suppression.h"
-#include "pthread_object_size.h"
+#include "priv_drd_clientreq.h"
#include "pub_tool_errormgr.h" // VG_(maybe_record_error)()
#include "pub_tool_libcassert.h" // tl_assert()
#include "pub_tool_libcprint.h" // VG_(printf)()
@@ -40,6 +40,7 @@
{
Addr mutex; // Pointer to client mutex.
SizeT size; // Size in bytes of client-side object.
+ MutexT mutex_type; // pthread_mutex_t or pthread_spinlock_t.
int recursion_count; // 0 if free, >= 1 if locked.
DrdThreadId owner; // owner if locked, last owner if free.
VectorClock vc; // vector clock associated with last unlock.
@@ -64,30 +65,47 @@
static
void mutex_initialize(struct mutex_info* const p,
const Addr mutex,
- const SizeT size)
+ const SizeT size,
+ const MutexT mutex_type)
{
tl_assert(mutex != 0);
tl_assert(size > 0);
+ tl_assert(mutex_type == mutex_type_mutex
+ || mutex_type == mutex_type_spinlock);
p->mutex = mutex;
p->size = size;
+ p->mutex_type = mutex_type;
p->recursion_count = 0;
p->owner = DRD_INVALID_THREADID;
vc_init(&p->vc, 0, 0);
}
static
-struct mutex_info* mutex_get_or_allocate(const Addr mutex, const SizeT size)
+struct mutex_info*
+mutex_get_or_allocate(const Addr mutex,
+ const SizeT size,
+ const MutexT mutex_type)
{
int i;
+
+ tl_assert(mutex_type == mutex_type_mutex
+ || mutex_type == mutex_type_spinlock);
+
for (i = 0; i < sizeof(s_mutex)/sizeof(s_mutex[0]); i++)
+ {
if (s_mutex[i].mutex == mutex)
+ {
+ tl_assert(s_mutex[i].mutex_type == mutex_type);
+ tl_assert(s_mutex[i].size == size);
return &s_mutex[i];
+ }
+ }
for (i = 0; i < sizeof(s_mutex)/sizeof(s_mutex[0]); i++)
{
if (s_mutex[i].mutex == 0)
{
- mutex_initialize(&s_mutex[i], mutex, size);
+ mutex_initialize(&s_mutex[i], mutex, size, mutex_type);
drd_start_suppression(mutex, mutex + size,
mutex_get_typename(&s_mutex[i]));
return &s_mutex[i];
@@ -97,12 +115,15 @@
return 0;
}
-struct mutex_info* mutex_init(const Addr mutex, const SizeT size)
+struct mutex_info*
+mutex_init(const Addr mutex, const SizeT size, const MutexT mutex_type)
{
struct mutex_info* mutex_p;
tl_assert(mutex_get(mutex) == 0);
- mutex_p = mutex_get_or_allocate(mutex, size);
+ tl_assert(mutex_type == mutex_type_mutex
+ || mutex_type == mutex_type_spinlock);
+ mutex_p = mutex_get_or_allocate(mutex, size, mutex_type);
if (s_trace_mutex)
{
@@ -151,10 +172,10 @@
* Note: this function must be called after pthread_mutex_lock() has been
* called, or a race condition is triggered !
*/
-int mutex_lock(const Addr mutex, const SizeT size)
+int mutex_lock(const Addr mutex, const SizeT size, MutexT mutex_type)
{
const DrdThreadId drd_tid = VgThreadIdToDrdThreadId(VG_(get_running_tid)());
- struct mutex_info* const p = mutex_get_or_allocate(mutex, size);
+ struct mutex_info* const p = mutex_get_or_allocate(mutex, size, mutex_type);
const DrdThreadId last_owner = p->owner;
if (s_trace_mutex)
@@ -170,7 +191,12 @@
p ? p->owner : VG_INVALID_THREADID);
}
- if (p->recursion_count >= 1 && p->size == PTHREAD_SPINLOCK_SIZE)
+ tl_assert(mutex_type == mutex_type_mutex
+ || mutex_type == mutex_type_spinlock);
+ tl_assert(p->mutex_type == mutex_type);
+ tl_assert(p->size == size);
+
+ if (p->recursion_count >= 1 && mutex_type == mutex_type_spinlock)
{
// TO DO: tell the user in a more friendly way that it is not allowed to
// lock spinlocks recursively.
@@ -211,7 +237,7 @@
* @param tid ThreadId of the thread calling pthread_mutex_unlock().
* @param vc Pointer to the current vector clock of thread tid.
*/
-int mutex_unlock(const Addr mutex)
+int mutex_unlock(const Addr mutex, const MutexT mutex_type)
{
const DrdThreadId drd_tid = VgThreadIdToDrdThreadId(VG_(get_running_tid)());
const ThreadId vg_tid = DrdThreadIdToVgThreadId(drd_tid);
@@ -230,7 +256,11 @@
}
tl_assert(p);
+ tl_assert(p->mutex_type == mutex_type);
tl_assert(p->owner != DRD_INVALID_THREADID);
+ tl_assert(mutex_type == mutex_type_mutex
+ || mutex_type == mutex_type_spinlock);
+
if (p->owner != drd_tid)
{
MutexErrInfo MEI = { p->mutex, p->recursion_count, p->owner };
@@ -257,11 +287,12 @@
const char* mutex_get_typename(struct mutex_info* const p)
{
tl_assert(p);
- switch (p->size)
+
+ switch (p->mutex_type)
{
- case PTHREAD_MUTEX_SIZE:
+ case mutex_type_mutex:
return "mutex";
- case PTHREAD_SPINLOCK_SIZE:
+ case mutex_type_spinlock:
return "spinlock";
default:
tl_assert(0);
Modified: trunk/exp-drd/drd_mutex.h
===================================================================
--- trunk/exp-drd/drd_mutex.h 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_mutex.h 2007-11-30 08:30:29 UTC (rev 7252)
@@ -30,20 +30,22 @@
#define __MUTEX_H
+#include "drd_clientreq.h" // MutexT
+#include "drd_thread.h" // DrdThreadId
+#include "drd_vc.h"
#include "pub_tool_basics.h" // Addr, SizeT
-#include "drd_vc.h"
-#include "drd_thread.h" // DrdThreadId
struct mutex_info;
void mutex_set_trace(const Bool trace_mutex);
-struct mutex_info* mutex_init(const Addr mutex, const SizeT size);
+struct mutex_info* mutex_init(const Addr mutex, const SizeT size,
+ const MutexT mutex_type);
void mutex_destroy(struct mutex_info* const p);
struct mutex_info* mutex_get(const Addr mutex);
-int mutex_lock(const Addr mutex, const SizeT size);
-int mutex_unlock(const Addr mutex);
+int mutex_lock(const Addr mutex, const SizeT size, const MutexT mutex_type);
+int mutex_unlock(const Addr mutex, const MutexT mutex_type);
const char* mutex_get_typename(struct mutex_info* const p);
Bool mutex_is_locked_by(const Addr mutex, const DrdThreadId tid);
const VectorClock* mutex_get_last_vc(const Addr mutex);
Modified: trunk/exp-drd/drd_preloaded.c
===================================================================
--- trunk/exp-drd/drd_preloaded.c 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_preloaded.c 2007-11-30 08:30:29 UTC (rev 7252)
@@ -56,7 +56,6 @@
#include "pub_core_debuginfo.h" // Needed for pub_core_redir.h
#include "pub_core_redir.h" // For VG_NOTIFY_ON_LOAD
#include "pub_tool_threadstate.h"// VG_N_THREADS
-#include "pthread_object_size.h" // PTHREAD_MUTEX_SIZE etc.
// Defines.
@@ -165,10 +164,6 @@
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK,
0, 0, 0, 0, 0);
- // Sanity checks.
- assert(sizeof(pthread_mutex_t) == PTHREAD_MUTEX_SIZE);
- assert(sizeof(pthread_spinlock_t) == PTHREAD_SPINLOCK_SIZE);
-
// Make sure that DRD knows about the main thread's POSIX thread ID.
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__SET_PTHREADID,
pthread_self(), 0, 0, 0, 0);
@@ -281,7 +276,7 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_MUTEX_INIT,
- mutex, sizeof(*mutex), 0, 0, 0);
+ mutex, sizeof(*mutex), mutex_type_mutex, 0, 0);
CALL_FN_W_WW(ret, fn, mutex, attr);
return ret;
}
@@ -296,7 +291,7 @@
VALGRIND_GET_ORIG_FN(fn);
CALL_FN_W_W(ret, fn, mutex);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_MUTEX_DESTROY,
- mutex, sizeof(*mutex), 0, 0, 0);
+ mutex, mutex_type_mutex, 0, 0, 0);
return ret;
}
@@ -309,7 +304,7 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK,
- mutex, sizeof(*mutex), 0, 0, 0);
+ mutex, sizeof(*mutex), mutex_type_mutex, 0, 0);
#if 1
// The only purpose of the system call below is to make drd work on AMD64
// systems. Without this system call, clients crash (SIGSEGV) in
@@ -319,7 +314,7 @@
CALL_FN_W_W(ret, fn, mutex);
if (ret == 0)
VALGRIND_DO_CLIENT_REQUEST(res, 0, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
- mutex, sizeof(*mutex), 0, 0, 0);
+ mutex, sizeof(*mutex), mutex_type_mutex, 0, 0);
return ret;
}
@@ -335,7 +330,7 @@
if (ret == 0)
{
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
- mutex, sizeof(*mutex), 0, 0, 0);
+ mutex, sizeof(*mutex), mutex_type_mutex, 0, 0);
}
return ret;
}
@@ -350,7 +345,7 @@
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1,
VG_USERREQ__PRE_PTHREAD_MUTEX_UNLOCK,
- mutex, sizeof(*mutex), 0, 0, 0);
+ mutex, sizeof(*mutex), mutex_type_mutex, 0, 0);
CALL_FN_W_W(ret, fn, mutex);
return ret;
}
@@ -379,7 +374,7 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_PTHREAD_COND_DESTROY,
- cond, sizeof(*cond), 0, 0, 0);
+ cond, 0, 0, 0, 0);
CALL_FN_W_W(ret, fn, cond);
return ret;
}
@@ -394,10 +389,10 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_PTHREAD_COND_WAIT,
- cond, mutex, 0, 0, 0);
+ cond, sizeof(*cond), mutex, sizeof(*mutex), 0);
CALL_FN_W_WW(ret, fn, cond, mutex);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_COND_WAIT,
- cond, mutex, 0, 0, 0);
+ cond, sizeof(*cond), mutex, sizeof(*mutex), 0);
return ret;
}
@@ -412,10 +407,10 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_PTHREAD_COND_WAIT,
- cond, mutex, 0, 0, 0);
+ cond, sizeof(*cond), mutex, sizeof(*mutex), 0);
CALL_FN_W_WWW(ret, fn, cond, mutex, abstime);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_COND_WAIT,
- cond, mutex, 0, 0, 0);
+ cond, sizeof(*cond), mutex, sizeof(*mutex), 0);
return ret;
}
@@ -458,7 +453,8 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__SPIN_INIT_OR_UNLOCK,
- spinlock, sizeof(*spinlock), 0, 0, 0);
+ spinlock, sizeof(*spinlock),
+ mutex_type_spinlock, 0, 0);
CALL_FN_W_WW(ret, fn, spinlock, pshared);
return ret;
}
@@ -473,7 +469,7 @@
VALGRIND_GET_ORIG_FN(fn);
CALL_FN_W_W(ret, fn, spinlock);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_MUTEX_DESTROY,
- spinlock, sizeof(*spinlock), 0, 0, 0);
+ spinlock, mutex_type_spinlock, 0, 0, 0);
return ret;
}
@@ -489,7 +485,8 @@
if (ret == 0)
{
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
- spinlock, sizeof(*spinlock), 0, 0, 0);
+ spinlock, sizeof(*spinlock),
+ mutex_type_spinlock, 0, 0);
}
return ret;
}
@@ -506,7 +503,8 @@
if (ret == 0)
{
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
- spinlock, sizeof(*spinlock), 0, 0, 0);
+ spinlock, sizeof(*spinlock),
+ mutex_type_spinlock, 0, 0);
}
return ret;
}
@@ -520,7 +518,8 @@
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__SPIN_INIT_OR_UNLOCK,
- spinlock, sizeof(*spinlock), 0, 0, 0);
+ spinlock, sizeof(*spinlock),
+ mutex_type_spinlock, 0, 0);
CALL_FN_W_W(ret, fn, spinlock);
return ret;
}
Modified: trunk/exp-drd/drd_thread.c
===================================================================
--- trunk/exp-drd/drd_thread.c 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_thread.c 2007-11-30 08:30:29 UTC (rev 7252)
@@ -27,7 +27,6 @@
#include "drd_segment.h"
#include "drd_suppression.h"
#include "drd_thread.h"
-#include "pthread_object_size.h"
#include "pub_core_options.h" // VG_(clo_backtrace_size)
#include "pub_tool_basics.h" // Addr, SizeT
#include "pub_tool_errormgr.h" // VG_(unique_error)()
Modified: trunk/exp-drd/drd_track.h
===================================================================
--- trunk/exp-drd/drd_track.h 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/drd_track.h 2007-11-30 08:30:29 UTC (rev 7252)
@@ -1,8 +1,11 @@
void drd_post_thread_join(DrdThreadId joiner, DrdThreadId joinee);
-void drd_pre_mutex_init(Addr mutex, SizeT size);
-void drd_post_mutex_destroy(Addr mutex, SizeT size);
-void drd_pre_mutex_lock(DrdThreadId tid, Addr mutex, const SizeT size);
-void drd_post_mutex_lock(DrdThreadId tid, Addr mutex, const SizeT size);
-void drd_pre_mutex_unlock(DrdThreadId tid, Addr mutex);
+void drd_pre_mutex_init(Addr mutex, SizeT size, const MutexT mutex_type);
+void drd_post_mutex_destroy(Addr mutex, const MutexT mutex_type);
+void drd_pre_mutex_lock(DrdThreadId tid, Addr mutex, const SizeT size,
+ const MutexT mutex_type);
+void drd_post_mutex_lock(DrdThreadId tid, Addr mutex, const SizeT size,
+ const MutexT mutex_type);
+void drd_pre_mutex_unlock(const DrdThreadId tid, const Addr mutex,
+ const MutexT mutex_type);
void drd_post_cond_init(Addr cond, SizeT s);
-void drd_pre_cond_destroy(Addr cond, SizeT s);
+void drd_pre_cond_destroy(Addr cond);
Added: trunk/exp-drd/priv_drd_clientreq.h
===================================================================
--- trunk/exp-drd/priv_drd_clientreq.h (rev 0)
+++ trunk/exp-drd/priv_drd_clientreq.h 2007-11-30 08:30:29 UTC (rev 7252)
@@ -0,0 +1,30 @@
+/*
+ This file is part of drd, a data race detector.
+
+ Copyright (C) 2006-2007 Bart Van Assche
+ bar...@gm...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PRIV_DRD_CLIENTREQ_H
+#define __PRIV_DRD_CLIENTREQ_H
+
+void drd_clientreq_init(void);
+
+#endif /* __PRIV_DRD_CLIENTREQ_H */
Deleted: trunk/exp-drd/pthread_object_size.h
===================================================================
--- trunk/exp-drd/pthread_object_size.h 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/pthread_object_size.h 2007-11-30 08:30:29 UTC (rev 7252)
@@ -1,15 +0,0 @@
-// TO DO: replace the constants below by macro's #define'd during the configure
-// phase.
-
-#if defined(VGP_x86_linux)
-# define PTHREAD_MUTEX_SIZE 24
-# define PTHREAD_COND_SIZE 48
-#elif defined(VGP_amd64_linux)
-# define PTHREAD_MUTEX_SIZE 40
-# define PTHREAD_COND_SIZE 48
-#else
- /* FIXME: fill these fields in correctly. 32 is arbitrary. */
-# define PTHREAD_MUTEX_SIZE 32
-# define PTHREAD_COND_SIZE 32
-#endif
-#define PTHREAD_SPINLOCK_SIZE 4
Modified: trunk/exp-drd/tests/Makefile.am
===================================================================
--- trunk/exp-drd/tests/Makefile.am 2007-11-29 13:04:03 UTC (rev 7251)
+++ trunk/exp-drd/tests/Makefile.am 2007-11-30 08:30:29 UTC (rev 7252)
@@ -57,4 +57,4 @@
pth_detached_LDADD = -lpthread
sigalrm_SOURCES = sigalrm.c
-sigalrm_LDADD = -lpthread -lrt
+sigalrm_LDADD = -lpthread
|
|
From: Tom H. <th...@cy...> - 2007-11-30 03:56:05
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2007-11-30 03:15: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 == 319 tests, 60 stderr failures, 1 stdout failure, 28 post failures == memcheck/tests/addressable (stderr) memcheck/tests/badjump (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-pool-0 (stderr) memcheck/tests/leak-pool-1 (stderr) memcheck/tests/leak-pool-2 (stderr) memcheck/tests/leak-pool-3 (stderr) memcheck/tests/leak-pool-4 (stderr) memcheck/tests/leak-pool-5 (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/noisy_child (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/x86/bug152022 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) massif/tests/alloc-fns-A (post) massif/tests/alloc-fns-B (post) massif/tests/basic (post) massif/tests/basic2 (post) massif/tests/big-alloc (post) massif/tests/culling1 (stderr) massif/tests/culling2 (stderr) massif/tests/custom_alloc (post) massif/tests/deep-A (post) massif/tests/deep-B (stderr) massif/tests/deep-B (post) massif/tests/deep-C (stderr) massif/tests/deep-C (post) massif/tests/deep-D (post) massif/tests/ignoring (post) massif/tests/insig (post) massif/tests/long-time (post) massif/tests/new-cpp (post) massif/tests/null (post) massif/tests/one (post) massif/tests/overloaded-new (post) massif/tests/peak (post) massif/tests/peak2 (stderr) massif/tests/peak2 (post) massif/tests/realloc (stderr) massif/tests/realloc (post) massif/tests/thresholds_0_0 (post) massif/tests/thresholds_0_10 (post) massif/tests/thresholds_10_0 (post) massif/tests/thresholds_10_10 (post) massif/tests/thresholds_5_0 (post) massif/tests/thresholds_5_10 (post) massif/tests/zero1 (post) massif/tests/zero2 (post) none/tests/mremap (stderr) none/tests/mremap2 (stdout) 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) |
|
From: Tom H. <th...@cy...> - 2007-11-30 03:31:25
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2007-11-30 03:05:04 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 353 tests, 6 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <th...@cy...> - 2007-11-30 03:26:28
|
Nightly build on dellow ( x86_64, Fedora 8 ) started at 2007-11-30 03:10: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 == 353 tests, 9 stderr failures, 3 stdout failures, 0 post failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/pth_detached (stdout) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) |
|
From: Tom H. <th...@cy...> - 2007-11-30 03:14:16
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2007-11-30 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 == 355 tests, 24 stderr failures, 1 stdout failure, 0 post failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) 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/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) |
|
From: <js...@ac...> - 2007-11-30 01:21:58
|
Nightly build on g5 ( SuSE 10.1, ppc970 ) started at 2007-11-30 02:00:01 CET 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 == 286 tests, 25 stderr failures, 2 stdout failures, 0 post failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/pointer-trace (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) 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/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc11_XCHG (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) |