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