You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
1
(9) |
|
2
(5) |
3
(8) |
4
(9) |
5
(9) |
6
(8) |
7
(4) |
8
(18) |
|
9
(9) |
10
(15) |
11
(4) |
12
(9) |
13
(9) |
14
(5) |
15
(4) |
|
16
(7) |
17
(15) |
18
(7) |
19
(13) |
20
(10) |
21
(10) |
22
(8) |
|
23
(4) |
24
(4) |
25
(6) |
26
(6) |
27
(5) |
28
(4) |
29
(4) |
|
30
(4) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2008-11-19 23:59:40
|
Author: dirk
Date: 2008-11-19 23:59:35 +0000 (Wed, 19 Nov 2008)
New Revision: 8791
Log:
glibc 2.9 support
Added:
branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp
Modified:
branches/VALGRIND_3_3_BRANCH/Makefile.am
branches/VALGRIND_3_3_BRANCH/configure.in
Modified: branches/VALGRIND_3_3_BRANCH/Makefile.am
===================================================================
--- branches/VALGRIND_3_3_BRANCH/Makefile.am 2008-11-19 23:58:36 UTC (rev 8790)
+++ branches/VALGRIND_3_3_BRANCH/Makefile.am 2008-11-19 23:59:35 UTC (rev 8791)
@@ -21,7 +21,7 @@
SUPP_FILES = \
glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp glibc-2.5.supp \
- glibc-2.6.supp glibc-2.7.supp glibc-2.8.supp \
+ glibc-2.6.supp glibc-2.7.supp glibc-2.8.supp glibc-2.9.supp \
aix5libc.supp xfree-3.supp xfree-4.supp \
glibc-2.34567-NPTL-helgrind.supp \
glibc-2.2-LinuxThreads-helgrind.supp \
Modified: branches/VALGRIND_3_3_BRANCH/configure.in
===================================================================
--- branches/VALGRIND_3_3_BRANCH/configure.in 2008-11-19 23:58:36 UTC (rev 8790)
+++ branches/VALGRIND_3_3_BRANCH/configure.in 2008-11-19 23:59:35 UTC (rev 8791)
@@ -479,6 +479,16 @@
],
libc="2.8")
+AC_EGREP_CPP([GLIBC_29], [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 9)
+ GLIBC_29
+ #endif
+#endif
+],
+libc="2.9")
+
AC_EGREP_CPP([AIX5_LIBC], [
#include <standards.h>
#if defined(_AIXVERSION_510) || defined(_AIXVERSION_520) || defined(_AIXVERSION_530)
@@ -535,6 +545,12 @@
DEFAULT_SUPP="glibc-2.8.supp ${DEFAULT_SUPP}"
DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
;;
+ 2.9)
+ AC_MSG_RESULT(2.9 family)
+ AC_DEFINE([GLIBC_2_9], 1, [Define to 1 if you're using glibc 2.9.x])
+ DEFAULT_SUPP="glibc-2.9.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ ;;
aix5)
AC_MSG_RESULT(AIX 5.1 or 5.2 or 5.3)
AC_DEFINE([AIX5_LIBC], 1, [Define to 1 if you're using AIX 5.1 or 5.2 or 5.3])
@@ -543,7 +559,7 @@
*)
AC_MSG_RESULT(unsupported version)
- AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.7])
+ AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.9])
AC_MSG_ERROR([or AIX 5.1 or 5.2 or 5.3 libc])
;;
esac
Copied: branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp (from rev 8789, branches/VALGRIND_3_3_BRANCH/glibc-2.8.supp)
===================================================================
--- branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp (rev 0)
+++ branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp 2008-11-19 23:59:35 UTC (rev 8791)
@@ -0,0 +1,95 @@
+
+# Errors to suppress by default with glibc 2.8.x
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+{
+ dl-hack3-cond-1
+ Memcheck:Cond
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+}
+{
+ dl-hack3-cond-2
+ Memcheck:Cond
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libc-2.8*.so*
+}
+{
+ dl-hack3-cond-3
+ Memcheck:Cond
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libc-2.8*.so*
+ obj:/lib*/libc-2.8*.so*
+}
+{
+ dl-hack3-cond-4
+ Memcheck:Cond
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libdl-2.8*.so*
+}
+
+{
+ dl-hack4-64bit-addr-1
+ Memcheck:Addr8
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+}
+{
+ dl-hack4-64bit-addr-2
+ Memcheck:Addr8
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libc-2.8*.so*
+}
+{
+ dl-hack4-64bit-addr-3
+ Memcheck:Addr8
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/ld-2.8*.so*
+ obj:/lib*/libdl-2.8*.so*
+}
+
+{
+ dl-hack5-32bit-addr-1
+ Memcheck:Addr4
+ obj:/lib/ld-2.8*.so
+ obj:/lib/ld-2.8*.so
+ obj:/lib/ld-2.8*.so
+}
+{
+ dl-hack5-32bit-addr-3
+ Memcheck:Addr4
+ obj:/lib/ld-2.8*.so
+ obj:/lib/ld-2.8*.so
+ obj:/lib/libdl-2.8*.so*
+}
+{
+ dl-hack5-32bit-addr-4
+ Memcheck:Addr4
+ obj:/lib/ld-2.8*.so
+ obj:/lib/libdl-2.8*.so*
+ obj:/lib/ld-2.8*.so
+}
Property changes on: branches/VALGRIND_3_3_BRANCH/glibc-2.9.supp
___________________________________________________________________
Name: svn:mergeinfo
+
|
|
From: <sv...@va...> - 2008-11-19 23:58:44
|
Author: dirk
Date: 2008-11-19 23:58:36 +0000 (Wed, 19 Nov 2008)
New Revision: 8790
Log:
glibc 2.9 support
Modified:
trunk/configure.in
Modified: trunk/configure.in
===================================================================
--- trunk/configure.in 2008-11-19 17:51:44 UTC (rev 8789)
+++ trunk/configure.in 2008-11-19 23:58:36 UTC (rev 8790)
@@ -518,6 +518,16 @@
],
GLIBC_VERSION="2.8")
+AC_EGREP_CPP([GLIBC_29], [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 9)
+ GLIBC_29
+ #endif
+#endif
+],
+GLIBC_VERSION="2.9")
+
AC_EGREP_CPP([AIX5_LIBC], [
#include <standards.h>
#if defined(_AIXVERSION_510) || defined(_AIXVERSION_520) || defined(_AIXVERSION_530)
@@ -581,7 +591,13 @@
DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
;;
-
+ 2.9)
+ AC_MSG_RESULT(2.9 family)
+ AC_DEFINE([GLIBC_2_9], 1, [Define to 1 if you're using glibc 2.9.x])
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
aix5)
AC_MSG_RESULT(AIX 5.1 or 5.2 or 5.3)
AC_DEFINE([AIX5_LIBC], 1, [Define to 1 if you're using AIX 5.1 or 5.2 or 5.3])
@@ -590,7 +606,7 @@
*)
AC_MSG_RESULT(unsupported version)
- AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.8])
+ AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.9])
AC_MSG_ERROR([or AIX 5.1 or 5.2 or 5.3 GLIBC_VERSION])
;;
esac
|
|
From: Dirk M. <dm...@gm...> - 2008-11-19 23:58:14
|
Hi, valgrind reads by default a .valgrindrc from the $PWD. in case you run binary from a publically writeable directory on a multi user machine, any other user can install you a config file and possibly execute code under your user (via the db-command and db-attach=yes). this is a bit related to a gdb vulnerability pointed out some years ago and fixed back then. I've ported the same patch idea to valgrind, namely to reject any .valgrindrc which is not owned by the user or is world writeable. This is CVE-2008-4865, which is already public. Patch below, ok for commit? Greetings, Dirk |
|
From: <sv...@va...> - 2008-11-19 17:51:50
|
Author: bart Date: 2008-11-19 17:51:44 +0000 (Wed, 19 Nov 2008) New Revision: 8789 Log: Added prereq clause. Modified: trunk/drd/tests/bar_bad.vgtest trunk/drd/tests/bar_trivial.vgtest Modified: trunk/drd/tests/bar_bad.vgtest =================================================================== --- trunk/drd/tests/bar_bad.vgtest 2008-11-19 16:35:15 UTC (rev 8788) +++ trunk/drd/tests/bar_bad.vgtest 2008-11-19 17:51:44 UTC (rev 8789) @@ -1,2 +1,3 @@ +prereq: ./supported_libpthread prog: bar_bad vgopts: -q Modified: trunk/drd/tests/bar_trivial.vgtest =================================================================== --- trunk/drd/tests/bar_trivial.vgtest 2008-11-19 16:35:15 UTC (rev 8788) +++ trunk/drd/tests/bar_trivial.vgtest 2008-11-19 17:51:44 UTC (rev 8789) @@ -1,2 +1,3 @@ +prereq: ./supported_libpthread prog: bar_trivial vgopts: -q |
|
From: <sv...@va...> - 2008-11-19 16:35:21
|
Author: sewardj
Date: 2008-11-19 16:35:15 +0000 (Wed, 19 Nov 2008)
New Revision: 8788
Log:
Don't put raced-on locations in an (E)rror state; instead leave them
in a (C)onstraint state. The former approach can cause races to be
missed. Also, update state machine slightly following re-analysis
thereof.
Modified:
trunk/helgrind/libhb_core.c
Modified: trunk/helgrind/libhb_core.c
===================================================================
--- trunk/helgrind/libhb_core.c 2008-11-19 16:33:59 UTC (rev 8787)
+++ trunk/helgrind/libhb_core.c 2008-11-19 16:35:15 UTC (rev 8788)
@@ -3184,12 +3184,33 @@
// //
/////////////////////////////////////////////////////////
+/* Logic in msm_read/msm_write updated/verified after re-analysis,
+ 19 Nov 08. */
+
#define MSM_CONFACC 1
-#define MSM_RACE2ERR 1
-
#define MSM_CHECK 0
+/* 19 Nov 08: it seems that MSM_RACE2ERR == 1 is a bad idea. When
+ nonzero, the effect is that when a race is detected for a location,
+ that location is put into a special 'error' state and no further
+ checking of it is done until it returns to a 'normal' state, which
+ requires it to be deallocated and reallocated.
+
+ This is a bad idea, because of the interaction with suppressions.
+ Suppose there is a race on the location, but the error is
+ suppressed. The location now is marked as in-error. Now any
+ subsequent race -- including ones we want to see -- will never be
+ detected until the location is deallocated and reallocated.
+
+ Hence set MSM_CHECK to zero. This causes raced-on locations to
+ remain in the normal 'C' (constrained) state, but places on them
+ the constraint that the next accesses happen-after both the
+ existing constraint and the relevant vector clock of the thread
+ doing the racing access.
+*/
+#define MSM_RACE2ERR 0
+
static ULong stats__msm_read = 0;
static ULong stats__msm_read_change = 0;
static ULong stats__msm_write = 0;
@@ -3262,9 +3283,13 @@
svNew = SVal__mkC( rmini, VtsID__join2(wmini, tviW) );
goto out;
} else {
+ /* assert on sanity of constraints. */
+ POrd ordxx = VtsID__getOrdering(rmini,wmini);
+ tl_assert(ordxx == POrd_EQ || ordxx == POrd_LT);
svNew = MSM_RACE2ERR
? SVal__mkE()
- : SVal__mkC( rmini, VtsID__join2(wmini,tviR) );
+ : SVal__mkC( VtsID__join2(wmini,tviR),
+ VtsID__join2(wmini,tviW) );
record_race_info( acc_thr, acc_addr, szB, False/*!isWrite*/,
svOld, svNew );
goto out;
@@ -3326,10 +3351,14 @@
svNew = SVal__mkC( tviW, tviW );
goto out;
} else {
+ VtsID tviR = acc_thr->viR;
VtsID rmini = SVal__unC_Rmin(svOld);
+ /* assert on sanity of constraints. */
+ POrd ordxx = VtsID__getOrdering(rmini,wmini);
+ tl_assert(ordxx == POrd_EQ || ordxx == POrd_LT);
svNew = MSM_RACE2ERR
? SVal__mkE()
- : SVal__mkC( VtsID__join2(rmini,tviW),
+ : SVal__mkC( VtsID__join2(wmini,tviR),
VtsID__join2(wmini,tviW) );
record_race_info( acc_thr, acc_addr, szB, True/*isWrite*/,
svOld, svNew );
|
|
From: <sv...@va...> - 2008-11-19 16:34:05
|
Author: sewardj Date: 2008-11-19 16:33:59 +0000 (Wed, 19 Nov 2008) New Revision: 8787 Log: Fix comment typo. Modified: trunk/helgrind/hg_intercepts.c Modified: trunk/helgrind/hg_intercepts.c =================================================================== --- trunk/helgrind/hg_intercepts.c 2008-11-19 11:52:14 UTC (rev 8786) +++ trunk/helgrind/hg_intercepts.c 2008-11-19 16:33:59 UTC (rev 8787) @@ -1585,7 +1585,7 @@ /*----------------------------------------------------------------*/ /*--- Replacements for basic string functions, that don't ---*/ -/*--- the input arrays. ---*/ +/*--- overrun the input arrays. ---*/ /*----------------------------------------------------------------*/ /* Copied verbatim from memcheck/mc_replace_strmem.c. When copying |
|
From: <sv...@va...> - 2008-11-19 11:52:19
|
Author: sewardj
Date: 2008-11-19 11:52:14 +0000 (Wed, 19 Nov 2008)
New Revision: 8786
Log:
Add informal correctness argument for the logic in
evh__HG_PTHREAD_BARRIER_WAIT_PRE, as it is somewhat subtle.
Also, free the SO after use, else there's a space leak.
Modified:
trunk/helgrind/hg_main.c
Modified: trunk/helgrind/hg_main.c
===================================================================
--- trunk/helgrind/hg_main.c 2008-11-19 10:41:55 UTC (rev 8785)
+++ trunk/helgrind/hg_main.c 2008-11-19 11:52:14 UTC (rev 8786)
@@ -2670,6 +2670,46 @@
static void evh__HG_PTHREAD_BARRIER_WAIT_PRE ( ThreadId tid,
void* barrier )
{
+ /* This function gets called after a client thread calls
+ pthread_barrier_wait but before it arrives at the real
+ pthread_barrier_wait.
+
+ Why is the following correct? It's a bit subtle.
+
+ If this is not the last thread arriving at the barrier, we simply
+ note its presence and return. Because valgrind (at least as of
+ Nov 08) is single threaded, we are guaranteed safe from any race
+ conditions when in this function -- no other client threads are
+ running.
+
+ If this is the last thread, then we are again the only running
+ thread. All the other threads will have either arrived at the
+ real pthread_barrier_wait or are on their way to it, but in any
+ case are guaranteed not to be able to move past it, because this
+ thread is currently in this function and so has not yet arrived
+ at the real pthread_barrier_wait. That means that:
+
+ 1. While we are in this function, none of the other threads
+ waiting at the barrier can move past it.
+
+ 2. When this function returns (and simulated execution resumes),
+ this thread and all other waiting threads will be able to move
+ past the real barrier.
+
+ Because of this, it is now safe to update the vector clocks of
+ all threads, to represent the fact that they all arrived at the
+ barrier and have all moved on. There is no danger of any
+ complications to do with some threads leaving the barrier and
+ racing back round to the front, whilst others are still leaving
+ (which is the primary source of complication in correct handling/
+ implementation of barriers). That can't happen because we update
+ here our data structures so as to indicate that the threads have
+ passed the barrier, even though, as per (2) above, they are
+ guaranteed not to pass the barrier until we return.
+
+ This relies crucially on Valgrind being single threaded. If that
+ changes, this will need to be reconsidered.
+ */
Thread* thr;
Bar* bar;
SO* so;
@@ -2734,7 +2774,11 @@
}
/* finally, we must empty out the waiting vector */
- VG_(dropTailXA)(bar->waiting, VG_(sizeXA)(bar->waiting));
+ VG_(dropTailXA)(bar->waiting, VG_(sizeXA)(bar->waiting));
+
+ /* and we don't need this any more. Perhaps a stack-allocated
+ SO would be better? */
+ libhb_so_dealloc(so);
}
|
|
From: <sv...@va...> - 2008-11-19 10:42:02
|
Author: sewardj
Date: 2008-11-19 10:41:55 +0000 (Wed, 19 Nov 2008)
New Revision: 8785
Log:
Add some suppressions for Qt4-related code.
Modified:
trunk/glibc-2.34567-NPTL-helgrind.supp
Modified: trunk/glibc-2.34567-NPTL-helgrind.supp
===================================================================
--- trunk/glibc-2.34567-NPTL-helgrind.supp 2008-11-19 10:40:56 UTC (rev 8784)
+++ trunk/glibc-2.34567-NPTL-helgrind.supp 2008-11-19 10:41:55 UTC (rev 8785)
@@ -504,8 +504,42 @@
######------ qt4 specific (GNU mangling) ------######
{
- helgrind-qt4-QMutex::lock()-twice
+ helgrind-qt4---QMutex::lock()-QMutex::lock()
Helgrind:Race
fun:_ZN6QMutex4lockEv
fun:_ZN6QMutex4lockEv
}
+
+{
+ helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*)
+ Helgrind:Race
+ fun:pthread_setspecific
+ fun:_ZN14QThreadPrivate5startEPv
+}
+
+{
+ helgrind-qt4---free_stacks-__deallocate_stack
+ Helgrind:Race
+ fun:free_stacks
+ fun:__deallocate_stack
+}
+
+{
+ helgrind---pthread_setspecific
+ Helgrind:Race
+ fun:pthread_setspecific
+}
+
+{
+ helgrind---pthread_getspecific
+ Helgrind:Race
+ fun:pthread_getspecific
+}
+
+{
+ helgrind---ld.so-...-dlsym
+ Helgrind:Race
+ obj:/lib*/ld-2.*so*
+ ...
+ fun:dlsym
+}
|
|
From: <sv...@va...> - 2008-11-19 10:41:05
|
Author: sewardj
Date: 2008-11-19 10:40:56 +0000 (Wed, 19 Nov 2008)
New Revision: 8784
Log:
* Update Qt4 interceptors and add, as comments, findings of analysis
of Qt4 threading functions.
* Add a bunch of replacements for strlen etc, to avoid races from
optimised glibc versions that overread memory. Copied directly from
memcheck/mc_replace_strmem.c.
Modified:
trunk/helgrind/hg_intercepts.c
Modified: trunk/helgrind/hg_intercepts.c
===================================================================
--- trunk/helgrind/hg_intercepts.c 2008-11-18 23:40:00 UTC (rev 8783)
+++ trunk/helgrind/hg_intercepts.c 2008-11-19 10:40:56 UTC (rev 8784)
@@ -46,6 +46,7 @@
*/
#include "pub_tool_basics.h"
+#include "pub_tool_redir.h"
#include "valgrind.h"
#include "helgrind.h"
@@ -1258,34 +1259,93 @@
/*--- Qt 4 threading functions (w/ GNU name mangling) ---*/
/*----------------------------------------------------------------*/
-/* Handled: QMutex::lock()
- QMutex::unlock()
- QMutex::tryLock
- QReadWriteLock::lockForRead()
- QReadWriteLock::lockForWrite()
- QReadWriteLock::unlock()
+/* Handled:
+ QMutex::lock()
+ QMutex::unlock()
+ QMutex::tryLock()
+ QMutex::tryLock(int)
- Unhandled: QMutex::tryLock(int)
- QReadWriteLock::tryLockForRead(int)
- QReadWriteLock::tryLockForRead()
- QReadWriteLock::tryLockForWrite(int)
- QReadWriteLock::tryLockForWrite()
+ QMutex::QMutex(QMutex::RecursionMode) _ZN6QMutexC1ENS_13RecursionModeE
+ QMutex::QMutex(QMutex::RecursionMode) _ZN6QMutexC2ENS_13RecursionModeE
+ QMutex::~QMutex() _ZN6QMutexD1Ev
+ QMutex::~QMutex() _ZN6QMutexD2Ev
- maybe not the next 3; qt-4.3.1 on Unix merely
- implements QWaitCondition using pthread_cond_t
- QWaitCondition::wait(QMutex*, unsigned long)
- QWaitCondition::wakeAll()
- QWaitCondition::wakeOne()
+ Unhandled:
+ QReadWriteLock::lockForRead()
+ QReadWriteLock::lockForWrite()
+ QReadWriteLock::unlock()
+ QReadWriteLock::tryLockForRead(int)
+ QReadWriteLock::tryLockForRead()
+ QReadWriteLock::tryLockForWrite(int)
+ QReadWriteLock::tryLockForWrite()
+
+ QWaitCondition::wait(QMutex*, unsigned long)
+ QWaitCondition::wakeAll()
+ QWaitCondition::wakeOne()
+
+ QSemaphore::*
*/
+/* More comments, 19 Nov 08, based on assessment of qt-4.5.0TP1,
+ at least on Unix:
+ It's apparently only necessary to intercept QMutex, since that is
+ not implemented using pthread_mutex_t; instead Qt4 has its own
+ implementation based on atomics (to check the non-contended case)
+ and pthread_cond_wait (to wait in the contended case).
+
+ QReadWriteLock is built on top of QMutex, counters, and a wait
+ queue. So we don't need to handle it specially once QMutex
+ handling is correct -- presumably the dependencies through QMutex
+ are sufficient to avoid any false race reports. On the other hand,
+ it is an open question whether too many dependencies are observed
+ -- in which case we may miss races (false negatives). I suspect
+ this is likely to be the case, unfortunately.
+
+ QWaitCondition is built on pthread_cond_t, pthread_mutex_t, QMutex
+ and QReadWriteLock. Same compositional-correctness justificiation
+ and limitations as fro QReadWriteLock.
+
+ Ditto QSemaphore (from cursory examination).
+
+ Does it matter that only QMutex is handled directly? Open
+ question. From testing with drd/tests/qt4_* and with KDE4 apps, it
+ appears that no false errors are reported; however it is not clear
+ if this is causing false negatives.
+
+ Another problem with Qt4 is thread exiting. Threads are created
+ with pthread_create (fine); but they detach and simply exit when
+ done. There is no use of pthread_join, and the provided
+ wait-for-a-thread-to-exit mechanism (QThread::wait, I believe)
+ relies on a system of mutexes and flags. I suspect this also
+ causes too many dependencies to appear. Consequently H sometimes
+ fails to detect races at exit in some very short-lived racy
+ programs, because it appears that a thread can exit _and_ have an
+ observed dependency edge back to the main thread (presumably)
+ before the main thread reaps the child (that is, calls
+ QThread::wait).
+
+ This theory is supported by the observation that if all threads are
+ made to wait at a pthread_barrier_t immediately before they exit,
+ then H's detection of races in such programs becomes reliable;
+ without the barrier, it is varies from run to run, depending
+ (according to investigation) on whether aforementioned
+ exit-before-reaping behaviour happens or not.
+
+ Finally, why is it necessary to intercept the QMutex constructors
+ and destructors? The constructors are intercepted only as a matter
+ of convenience, so H can print accurate "first observed at"
+ clauses. However, it is actually necessary to intercept the
+ destructors (as it is with pthread_mutex_destroy) in order that
+ locks get removed from LAOG when they are destroyed.
+*/
+
// soname is libQtCore.so.4 ; match against libQtCore.so*
#define QT4_FUNC(ret_ty, f, args...) \
- ret_ty I_WRAP_SONAME_FNNAME_ZZ(libQtCoreZdsoZa,f)(args); \
- ret_ty I_WRAP_SONAME_FNNAME_ZZ(libQtCoreZdsoZa,f)(args)
+ ret_ty I_WRAP_SONAME_FNNAME_ZU(libQtCoreZdsoZa,f)(args); \
+ ret_ty I_WRAP_SONAME_FNNAME_ZU(libQtCoreZdsoZa,f)(args)
// QMutex::lock()
-QT4_FUNC(void, ZuZZN6QMutex4lockEv, // _ZN6QMutex4lockEv == QMutex::lock()
- void* self)
+QT4_FUNC(void, _ZN6QMutex4lockEv, void* self)
{
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
@@ -1307,8 +1367,7 @@
}
// QMutex::unlock()
-QT4_FUNC(void, ZuZZN6QMutex6unlockEv, // _ZN6QMutex6unlockEv == QMutex::unlock()
- void* self)
+QT4_FUNC(void, _ZN6QMutex6unlockEv, void* self)
{
OrigFn fn;
VALGRIND_GET_ORIG_FN(fn);
@@ -1330,11 +1389,9 @@
}
}
-// QMutex::tryLock
-// _ZN6QMutex7tryLockEv == bool QMutex::tryLock()
+// bool QMutex::tryLock()
// using 'long' to mimic C++ 'bool'
-QT4_FUNC(long, ZuZZN6QMutex7tryLockEv,
- void* self)
+QT4_FUNC(long, _ZN6QMutex7tryLockEv, void* self)
{
OrigFn fn;
long ret;
@@ -1361,88 +1418,339 @@
return ret;
}
-
-// QReadWriteLock::lockForRead()
-// _ZN14QReadWriteLock11lockForReadEv == QReadWriteLock::lockForRead()
-QT4_FUNC(void, ZuZZN14QReadWriteLock11lockForReadEv,
- // _ZN14QReadWriteLock11lockForReadEv
- void* self)
+// bool QMutex::tryLock(int)
+// using 'long' to mimic C++ 'bool'
+QT4_FUNC(long, _ZN6QMutex7tryLockEi, void* self, long arg2)
{
OrigFn fn;
+ long ret;
VALGRIND_GET_ORIG_FN(fn);
if (TRACE_QT4_FNS) {
- fprintf(stderr, "<< QReadWriteLock::lockForRead %p", self);
+ fprintf(stderr, "<< QMutex::tryLock(int) %p %d", self, (int)arg2);
fflush(stderr);
}
- DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
- void*,self,
- long,0/*!isW*/, long,0/*!isTryLock*/);
+ DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_PRE,
+ void*,self, long,1/*isTryLock*/);
- CALL_FN_v_W(fn, self);
+ CALL_FN_W_WW(ret, fn, self,arg2);
- DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
- void*,self, long,0/*!isW*/);
+ // assumes that only the low 8 bits of the 'bool' are significant
+ if (ret & 0xFF) {
+ DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST,
+ void*, self);
+ }
if (TRACE_QT4_FNS) {
- fprintf(stderr, " :: Q::lockForRead :: done >>\n");
+ fprintf(stderr, " :: Q::tryLock(int) -> %lu >>\n", ret);
}
+
+ return ret;
}
-// QReadWriteLock::lockForWrite()
-// _ZN14QReadWriteLock12lockForWriteEv == QReadWriteLock::lockForWrite()
-QT4_FUNC(void, ZuZZN14QReadWriteLock12lockForWriteEv,
- // _ZN14QReadWriteLock12lockForWriteEv
- void* self)
+
+// It's not really very clear what the args are here. But from
+// a bit of dataflow analysis of the generated machine code of
+// the original function, it appears this takes two args, and
+// returns nothing. Nevertheless preserve return value just in
+// case. A bit of debug printing indicates that the first arg
+// is that of the mutex and the second is either zero or one,
+// probably being the recursion mode, therefore.
+// QMutex::QMutex(QMutex::RecursionMode) ("C1ENS" variant)
+QT4_FUNC(void*, _ZN6QMutexC1ENS_13RecursionModeE,
+ void* mutex,
+ long recmode)
{
OrigFn fn;
+ long ret;
VALGRIND_GET_ORIG_FN(fn);
- if (TRACE_QT4_FNS) {
- fprintf(stderr, "<< QReadWriteLock::lockForWrite %p", self);
- fflush(stderr);
- }
+ CALL_FN_W_WW(ret, fn, mutex, recmode);
+ // fprintf(stderr, "QMutex constructor 1: %p <- %p %p\n", ret, arg1, arg2);
+ DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_INIT_POST,
+ void*,mutex, long,1/*mbRec*/);
+ return (void*)ret;
+}
- DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
- void*,self,
- long,1/*isW*/, long,0/*!isTryLock*/);
+// QMutex::~QMutex() ("D1Ev" variant)
+QT4_FUNC(void*, _ZN6QMutexD1Ev, void* mutex)
+{
+ OrigFn fn;
+ long ret;
+ VALGRIND_GET_ORIG_FN(fn);
+ DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_DESTROY_PRE,
+ void*,mutex);
+ CALL_FN_W_W(ret, fn, mutex);
+ return (void*)ret;
+}
- CALL_FN_v_W(fn, self);
- DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
- void*,self, long,1/*isW*/);
+// QMutex::QMutex(QMutex::RecursionMode) ("C2ENS" variant)
+QT4_FUNC(void*, _ZN6QMutexC2ENS_13RecursionModeE,
+ void* mutex,
+ long recmode)
+{
+ assert(0);
+}
- if (TRACE_QT4_FNS) {
- fprintf(stderr, " :: Q::lockForWrite :: done >>\n");
- }
+// QMutex::~QMutex() ("D2Ev" variant)
+QT4_FUNC(void*, _ZN6QMutexD2Ev, void* mutex)
+{
+ assert(0);
}
-// QReadWriteLock::unlock()
-// _ZN14QReadWriteLock6unlockEv == QReadWriteLock::unlock()
-QT4_FUNC(void, ZuZZN14QReadWriteLock6unlockEv,
- // _ZN14QReadWriteLock6unlockEv
- void* self)
-{
- OrigFn fn;
- VALGRIND_GET_ORIG_FN(fn);
- if (TRACE_QT4_FNS) {
- fprintf(stderr, "<< QReadWriteLock::unlock %p", self);
- fflush(stderr);
+
+// QReadWriteLock is not intercepted directly. See comments
+// above.
+
+//// QReadWriteLock::lockForRead()
+//// _ZN14QReadWriteLock11lockForReadEv == QReadWriteLock::lockForRead()
+//QT4_FUNC(void, ZuZZN14QReadWriteLock11lockForReadEv,
+// // _ZN14QReadWriteLock11lockForReadEv
+// void* self)
+//{
+// OrigFn fn;
+// VALGRIND_GET_ORIG_FN(fn);
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, "<< QReadWriteLock::lockForRead %p", self);
+// fflush(stderr);
+// }
+//
+// DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
+// void*,self,
+// long,0/*!isW*/, long,0/*!isTryLock*/);
+//
+// CALL_FN_v_W(fn, self);
+//
+// DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+// void*,self, long,0/*!isW*/);
+//
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, " :: Q::lockForRead :: done >>\n");
+// }
+//}
+//
+//// QReadWriteLock::lockForWrite()
+//// _ZN14QReadWriteLock12lockForWriteEv == QReadWriteLock::lockForWrite()
+//QT4_FUNC(void, ZuZZN14QReadWriteLock12lockForWriteEv,
+// // _ZN14QReadWriteLock12lockForWriteEv
+// void* self)
+//{
+// OrigFn fn;
+// VALGRIND_GET_ORIG_FN(fn);
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, "<< QReadWriteLock::lockForWrite %p", self);
+// fflush(stderr);
+// }
+//
+// DO_CREQ_v_WWW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_PRE,
+// void*,self,
+// long,1/*isW*/, long,0/*!isTryLock*/);
+//
+// CALL_FN_v_W(fn, self);
+//
+// DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_RWLOCK_LOCK_POST,
+// void*,self, long,1/*isW*/);
+//
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, " :: Q::lockForWrite :: done >>\n");
+// }
+//}
+//
+//// QReadWriteLock::unlock()
+//// _ZN14QReadWriteLock6unlockEv == QReadWriteLock::unlock()
+//QT4_FUNC(void, ZuZZN14QReadWriteLock6unlockEv,
+// // _ZN14QReadWriteLock6unlockEv
+// void* self)
+//{
+// OrigFn fn;
+// VALGRIND_GET_ORIG_FN(fn);
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, "<< QReadWriteLock::unlock %p", self);
+// fflush(stderr);
+// }
+//
+// DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE,
+// void*,self);
+//
+// CALL_FN_v_W(fn, self);
+//
+// DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST,
+// void*,self);
+//
+// if (TRACE_QT4_FNS) {
+// fprintf(stderr, " :: Q::unlock :: done >>\n");
+// }
+//}
+
+
+/*----------------------------------------------------------------*/
+/*--- Replacements for basic string functions, that don't ---*/
+/*--- the input arrays. ---*/
+/*----------------------------------------------------------------*/
+
+/* Copied verbatim from memcheck/mc_replace_strmem.c. When copying
+ new functions, please keep them in the same order as they appear in
+ mc_replace_strmem.c. */
+
+/* --------- Some handy Z-encoded names. --------- */
+
+/* --- Soname of the standard C library. --- */
+
+#if defined(VGO_linux)
+# define m_libc_soname libcZdsoZa // libc.so*
+#elif defined(VGP_ppc32_aix5)
+ /* AIX has both /usr/lib/libc.a and /usr/lib/libc_r.a. */
+# define m_libc_soname libcZaZdaZLshrZdoZR // libc*.a(shr.o)
+#elif defined(VGP_ppc64_aix5)
+# define m_libc_soname libcZaZdaZLshrZu64ZdoZR // libc*.a(shr_64.o)
+#else
+# error "Unknown platform"
+#endif
+
+/* --- Sonames for Linux ELF linkers. --- */
+
+#define m_ld_linux_so_2 ldZhlinuxZdsoZd2 // ld-linux.so.2
+#define m_ld_linux_x86_64_so_2 ldZhlinuxZhx86Zh64ZdsoZd2 // ld-linux-x86-64.so.2
+#define m_ld64_so_1 ld64ZdsoZd1 // ld64.so.1
+#define m_ld_so_1 ldZdsoZd1 // ld.so.1
+
+
+#define STRCHR(soname, fnname) \
+ char* VG_REPLACE_FUNCTION_ZU(soname,fnname) ( const char* s, int c ); \
+ char* VG_REPLACE_FUNCTION_ZU(soname,fnname) ( const char* s, int c ) \
+ { \
+ UChar ch = (UChar)((UInt)c); \
+ UChar* p = (UChar*)s; \
+ while (True) { \
+ if (*p == ch) return p; \
+ if (*p == 0) return NULL; \
+ p++; \
+ } \
}
- DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_PRE,
- void*,self);
+// Apparently index() is the same thing as strchr()
+STRCHR(m_libc_soname, strchr)
+STRCHR(m_ld_linux_so_2, strchr)
+STRCHR(m_ld_linux_x86_64_so_2, strchr)
+STRCHR(m_libc_soname, index)
+STRCHR(m_ld_linux_so_2, index)
+STRCHR(m_ld_linux_x86_64_so_2, index)
- CALL_FN_v_W(fn, self);
- DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_RWLOCK_UNLOCK_POST,
- void*,self);
+// Note that this replacement often doesn't get used because gcc inlines
+// calls to strlen() with its own built-in version. This can be very
+// confusing if you aren't expecting it. Other small functions in this file
+// may also be inline by gcc.
+#define STRLEN(soname, fnname) \
+ SizeT VG_REPLACE_FUNCTION_ZU(soname,fnname)( const char* str ); \
+ SizeT VG_REPLACE_FUNCTION_ZU(soname,fnname)( const char* str ) \
+ { \
+ SizeT i = 0; \
+ while (str[i] != 0) i++; \
+ return i; \
+ }
- if (TRACE_QT4_FNS) {
- fprintf(stderr, " :: Q::unlock :: done >>\n");
+STRLEN(m_libc_soname, strlen)
+STRLEN(m_ld_linux_so_2, strlen)
+STRLEN(m_ld_linux_x86_64_so_2, strlen)
+
+
+#define STRCPY(soname, fnname) \
+ char* VG_REPLACE_FUNCTION_ZU(soname, fnname) ( char* dst, const char* src ); \
+ char* VG_REPLACE_FUNCTION_ZU(soname, fnname) ( char* dst, const char* src ) \
+ { \
+ const Char* dst_orig = dst; \
+ \
+ while (*src) *dst++ = *src++; \
+ *dst = 0; \
+ \
+ return (char*)dst_orig; \
}
-}
+STRCPY(m_libc_soname, strcpy)
+
+#define STRCMP(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2 ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2 ) \
+ { \
+ register unsigned char c1; \
+ register unsigned char c2; \
+ while (True) { \
+ c1 = *(unsigned char *)s1; \
+ c2 = *(unsigned char *)s2; \
+ if (c1 != c2) break; \
+ if (c1 == 0) break; \
+ s1++; s2++; \
+ } \
+ if ((unsigned char)c1 < (unsigned char)c2) return -1; \
+ if ((unsigned char)c1 > (unsigned char)c2) return 1; \
+ return 0; \
+ }
+
+STRCMP(m_libc_soname, strcmp)
+STRCMP(m_ld_linux_x86_64_so_2, strcmp)
+STRCMP(m_ld64_so_1, strcmp)
+
+
+#define MEMCPY(soname, fnname) \
+ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( void *dst, const void *src, SizeT len ); \
+ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( void *dst, const void *src, SizeT len ) \
+ { \
+ register char *d; \
+ register char *s; \
+ \
+ if (len == 0) \
+ return dst; \
+ \
+ if ( dst > src ) { \
+ d = (char *)dst + len - 1; \
+ s = (char *)src + len - 1; \
+ while ( len >= 4 ) { \
+ *d-- = *s--; \
+ *d-- = *s--; \
+ *d-- = *s--; \
+ *d-- = *s--; \
+ len -= 4; \
+ } \
+ while ( len-- ) { \
+ *d-- = *s--; \
+ } \
+ } else if ( dst < src ) { \
+ d = (char *)dst; \
+ s = (char *)src; \
+ while ( len >= 4 ) { \
+ *d++ = *s++; \
+ *d++ = *s++; \
+ *d++ = *s++; \
+ *d++ = *s++; \
+ len -= 4; \
+ } \
+ while ( len-- ) { \
+ *d++ = *s++; \
+ } \
+ } \
+ return dst; \
+ }
+
+MEMCPY(m_libc_soname, memcpy)
+MEMCPY(m_ld_so_1, memcpy) /* ld.so.1 */
+MEMCPY(m_ld64_so_1, memcpy) /* ld64.so.1 */
+/* icc9 blats these around all over the place. Not only in the main
+ executable but various .so's. They are highly tuned and read
+ memory beyond the source boundary (although work correctly and
+ never go across page boundaries), so give errors when run natively,
+ at least for misaligned source arg. Just intercepting in the exe
+ only until we understand more about the problem. See
+ http://bugs.kde.org/show_bug.cgi?id=139776
+ */
+MEMCPY(NONE, _intel_fast_memcpy)
+
+
/*--------------------------------------------------------------------*/
/*--- end tc_intercepts.c ---*/
/*--------------------------------------------------------------------*/
|
|
From: Tom H. <th...@cy...> - 2008-11-19 04:14:57
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2008-11-19 03:15:03 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 376 tests, 91 stderr failures, 2 stdout failures, 29 post failures == drd/tests/bar_bad (stderr) drd/tests/bar_trivial (stdout) drd/tests/bar_trivial (stderr) exp-ptrcheck/tests/bad_percentify (stderr) exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/fp (stderr) exp-ptrcheck/tests/globalerr (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) exp-ptrcheck/tests/hp_bounds (stderr) exp-ptrcheck/tests/hp_dangle (stderr) exp-ptrcheck/tests/justify (stderr) exp-ptrcheck/tests/partial_bad (stderr) exp-ptrcheck/tests/partial_good (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) exp-ptrcheck/tests/realloc (stderr) exp-ptrcheck/tests/stackerr (stderr) exp-ptrcheck/tests/strcpy (stderr) exp-ptrcheck/tests/supp (stderr) exp-ptrcheck/tests/tricky (stderr) exp-ptrcheck/tests/unaligned (stderr) exp-ptrcheck/tests/zero (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/bar_trivial (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/hg06_readshared (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc02_simple_tls (stderr) helgrind/tests/tc03_re_excl (stderr) helgrind/tests/tc04_free_lock (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc07_hbl1 (stderr) helgrind/tests/tc08_hbl2 (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc11_XCHG (stderr) helgrind/tests/tc12_rwl_trivial (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) helgrind/tests/tc24_nonzero_sem (stderr) massif/tests/alloc-fns-A (post) massif/tests/alloc-fns-B (post) massif/tests/basic (post) massif/tests/basic2 (post) massif/tests/big-alloc (post) massif/tests/culling1 (stderr) massif/tests/culling2 (stderr) massif/tests/custom_alloc (post) massif/tests/deep-A (post) massif/tests/deep-B (stderr) massif/tests/deep-B (post) massif/tests/deep-C (stderr) massif/tests/deep-C (post) massif/tests/deep-D (post) massif/tests/ignoring (post) massif/tests/insig (post) massif/tests/long-names (post) massif/tests/long-time (post) massif/tests/new-cpp (post) massif/tests/null (post) massif/tests/one (post) massif/tests/overloaded-new (post) massif/tests/peak (post) massif/tests/peak2 (stderr) massif/tests/peak2 (post) massif/tests/realloc (stderr) massif/tests/realloc (post) massif/tests/thresholds_0_0 (post) massif/tests/thresholds_0_10 (post) massif/tests/thresholds_10_0 (post) massif/tests/thresholds_10_10 (post) massif/tests/thresholds_5_0 (post) massif/tests/thresholds_5_10 (post) massif/tests/zero1 (post) massif/tests/zero2 (post) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/origin1-yes (stderr) memcheck/tests/origin4-many (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/varinfo1 (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/bug152022 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) none/tests/blockfault (stderr) none/tests/mremap2 (stdout) none/tests/shell (stderr) none/tests/shell_valid1 (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) |
|
From: Tom H. <th...@cy...> - 2008-11-19 04:03:23
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2008-11-19 03:05:05 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 471 tests, 23 stderr failures, 0 stdout failures, 0 post failures == exp-ptrcheck/tests/base (stderr) exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) |
|
From: Tom H. <th...@cy...> - 2008-11-19 03:48:59
|
Nightly build on trojan ( x86_64, Fedora Core 6 ) started at 2008-11-19 03:25:06 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 475 tests, 23 stderr failures, 4 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) memcheck/tests/x86/bug133694 (stdout) memcheck/tests/x86/bug133694 (stderr) memcheck/tests/x86/scalar (stderr) none/tests/blockfault (stderr) none/tests/cmdline1 (stdout) none/tests/cmdline2 (stdout) none/tests/mremap2 (stdout) |
|
From: Tom H. <th...@cy...> - 2008-11-19 03:34:02
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2008-11-19 03:00: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 == 477 tests, 37 stderr failures, 3 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/hackedbz2 (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/hg01_all_ok (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/rwlock_test (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc17_sembar (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) helgrind/tests/tc23_bogus_condwait (stderr) memcheck/tests/malloc_free_fill (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/amd64/insn_ssse3 (stdout) none/tests/amd64/insn_ssse3 (stderr) none/tests/amd64/ssse3_misaligned (stderr) none/tests/blockfault (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap2 (stdout) none/tests/x86/insn_ssse3 (stdout) none/tests/x86/insn_ssse3 (stderr) none/tests/x86/ssse3_misaligned (stderr) |