Permalink
Switch branches/tags
Find file
Fetching contributors…
Cannot retrieve contributors at this time
1478 lines (1318 sloc) 29.9 KB
# This is a generated file, composed of the following suppression rules:
# exp-sgcheck.supp xfree-3.supp xfree-4.supp glibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp
{
ld-2.X possibly applying relocations
exp-sgcheck:SorG
obj:/*lib*/ld-2.*so*
obj:/*lib*/ld-2.*so*
}
# I'm pretty sure this is a false positive caused by the sg_ stuff
{
glibc realpath false positive
exp-sgcheck:SorG
fun:realpath
fun:*
}
{
I think this is glibc's ultra optimised getenv doing 2 byte reads
exp-sgcheck:SorG
fun:getenv
}
##----------------------------------------------------------------------##
# Errors to suppress by default with XFree86 3.3.6)
# 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
##----------------------------------------------------------------------##
{
X11-Cond-0
Memcheck:Cond
obj:*libXt.so.6.0
obj:*libXt.so.6.0
obj:*libXt.so.6.0
}
{
X11-Cond-1
Memcheck:Cond
fun:__rawmemchr
obj:*libXt.so.6.0
obj:*libXt.so.6.0
}
# Suppressions for XFree86-3.3.X
{
X11-Addr4-1
Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
}
{
X11-Addr4-2
Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
}
{
X11-Addr4-3
Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
}
{
X11-Addr4-4
Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
}
{
X11-Addr4-5
Memcheck:Addr4
fun:__rawmemchr
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
}
{
X11-Addr4-6
Memcheck:Addr4
obj:/usr/X11R6/lib/libXmu.so.6.0
obj:/usr/X11R6/lib/libXmu.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
}
{
X11-Addr4-7
Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1
}
{
X11-Param-1
Memcheck:Param
write(buf)
fun:__libc_write
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libX11.so.6.1
}
{
X11-Addr4-8
Memcheck:Addr4
obj:/usr/X11R6/lib/libX11.so.6.1
obj:/usr/X11R6/lib/libXpm.so.4.11
obj:/usr/X11R6/lib/libXpm.so.4.11
}
{
X11-Addr4-8
Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
}
{
X11-Addr4-9
Memcheck:Addr4
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
}
{
X11-Addr4-10
Memcheck:Addr4
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXaw.so.6.1
obj:/usr/X11R6/lib/libXt.so.6.0
}
{
X11-Addr4-11
Memcheck:Addr4
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXt.so.6.0
obj:/usr/X11R6/lib/libXaw.so.6.1
}
##----------------------------------------------------------------------##
##----------------------------------------------------------------------##
# Errors to suppress by default with XFree86 4.1.0)
# *** And a bunch of other stuff which is completely unrelated
# to X. The default suppressions are a bit of a mess and could do
# with a good tidying up.
# 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
# Resulting from R H 8.0
{
*libc_write/libX11.so.6.2/*X11TransWrite(Param)
Memcheck:Param
write(buf)
fun:*libc_write
obj:/usr/*lib*/libX11.so*
fun:*X11TransWrite
}
{
libX11.so.6.2/libX11.so.6.2/libX11.so.6.2(Cond)
Memcheck:Cond
obj:/usr/*lib*/libX11.so*
obj:/usr/*lib*/libX11.so*
obj:/usr/*lib*/libX11.so*
}
{
libXt.so.6.2/libXt.so.6.2/libXt.so.6.2(Cond)
Memcheck:Cond
obj:/usr/*lib*/libXt.so*
obj:/usr/*lib*/libXt.so*
obj:/usr/*lib*/libXt.so*
}
{
libXaw.so.7.0/libXaw.so.7.0/libXaw.so.7.0(Cond)
Memcheck:Cond
obj:/usr/*lib*/libXaw.so*
obj:/usr/*lib*/libXaw.so*
obj:/usr/*lib*/libXaw.so*
}
{
libXmu.so.6.2/libXmu.so.6.2/libXmu.so.6.2(Cond)
Memcheck:Cond
obj:/usr/*lib*/libXmu.so*
obj:/usr/*lib*/libXmu.so*
obj:/usr/*lib*/libXmu.so*
}
{
libXt.so.6.0/libXt.so.6.0/libXaw.so.7.0(Cond)
Memcheck:Cond
obj:/usr/*lib*/libXt.so*
obj:/usr/*lib*/libXt.so*
obj:/usr/*lib*/libXaw.so*
}
{
libXaw.so.7.0/libXaw.so.7.0/libXt.so.6.0(Value4)
Memcheck:Value4
obj:/usr/*lib*/libXaw.so*
obj:/usr/*lib*/libXaw.so*
obj:/usr/*lib*/libXt.so*
}
{
libXaw.so.7.0/libXaw.so.7.0/libXt.so.6.0(Cond)
Memcheck:Cond
obj:/usr/*lib*/libXaw.so*
obj:/usr/*lib*/libXaw.so*
obj:/usr/*lib*/libXt.so*
}
{
libX11.so.6.2/libX11.so.6.2/libXaw.so.7.0(Cond)
Memcheck:Cond
obj:/usr/*lib*/libX11.so*
obj:/usr/*lib*/libX11.so*
obj:/usr/*lib*/libXaw.so*
}
{
libX11.so.6.2/libX11.so.6.2/libXaw.so.7.0(Addr4)
Memcheck:Addr4
obj:/usr/*lib*/libX11.so*
obj:/usr/*lib*/libX11.so*
obj:/usr/*lib*/libXaw.so*
}
{
libX11.so.6.2/libXaw.so.7.0/libXaw.so.7.0(Cond)
Memcheck:Cond
obj:/usr/*lib*/libX11.so*
obj:/usr/*lib*/libXaw.so*
obj:/usr/*lib*/libXaw.so*
}
{
libXpm.so.4.11/libXpm.so.4.11/libXpm.so.4.11
Memcheck:Cond
obj:/usr/*lib*/libXpm.so.4.11
obj:/usr/*lib*/libXpm.so.4.11
obj:/usr/*lib*/libXpm.so.4.11
}
{
struct with uninitialized paddings
Memcheck:Param
writev(vector[...])
fun:*_writev
fun:_X11TransSocketWritev
fun:_X11TransWritev
fun:*
}
{
struct with uninitialized paddings - libxcb
Memcheck:Param
writev(vector[...])
obj:/lib*/*.so
obj:/usr/lib*/libxcb.so.1.0.0
obj:/usr/lib*/libxcb.so.1.0.0
fun:xcb_send_request
fun:_X*
}
{
struct with uninitialized paddings - libxcb
Memcheck:Param
writev(vector[...])
obj:/lib*/*.so
obj:/usr/lib*/libxcb.so.1.0.0
obj:/usr/lib*/libxcb.so.1.0.0
obj:/usr/lib*/libxcb.so.1.0.0
fun:xcb_*
fun:_X*
}
{
another struct with uninitialized paddings
Memcheck:Param
write(buf)
obj:*
fun:_IceTransSocketWrite
fun:_IceTransWrite
fun:_IceWrite
}
{
Xorg 6.8.1 uninit _write* padding
Memcheck:Param
write(buf)
fun:*
fun:_X11TransWrite
obj:/usr/*lib*/libX11.so*
}
{
Xorg 6.8.1 uninit write padding
Memcheck:Param
write(buf)
fun:write
fun:_X11TransWrite
obj:/usr/*lib*/libX11.so*
}
{
Xorg 6.8.1 ICE uninit __write* padding
Memcheck:Param
write(buf)
obj:*
fun:_IceTransWrite
fun:_IceWrite
fun:IceFlush
}
{
Xorg 6.8.1 writev uninit padding
Memcheck:Param
writev(vector[...])
fun:writev
obj:/usr/*lib*/libX11.so*
fun:_X11TransWritev
fun:_XSend
}
{
Xorg 6.9.0 writev uninit padding
Memcheck:Param
writev(vector[...])
fun:do_writev
fun:writev
obj:/usr/*lib*/libX11.so*
fun:_X11TransWritev
fun:_XSend
}
{
X on SUSE11 writev uninit padding
Memcheck:Param
writev(vector[...])
fun:writev
obj:/usr/lib*/libxcb.so*
obj:/usr/lib*/libxcb.so*
}
{
X on SUSE11 writev uninit padding 2
Memcheck:Param
writev(vector[...])
obj:/lib*/ld-2.*.so*
obj:/usr/lib*/libxcb.so*
obj:/usr/lib*/libxcb.so*
}
{
X on SUSE11 writev uninit padding 3
Memcheck:Param
writev(vector[...])
obj:/lib*/ld-2.*.so*
obj:/usr/lib*/libORBit*.so*
obj:/usr/lib*/libORBit*.so*
}
{
X on SUSE11 writev uninit padding 4
Memcheck:Param
writev(vector[...])
obj:/lib*/libc-2.*.so*
obj:/usr/lib*/libORBit*.so*
obj:/usr/lib*/libORBit*.so*
}
# There's something strange about a % 127 in XftFontOpenInfo
# (hashing) which gcc turns into a multiply by 33818641 and
# some other guff instead. I don't understand it enough to
# know if libXft is broken or if memcheck's value tracking is
# inadequate here. Anyway, for the moment, suppress it.
#
# Use of uninitialised value of size 8
# at 0x71A59F8: XftFontOpenInfo (in /usr/X11R6/lib64/libXft.so.2.1.2)
# by 0x71A5F0D: XftFontOpenPattern (in /usr/X11R6/lib64/libXft.so.2.1.2)
# by 0x65F166E: loadFontConfigFont(QFontPrivate const*, QFontDef const&,
# QFont::Script) (qfontdatabase_x11.cpp:1942)
# by 0x65F5DE4: QFontDatabase::findFont(QFont::Script, QFontPrivate const*,
# QFontDef const&, int) (qfontdatabase.cpp:996)
{
XftFontOpenInfo-umod-127-strangeness
Memcheck:Value8
obj:/usr/X11*/lib*/libXft.so*
obj:/usr/X11*/lib*/libXft.so*
}
{
XftFontOpenInfo-umod-127-strangeness-a-la-xorg
Memcheck:Value8
obj:/usr/lib*/libXft.so*
obj:/usr/lib*/libXft.so*
}
{
More X padding stuff
Memcheck:Param
writev(vector[...])
fun:*writev*
obj:/usr/X11*/lib*/libX11.so*
obj:/usr/X11*/lib*/libX11.so*
}
# Inlined strlen in libX11 on Ubuntu 9.10 amd64, unfortunately.
# Invalid read of size 4
# at 0x9B5CCE6: ??? (in /usr/lib/libX11.so.6.2.0)
# by 0x9B5D011: XGetAtomName (in /usr/lib/libX11.so.6.2.0)
# by 0x86407C3: gdk_x11_xatom_to_atom_for_display
# (in /usr/lib/libgdk-x11-2.0.so.0.1800.3)
# by 0x8636817: ??? (in /usr/lib/libgdk-x11-2.0.so.0.1800.3)
# Address 0x1a558e1c is 28 bytes inside a block of size 30 alloc'd
# at 0x4C2552D: malloc (vg_replace_malloc.c:236)
# by 0x9B642C0: _XUpdateAtomCache (in /usr/lib/libX11.so.6.2.0)
# by 0x9B647F1: ??? (in /usr/lib/libX11.so.6.2.0)
# by 0x9B81818: ??? (in /usr/lib/libX11.so.6.2.0)
{
libX11.so.6.2.0/libX11.so.6.2.0(Addr4)
Memcheck:Addr4
obj:/usr/*lib*/libX11.so*
obj:/usr/*lib*/libX11.so*
}
##----------------------------------------------------------------------##
# Completely inappropriate place, but ...
{
ifort-9.X-on-i686-1
Memcheck:Addr4
fun:unaligned_bigint
fun:hash
fun:for__add_to_lf_table
}
{
ifort-9.X-on-amd64-1
Memcheck:Addr8
fun:unaligned_bigint
fun:hash
fun:for__add_to_lf_table
}
# zlib-1.2.x uses uninitialised memory in some tricky way which
# apparently is harmless (it must amount to a vectorised while-loop,
# nothing else makes sense). Fools Memcheck though. See the mentioned
# URL for details.
{
zlib-1.2.x trickyness (1a): See http://www.zlib.net/zlib_faq.html#faq36
Memcheck:Cond
obj:/*lib*/libz.so.1.2.*
...
obj:/*lib*/libz.so.1.2.*
fun:deflate
}
{
zlib-1.2.x trickyness (1b): See http://www.zlib.net/zlib_faq.html#faq36
Memcheck:Cond
obj:/*lib*/libz.so.1.2.*
fun:deflate
}
{
zlib-1.2.x trickyness (2a): See http://www.zlib.net/zlib_faq.html#faq36
Memcheck:Value8
obj:/*lib*/libz.so.1.2.*
...
obj:/*lib*/libz.so.1.2.*
fun:deflate
}
{
zlib-1.2.x trickyness (2b): See http://www.zlib.net/zlib_faq.html#faq36
Memcheck:Value8
obj:/*lib*/libz.so.1.2.*
fun:deflate
}
{
zlib-1.2.x trickyness (3a): See http://www.zlib.net/zlib_faq.html#faq36
Memcheck:Value4
obj:/*lib*/libz.so.1.2.*
...
obj:/*lib*/libz.so.1.2.*
fun:deflate
}
{
zlib-1.2.x trickyness (3b): See http://www.zlib.net/zlib_faq.html#faq36
Memcheck:Value4
obj:/*lib*/libz.so.1.2.*
fun:deflate
}
##----------------------------------------------------------------------##
## More general versions of some of the old X suppressions above
{
Ubuntu804 libXaw.so.7.0/libXaw.so.7.0/libXaw.so.7.0(Cond)
Memcheck:Cond
obj:/usr/*lib*/libXaw*so*
obj:/usr/*lib*/libXaw*so*
obj:/usr/*lib*/libXaw*so*
}
{
Ubuntu804 libXaw.so.7.0/libXaw.so.7.0/libXt(Cond)
Memcheck:Cond
obj:/usr/*lib*/libXaw*so*
obj:/usr/*lib*/libXaw*so*
obj:/usr/*lib*/libXt*so*
}
{
Ubuntu804-hack-1
Memcheck:Overlap
fun:mempcpy
fun:_IO_default_xsputn
obj:/lib*/libc-2.*so*
}
#
# 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
}
#
# 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
}
#
# 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-_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
}
# 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.
#{
# 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-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
####################################################
# 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
}
##----------------------------------------------------------------------##
# Errors to suppress by default with glibc 2.14.x
# IMPORTANT: DO NOT EDIT glibc-2.X.supp, as it is as a generated
# file. Instead edit glibc-2.X.supp.in.
# 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
##----------------------------------------------------------------------##
##--- generic suppressions ---##
##----------------------------------------------------------------------##
{
dl-hack3-cond-0
Memcheck:Cond
fun:_dl_start
fun:_start
}
{
dl-hack3-cond-1
Memcheck:Cond
obj:/lib*/ld-2.14*.so*
obj:/lib*/ld-2.14*.so*
obj:/lib*/ld-2.14*.so*
}
{
dl-hack3-cond-2
Memcheck:Cond
obj:/lib*/ld-2.14*.so*
obj:/lib*/ld-2.14*.so*
obj:/lib*/libc-2.14*.so*
}
{
dl-hack3-cond-3
Memcheck:Cond
obj:/lib*/ld-2.14*.so*
obj:/lib*/libc-2.14*.so*
obj:/lib*/libc-2.14*.so*
}
{
dl-hack3-cond-4
Memcheck:Cond
obj:/lib*/ld-2.14*.so*
obj:/lib*/ld-2.14*.so*
obj:/lib*/libdl-2.14*.so*
}
{
dl-hack4-64bit-addr-1
Memcheck:Addr8
obj:/lib*/ld-2.14*.so*
obj:/lib*/ld-2.14*.so*
obj:/lib*/ld-2.14*.so*
}
{
dl-hack4-64bit-addr-2
Memcheck:Addr8
obj:/lib*/ld-2.14*.so*
obj:/lib*/ld-2.14*.so*
obj:/lib*/libc-2.14*.so*
}
{
dl-hack4-64bit-addr-3
Memcheck:Addr8
obj:/lib*/ld-2.14*.so*
obj:/lib*/ld-2.14*.so*
obj:/lib*/libdl-2.14*.so*
}
{
dl-hack5-32bit-addr-1
Memcheck:Addr4
obj:/lib*/ld-2.14*.so
obj:/lib*/ld-2.14*.so
obj:/lib*/ld-2.14*.so
}
{
dl-hack5-32bit-addr-3
Memcheck:Addr4
obj:/lib*/ld-2.14*.so
obj:/lib*/ld-2.14*.so
obj:/lib*/libdl-2.14*.so*
}
{
dl-hack5-32bit-addr-4
Memcheck:Addr4
obj:/lib*/ld-2.14*.so
obj:/lib*/libdl-2.14*.so*
obj:/lib*/ld-2.14*.so
}
##----------------------------------------------------------------------##
##--- Misc ad-hoc hacks ---##
##----------------------------------------------------------------------##
{
glibc-2.5.x-on-SUSE-10.2-(PPC)-1
Memcheck:Cond
fun:_dl_start_final
fun:_dl_start
fun:_start
}
{
glibc-2.5.x-on-SUSE-10.2-(PPC)-2a
Memcheck:Cond
fun:index
obj:*ld-2.14.*.so
}
{
glibc-2.5.x-on-SuSE-10.2-(PPC)-2b
Memcheck:Addr4
fun:index
fun:expand_dynamic_string_token
}
{
glibc-2.5.5-on-SuSE-10.2-(PPC)-2c
Memcheck:Addr4
fun:index
obj:*ld-2.14.*.so
}
{
glibc-2.3.5-on-SuSE-10.1-(PPC)-3
Memcheck:Addr4
fun:*wordcopy_fwd_dest_aligned*
fun:mem*cpy
obj:*lib*2.14.*.so
}
{
glibc-2.14-on-SUSE-10.3-(x86)
Memcheck:Addr4
obj:/lib/ld-2.14*.so
obj:/lib/ld-2.14*.so
obj:/lib/ld-2.14*.so
}
{
glibc24-64bit-padding-1a
Memcheck:Param
socketcall.sendto(msg)
fun:send
fun:get_mapping
fun:__nscd_get_map_ref
fun:nscd*
}
{
glibc24-64bit-padding-1b
Memcheck:Param
socketcall.sendto(msg)
fun:__sendto_nocancel
obj:/*libc-2.14*.so
obj:/*libc-2.14*.so
obj:/*libc-2.14*.so
}
{
glibc24-64bit-padding-1c
Memcheck:Param
socketcall.send(msg)
fun:send
fun:__nscd_get_map_ref
fun:nscd_get*_r
fun:*nscd*
obj:/*libc-2.14*.so
}
{
X11-64bit-padding-3a
Memcheck:Param
write(buf)
obj:/*libpthread-2.4.so*
obj:/usr/lib*/libX11.so*
obj:/usr/lib*/libX11.so*
obj:/usr/lib*/libX11.so*
}
{
X11-64bit-padding-4a
Memcheck:Param
socketcall.sendto(msg)
fun:send
obj:/*libc-2.14*.so
obj:/*libc-2.14*.so
obj:/*libc-2.14*.so
}
{
X11-64bit-padding-4b
Memcheck:Param
socketcall.send(msg)
fun:send
obj:/*libc-2.14*.so
obj:/*libc-2.14*.so
obj:/*libc-2.14*.so
}
##----------------------------------------------------------------------##
# MontaVista Linux 4.0.1 on ppc32
{
MVL-401-linuxthreads-pthread_create
Memcheck:Param
write(buf)
fun:pthread_create
}
{
MVL-401-linuxthreads-pthread_create
Memcheck:Param
write(buf)
obj:/lib/libpthread-0.10.so
fun:pthread_create
}
##----------------------------------------------------------------------##
# Ubuntu 10.04 on ARM (Thumb). Not sure why this is necessary.
{
U1004-ARM-_dl_relocate_object
Memcheck:Cond
fun:_dl_relocate_object
}
##-----------Ruby-specific----------------------------------------------##
{
ruby001
Memcheck:Leak
fun:malloc
fun:vm_xmalloc
...
}
{
ruby002
Memcheck:Leak
fun:realloc
fun:vm_xrealloc
...
}
{
ruby003
Memcheck:Leak
fun:calloc
fun:vm_xcalloc
...
}
{
ruby003-1
Memcheck:Leak
fun:calloc
fun:ruby_xcalloc
...
}
{
ruby004
Memcheck:Addr4
fun:glob_helper
...
}
{
ruby005
Memcheck:Leak
fun:malloc
fun:onig_new
...
}
{
ruby005-1
Memcheck:Leak
fun:malloc
...
fun:onig_compile
...
}
{
ruby006
Memcheck:Leak
fun:realloc
fun:add_compile_string
...
}
{
ruby006-1
Memcheck:Leak
fun:realloc
fun:compile_tree
...
}
{
ruby007
Memcheck:Leak
fun:calloc
fun:ruby_init_setproctitle
...
}
{
ruby008
Memcheck:Addr4
fun:rb_vm_invoke_proc
...
fun:main
}