summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/valgrind/valgrind/a1364805fc74b5690f763033c0c9b43f27613572.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/valgrind/valgrind/a1364805fc74b5690f763033c0c9b43f27613572.patch')
-rw-r--r--meta/recipes-devtools/valgrind/valgrind/a1364805fc74b5690f763033c0c9b43f27613572.patch1422
1 files changed, 0 insertions, 1422 deletions
diff --git a/meta/recipes-devtools/valgrind/valgrind/a1364805fc74b5690f763033c0c9b43f27613572.patch b/meta/recipes-devtools/valgrind/valgrind/a1364805fc74b5690f763033c0c9b43f27613572.patch
deleted file mode 100644
index ece88406c6..0000000000
--- a/meta/recipes-devtools/valgrind/valgrind/a1364805fc74b5690f763033c0c9b43f27613572.patch
+++ /dev/null
@@ -1,1422 +0,0 @@
-From a1364805fc74b5690f763033c0c9b43f27613572 Mon Sep 17 00:00:00 2001
-From: Mark Wielaard <mark@klomp.org>
-Date: Fri, 16 Jul 2021 15:47:08 -0400
-Subject: [PATCH] Update helgrind and drd suppression libc and libpthread paths
- in glibc 2.34
-
-glibc 2.34 moved all pthread functions into the main libc library.
-And it changed the (in memory) path of the main libc library to
-libc.so.6 (before it was libc-2.xx.so).
-
-This breaks various standard suppressions for helgrind and drd.
-Fix this by doing a configure check for whether we are using glibc
-2.34 by checking whether pthread_create is in libc instead of in
-libpthread. If we are using glibc then define GLIBC_LIBC_PATH and
-GLIBC_LIBPTHREAD_PATH variables that point to the (regexp) path
-of the library that contains all libc functions and pthread functions
-(which will be the same path for glibc 2.34+).
-
-Rename glibc-2.34567-NPTL-helgrind.supp to glibc-2.X-helgrind.supp.in
-and glibc-2.X-drd.supp to glibc-2.X-drd.supp.in and replace the
-GLIBC_LIBC_PATH and GLIBC_LIBPTHREAD_PATH at configure time.
-
-The same could be done for the glibc-2.X.supp.in file, but hasn't
-yet because it looks like most suppressions in that file are obsolete.
-
-Upstream-Status: Backport
----
- Makefile.am | 2 +-
- configure.ac | 37 +++++++++++++++++--
- glibc-2.X-drd.supp => glibc-2.X-drd.supp.in | 6 ++-
- ...elgrind.supp => glibc-2.X-helgrind.supp.in | 16 ++++----
- 4 files changed, 47 insertions(+), 14 deletions(-)
- rename glibc-2.X-drd.supp => glibc-2.X-drd.supp.in (97%)
- rename glibc-2.34567-NPTL-helgrind.supp => glibc-2.X-helgrind.supp.in (95%)
-
-Index: valgrind-3.17.0/Makefile.am
-===================================================================
---- valgrind-3.17.0.orig/Makefile.am
-+++ valgrind-3.17.0/Makefile.am
-@@ -41,7 +41,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.X.supp.in \
- xfree-3.supp xfree-4.supp \
-- glibc-2.34567-NPTL-helgrind.supp \
-+ glibc-2.X-helgrind.supp \
- glibc-2.2-LinuxThreads-helgrind.supp \
- glibc-2.X-drd.supp \
- darwin9.supp darwin9-drd.supp \
-Index: valgrind-3.17.0/configure.ac
-===================================================================
---- valgrind-3.17.0.orig/configure.ac
-+++ valgrind-3.17.0/configure.ac
-@@ -1090,6 +1090,31 @@ if test x$GLIBC_VERSION = x; then
- fi
- fi
-
-+# If this is glibc then figure out the generic (in file) libc.so and
-+# libpthread.so file paths to use in suppressions. Before 2.34 libpthread
-+# was a separate library, afterwards it was merged into libc.so and
-+# the library is called libc.so.6 (before it was libc-2.[0-9]+.so).
-+# Use this fact to set GLIBC_LIBC_PATH and GLIBC_LIBPTHREAD_PATH.
-+case ${GLIBC_VERSION} in
-+2*)
-+ AC_MSG_CHECKING([whether pthread_create needs libpthread])
-+ AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_create])],
-+ [
-+ AC_MSG_RESULT([no])
-+ GLIBC_LIBC_PATH="*/lib*/libc.so.6"
-+ GLIBC_LIBPTHREAD_PATH="$GLIBC_LIBC_PATH"
-+ ], [
-+ AC_MSG_RESULT([yes])
-+ GLIBC_LIBC_PATH="*/lib*/libc-2.*so*"
-+ GLIBC_LIBPTHREAD_PATH="*/lib*/libpthread-2.*so*"
-+ ])
-+ ;;
-+*)
-+ AC_MSG_CHECKING([not glibc...])
-+ AC_MSG_RESULT([${GLIBC_VERSION}])
-+ ;;
-+esac
-+
- AC_MSG_CHECKING([the glibc version])
-
- case "${GLIBC_VERSION}" in
-@@ -1102,13 +1127,13 @@ case "${GLIBC_VERSION}" in
- 2.[[3-6]])
- AC_MSG_RESULT(${GLIBC_VERSION} family)
- DEFAULT_SUPP="$srcdir/glibc-${GLIBC_VERSION}.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="$srcdir/glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-helgrind.supp ${DEFAULT_SUPP}"
- DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- 2.[[7-9]])
- AC_MSG_RESULT(${GLIBC_VERSION} family)
- DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="$srcdir/glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-helgrind.supp ${DEFAULT_SUPP}"
- DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- 2.10|2.11)
-@@ -1116,7 +1141,7 @@ case "${GLIBC_VERSION}" in
- AC_DEFINE([GLIBC_MANDATORY_STRLEN_REDIRECT], 1,
- [Define to 1 if strlen() has been optimized heavily (amd64 glibc >= 2.10)])
- DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="$srcdir/glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-helgrind.supp ${DEFAULT_SUPP}"
- DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- 2.*)
-@@ -1126,7 +1151,7 @@ case "${GLIBC_VERSION}" in
- AC_DEFINE([GLIBC_MANDATORY_INDEX_AND_STRLEN_REDIRECT], 1,
- [Define to 1 if index() and strlen() have been optimized heavily (x86 glibc >= 2.12)])
- DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
-- DEFAULT_SUPP="$srcdir/glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
-+ DEFAULT_SUPP="$srcdir/glibc-2.X-helgrind.supp ${DEFAULT_SUPP}"
- DEFAULT_SUPP="$srcdir/glibc-2.X-drd.supp ${DEFAULT_SUPP}"
- ;;
- darwin)
-@@ -1157,6 +1182,8 @@ case "${GLIBC_VERSION}" in
- esac
-
- AC_SUBST(GLIBC_VERSION)
-+AC_SUBST(GLIBC_LIBC_PATH)
-+AC_SUBST(GLIBC_LIBPTHREAD_PATH)
-
-
- if test "$VGCONF_OS" != "solaris"; then
-@@ -4910,6 +4937,8 @@ AC_CONFIG_FILES([
- valgrind.spec
- valgrind.pc
- glibc-2.X.supp
-+ glibc-2.X-helgrind.supp
-+ glibc-2.X-drd.supp
- docs/Makefile
- tests/Makefile
- tests/vg_regtest
-Index: valgrind-3.17.0/glibc-2.X-drd.supp
-===================================================================
---- valgrind-3.17.0.orig/glibc-2.X-drd.supp
-+++ /dev/null
-@@ -1,330 +0,0 @@
--#
--# Suppression patterns for ld, the dynamic loader.
--#
--
--# Suppress all data races triggered by ld.
--{
-- drd-ld
-- drd:ConflictingAccess
-- obj:*/lib*/ld-*.so
--}
--
--#
--# Suppression patterns for libc.
--#
--
--# Suppress all data races where the topmost frame is inside libc.so. Although
--# this could hide some real data races, unfortunately this is the only way to
--# not report any false positives on stdio functions. The glibc functions
--# manipulating FILE objects use locking primitives that cannot be intercepted
--# easily. See also the definitions of _IO_lock_lock() etc. in the file
--# nptl/sysdeps/pthread/bits/stdio-lock.h in the glibc source tree.
--{
-- drd-libc-stdio
-- drd:ConflictingAccess
-- obj:*/lib*/libc-*
--}
--{
-- drd-libc-thread-cancellation-test
-- drd:ConflictingAccess
-- fun:write
--}
--{
-- drd-libc-random
-- drd:ConflictingAccess
-- fun:random_r
-- fun:random
--}
--
--#
--# Suppression patterns for libstdc++, the implementation of the standard C++
--# library included with the gcc compiler.
--#
--# Note: several versions of the libstdc++ library (4.2.2, 4.3.2, 4.4.0, 4.5.0
--# and their predecessors) contain an implementation of the std::string class
--# that triggers conflicting memory accesses. See also
--# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40518
--#
--
--# {
--# drd-libstdc++-std::string::string()
--# drd:ConflictingAccess
--# fun:_ZNSsC1ERKSs
--# }
--
--{
-- drd-libstdc++-cxa_guard_release
-- drd:CondErr
-- fun:pthread_cond_broadcast@*
-- fun:__cxa_guard_release
--}
--{
-- drd-libstdc++-std::__ostream_insert()
-- drd:ConflictingAccess
-- fun:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
-- fun:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
--}
--{
-- drd-libstdc++-std::ostream::_M_insert<long>()
-- drd:ConflictingAccess
-- ...
-- fun:_ZNSo9_M_insertIlEERSoT_
--}
--
--
--#
--# Suppression patterns for libpthread.
--#
--
--{
-- drd-libpthread-pthread_create
-- drd:ConflictingAccess
-- ...
-- fun:pthread_create*
--}
--{
-- drd-libpthread-pthread_join
-- drd:ConflictingAccess
-- fun:pthread_join
-- fun:pthread_join
--}
--{
-- drd-libpthread-__deallocate_stack
-- drd:ConflictingAccess
-- ...
-- fun:__deallocate_stack
--}
--{
-- drd-libpthread-__free_stacks
-- drd:ConflictingAccess
-- fun:__free_stacks
--}
--{
-- drd-libpthread-__free_tcb
-- drd:ConflictingAccess
-- ...
-- fun:__free_tcb
--}
--{
-- drd-libpthread-__nptl_deallocate_tsd
-- drd:ConflictingAccess
-- fun:__nptl_deallocate_tsd
--}
--{
-- drd-libpthread-pthread_detach
-- drd:ConflictingAccess
-- fun:pthread_detach
-- fun:pthread_detach
--}
--{
-- drd-libpthread-pthread_once
-- drd:ConflictingAccess
-- fun:pthread_once
--}
--{
-- drd-libpthread-pthread_cancel_init
-- drd:ConflictingAccess
-- fun:pthread_cancel_init
--}
--{
-- drd-libpthread-pthread_cancel
-- drd:ConflictingAccess
-- fun:pthread_cancel
-- fun:pthread_cancel_intercept
--}
--{
-- drd-libpthread-_Unwind_ForcedUnwind
-- drd:ConflictingAccess
-- ...
-- fun:_Unwind_ForcedUnwind
--}
--{
-- drd-libpthread-_Unwind_GetCFA
-- drd:ConflictingAccess
-- fun:_Unwind_GetCFA
--}
--{
-- drd-libpthread-_Unwind_Resume
-- drd:ConflictingAccess
-- ...
-- fun:_Unwind_Resume
--}
--{
-- drd-libpthread-?
-- drd:ConflictingAccess
-- obj:*/lib/libgcc_s.so.1
--}
--{
-- drd-libpthread-nanosleep
-- drd:ConflictingAccess
-- fun:nanosleep
--}
--
--#
--# Suppression patterns for libgomp.
--#
--
--# Unfortunately many statements in libgomp trigger conflicting accesses. It is
--# not clear to me which of these are safe and which ones not. See also
--# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362
--{
-- drd-libgomp
-- drd:ConflictingAccess
-- obj:/usr/lib*/libgomp.so*
--}
--
--#
--# Suppression patterns for libX11.
--#
--
--{
-- drd-libX11-XCreateFontSet
-- drd:CondErr
-- fun:pthread_cond_init*
-- fun:_XReply
-- fun:XListFontsWithInfo
-- obj:/usr/lib*/libX11.so*
-- fun:XCreateOC
-- fun:XCreateFontSet
--}
--
--#
--# Suppression patterns for libxcb.
--#
--
--{
-- drd-libxcb-xcb_wait_for_reply
-- drd:CondErr
-- ...
-- fun:pthread_cond_destroy*
-- fun:xcb_wait_for_reply
--}
--
--#
--# Suppression patterns for libglib.
--#
--
--{
-- drd-libglib-access-g_threads_got_initialized
-- drd:ConflictingAccess
-- ...
-- fun:g_slice_alloc
-- fun:g_ptr_array_sized_new
--}
--{
-- drd-libglib-access-g_threads_got_initialized
-- drd:ConflictingAccess
-- ...
-- fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext
-- fun:_ZN20QEventDispatcherGlibC1EP7QObject
-- obj:/usr/lib*/libQtCore.so.4.*
-- obj:/usr/lib*/libQtCore.so.4.*
--}
--{
-- drd-libglib-access-g_mem_initialized
-- drd:ConflictingAccess
-- fun:g_malloc0
--}
--{
-- drd-libglib-g_private_get_posix_impl
-- drd:ConflictingAccess
-- fun:g_private_get_posix_impl
--}
--{
-- drd-libglib-g_private_set_posix_impl
-- drd:ConflictingAccess
-- fun:g_private_set_posix_impl
--}
--{
-- drd-libglib-g_get_language_names
-- drd:ConflictingAccess
-- fun:g_slice_free_chain_with_offset
--}
--{
-- drd-libglib-g_main_context_new
-- drd:ConflictingAccess
-- fun:fcntl
-- obj:/usr/lib*/libglib-*.so*
-- fun:g_main_context_new
--}
--
--#
--# Suppression patterns for libQtCore.
--#
--
--{
-- drd-libQtCore-deref-that-calls-QThreadData-destructor
-- drd:ConflictingAccess
-- fun:_ZN11QThreadDataD1Ev
-- obj:/usr/lib*/libQtCore.so.4.*
--}
--{
-- drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList
-- drd:ConflictingAccess
-- obj:/usr/lib*/libQtCore.so.4.*
-- fun:_ZN11QMetaObject8activateEP7QObjectiiPPv
-- fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv
--}
--{
-- drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
-- drd:ConflictingAccess
-- fun:_ZN14QReadWriteLock12lockForWriteEv
-- fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
-- fun:_ZN7QObjectD2Ev
--}
--{
-- drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
-- drd:ConflictingAccess
-- fun:_ZN14QReadWriteLock12lockForWriteEv
-- fun:_ZN12QWriteLocker6relockEv
-- fun:_ZN12QWriteLockerC1EP14QReadWriteLock
-- fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
-- fun:_ZN7QObjectD2Ev
-- fun:_ZN24QAbstractEventDispatcherD2Ev
-- fun:_ZN20QEventDispatcherGlibD0Ev
--}
--{
-- drd-libQtCore-QMutexPool::get(void const*)
-- drd:ConflictingAccess
-- fun:_ZN10QMutexPool3getEPKv
--}
--{
-- drd-libQtCore-qt_gettime_is_monotonic()
-- drd:ConflictingAccess
-- fun:_Z23qt_gettime_is_monotonicv
--}
--
--#
--# Suppression patterns for libboost.
--#
--
--# Suppress the races on boost::once_flag::epoch and on
--# boost::detail::this_thread_epoch. See also the source file
--# boost/thread/pthread/once.hpp in the Boost source tree
--# (https://svn.boost.org/trac/boost/browser/trunk/boost/thread/pthread/once.hpp).
--{
-- drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)())
-- drd:ConflictingAccess
-- ...
-- fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_
--}
--{
-- drd-libboost-boost::detail::get_once_per_thread_epoch()
-- drd:ConflictingAccess
-- fun:_ZN5boost6detail25get_once_per_thread_epochEv
--}
--# Suppress the race reports on boost::detail::current_thread_tls_key. See also
--# https://svn.boost.org/trac/boost/ticket/3526 for more information about why
--# the access pattern of current_thread_tls_key is safe.
--{
-- drd-libboost-boost::detail::get_current_thread_data()
-- drd:ConflictingAccess
-- ...
-- fun:_ZN5boost6detail23get_current_thread_dataEv
--}
--{
-- drd-libboost-boost::detail::set_current_thread_data(boost::detail::thread_data_base*)
-- drd:ConflictingAccess
-- ...
-- fun:_ZN5boost6detail23set_current_thread_dataEPNS0_16thread_data_baseE
--}
-Index: valgrind-3.17.0/glibc-2.X-drd.supp.in
-===================================================================
---- /dev/null
-+++ valgrind-3.17.0/glibc-2.X-drd.supp.in
-@@ -0,0 +1,332 @@
-+# IMPORTANT: DO NOT EDIT glibc-2.X-drd.supp, as it is as a generated
-+# file. Instead edit glibc-2.X-drd.supp.in.
-+#
-+# Suppression patterns for ld, the dynamic loader.
-+#
-+
-+# Suppress all data races triggered by ld.
-+{
-+ drd-ld
-+ drd:ConflictingAccess
-+ obj:*/lib*/ld*.so*
-+}
-+
-+#
-+# Suppression patterns for libc.
-+#
-+
-+# Suppress all data races where the topmost frame is inside libc.so. Although
-+# this could hide some real data races, unfortunately this is the only way to
-+# not report any false positives on stdio functions. The glibc functions
-+# manipulating FILE objects use locking primitives that cannot be intercepted
-+# easily. See also the definitions of _IO_lock_lock() etc. in the file
-+# nptl/sysdeps/pthread/bits/stdio-lock.h in the glibc source tree.
-+{
-+ drd-libc-stdio
-+ drd:ConflictingAccess
-+ obj:@GLIBC_LIBC_PATH@
-+}
-+{
-+ drd-libc-thread-cancellation-test
-+ drd:ConflictingAccess
-+ fun:write
-+}
-+{
-+ drd-libc-random
-+ drd:ConflictingAccess
-+ fun:random_r
-+ fun:random
-+}
-+
-+#
-+# Suppression patterns for libstdc++, the implementation of the standard C++
-+# library included with the gcc compiler.
-+#
-+# Note: several versions of the libstdc++ library (4.2.2, 4.3.2, 4.4.0, 4.5.0
-+# and their predecessors) contain an implementation of the std::string class
-+# that triggers conflicting memory accesses. See also
-+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40518
-+#
-+
-+# {
-+# drd-libstdc++-std::string::string()
-+# drd:ConflictingAccess
-+# fun:_ZNSsC1ERKSs
-+# }
-+
-+{
-+ drd-libstdc++-cxa_guard_release
-+ drd:CondErr
-+ fun:pthread_cond_broadcast@*
-+ fun:__cxa_guard_release
-+}
-+{
-+ drd-libstdc++-std::__ostream_insert()
-+ drd:ConflictingAccess
-+ fun:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l
-+ fun:_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
-+}
-+{
-+ drd-libstdc++-std::ostream::_M_insert<long>()
-+ drd:ConflictingAccess
-+ ...
-+ fun:_ZNSo9_M_insertIlEERSoT_
-+}
-+
-+
-+#
-+# Suppression patterns for libpthread.
-+#
-+
-+{
-+ drd-libpthread-pthread_create
-+ drd:ConflictingAccess
-+ ...
-+ fun:pthread_create*
-+}
-+{
-+ drd-libpthread-pthread_join
-+ drd:ConflictingAccess
-+ fun:pthread_join
-+ fun:pthread_join
-+}
-+{
-+ drd-libpthread-__deallocate_stack
-+ drd:ConflictingAccess
-+ ...
-+ fun:__deallocate_stack
-+}
-+{
-+ drd-libpthread-__free_stacks
-+ drd:ConflictingAccess
-+ fun:__free_stacks
-+}
-+{
-+ drd-libpthread-__free_tcb
-+ drd:ConflictingAccess
-+ ...
-+ fun:__free_tcb
-+}
-+{
-+ drd-libpthread-__nptl_deallocate_tsd
-+ drd:ConflictingAccess
-+ fun:__nptl_deallocate_tsd
-+}
-+{
-+ drd-libpthread-pthread_detach
-+ drd:ConflictingAccess
-+ fun:pthread_detach
-+ fun:pthread_detach
-+}
-+{
-+ drd-libpthread-pthread_once
-+ drd:ConflictingAccess
-+ fun:pthread_once
-+}
-+{
-+ drd-libpthread-pthread_cancel_init
-+ drd:ConflictingAccess
-+ fun:pthread_cancel_init
-+}
-+{
-+ drd-libpthread-pthread_cancel
-+ drd:ConflictingAccess
-+ fun:pthread_cancel
-+ fun:pthread_cancel_intercept
-+}
-+{
-+ drd-libpthread-_Unwind_ForcedUnwind
-+ drd:ConflictingAccess
-+ ...
-+ fun:_Unwind_ForcedUnwind
-+}
-+{
-+ drd-libpthread-_Unwind_GetCFA
-+ drd:ConflictingAccess
-+ fun:_Unwind_GetCFA
-+}
-+{
-+ drd-libpthread-_Unwind_Resume
-+ drd:ConflictingAccess
-+ ...
-+ fun:_Unwind_Resume
-+}
-+{
-+ drd-libpthread-?
-+ drd:ConflictingAccess
-+ obj:*/lib/libgcc_s.so.1
-+}
-+{
-+ drd-libpthread-nanosleep
-+ drd:ConflictingAccess
-+ fun:nanosleep
-+}
-+
-+#
-+# Suppression patterns for libgomp.
-+#
-+
-+# Unfortunately many statements in libgomp trigger conflicting accesses. It is
-+# not clear to me which of these are safe and which ones not. See also
-+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362
-+{
-+ drd-libgomp
-+ drd:ConflictingAccess
-+ obj:/usr/lib*/libgomp.so*
-+}
-+
-+#
-+# Suppression patterns for libX11.
-+#
-+
-+{
-+ drd-libX11-XCreateFontSet
-+ drd:CondErr
-+ fun:pthread_cond_init*
-+ fun:_XReply
-+ fun:XListFontsWithInfo
-+ obj:/usr/lib*/libX11.so*
-+ fun:XCreateOC
-+ fun:XCreateFontSet
-+}
-+
-+#
-+# Suppression patterns for libxcb.
-+#
-+
-+{
-+ drd-libxcb-xcb_wait_for_reply
-+ drd:CondErr
-+ ...
-+ fun:pthread_cond_destroy*
-+ fun:xcb_wait_for_reply
-+}
-+
-+#
-+# Suppression patterns for libglib.
-+#
-+
-+{
-+ drd-libglib-access-g_threads_got_initialized
-+ drd:ConflictingAccess
-+ ...
-+ fun:g_slice_alloc
-+ fun:g_ptr_array_sized_new
-+}
-+{
-+ drd-libglib-access-g_threads_got_initialized
-+ drd:ConflictingAccess
-+ ...
-+ fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext
-+ fun:_ZN20QEventDispatcherGlibC1EP7QObject
-+ obj:/usr/lib*/libQtCore.so.4.*
-+ obj:/usr/lib*/libQtCore.so.4.*
-+}
-+{
-+ drd-libglib-access-g_mem_initialized
-+ drd:ConflictingAccess
-+ fun:g_malloc0
-+}
-+{
-+ drd-libglib-g_private_get_posix_impl
-+ drd:ConflictingAccess
-+ fun:g_private_get_posix_impl
-+}
-+{
-+ drd-libglib-g_private_set_posix_impl
-+ drd:ConflictingAccess
-+ fun:g_private_set_posix_impl
-+}
-+{
-+ drd-libglib-g_get_language_names
-+ drd:ConflictingAccess
-+ fun:g_slice_free_chain_with_offset
-+}
-+{
-+ drd-libglib-g_main_context_new
-+ drd:ConflictingAccess
-+ fun:fcntl
-+ obj:/usr/lib*/libglib-*.so*
-+ fun:g_main_context_new
-+}
-+
-+#
-+# Suppression patterns for libQtCore.
-+#
-+
-+{
-+ drd-libQtCore-deref-that-calls-QThreadData-destructor
-+ drd:ConflictingAccess
-+ fun:_ZN11QThreadDataD1Ev
-+ obj:/usr/lib*/libQtCore.so.4.*
-+}
-+{
-+ drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList
-+ drd:ConflictingAccess
-+ obj:/usr/lib*/libQtCore.so.4.*
-+ fun:_ZN11QMetaObject8activateEP7QObjectiiPPv
-+ fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv
-+}
-+{
-+ drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
-+ drd:ConflictingAccess
-+ fun:_ZN14QReadWriteLock12lockForWriteEv
-+ fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
-+ fun:_ZN7QObjectD2Ev
-+}
-+{
-+ drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
-+ drd:ConflictingAccess
-+ fun:_ZN14QReadWriteLock12lockForWriteEv
-+ fun:_ZN12QWriteLocker6relockEv
-+ fun:_ZN12QWriteLockerC1EP14QReadWriteLock
-+ fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
-+ fun:_ZN7QObjectD2Ev
-+ fun:_ZN24QAbstractEventDispatcherD2Ev
-+ fun:_ZN20QEventDispatcherGlibD0Ev
-+}
-+{
-+ drd-libQtCore-QMutexPool::get(void const*)
-+ drd:ConflictingAccess
-+ fun:_ZN10QMutexPool3getEPKv
-+}
-+{
-+ drd-libQtCore-qt_gettime_is_monotonic()
-+ drd:ConflictingAccess
-+ fun:_Z23qt_gettime_is_monotonicv
-+}
-+
-+#
-+# Suppression patterns for libboost.
-+#
-+
-+# Suppress the races on boost::once_flag::epoch and on
-+# boost::detail::this_thread_epoch. See also the source file
-+# boost/thread/pthread/once.hpp in the Boost source tree
-+# (https://svn.boost.org/trac/boost/browser/trunk/boost/thread/pthread/once.hpp).
-+{
-+ drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)())
-+ drd:ConflictingAccess
-+ ...
-+ fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_
-+}
-+{
-+ drd-libboost-boost::detail::get_once_per_thread_epoch()
-+ drd:ConflictingAccess
-+ fun:_ZN5boost6detail25get_once_per_thread_epochEv
-+}
-+# Suppress the race reports on boost::detail::current_thread_tls_key. See also
-+# https://svn.boost.org/trac/boost/ticket/3526 for more information about why
-+# the access pattern of current_thread_tls_key is safe.
-+{
-+ drd-libboost-boost::detail::get_current_thread_data()
-+ drd:ConflictingAccess
-+ ...
-+ fun:_ZN5boost6detail23get_current_thread_dataEv
-+}
-+{
-+ drd-libboost-boost::detail::set_current_thread_data(boost::detail::thread_data_base*)
-+ drd:ConflictingAccess
-+ ...
-+ fun:_ZN5boost6detail23set_current_thread_dataEPNS0_16thread_data_baseE
-+}
-Index: valgrind-3.17.0/glibc-2.34567-NPTL-helgrind.supp
-===================================================================
---- valgrind-3.17.0.orig/glibc-2.34567-NPTL-helgrind.supp
-+++ /dev/null
-@@ -1,301 +0,0 @@
--
--# FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of
--# other stuff. They should be removed.
--
--##----------------------------------------------------------------------##
--# Suppressions for the Helgrind tool when using
--# a glibc-2.{3,4,5,6,7,8,9} system
--
--####################################################
--# glibc-2.X specific
--# These are generic cover-alls which catch a lot of stuff
--# in various combinations of ld, libc and libpthread
--#
--# Note this is heavyhanded and not very clever:
--#
--# - suppress anything that has its top frame in ld.so
--# That's fine, since it's mostly dynamic linking stuff,
--# which has various deliberate (harmless) races
--#
--# - suppress anything that has its top frame in libc.so.
--# This really isn't clever, since it could hide some
--# legitimate races. But the problem is, if we don't do
--# this, then loads of errors to do with stdio are reported, because
--# H fails to see glibc's internal locking/unlocking of FILE*s
--# as required by POSIX. A better solution is needed.
--#
--# - some of the stdio functions in newer glibc manipulate stdio
--# FILE*s state through mempcpy, which we intercept, so we also need
--# to suppress such manipulations.
--
--#{
--# helgrind-glibc2X-001
--# Helgrind:Race
--# obj:*/lib*/ld-2.*so*
--#}
--
--# helgrind-glibc2X-002 was merged into helgrind-glibc2X-001
--
--# helgrind-glibc2X-003 was merged into helgrind-glibc2X-001
--
--{
-- helgrind-glibc2X-004
-- Helgrind:Race
-- obj:*/lib*/libc-2.*so*
--}
--
--{
-- helgrind-glibc-io-xsputn-mempcpy
-- Helgrind:Race
-- fun:__GI_mempcpy
-- fun:_IO_*xsputn*
-- obj:*/lib*/libc-2.*so*
--}
--
--{
-- helgrind-glibc2X-005
-- Helgrind:Race
-- obj:*/lib*/libpthread-2.*so*
--}
--
--# helgrind-glibc2X-006 was merged into helgrind-glibc2X-005
--
--# helgrind-glibc2X-007 was merged into helgrind-glibc2X-001
--
--# helgrind-glibc2X-008 was merged into helgrind-glibc2X-004
--
--# helgrind-glibc2X-009 was merged into helgrind-glibc2X-004
--
--# helgrind-glibc2X-010 was merged into helgrind-glibc2X-001
--
--# helgrind-glibc2X-011 was merged into helgrind-glibc2X-004
--
--# helgrind-glibc2X-012 was merged into helgrind-glibc2X-001
--
--# helgrind-glibc2X-013 was merged into helgrind-glibc2X-001
--
--# helgrind-glibc2X-014 was merged into helgrind-glibc2X-001
--
--# helgrind-glibc2X-015 was merged into helgrind-glibc2X-004
--
--# helgrind-glibc2X-016 was merged into helgrind-glibc2X-004
--
--# These are very ugly. They are needed to suppress errors inside (eg)
--# NPTL's pthread_cond_signal. Why only one stack frame -- at least we
--# should see the wrapper calling the real functions, right?
--# Unfortunately, no: the real functions are handwritten assembly (in
--# the glibc-2.5 sources) and does not create a proper stack frame.
--# Therefore it's only one level of unwinding before we're back out in
--# user code rather than the 2 levels you'd expect.
--{
-- helgrind-glibc2X-101
-- Helgrind:Race
-- obj:*/lib*/libpthread-2.*so*
-- fun:pthread_*
--}
--{
-- helgrind-glibc2X-102
-- Helgrind:Race
-- fun:mythread_wrapper
-- obj:*/lib*/libpthread-2.*so*
--}
--{
-- helgrind-glibc2X-103
-- Helgrind:Race
-- fun:pthread_cond_*@@GLIBC_2.*
--}
--{
-- helgrind-glibc2X-104
-- Helgrind:Race
-- fun:__lll_mutex_*
--}
--{
-- helgrind-glibc2X-105
-- Helgrind:Race
-- fun:pthread_rwlock_*lock*
--}
--{
-- helgrind-glibc2X-106
-- Helgrind:Race
-- fun:__lll_lock_wait
--}
--{
-- helgrind-glibc2X-107
-- Helgrind:Race
-- obj:*/lib*/libpthread-2.*so*
-- fun:sem_*
--}
--{
-- helgrind-glibc2X-108
-- Helgrind:Race
-- fun:clone
--}
--{
-- helgrind-glibc2X-109
-- Helgrind:Race
-- fun:start_thread
--}
--{
-- helgrind-glibc2X-110
-- Helgrind:Race
-- obj:*/lib*/libc-2.*so*
-- fun:pthread_*
--}
--{
-- helgrind-glibc2X-111
-- Helgrind:Race
-- fun:__lll_*lock_*
--}
--{
-- helgrind-glibc2X-113
-- Helgrind:Race
-- fun:pthread_barrier_wait*
--}
--
--
--####################################################
--# qt4 specific (GNU mangling)
--#
--{
-- helgrind-qt4---QMutex::lock()-QMutex::lock()
-- Helgrind:Race
-- ...
-- fun:_ZN6QMutex4lockEv
-- fun:_ZN6QMutex4lockEv
--}
--
--{
-- helgrind-qt4---QMutex::unlock()-QMutex::unlock()
-- Helgrind:Race
-- ...
-- fun:_ZN6QMutex6unlockEv
-- fun:_ZN6QMutex6unlockEv
--}
--
--{
-- helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*)
-- Helgrind:Race
-- fun:pthread_setspecific
-- fun:_ZN14QThreadPrivate5startEPv
--}
--
--
--####################################################
--# Other stuff.
--#
--# pthread_exit apparently calls some kind of unwind
--# mechanism - maybe to remove some number of frames
--# from the thread's stack, so as to get back to the
--# outermost frame for the thread? Anyway..
--
--{
-- helgrind---*Unwind*-...-pthread_exit
-- Helgrind:Race
-- fun:*Unwind*
-- ...
-- fun:pthread_exit
--}
--
--{
-- helgrind---...-*Unwind*-*pthread_unwind*
-- Helgrind:Race
-- ...
-- fun:*Unwind*
-- fun:*pthread_unwind*
--}
--
--{
-- helgrind---...-*Unwind*-*pthread_unwind*
-- Helgrind:Race
-- ...
-- fun:_Unwind*
-- ...
-- fun:_Unwind_Backtrace
--}
--
--
--
--
--####################################################
--# To do with thread stack allocation and deallocation?
--#
--{
-- helgrind---free_stacks-__deallocate_stack
-- Helgrind:Race
-- fun:free_stacks
-- fun:__deallocate_stack
--}
--
--{
-- helgrind---__deallocate_stack-start_thread-clone
-- Helgrind:Race
-- fun:__deallocate_stack
-- fun:start_thread
-- fun:clone
--}
--
--
--####################################################
--# To do with pthread_{set,get}specific
--#
--{
-- helgrind---pthread_setspecific
-- Helgrind:Race
-- fun:pthread_setspecific
--}
--
--{
-- helgrind---pthread_getspecific
-- Helgrind:Race
-- fun:pthread_getspecific
--}
--
--
--####################################################
--# To do with dynamic linking
--#
--# helgrind---ld.so-...-dlsym was merged into helgrind-glibc2X-001
--
--{
-- helgrind---_dl_allocate_tls
-- Helgrind:Race
-- fun:mempcpy
-- fun:_dl_allocate_tls_init
-- ...
-- fun:pthread_create@@GLIBC_2.2*
-- fun:pthread_create_WRK
-- fun:pthread_create@*
--}
--
--{
-- helgrind---_dl_allocate_tls2
-- Helgrind:Race
-- fun:memcpy
-- fun:__mempcpy_inline
-- fun:_dl_allocate_tls_init
-- ...
-- fun:pthread_create@@GLIBC_2.2*
-- fun:pthread_create_WRK
-- fun:pthread_create@*
--}
--
--####################################################
--# To do with GNU libgomp
--#
--{
-- helgrind---libgomp43-1
-- Helgrind:Race
-- fun:gomp_ordered_sync
--}
--
--{
-- helgrind---libgomp43-1
-- Helgrind:Race
-- fun:gomp_ordered_next
--}
--
--{
-- helgrind---libgomp43-1
-- Helgrind:Race
-- fun:gomp_ordered_last
--}
-Index: valgrind-3.17.0/glibc-2.X-helgrind.supp.in
-===================================================================
---- /dev/null
-+++ valgrind-3.17.0/glibc-2.X-helgrind.supp.in
-@@ -0,0 +1,303 @@
-+# IMPORTANT: DO NOT EDIT glibc-2.X-helgrind.supp, as it is as a generated
-+# file. Instead edit glibc-2.X-helgrind.supp.in.
-+
-+# FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of
-+# other stuff. They should be removed.
-+
-+##----------------------------------------------------------------------##
-+# Suppressions for the Helgrind tool when using
-+# a glibc-2.{3,4,5,6,7,8,9} system
-+
-+####################################################
-+# glibc-2.X specific
-+# These are generic cover-alls which catch a lot of stuff
-+# in various combinations of ld, libc and libpthread
-+#
-+# Note this is heavyhanded and not very clever:
-+#
-+# - suppress anything that has its top frame in ld.so
-+# That's fine, since it's mostly dynamic linking stuff,
-+# which has various deliberate (harmless) races
-+#
-+# - suppress anything that has its top frame in libc.so.
-+# This really isn't clever, since it could hide some
-+# legitimate races. But the problem is, if we don't do
-+# this, then loads of errors to do with stdio are reported, because
-+# H fails to see glibc's internal locking/unlocking of FILE*s
-+# as required by POSIX. A better solution is needed.
-+#
-+# - some of the stdio functions in newer glibc manipulate stdio
-+# FILE*s state through mempcpy, which we intercept, so we also need
-+# to suppress such manipulations.
-+
-+#{
-+# helgrind-glibc2X-001
-+# Helgrind:Race
-+# obj:*/lib*/ld-2.*so*
-+#}
-+
-+# helgrind-glibc2X-002 was merged into helgrind-glibc2X-001
-+
-+# helgrind-glibc2X-003 was merged into helgrind-glibc2X-001
-+
-+{
-+ helgrind-glibc2X-004
-+ Helgrind:Race
-+ obj:@GLIBC_LIBC_PATH@
-+}
-+
-+{
-+ helgrind-glibc-io-xsputn-mempcpy
-+ Helgrind:Race
-+ fun:__GI_mempcpy
-+ fun:_IO_*xsputn*
-+ obj:@GLIBC_LIBC_PATH@
-+}
-+
-+{
-+ helgrind-glibc2X-005
-+ Helgrind:Race
-+ obj:@GLIBC_LIBPTHREAD_PATH@
-+}
-+
-+# helgrind-glibc2X-006 was merged into helgrind-glibc2X-005
-+
-+# helgrind-glibc2X-007 was merged into helgrind-glibc2X-001
-+
-+# helgrind-glibc2X-008 was merged into helgrind-glibc2X-004
-+
-+# helgrind-glibc2X-009 was merged into helgrind-glibc2X-004
-+
-+# helgrind-glibc2X-010 was merged into helgrind-glibc2X-001
-+
-+# helgrind-glibc2X-011 was merged into helgrind-glibc2X-004
-+
-+# helgrind-glibc2X-012 was merged into helgrind-glibc2X-001
-+
-+# helgrind-glibc2X-013 was merged into helgrind-glibc2X-001
-+
-+# helgrind-glibc2X-014 was merged into helgrind-glibc2X-001
-+
-+# helgrind-glibc2X-015 was merged into helgrind-glibc2X-004
-+
-+# helgrind-glibc2X-016 was merged into helgrind-glibc2X-004
-+
-+# These are very ugly. They are needed to suppress errors inside (eg)
-+# NPTL's pthread_cond_signal. Why only one stack frame -- at least we
-+# should see the wrapper calling the real functions, right?
-+# Unfortunately, no: the real functions are handwritten assembly (in
-+# the glibc-2.5 sources) and does not create a proper stack frame.
-+# Therefore it's only one level of unwinding before we're back out in
-+# user code rather than the 2 levels you'd expect.
-+{
-+ helgrind-glibc2X-101
-+ Helgrind:Race
-+ obj:@GLIBC_LIBPTHREAD_PATH@
-+ fun:pthread_*
-+}
-+{
-+ helgrind-glibc2X-102
-+ Helgrind:Race
-+ fun:mythread_wrapper
-+ obj:@GLIBC_LIBPTHREAD_PATH@
-+}
-+{
-+ helgrind-glibc2X-103
-+ Helgrind:Race
-+ fun:pthread_cond_*@@GLIBC_2.*
-+}
-+{
-+ helgrind-glibc2X-104
-+ Helgrind:Race
-+ fun:__lll_mutex_*
-+}
-+{
-+ helgrind-glibc2X-105
-+ Helgrind:Race
-+ fun:pthread_rwlock_*lock*
-+}
-+{
-+ helgrind-glibc2X-106
-+ Helgrind:Race
-+ fun:__lll_lock_wait
-+}
-+{
-+ helgrind-glibc2X-107
-+ Helgrind:Race
-+ obj:@GLIBC_LIBPTHREAD_PATH@
-+ fun:sem_*
-+}
-+{
-+ helgrind-glibc2X-108
-+ Helgrind:Race
-+ fun:clone
-+}
-+{
-+ helgrind-glibc2X-109
-+ Helgrind:Race
-+ fun:start_thread
-+}
-+{
-+ helgrind-glibc2X-110
-+ Helgrind:Race
-+ obj:@GLIBC_LIBC_PATH@
-+ fun:pthread_*
-+}
-+{
-+ helgrind-glibc2X-111
-+ Helgrind:Race
-+ fun:__lll_*lock_*
-+}
-+{
-+ helgrind-glibc2X-113
-+ Helgrind:Race
-+ fun:pthread_barrier_wait*
-+}
-+
-+
-+####################################################
-+# qt4 specific (GNU mangling)
-+#
-+{
-+ helgrind-qt4---QMutex::lock()-QMutex::lock()
-+ Helgrind:Race
-+ ...
-+ fun:_ZN6QMutex4lockEv
-+ fun:_ZN6QMutex4lockEv
-+}
-+
-+{
-+ helgrind-qt4---QMutex::unlock()-QMutex::unlock()
-+ Helgrind:Race
-+ ...
-+ fun:_ZN6QMutex6unlockEv
-+ fun:_ZN6QMutex6unlockEv
-+}
-+
-+{
-+ helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*)
-+ Helgrind:Race
-+ fun:pthread_setspecific
-+ fun:_ZN14QThreadPrivate5startEPv
-+}
-+
-+
-+####################################################
-+# Other stuff.
-+#
-+# pthread_exit apparently calls some kind of unwind
-+# mechanism - maybe to remove some number of frames
-+# from the thread's stack, so as to get back to the
-+# outermost frame for the thread? Anyway..
-+
-+{
-+ helgrind---*Unwind*-...-pthread_exit
-+ Helgrind:Race
-+ fun:*Unwind*
-+ ...
-+ fun:pthread_exit
-+}
-+
-+{
-+ helgrind---...-*Unwind*-*pthread_unwind*
-+ Helgrind:Race
-+ ...
-+ fun:*Unwind*
-+ fun:*pthread_unwind*
-+}
-+
-+{
-+ helgrind---...-*Unwind*-*pthread_unwind*
-+ Helgrind:Race
-+ ...
-+ fun:_Unwind*
-+ ...
-+ fun:_Unwind_Backtrace
-+}
-+
-+
-+
-+
-+####################################################
-+# To do with thread stack allocation and deallocation?
-+#
-+{
-+ helgrind---free_stacks-__deallocate_stack
-+ Helgrind:Race
-+ fun:free_stacks
-+ fun:__deallocate_stack
-+}
-+
-+{
-+ helgrind---__deallocate_stack-start_thread-clone
-+ Helgrind:Race
-+ fun:__deallocate_stack
-+ fun:start_thread
-+ fun:clone
-+}
-+
-+
-+####################################################
-+# To do with pthread_{set,get}specific
-+#
-+{
-+ helgrind---pthread_setspecific
-+ Helgrind:Race
-+ fun:pthread_setspecific
-+}
-+
-+{
-+ helgrind---pthread_getspecific
-+ Helgrind:Race
-+ fun:pthread_getspecific
-+}
-+
-+
-+####################################################
-+# To do with dynamic linking
-+#
-+# helgrind---ld.so-...-dlsym was merged into helgrind-glibc2X-001
-+
-+{
-+ helgrind---_dl_allocate_tls
-+ Helgrind:Race
-+ fun:mempcpy
-+ fun:_dl_allocate_tls_init
-+ ...
-+ fun:pthread_create@@GLIBC_2.2*
-+ fun:pthread_create_WRK
-+ fun:pthread_create@*
-+}
-+
-+{
-+ helgrind---_dl_allocate_tls2
-+ Helgrind:Race
-+ fun:memcpy
-+ fun:__mempcpy_inline
-+ fun:_dl_allocate_tls_init
-+ ...
-+ fun:pthread_create@@GLIBC_2.2*
-+ fun:pthread_create_WRK
-+ fun:pthread_create@*
-+}
-+
-+####################################################
-+# To do with GNU libgomp
-+#
-+{
-+ helgrind---libgomp43-1
-+ Helgrind:Race
-+ fun:gomp_ordered_sync
-+}
-+
-+{
-+ helgrind---libgomp43-1
-+ Helgrind:Race
-+ fun:gomp_ordered_next
-+}
-+
-+{
-+ helgrind---libgomp43-1
-+ Helgrind:Race
-+ fun:gomp_ordered_last
-+}