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