blob: b36a1016ad4a09fa7d217a7761992adae0795c73 [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}
bart9283db12011-07-26 19:29:23 +000027{
28 drd-libc-thread-cancellation-test
29 drd:ConflictingAccess
30 fun:write
31}
bart9e4554c2009-08-02 07:46:43 +000032
33#
34# Suppression patterns for libstdc++, the implementation of the standard C++
35# library included with the gcc compiler.
36#
37# Note: several versions of the libstdc++ library (4.2.2, 4.3.2, 4.4.0, 4.5.0
38# and their predecessors) contain an implementation of the std::string class
39# that triggers conflicting memory accesses. See also
40# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40518
41#
42
43# {
44# drd-libstdc++-std::string::string()
45# drd:ConflictingAccess
46# fun:_ZNSsC1ERKSs
47# }
48
bart5478f842010-05-12 10:01:32 +000049{
50 drd-libstdc++-cxa_guard_release
51 drd:CondErr
52 fun:pthread_cond_broadcast@*
53 fun:__cxa_guard_release
54}
55
56
bart9e4554c2009-08-02 07:46:43 +000057#
58# Suppression patterns for libpthread.
59#
60
bart15c67b42009-01-29 09:57:22 +000061{
bart9e4554c2009-08-02 07:46:43 +000062 drd-libpthread-pthread_create
bartef1b9722008-07-04 15:34:23 +000063 drd:ConflictingAccess
bart00408ca2008-11-17 18:22:10 +000064 ...
bartebca7862008-03-09 19:21:14 +000065 fun:pthread_create*
66}
67{
bart0e08b102009-08-02 08:35:05 +000068 drd-libpthread-pthread_join
69 drd:ConflictingAccess
70 fun:pthread_join
71 fun:pthread_join
72}
73{
74 drd-libpthread-__deallocate_stack
bartef1b9722008-07-04 15:34:23 +000075 drd:ConflictingAccess
barta39b9a02008-11-17 17:57:15 +000076 ...
bartcea0e952008-03-01 10:50:45 +000077 fun:__deallocate_stack
bartcea0e952008-03-01 10:50:45 +000078}
79{
barta13f0222010-07-29 07:52:37 +000080 drd-libpthread-__free_stacks
81 drd:ConflictingAccess
82 fun:__free_stacks
83}
84{
bart0e08b102009-08-02 08:35:05 +000085 drd-libpthread-__free_tcb
86 drd:ConflictingAccess
87 ...
88 fun:__free_tcb
89}
90{
bart3a2bcf12010-06-08 15:00:18 +000091 drd-libpthread-__nptl_deallocate_tsd
92 drd:ConflictingAccess
93 fun:__nptl_deallocate_tsd
94}
95{
bart9e4554c2009-08-02 07:46:43 +000096 drd-libpthread-pthread_detach
bartef1b9722008-07-04 15:34:23 +000097 drd:ConflictingAccess
sewardjaf44c822007-11-25 14:01:38 +000098 fun:pthread_detach
99 fun:pthread_detach
100}
101{
bart36c279e2010-09-02 14:51:02 +0000102 drd-libpthread-pthread_once
103 drd:ConflictingAccess
104 fun:pthread_once
105}
106{
bart343106c2010-08-29 16:19:45 +0000107 drd-libpthread-pthread_cancel_init
108 drd:ConflictingAccess
109 fun:pthread_cancel_init
110}
111{
bart9e4554c2009-08-02 07:46:43 +0000112 drd-libpthread-_Unwind_ForcedUnwind
bart81db8d42008-09-27 12:43:52 +0000113 drd:ConflictingAccess
bartb98b2d52009-07-10 06:48:13 +0000114 ...
115 fun:_Unwind_ForcedUnwind
bart81db8d42008-09-27 12:43:52 +0000116}
117{
bartcedece12010-08-17 15:19:55 +0000118 drd-libpthread-_Unwind_GetCFA
119 drd:ConflictingAccess
120 fun:_Unwind_GetCFA
121}
122{
bart9e4554c2009-08-02 07:46:43 +0000123 drd-libpthread-_Unwind_Resume
bartf0c61c22008-09-27 13:14:06 +0000124 drd:ConflictingAccess
bartb98b2d52009-07-10 06:48:13 +0000125 ...
bart9e4554c2009-08-02 07:46:43 +0000126 fun:_Unwind_Resume
barta238ee52008-09-27 13:23:41 +0000127}
bart2f2d6792009-08-14 13:22:48 +0000128{
bartcedece12010-08-17 15:19:55 +0000129 drd-libpthread-?
130 drd:ConflictingAccess
131 obj:/lib/libgcc_s.so.1
bartcedece12010-08-17 15:19:55 +0000132}
133{
bart2f2d6792009-08-14 13:22:48 +0000134 drd-libpthread-nanosleep
135 drd:ConflictingAccess
136 fun:nanosleep
137}
bart9e4554c2009-08-02 07:46:43 +0000138
139#
140# Suppression patterns for libgomp.
141#
142
143# Unfortunately many statements in libgomp trigger conflicting accesses. It is
144# not clear to me which of these are safe and which ones not. See also
145# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362
barta238ee52008-09-27 13:23:41 +0000146{
bart9e4554c2009-08-02 07:46:43 +0000147 drd-libgomp
bartef1b9722008-07-04 15:34:23 +0000148 drd:ConflictingAccess
bart459caeb2008-03-11 19:46:45 +0000149 obj:/usr/lib*/libgomp.so*
bart459caeb2008-03-11 19:46:45 +0000150}
bart9e4554c2009-08-02 07:46:43 +0000151
152#
153# Suppression patterns for libX11.
154#
155
bartdd7a30d2008-03-22 17:36:23 +0000156{
bart9e4554c2009-08-02 07:46:43 +0000157 drd-libX11-XCreateFontSet
bartef1b9722008-07-04 15:34:23 +0000158 drd:CondErr
bart9483fd32008-07-01 14:13:25 +0000159 fun:pthread_cond_init*
160 fun:_XReply
161 fun:XListFontsWithInfo
162 obj:/usr/lib*/libX11.so*
163 fun:XCreateOC
164 fun:XCreateFontSet
165}
bart9e4554c2009-08-02 07:46:43 +0000166
167#
168# Suppression patterns for libxcb.
169#
170
bart9483fd32008-07-01 14:13:25 +0000171{
bart9e4554c2009-08-02 07:46:43 +0000172 drd-libxcb-xcb_wait_for_reply
bartef1b9722008-07-04 15:34:23 +0000173 drd:CondErr
bartdd7a30d2008-03-22 17:36:23 +0000174 fun:pthread_cond_destroy*
175 fun:xcb_wait_for_reply
176}
bart9e4554c2009-08-02 07:46:43 +0000177
178#
179# Suppression patterns for libglib.
180#
181
barte53fb262008-07-08 09:29:19 +0000182{
bart9e4554c2009-08-02 07:46:43 +0000183 drd-libglib-access-g_threads_got_initialized
barte53fb262008-07-08 09:29:19 +0000184 drd:ConflictingAccess
barta99ab012008-12-27 09:19:01 +0000185 ...
barte53fb262008-07-08 09:29:19 +0000186 fun:g_slice_alloc
187 fun:g_ptr_array_sized_new
barte53fb262008-07-08 09:29:19 +0000188}
189{
bart9e4554c2009-08-02 07:46:43 +0000190 drd-libglib-access-g_threads_got_initialized
barte53fb262008-07-08 09:29:19 +0000191 drd:ConflictingAccess
bartcedece12010-08-17 15:19:55 +0000192 ...
barte53fb262008-07-08 09:29:19 +0000193 fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext
194 fun:_ZN20QEventDispatcherGlibC1EP7QObject
195 obj:/usr/lib*/libQtCore.so.4.*
196 obj:/usr/lib*/libQtCore.so.4.*
197}
198{
bart9e4554c2009-08-02 07:46:43 +0000199 drd-libglib-access-g_mem_initialized
barte53fb262008-07-08 09:29:19 +0000200 drd:ConflictingAccess
201 fun:g_malloc0
202}
203{
bart9e4554c2009-08-02 07:46:43 +0000204 drd-libglib-g_private_get_posix_impl
barte53fb262008-07-08 09:29:19 +0000205 drd:ConflictingAccess
206 fun:g_private_get_posix_impl
207}
208{
bart9e4554c2009-08-02 07:46:43 +0000209 drd-libglib-g_private_set_posix_impl
barte53fb262008-07-08 09:29:19 +0000210 drd:ConflictingAccess
211 fun:g_private_set_posix_impl
212}
213{
bart9e4554c2009-08-02 07:46:43 +0000214 drd-libglib-g_get_language_names
barta99ab012008-12-27 09:19:01 +0000215 drd:ConflictingAccess
216 fun:g_slice_free_chain_with_offset
barta99ab012008-12-27 09:19:01 +0000217}
bart75516e52009-08-10 14:13:12 +0000218{
219 drd-libglib-g_main_context_new
220 drd:ConflictingAccess
221 fun:fcntl
222 obj:/usr/lib*/libglib-*.so*
223 fun:g_main_context_new
224}
bart9e4554c2009-08-02 07:46:43 +0000225
226#
227# Suppression patterns for libQtCore.
228#
229
barta99ab012008-12-27 09:19:01 +0000230{
bart9e4554c2009-08-02 07:46:43 +0000231 drd-libQtCore-deref-that-calls-QThreadData-destructor
bartddead322009-02-14 15:47:53 +0000232 drd:ConflictingAccess
233 fun:_ZN11QThreadDataD1Ev
bartddead322009-02-14 15:47:53 +0000234 obj:/usr/lib*/libQtCore.so.4.*
235}
236{
bart9e4554c2009-08-02 07:46:43 +0000237 drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList
barteb339152008-07-29 13:01:16 +0000238 drd:ConflictingAccess
239 obj:/usr/lib*/libQtCore.so.4.*
240 fun:_ZN11QMetaObject8activateEP7QObjectiiPPv
241 fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv
242}
243{
bart9e4554c2009-08-02 07:46:43 +0000244 drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
barte53fb262008-07-08 09:29:19 +0000245 drd:ConflictingAccess
246 fun:_ZN14QReadWriteLock12lockForWriteEv
247 fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
248 fun:_ZN7QObjectD2Ev
barte53fb262008-07-08 09:29:19 +0000249}
bartf0d65952008-08-02 10:03:37 +0000250{
bart9e4554c2009-08-02 07:46:43 +0000251 drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
bartf0d65952008-08-02 10:03:37 +0000252 drd:ConflictingAccess
253 fun:_ZN14QReadWriteLock12lockForWriteEv
254 fun:_ZN12QWriteLocker6relockEv
255 fun:_ZN12QWriteLockerC1EP14QReadWriteLock
256 fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
257 fun:_ZN7QObjectD2Ev
258 fun:_ZN24QAbstractEventDispatcherD2Ev
259 fun:_ZN20QEventDispatcherGlibD0Ev
260}
bart75516e52009-08-10 14:13:12 +0000261{
262 drd-libQtCore-QMutexPool::get(void const*)
263 drd:ConflictingAccess
264 fun:_ZN10QMutexPool3getEPKv
265}
barta13f0222010-07-29 07:52:37 +0000266{
267 drd-libQtCore-qt_gettime_is_monotonic()
268 drd:ConflictingAccess
269 fun:_Z23qt_gettime_is_monotonicv
270}
bart9e4554c2009-08-02 07:46:43 +0000271
272#
273# Suppression patterns for libboost.
274#
275
276# Suppress the races on boost::once_flag::epoch and on
bart271889e2010-06-05 11:57:57 +0000277# boost::detail::this_thread_epoch. See also the source file
278# boost/thread/pthread/once.hpp in the Boost source tree
279# (https://svn.boost.org/trac/boost/browser/trunk/boost/thread/pthread/once.hpp).
barta45b5722008-12-21 16:08:07 +0000280{
bart9e4554c2009-08-02 07:46:43 +0000281 drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)())
barta45b5722008-12-21 16:08:07 +0000282 drd:ConflictingAccess
283 ...
284 fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_
barta45b5722008-12-21 16:08:07 +0000285}
bart35da3c42009-08-12 09:45:54 +0000286{
287 drd-libboost-boost::detail::get_once_per_thread_epoch()
288 drd:ConflictingAccess
289 fun:_ZN5boost6detail25get_once_per_thread_epochEv
290}
bart271889e2010-06-05 11:57:57 +0000291# Suppress the race reports on boost::detail::current_thread_tls_key. See also
292# https://svn.boost.org/trac/boost/ticket/3526 for more information about why
293# the access pattern of current_thread_tls_key is safe.
bart35da3c42009-08-12 09:45:54 +0000294{
295 drd-libboost-boost::detail::get_current_thread_data()
296 drd:ConflictingAccess
297 ...
298 fun:_ZN5boost6detail23get_current_thread_dataEv
299}
bart271889e2010-06-05 11:57:57 +0000300{
301 drd-libboost-boost::detail::set_current_thread_data(boost::detail::thread_data_base*)
302 drd:ConflictingAccess
303 ...
304 fun:_ZN5boost6detail23set_current_thread_dataEPNS0_16thread_data_baseE
305}