blob: abddb515f6d020350ff670aa0c32b087a46a01bc [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
tom7299d842012-02-23 12:54:50 +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
tom7299d842012-02-23 12:54:50 +000025 obj:*/lib*/libc-*
bart15c67b42009-01-29 09:57:22 +000026}
bart9283db12011-07-26 19:29:23 +000027{
28 drd-libc-thread-cancellation-test
29 drd:ConflictingAccess
30 fun:write
31}
bartda594592012-06-08 06:59:18 +000032{
33 drd-libc-random
34 drd:ConflictingAccess
35 fun:random_r
36 fun:random
37}
bart9e4554c2009-08-02 07:46:43 +000038
39#
40# Suppression patterns for libstdc++, the implementation of the standard C++
41# library included with the gcc compiler.
42#
43# Note: several versions of the libstdc++ library (4.2.2, 4.3.2, 4.4.0, 4.5.0
44# and their predecessors) contain an implementation of the std::string class
45# that triggers conflicting memory accesses. See also
46# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40518
47#
48
49# {
50# drd-libstdc++-std::string::string()
51# drd:ConflictingAccess
52# fun:_ZNSsC1ERKSs
53# }
54
bart5478f842010-05-12 10:01:32 +000055{
56 drd-libstdc++-cxa_guard_release
57 drd:CondErr
58 fun:pthread_cond_broadcast@*
59 fun:__cxa_guard_release
60}
61
62
bart9e4554c2009-08-02 07:46:43 +000063#
64# Suppression patterns for libpthread.
65#
66
bart15c67b42009-01-29 09:57:22 +000067{
bart9e4554c2009-08-02 07:46:43 +000068 drd-libpthread-pthread_create
bartef1b9722008-07-04 15:34:23 +000069 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +000070 ...
71 fun:pthread_create*
bartebca7862008-03-09 19:21:14 +000072}
73{
bart0e08b102009-08-02 08:35:05 +000074 drd-libpthread-pthread_join
75 drd:ConflictingAccess
76 fun:pthread_join
77 fun:pthread_join
78}
79{
80 drd-libpthread-__deallocate_stack
bartef1b9722008-07-04 15:34:23 +000081 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +000082 ...
bartcea0e952008-03-01 10:50:45 +000083 fun:__deallocate_stack
bartcea0e952008-03-01 10:50:45 +000084}
85{
barta13f0222010-07-29 07:52:37 +000086 drd-libpthread-__free_stacks
87 drd:ConflictingAccess
88 fun:__free_stacks
89}
90{
bart0e08b102009-08-02 08:35:05 +000091 drd-libpthread-__free_tcb
92 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +000093 ...
bart0e08b102009-08-02 08:35:05 +000094 fun:__free_tcb
95}
96{
bart3a2bcf12010-06-08 15:00:18 +000097 drd-libpthread-__nptl_deallocate_tsd
98 drd:ConflictingAccess
99 fun:__nptl_deallocate_tsd
100}
101{
bart9e4554c2009-08-02 07:46:43 +0000102 drd-libpthread-pthread_detach
bartef1b9722008-07-04 15:34:23 +0000103 drd:ConflictingAccess
sewardjaf44c822007-11-25 14:01:38 +0000104 fun:pthread_detach
105 fun:pthread_detach
106}
107{
bart36c279e2010-09-02 14:51:02 +0000108 drd-libpthread-pthread_once
109 drd:ConflictingAccess
110 fun:pthread_once
111}
112{
bart343106c2010-08-29 16:19:45 +0000113 drd-libpthread-pthread_cancel_init
114 drd:ConflictingAccess
115 fun:pthread_cancel_init
116}
117{
Elliott Hughesed398002017-06-21 14:41:24 -0700118 drd-libpthread-pthread_cancel
119 drd:ConflictingAccess
120 fun:pthread_cancel
121 fun:pthread_cancel_intercept
122}
123{
bart9e4554c2009-08-02 07:46:43 +0000124 drd-libpthread-_Unwind_ForcedUnwind
bart81db8d42008-09-27 12:43:52 +0000125 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +0000126 ...
bartb98b2d52009-07-10 06:48:13 +0000127 fun:_Unwind_ForcedUnwind
bart81db8d42008-09-27 12:43:52 +0000128}
129{
bartcedece12010-08-17 15:19:55 +0000130 drd-libpthread-_Unwind_GetCFA
131 drd:ConflictingAccess
132 fun:_Unwind_GetCFA
133}
134{
bart9e4554c2009-08-02 07:46:43 +0000135 drd-libpthread-_Unwind_Resume
bartf0c61c22008-09-27 13:14:06 +0000136 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +0000137 ...
bart9e4554c2009-08-02 07:46:43 +0000138 fun:_Unwind_Resume
barta238ee52008-09-27 13:23:41 +0000139}
bart2f2d6792009-08-14 13:22:48 +0000140{
bartcedece12010-08-17 15:19:55 +0000141 drd-libpthread-?
142 drd:ConflictingAccess
tom7299d842012-02-23 12:54:50 +0000143 obj:*/lib/libgcc_s.so.1
bartcedece12010-08-17 15:19:55 +0000144}
145{
bart2f2d6792009-08-14 13:22:48 +0000146 drd-libpthread-nanosleep
147 drd:ConflictingAccess
148 fun:nanosleep
149}
bart9e4554c2009-08-02 07:46:43 +0000150
151#
152# Suppression patterns for libgomp.
153#
154
155# Unfortunately many statements in libgomp trigger conflicting accesses. It is
156# not clear to me which of these are safe and which ones not. See also
157# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362
barta238ee52008-09-27 13:23:41 +0000158{
bart9e4554c2009-08-02 07:46:43 +0000159 drd-libgomp
bartef1b9722008-07-04 15:34:23 +0000160 drd:ConflictingAccess
bart459caeb2008-03-11 19:46:45 +0000161 obj:/usr/lib*/libgomp.so*
bart459caeb2008-03-11 19:46:45 +0000162}
bart9e4554c2009-08-02 07:46:43 +0000163
164#
165# Suppression patterns for libX11.
166#
167
bartdd7a30d2008-03-22 17:36:23 +0000168{
bart9e4554c2009-08-02 07:46:43 +0000169 drd-libX11-XCreateFontSet
bartef1b9722008-07-04 15:34:23 +0000170 drd:CondErr
bart9483fd32008-07-01 14:13:25 +0000171 fun:pthread_cond_init*
172 fun:_XReply
173 fun:XListFontsWithInfo
174 obj:/usr/lib*/libX11.so*
175 fun:XCreateOC
176 fun:XCreateFontSet
177}
bart9e4554c2009-08-02 07:46:43 +0000178
179#
180# Suppression patterns for libxcb.
181#
182
bart9483fd32008-07-01 14:13:25 +0000183{
bart9e4554c2009-08-02 07:46:43 +0000184 drd-libxcb-xcb_wait_for_reply
bartef1b9722008-07-04 15:34:23 +0000185 drd:CondErr
bartdc9669f2014-06-14 16:39:46 +0000186 ...
bartdd7a30d2008-03-22 17:36:23 +0000187 fun:pthread_cond_destroy*
188 fun:xcb_wait_for_reply
189}
bart9e4554c2009-08-02 07:46:43 +0000190
191#
192# Suppression patterns for libglib.
193#
194
barte53fb262008-07-08 09:29:19 +0000195{
bart9e4554c2009-08-02 07:46:43 +0000196 drd-libglib-access-g_threads_got_initialized
barte53fb262008-07-08 09:29:19 +0000197 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +0000198 ...
barte53fb262008-07-08 09:29:19 +0000199 fun:g_slice_alloc
200 fun:g_ptr_array_sized_new
barte53fb262008-07-08 09:29:19 +0000201}
202{
bart9e4554c2009-08-02 07:46:43 +0000203 drd-libglib-access-g_threads_got_initialized
barte53fb262008-07-08 09:29:19 +0000204 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +0000205 ...
barte53fb262008-07-08 09:29:19 +0000206 fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext
207 fun:_ZN20QEventDispatcherGlibC1EP7QObject
208 obj:/usr/lib*/libQtCore.so.4.*
209 obj:/usr/lib*/libQtCore.so.4.*
210}
211{
bart9e4554c2009-08-02 07:46:43 +0000212 drd-libglib-access-g_mem_initialized
barte53fb262008-07-08 09:29:19 +0000213 drd:ConflictingAccess
214 fun:g_malloc0
215}
216{
bart9e4554c2009-08-02 07:46:43 +0000217 drd-libglib-g_private_get_posix_impl
barte53fb262008-07-08 09:29:19 +0000218 drd:ConflictingAccess
219 fun:g_private_get_posix_impl
220}
221{
bart9e4554c2009-08-02 07:46:43 +0000222 drd-libglib-g_private_set_posix_impl
barte53fb262008-07-08 09:29:19 +0000223 drd:ConflictingAccess
224 fun:g_private_set_posix_impl
225}
226{
bart9e4554c2009-08-02 07:46:43 +0000227 drd-libglib-g_get_language_names
barta99ab012008-12-27 09:19:01 +0000228 drd:ConflictingAccess
229 fun:g_slice_free_chain_with_offset
barta99ab012008-12-27 09:19:01 +0000230}
bart75516e52009-08-10 14:13:12 +0000231{
232 drd-libglib-g_main_context_new
233 drd:ConflictingAccess
234 fun:fcntl
235 obj:/usr/lib*/libglib-*.so*
236 fun:g_main_context_new
237}
bart9e4554c2009-08-02 07:46:43 +0000238
239#
240# Suppression patterns for libQtCore.
241#
242
barta99ab012008-12-27 09:19:01 +0000243{
bart9e4554c2009-08-02 07:46:43 +0000244 drd-libQtCore-deref-that-calls-QThreadData-destructor
bartddead322009-02-14 15:47:53 +0000245 drd:ConflictingAccess
246 fun:_ZN11QThreadDataD1Ev
bartddead322009-02-14 15:47:53 +0000247 obj:/usr/lib*/libQtCore.so.4.*
248}
249{
bart9e4554c2009-08-02 07:46:43 +0000250 drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList
barteb339152008-07-29 13:01:16 +0000251 drd:ConflictingAccess
252 obj:/usr/lib*/libQtCore.so.4.*
253 fun:_ZN11QMetaObject8activateEP7QObjectiiPPv
254 fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv
255}
256{
bart9e4554c2009-08-02 07:46:43 +0000257 drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
barte53fb262008-07-08 09:29:19 +0000258 drd:ConflictingAccess
259 fun:_ZN14QReadWriteLock12lockForWriteEv
260 fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
261 fun:_ZN7QObjectD2Ev
barte53fb262008-07-08 09:29:19 +0000262}
bartf0d65952008-08-02 10:03:37 +0000263{
bart9e4554c2009-08-02 07:46:43 +0000264 drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
bartf0d65952008-08-02 10:03:37 +0000265 drd:ConflictingAccess
266 fun:_ZN14QReadWriteLock12lockForWriteEv
267 fun:_ZN12QWriteLocker6relockEv
268 fun:_ZN12QWriteLockerC1EP14QReadWriteLock
269 fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
270 fun:_ZN7QObjectD2Ev
271 fun:_ZN24QAbstractEventDispatcherD2Ev
272 fun:_ZN20QEventDispatcherGlibD0Ev
273}
bart75516e52009-08-10 14:13:12 +0000274{
275 drd-libQtCore-QMutexPool::get(void const*)
276 drd:ConflictingAccess
277 fun:_ZN10QMutexPool3getEPKv
278}
barta13f0222010-07-29 07:52:37 +0000279{
280 drd-libQtCore-qt_gettime_is_monotonic()
281 drd:ConflictingAccess
282 fun:_Z23qt_gettime_is_monotonicv
283}
bart9e4554c2009-08-02 07:46:43 +0000284
285#
286# Suppression patterns for libboost.
287#
288
289# Suppress the races on boost::once_flag::epoch and on
bart271889e2010-06-05 11:57:57 +0000290# boost::detail::this_thread_epoch. See also the source file
291# boost/thread/pthread/once.hpp in the Boost source tree
292# (https://svn.boost.org/trac/boost/browser/trunk/boost/thread/pthread/once.hpp).
barta45b5722008-12-21 16:08:07 +0000293{
bart9e4554c2009-08-02 07:46:43 +0000294 drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)())
barta45b5722008-12-21 16:08:07 +0000295 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +0000296 ...
barta45b5722008-12-21 16:08:07 +0000297 fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_
barta45b5722008-12-21 16:08:07 +0000298}
bart35da3c42009-08-12 09:45:54 +0000299{
300 drd-libboost-boost::detail::get_once_per_thread_epoch()
301 drd:ConflictingAccess
302 fun:_ZN5boost6detail25get_once_per_thread_epochEv
303}
bart271889e2010-06-05 11:57:57 +0000304# Suppress the race reports on boost::detail::current_thread_tls_key. See also
305# https://svn.boost.org/trac/boost/ticket/3526 for more information about why
306# the access pattern of current_thread_tls_key is safe.
bart35da3c42009-08-12 09:45:54 +0000307{
308 drd-libboost-boost::detail::get_current_thread_data()
309 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +0000310 ...
bart35da3c42009-08-12 09:45:54 +0000311 fun:_ZN5boost6detail23get_current_thread_dataEv
312}
bart271889e2010-06-05 11:57:57 +0000313{
314 drd-libboost-boost::detail::set_current_thread_data(boost::detail::thread_data_base*)
315 drd:ConflictingAccess
bartdc9669f2014-06-14 16:39:46 +0000316 ...
bart271889e2010-06-05 11:57:57 +0000317 fun:_ZN5boost6detail23set_current_thread_dataEPNS0_16thread_data_baseE
318}