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 #
     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