glibc-2.X-drd.supp revision 9bea4c13fca0e3bb4b719dcb3ed63d47d479294e
1#
2# Suppression patterns for ld, the dynamic loader.
3#
4
5# Suppress all data races triggered by ld.
6{
7   drd-ld
8   drd:ConflictingAccess
9   obj:/lib*/ld-*.so
10}
11
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.
22{
23   drd-libc-stdio
24   drd:ConflictingAccess
25   obj:/lib*/libc-*
26}
27
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
44{
45   drd-libstdc++-cxa_guard_release
46   drd:CondErr
47   fun:pthread_cond_broadcast@*
48   fun:__cxa_guard_release
49}
50
51
52#
53# Suppression patterns for libpthread.
54#
55
56{
57   drd-libpthread-pthread_create
58   drd:ConflictingAccess
59   ...
60   fun:pthread_create*
61}
62{
63   drd-libpthread-pthread_join
64   drd:ConflictingAccess
65   fun:pthread_join
66   fun:pthread_join
67}
68{
69   drd-libpthread-__deallocate_stack
70   drd:ConflictingAccess
71   ...
72   fun:__deallocate_stack
73}
74{
75   drd-libpthread-__free_stacks
76   drd:ConflictingAccess
77   fun:__free_stacks
78}
79{
80   drd-libpthread-__free_tcb
81   drd:ConflictingAccess
82   ...
83   fun:__free_tcb
84}
85{
86   drd-libpthread-__nptl_deallocate_tsd
87   drd:ConflictingAccess
88   fun:__nptl_deallocate_tsd
89}
90{
91   drd-libpthread-pthread_detach
92   drd:ConflictingAccess
93   fun:pthread_detach
94   fun:pthread_detach
95}
96{
97   drd-libpthread-pthread_once
98   drd:ConflictingAccess
99   fun:pthread_once
100}
101{
102   drd-libpthread-pthread_cancel_init
103   drd:ConflictingAccess
104   fun:pthread_cancel_init
105}
106{
107   drd-libpthread-_Unwind_ForcedUnwind
108   drd:ConflictingAccess
109   ...
110   fun:_Unwind_ForcedUnwind
111}
112{
113   drd-libpthread-_Unwind_GetCFA
114   drd:ConflictingAccess
115   fun:_Unwind_GetCFA
116}
117{
118   drd-libpthread-_Unwind_Resume
119   drd:ConflictingAccess
120   ...
121   fun:_Unwind_Resume
122}
123{
124   drd-libpthread-?
125   drd:ConflictingAccess
126   obj:/lib/libgcc_s.so.1
127}
128{
129   drd-libpthread-nanosleep
130   drd:ConflictingAccess
131   fun:nanosleep
132}
133
134#
135# Suppression patterns for libgomp.
136#
137
138# Unfortunately many statements in libgomp trigger conflicting accesses. It is
139# not clear to me which of these are safe and which ones not. See also
140# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362
141{
142   drd-libgomp
143   drd:ConflictingAccess
144   obj:/usr/lib*/libgomp.so*
145}
146
147#
148# Suppression patterns for libX11.
149#
150
151{
152   drd-libX11-XCreateFontSet
153   drd:CondErr
154   fun:pthread_cond_init*
155   fun:_XReply
156   fun:XListFontsWithInfo
157   obj:/usr/lib*/libX11.so*
158   fun:XCreateOC
159   fun:XCreateFontSet
160}
161
162#
163# Suppression patterns for libxcb.
164#
165
166{
167   drd-libxcb-xcb_wait_for_reply
168   drd:CondErr
169   fun:pthread_cond_destroy*
170   fun:xcb_wait_for_reply
171}
172
173#
174# Suppression patterns for libglib.
175#
176
177{
178   drd-libglib-access-g_threads_got_initialized
179   drd:ConflictingAccess
180   ...
181   fun:g_slice_alloc
182   fun:g_ptr_array_sized_new
183}
184{
185   drd-libglib-access-g_threads_got_initialized
186   drd:ConflictingAccess
187   ...
188   fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext
189   fun:_ZN20QEventDispatcherGlibC1EP7QObject
190   obj:/usr/lib*/libQtCore.so.4.*
191   obj:/usr/lib*/libQtCore.so.4.*
192}
193{
194   drd-libglib-access-g_mem_initialized
195   drd:ConflictingAccess
196   fun:g_malloc0
197}
198{
199   drd-libglib-g_private_get_posix_impl
200   drd:ConflictingAccess
201   fun:g_private_get_posix_impl
202}
203{
204   drd-libglib-g_private_set_posix_impl
205   drd:ConflictingAccess
206   fun:g_private_set_posix_impl
207}
208{
209   drd-libglib-g_get_language_names
210   drd:ConflictingAccess
211   fun:g_slice_free_chain_with_offset
212}
213{
214   drd-libglib-g_main_context_new
215   drd:ConflictingAccess
216   fun:fcntl
217   obj:/usr/lib*/libglib-*.so*
218   fun:g_main_context_new
219}
220
221#
222# Suppression patterns for libQtCore.
223#
224
225{
226   drd-libQtCore-deref-that-calls-QThreadData-destructor
227   drd:ConflictingAccess
228   fun:_ZN11QThreadDataD1Ev
229   obj:/usr/lib*/libQtCore.so.4.*
230}
231{
232   drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList
233   drd:ConflictingAccess
234   obj:/usr/lib*/libQtCore.so.4.*
235   fun:_ZN11QMetaObject8activateEP7QObjectiiPPv
236   fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv
237}
238{
239   drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
240   drd:ConflictingAccess
241   fun:_ZN14QReadWriteLock12lockForWriteEv
242   fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
243   fun:_ZN7QObjectD2Ev
244}
245{
246   drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
247   drd:ConflictingAccess
248   fun:_ZN14QReadWriteLock12lockForWriteEv
249   fun:_ZN12QWriteLocker6relockEv
250   fun:_ZN12QWriteLockerC1EP14QReadWriteLock
251   fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
252   fun:_ZN7QObjectD2Ev
253   fun:_ZN24QAbstractEventDispatcherD2Ev
254   fun:_ZN20QEventDispatcherGlibD0Ev
255}
256{
257   drd-libQtCore-QMutexPool::get(void const*)
258   drd:ConflictingAccess
259   fun:_ZN10QMutexPool3getEPKv
260}
261{
262   drd-libQtCore-qt_gettime_is_monotonic()
263   drd:ConflictingAccess
264   fun:_Z23qt_gettime_is_monotonicv
265}
266
267#
268# Suppression patterns for libboost.
269#
270
271# Suppress the races on boost::once_flag::epoch and on
272# boost::detail::this_thread_epoch. See also the source file
273# boost/thread/pthread/once.hpp in the Boost source tree
274# (https://svn.boost.org/trac/boost/browser/trunk/boost/thread/pthread/once.hpp).
275{
276   drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)())
277   drd:ConflictingAccess
278   ...
279   fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_
280}
281{
282   drd-libboost-boost::detail::get_once_per_thread_epoch()
283   drd:ConflictingAccess
284   fun:_ZN5boost6detail25get_once_per_thread_epochEv
285}
286# Suppress the race reports on boost::detail::current_thread_tls_key. See also
287# https://svn.boost.org/trac/boost/ticket/3526 for more information about why
288# the access pattern of current_thread_tls_key is safe.
289{
290   drd-libboost-boost::detail::get_current_thread_data()
291   drd:ConflictingAccess
292   ...
293   fun:_ZN5boost6detail23get_current_thread_dataEv
294}
295{
296   drd-libboost-boost::detail::set_current_thread_data(boost::detail::thread_data_base*)
297   drd:ConflictingAccess
298   ...
299   fun:_ZN5boost6detail23set_current_thread_dataEPNS0_16thread_data_baseE
300}
301