blob: 2bf6b05083e85cf353c76b29f71c7b2946f3a6ee [file] [log] [blame]
bart9e4554c2009-08-02 07:46:43 +00001#
2# Suppression patterns for ld, the dynamic loader.
3#
4
5# Suppress all data races triggered by ld.
sewardjaf44c822007-11-25 14:01:38 +00006{
bart9e4554c2009-08-02 07:46:43 +00007 drd-ld
bartef1b9722008-07-04 15:34:23 +00008 drd:ConflictingAccess
sewardj8b09d4f2007-12-04 21:27:18 +00009 obj:/lib*/ld-*.so
sewardjaf44c822007-11-25 14:01:38 +000010}
bart9e4554c2009-08-02 07:46:43 +000011
12#
13# Suppression patterns for libc.
14#
15
16# Suppress all data races where the topmost frame is inside libc.so. Although
17# this could hide some real data races, unfortunately this is the only way to
18# not report any false positives on stdio functions. The glibc functions
19# manipulating FILE objects use locking primitives that cannot be intercepted
20# easily. See also the definitions of _IO_lock_lock() etc. in the file
21# nptl/sysdeps/pthread/bits/stdio-lock.h in the glibc source tree.
sewardjaf44c822007-11-25 14:01:38 +000022{
bart9e4554c2009-08-02 07:46:43 +000023 drd-libc-stdio
bart15c67b42009-01-29 09:57:22 +000024 drd:ConflictingAccess
25 obj:/lib*/libc-*
26}
bart9e4554c2009-08-02 07:46:43 +000027
28#
29# Suppression patterns for libstdc++, the implementation of the standard C++
30# library included with the gcc compiler.
31#
32# Note: several versions of the libstdc++ library (4.2.2, 4.3.2, 4.4.0, 4.5.0
33# and their predecessors) contain an implementation of the std::string class
34# that triggers conflicting memory accesses. See also
35# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40518
36#
37
38# {
39# drd-libstdc++-std::string::string()
40# drd:ConflictingAccess
41# fun:_ZNSsC1ERKSs
42# }
43
bart5478f842010-05-12 10:01:32 +000044{
45 drd-libstdc++-cxa_guard_release
46 drd:CondErr
47 fun:pthread_cond_broadcast@*
48 fun:__cxa_guard_release
49}
50
51
bart9e4554c2009-08-02 07:46:43 +000052#
53# Suppression patterns for libpthread.
54#
55
bart15c67b42009-01-29 09:57:22 +000056{
bart9e4554c2009-08-02 07:46:43 +000057 drd-libpthread-pthread_create
bartef1b9722008-07-04 15:34:23 +000058 drd:ConflictingAccess
bart00408ca2008-11-17 18:22:10 +000059 ...
bartebca7862008-03-09 19:21:14 +000060 fun:pthread_create*
61}
62{
bart0e08b102009-08-02 08:35:05 +000063 drd-libpthread-pthread_join
64 drd:ConflictingAccess
65 fun:pthread_join
66 fun:pthread_join
67}
68{
69 drd-libpthread-__deallocate_stack
bartef1b9722008-07-04 15:34:23 +000070 drd:ConflictingAccess
barta39b9a02008-11-17 17:57:15 +000071 ...
bartcea0e952008-03-01 10:50:45 +000072 fun:__deallocate_stack
bartcea0e952008-03-01 10:50:45 +000073}
74{
bart0e08b102009-08-02 08:35:05 +000075 drd-libpthread-__free_tcb
76 drd:ConflictingAccess
77 ...
78 fun:__free_tcb
79}
80{
bart3a2bcf12010-06-08 15:00:18 +000081 drd-libpthread-__nptl_deallocate_tsd
82 drd:ConflictingAccess
83 fun:__nptl_deallocate_tsd
84}
85{
bart9e4554c2009-08-02 07:46:43 +000086 drd-libpthread-pthread_detach
bartef1b9722008-07-04 15:34:23 +000087 drd:ConflictingAccess
sewardjaf44c822007-11-25 14:01:38 +000088 fun:pthread_detach
89 fun:pthread_detach
90}
91{
bart9e4554c2009-08-02 07:46:43 +000092 drd-libpthread-_Unwind_ForcedUnwind
bart81db8d42008-09-27 12:43:52 +000093 drd:ConflictingAccess
bartb98b2d52009-07-10 06:48:13 +000094 ...
95 fun:_Unwind_ForcedUnwind
bart81db8d42008-09-27 12:43:52 +000096}
97{
bart9e4554c2009-08-02 07:46:43 +000098 drd-libpthread-_Unwind_Resume
bartf0c61c22008-09-27 13:14:06 +000099 drd:ConflictingAccess
bartb98b2d52009-07-10 06:48:13 +0000100 ...
bart9e4554c2009-08-02 07:46:43 +0000101 fun:_Unwind_Resume
barta238ee52008-09-27 13:23:41 +0000102}
bart2f2d6792009-08-14 13:22:48 +0000103{
104 drd-libpthread-nanosleep
105 drd:ConflictingAccess
106 fun:nanosleep
107}
bart9e4554c2009-08-02 07:46:43 +0000108
109#
110# Suppression patterns for libgomp.
111#
112
113# Unfortunately many statements in libgomp trigger conflicting accesses. It is
114# not clear to me which of these are safe and which ones not. See also
115# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362
barta238ee52008-09-27 13:23:41 +0000116{
bart9e4554c2009-08-02 07:46:43 +0000117 drd-libgomp
bartef1b9722008-07-04 15:34:23 +0000118 drd:ConflictingAccess
bart459caeb2008-03-11 19:46:45 +0000119 obj:/usr/lib*/libgomp.so*
bart459caeb2008-03-11 19:46:45 +0000120}
bart9e4554c2009-08-02 07:46:43 +0000121
122#
123# Suppression patterns for libX11.
124#
125
bartdd7a30d2008-03-22 17:36:23 +0000126{
bart9e4554c2009-08-02 07:46:43 +0000127 drd-libX11-XCreateFontSet
bartef1b9722008-07-04 15:34:23 +0000128 drd:CondErr
bart9483fd32008-07-01 14:13:25 +0000129 fun:pthread_cond_init*
130 fun:_XReply
131 fun:XListFontsWithInfo
132 obj:/usr/lib*/libX11.so*
133 fun:XCreateOC
134 fun:XCreateFontSet
135}
bart9e4554c2009-08-02 07:46:43 +0000136
137#
138# Suppression patterns for libxcb.
139#
140
bart9483fd32008-07-01 14:13:25 +0000141{
bart9e4554c2009-08-02 07:46:43 +0000142 drd-libxcb-xcb_wait_for_reply
bartef1b9722008-07-04 15:34:23 +0000143 drd:CondErr
bartdd7a30d2008-03-22 17:36:23 +0000144 fun:pthread_cond_destroy*
145 fun:xcb_wait_for_reply
146}
bart9e4554c2009-08-02 07:46:43 +0000147
148#
149# Suppression patterns for libglib.
150#
151
barte53fb262008-07-08 09:29:19 +0000152{
bart9e4554c2009-08-02 07:46:43 +0000153 drd-libglib-access-g_threads_got_initialized
barte53fb262008-07-08 09:29:19 +0000154 drd:ConflictingAccess
barta99ab012008-12-27 09:19:01 +0000155 ...
barte53fb262008-07-08 09:29:19 +0000156 fun:g_slice_alloc
157 fun:g_ptr_array_sized_new
barte53fb262008-07-08 09:29:19 +0000158}
159{
bart9e4554c2009-08-02 07:46:43 +0000160 drd-libglib-access-g_threads_got_initialized
barte53fb262008-07-08 09:29:19 +0000161 drd:ConflictingAccess
162 fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext
163 fun:_ZN20QEventDispatcherGlibC1EP7QObject
164 obj:/usr/lib*/libQtCore.so.4.*
165 obj:/usr/lib*/libQtCore.so.4.*
166}
167{
bart9e4554c2009-08-02 07:46:43 +0000168 drd-libglib-access-g_mem_initialized
barte53fb262008-07-08 09:29:19 +0000169 drd:ConflictingAccess
170 fun:g_malloc0
171}
172{
bart9e4554c2009-08-02 07:46:43 +0000173 drd-libglib-g_private_get_posix_impl
barte53fb262008-07-08 09:29:19 +0000174 drd:ConflictingAccess
175 fun:g_private_get_posix_impl
176}
177{
bart9e4554c2009-08-02 07:46:43 +0000178 drd-libglib-g_private_set_posix_impl
barte53fb262008-07-08 09:29:19 +0000179 drd:ConflictingAccess
180 fun:g_private_set_posix_impl
181}
182{
bart9e4554c2009-08-02 07:46:43 +0000183 drd-libglib-g_get_language_names
barta99ab012008-12-27 09:19:01 +0000184 drd:ConflictingAccess
185 fun:g_slice_free_chain_with_offset
barta99ab012008-12-27 09:19:01 +0000186}
bart75516e52009-08-10 14:13:12 +0000187{
188 drd-libglib-g_main_context_new
189 drd:ConflictingAccess
190 fun:fcntl
191 obj:/usr/lib*/libglib-*.so*
192 fun:g_main_context_new
193}
bart9e4554c2009-08-02 07:46:43 +0000194
195#
196# Suppression patterns for libQtCore.
197#
198
barta99ab012008-12-27 09:19:01 +0000199{
bart9e4554c2009-08-02 07:46:43 +0000200 drd-libQtCore-deref-that-calls-QThreadData-destructor
bartddead322009-02-14 15:47:53 +0000201 drd:ConflictingAccess
202 fun:_ZN11QThreadDataD1Ev
203 fun:_ZN11QThreadData5derefEv
204 obj:/usr/lib*/libQtCore.so.4.*
205}
206{
bart9e4554c2009-08-02 07:46:43 +0000207 drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList
barteb339152008-07-29 13:01:16 +0000208 drd:ConflictingAccess
209 obj:/usr/lib*/libQtCore.so.4.*
210 fun:_ZN11QMetaObject8activateEP7QObjectiiPPv
211 fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv
212}
213{
bart9e4554c2009-08-02 07:46:43 +0000214 drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
barte53fb262008-07-08 09:29:19 +0000215 drd:ConflictingAccess
216 fun:_ZN14QReadWriteLock12lockForWriteEv
217 fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
218 fun:_ZN7QObjectD2Ev
barte53fb262008-07-08 09:29:19 +0000219}
bartf0d65952008-08-02 10:03:37 +0000220{
bart9e4554c2009-08-02 07:46:43 +0000221 drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
bartf0d65952008-08-02 10:03:37 +0000222 drd:ConflictingAccess
223 fun:_ZN14QReadWriteLock12lockForWriteEv
224 fun:_ZN12QWriteLocker6relockEv
225 fun:_ZN12QWriteLockerC1EP14QReadWriteLock
226 fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
227 fun:_ZN7QObjectD2Ev
228 fun:_ZN24QAbstractEventDispatcherD2Ev
229 fun:_ZN20QEventDispatcherGlibD0Ev
230}
bart75516e52009-08-10 14:13:12 +0000231{
232 drd-libQtCore-QMutexPool::get(void const*)
233 drd:ConflictingAccess
234 fun:_ZN10QMutexPool3getEPKv
235}
bart9e4554c2009-08-02 07:46:43 +0000236
237#
238# Suppression patterns for libboost.
239#
240
241# Suppress the races on boost::once_flag::epoch and on
bart271889e2010-06-05 11:57:57 +0000242# boost::detail::this_thread_epoch. See also the source file
243# boost/thread/pthread/once.hpp in the Boost source tree
244# (https://svn.boost.org/trac/boost/browser/trunk/boost/thread/pthread/once.hpp).
barta45b5722008-12-21 16:08:07 +0000245{
bart9e4554c2009-08-02 07:46:43 +0000246 drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)())
barta45b5722008-12-21 16:08:07 +0000247 drd:ConflictingAccess
248 ...
249 fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_
barta45b5722008-12-21 16:08:07 +0000250}
bart35da3c42009-08-12 09:45:54 +0000251{
252 drd-libboost-boost::detail::get_once_per_thread_epoch()
253 drd:ConflictingAccess
254 fun:_ZN5boost6detail25get_once_per_thread_epochEv
255}
bart271889e2010-06-05 11:57:57 +0000256# Suppress the race reports on boost::detail::current_thread_tls_key. See also
257# https://svn.boost.org/trac/boost/ticket/3526 for more information about why
258# the access pattern of current_thread_tls_key is safe.
bart35da3c42009-08-12 09:45:54 +0000259{
260 drd-libboost-boost::detail::get_current_thread_data()
261 drd:ConflictingAccess
262 ...
263 fun:_ZN5boost6detail23get_current_thread_dataEv
264}
bart271889e2010-06-05 11:57:57 +0000265{
266 drd-libboost-boost::detail::set_current_thread_data(boost::detail::thread_data_base*)
267 drd:ConflictingAccess
268 ...
269 fun:_ZN5boost6detail23set_current_thread_dataEPNS0_16thread_data_baseE
270}