Home | History | Annotate | Download | only in main
      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 #
     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 
     49 {
     50    drd-libstdc++-cxa_guard_release
     51    drd:CondErr
     52    fun:pthread_cond_broadcast@*
     53    fun:__cxa_guard_release
     54 }
     55 
     56 
     57 #
     58 # Suppression patterns for libpthread.
     59 #
     60 
     61 {
     62    drd-libpthread-pthread_create
     63    drd:ConflictingAccess
     64    ...
     65    fun:pthread_create*
     66 }
     67 {
     68    drd-libpthread-pthread_join
     69    drd:ConflictingAccess
     70    fun:pthread_join
     71    fun:pthread_join
     72 }
     73 {
     74    drd-libpthread-__deallocate_stack
     75    drd:ConflictingAccess
     76    ...
     77    fun:__deallocate_stack
     78 }
     79 {
     80    drd-libpthread-__free_stacks
     81    drd:ConflictingAccess
     82    fun:__free_stacks
     83 }
     84 {
     85    drd-libpthread-__free_tcb
     86    drd:ConflictingAccess
     87    ...
     88    fun:__free_tcb
     89 }
     90 {
     91    drd-libpthread-__nptl_deallocate_tsd
     92    drd:ConflictingAccess
     93    fun:__nptl_deallocate_tsd
     94 }
     95 {
     96    drd-libpthread-pthread_detach
     97    drd:ConflictingAccess
     98    fun:pthread_detach
     99    fun:pthread_detach
    100 }
    101 {
    102    drd-libpthread-pthread_once
    103    drd:ConflictingAccess
    104    fun:pthread_once
    105 }
    106 {
    107    drd-libpthread-pthread_cancel_init
    108    drd:ConflictingAccess
    109    fun:pthread_cancel_init
    110 }
    111 {
    112    drd-libpthread-_Unwind_ForcedUnwind
    113    drd:ConflictingAccess
    114    ...
    115    fun:_Unwind_ForcedUnwind
    116 }
    117 {
    118    drd-libpthread-_Unwind_GetCFA
    119    drd:ConflictingAccess
    120    fun:_Unwind_GetCFA
    121 }
    122 {
    123    drd-libpthread-_Unwind_Resume
    124    drd:ConflictingAccess
    125    ...
    126    fun:_Unwind_Resume
    127 }
    128 {
    129    drd-libpthread-?
    130    drd:ConflictingAccess
    131    obj:/lib/libgcc_s.so.1
    132 }
    133 {
    134    drd-libpthread-nanosleep
    135    drd:ConflictingAccess
    136    fun:nanosleep
    137 }
    138 
    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
    146 {
    147    drd-libgomp
    148    drd:ConflictingAccess
    149    obj:/usr/lib*/libgomp.so*
    150 }
    151 
    152 #
    153 # Suppression patterns for libX11.
    154 #
    155 
    156 {
    157    drd-libX11-XCreateFontSet
    158    drd:CondErr
    159    fun:pthread_cond_init*
    160    fun:_XReply
    161    fun:XListFontsWithInfo
    162    obj:/usr/lib*/libX11.so*
    163    fun:XCreateOC
    164    fun:XCreateFontSet
    165 }
    166 
    167 #
    168 # Suppression patterns for libxcb.
    169 #
    170 
    171 {
    172    drd-libxcb-xcb_wait_for_reply
    173    drd:CondErr
    174    fun:pthread_cond_destroy*
    175    fun:xcb_wait_for_reply
    176 }
    177 
    178 #
    179 # Suppression patterns for libglib.
    180 #
    181 
    182 {
    183    drd-libglib-access-g_threads_got_initialized
    184    drd:ConflictingAccess
    185    ...
    186    fun:g_slice_alloc
    187    fun:g_ptr_array_sized_new
    188 }
    189 {
    190    drd-libglib-access-g_threads_got_initialized
    191    drd:ConflictingAccess
    192    ...
    193    fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext
    194    fun:_ZN20QEventDispatcherGlibC1EP7QObject
    195    obj:/usr/lib*/libQtCore.so.4.*
    196    obj:/usr/lib*/libQtCore.so.4.*
    197 }
    198 {
    199    drd-libglib-access-g_mem_initialized
    200    drd:ConflictingAccess
    201    fun:g_malloc0
    202 }
    203 {
    204    drd-libglib-g_private_get_posix_impl
    205    drd:ConflictingAccess
    206    fun:g_private_get_posix_impl
    207 }
    208 {
    209    drd-libglib-g_private_set_posix_impl
    210    drd:ConflictingAccess
    211    fun:g_private_set_posix_impl
    212 }
    213 {
    214    drd-libglib-g_get_language_names
    215    drd:ConflictingAccess
    216    fun:g_slice_free_chain_with_offset
    217 }
    218 {
    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 }
    225 
    226 #
    227 # Suppression patterns for libQtCore.
    228 #
    229 
    230 {
    231    drd-libQtCore-deref-that-calls-QThreadData-destructor
    232    drd:ConflictingAccess
    233    fun:_ZN11QThreadDataD1Ev
    234    obj:/usr/lib*/libQtCore.so.4.*
    235 }
    236 {
    237    drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList
    238    drd:ConflictingAccess
    239    obj:/usr/lib*/libQtCore.so.4.*
    240    fun:_ZN11QMetaObject8activateEP7QObjectiiPPv
    241    fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv
    242 }
    243 {
    244    drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
    245    drd:ConflictingAccess
    246    fun:_ZN14QReadWriteLock12lockForWriteEv
    247    fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
    248    fun:_ZN7QObjectD2Ev
    249 }
    250 {
    251    drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
    252    drd:ConflictingAccess
    253    fun:_ZN14QReadWriteLock12lockForWriteEv
    254    fun:_ZN12QWriteLocker6relockEv
    255    fun:_ZN12QWriteLockerC1EP14QReadWriteLock
    256    fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
    257    fun:_ZN7QObjectD2Ev
    258    fun:_ZN24QAbstractEventDispatcherD2Ev
    259    fun:_ZN20QEventDispatcherGlibD0Ev
    260 }
    261 {
    262    drd-libQtCore-QMutexPool::get(void const*)
    263    drd:ConflictingAccess
    264    fun:_ZN10QMutexPool3getEPKv
    265 }
    266 {
    267    drd-libQtCore-qt_gettime_is_monotonic()
    268    drd:ConflictingAccess
    269    fun:_Z23qt_gettime_is_monotonicv
    270 }
    271 
    272 #
    273 # Suppression patterns for libboost.
    274 #
    275 
    276 # Suppress the races on boost::once_flag::epoch and on
    277 # 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).
    280 {
    281    drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)())
    282    drd:ConflictingAccess
    283    ...
    284    fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_
    285 }
    286 {
    287    drd-libboost-boost::detail::get_once_per_thread_epoch()
    288    drd:ConflictingAccess
    289    fun:_ZN5boost6detail25get_once_per_thread_epochEv
    290 }
    291 # 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.
    294 {
    295    drd-libboost-boost::detail::get_current_thread_data()
    296    drd:ConflictingAccess
    297    ...
    298    fun:_ZN5boost6detail23get_current_thread_dataEv
    299 }
    300 {
    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 }
    306