aboutsummaryrefslogtreecommitdiff
path: root/glibc-2.X-drd.supp
blob: abddb515f6d020350ff670aa0c32b087a46a01bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
#
# 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
}
{
   drd-libc-random
   drd:ConflictingAccess
   fun:random_r
   fun:random
}

#
# 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-pthread_cancel
   drd:ConflictingAccess
   fun:pthread_cancel
   fun:pthread_cancel_intercept
}
{
   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
}