Home | History | Annotate | Download | only in valgrind
      1 
      2 # FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of
      3 # other stuff.  They should be removed.
      4 
      5 ##----------------------------------------------------------------------##
      6 # Suppressions for the Helgrind tool when using 
      7 # a glibc-2.{3,4,5,6,7,8,9} system
      8 
      9 ####################################################
     10 # glibc-2.X specific
     11 # These are generic cover-alls which catch a lot of stuff
     12 # in various combinations of ld, libc and libpthread
     13 #
     14 # Note this is heavyhanded and not very clever:
     15 #
     16 # - suppress anything that has its top frame in ld.so
     17 #   That's fine, since it's mostly dynamic linking stuff,
     18 #   which has various deliberate (harmless) races
     19 #
     20 # - suppress anything that has its top frame in libc.so.
     21 #   This really isn't clever, since it could hide some 
     22 #   legitimate races.  But the problem is, if we don't do
     23 #   this, then loads of errors to do with stdio are reported, because
     24 #   H fails to see glibc's internal locking/unlocking of FILE*s
     25 #   as required by POSIX.  A better solution is needed.
     26 #
     27 # - some of the stdio functions in newer glibc manipulate stdio
     28 #   FILE*s state through mempcpy, which we intercept, so we also need
     29 #   to suppress such manipulations.
     30 
     31 #{
     32 #   helgrind-glibc2X-001
     33 #   Helgrind:Race
     34 #   obj:*/lib*/ld-2.*so*
     35 #}
     36 
     37 # helgrind-glibc2X-002 was merged into helgrind-glibc2X-001
     38 
     39 # helgrind-glibc2X-003 was merged into helgrind-glibc2X-001
     40 
     41 {
     42    helgrind-glibc2X-004
     43    Helgrind:Race
     44    obj:*/lib*/libc-2.*so*
     45 }
     46 
     47 {
     48    helgrind-glibc-io-xsputn-mempcpy
     49    Helgrind:Race
     50    fun:__GI_mempcpy
     51    fun:_IO_*xsputn*
     52    obj:*/lib*/libc-2.*so*
     53 }
     54 
     55 {
     56    helgrind-glibc2X-005
     57    Helgrind:Race
     58    obj:*/lib*/libpthread-2.*so*
     59 }
     60 
     61 # helgrind-glibc2X-006 was merged into helgrind-glibc2X-005
     62 
     63 # helgrind-glibc2X-007 was merged into helgrind-glibc2X-001
     64 
     65 # helgrind-glibc2X-008 was merged into helgrind-glibc2X-004
     66 
     67 # helgrind-glibc2X-009 was merged into helgrind-glibc2X-004
     68 
     69 # helgrind-glibc2X-010 was merged into helgrind-glibc2X-001
     70 
     71 # helgrind-glibc2X-011 was merged into helgrind-glibc2X-004
     72 
     73 # helgrind-glibc2X-012 was merged into helgrind-glibc2X-001
     74 
     75 # helgrind-glibc2X-013 was merged into helgrind-glibc2X-001
     76 
     77 # helgrind-glibc2X-014 was merged into helgrind-glibc2X-001
     78 
     79 # helgrind-glibc2X-015 was merged into helgrind-glibc2X-004
     80 
     81 # helgrind-glibc2X-016 was merged into helgrind-glibc2X-004
     82 
     83 # These are very ugly.  They are needed to suppress errors inside (eg)
     84 # NPTL's pthread_cond_signal.  Why only one stack frame -- at least we
     85 # should see the wrapper calling the real functions, right?
     86 # Unfortunately, no: the real functions are handwritten assembly (in
     87 # the glibc-2.5 sources) and does not create a proper stack frame.
     88 # Therefore it's only one level of unwinding before we're back out in
     89 # user code rather than the 2 levels you'd expect.
     90 {
     91    helgrind-glibc2X-101
     92    Helgrind:Race
     93    obj:*/lib*/libpthread-2.*so*
     94    fun:pthread_*
     95 }
     96 {
     97    helgrind-glibc2X-102
     98    Helgrind:Race
     99    fun:mythread_wrapper
    100    obj:*/lib*/libpthread-2.*so*
    101 }
    102 {
    103    helgrind-glibc2X-103
    104    Helgrind:Race
    105    fun:pthread_cond_*@@GLIBC_2.*
    106 }
    107 {
    108    helgrind-glibc2X-104
    109    Helgrind:Race
    110    fun:__lll_mutex_*
    111 }
    112 {
    113    helgrind-glibc2X-105
    114    Helgrind:Race
    115    fun:pthread_rwlock_*lock*
    116 }
    117 {
    118    helgrind-glibc2X-106
    119    Helgrind:Race
    120    fun:__lll_lock_wait
    121 }
    122 {
    123    helgrind-glibc2X-107
    124    Helgrind:Race
    125    obj:*/lib*/libpthread-2.*so*
    126    fun:sem_*
    127 }
    128 {
    129    helgrind-glibc2X-108
    130    Helgrind:Race
    131    fun:clone
    132 }
    133 {
    134    helgrind-glibc2X-109
    135    Helgrind:Race
    136    fun:start_thread
    137 }
    138 {
    139    helgrind-glibc2X-110
    140    Helgrind:Race
    141    obj:*/lib*/libc-2.*so*
    142    fun:pthread_*
    143 }
    144 {
    145    helgrind-glibc2X-111
    146    Helgrind:Race
    147    fun:__lll_*lock_*
    148 }
    149 {
    150    helgrind-glibc2X-113
    151    Helgrind:Race
    152    fun:pthread_barrier_wait*
    153 }
    154 
    155 
    156 ####################################################
    157 # qt4 specific (GNU mangling)
    158 #
    159 {
    160    helgrind-qt4---QMutex::lock()-QMutex::lock()
    161    Helgrind:Race
    162    ...
    163    fun:_ZN6QMutex4lockEv
    164    fun:_ZN6QMutex4lockEv
    165 }
    166 
    167 {                                                               
    168    helgrind-qt4---QMutex::unlock()-QMutex::unlock()
    169    Helgrind:Race                                                
    170    ...
    171    fun:_ZN6QMutex6unlockEv                                      
    172    fun:_ZN6QMutex6unlockEv
    173 }
    174 
    175 {
    176    helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*)
    177    Helgrind:Race
    178    fun:pthread_setspecific
    179    fun:_ZN14QThreadPrivate5startEPv
    180 }
    181 
    182 
    183 ####################################################
    184 # Other stuff.
    185 #
    186 # pthread_exit apparently calls some kind of unwind
    187 # mechanism - maybe to remove some number of frames
    188 # from the thread's stack, so as to get back to the 
    189 # outermost frame for the thread?  Anyway..
    190 
    191 {
    192    helgrind---*Unwind*-...-pthread_exit
    193    Helgrind:Race
    194    fun:*Unwind*
    195    ...
    196    fun:pthread_exit
    197 }
    198 
    199 {
    200    helgrind---...-*Unwind*-*pthread_unwind*
    201    Helgrind:Race
    202    ...
    203    fun:*Unwind*
    204    fun:*pthread_unwind*
    205 }
    206 
    207 {
    208    helgrind---...-*Unwind*-*pthread_unwind*
    209    Helgrind:Race
    210    ...
    211    fun:_Unwind*
    212    ...
    213    fun:_Unwind_Backtrace
    214 }
    215 
    216 
    217 
    218 
    219 ####################################################
    220 # To do with thread stack allocation and deallocation?
    221 #
    222 {
    223    helgrind---free_stacks-__deallocate_stack
    224    Helgrind:Race
    225    fun:free_stacks
    226    fun:__deallocate_stack
    227 }
    228 
    229 {
    230    helgrind---__deallocate_stack-start_thread-clone
    231    Helgrind:Race
    232    fun:__deallocate_stack
    233    fun:start_thread
    234    fun:clone
    235 }
    236 
    237 
    238 ####################################################
    239 # To do with pthread_{set,get}specific
    240 #
    241 {
    242    helgrind---pthread_setspecific
    243    Helgrind:Race
    244    fun:pthread_setspecific
    245 }
    246 
    247 {
    248    helgrind---pthread_getspecific
    249    Helgrind:Race
    250    fun:pthread_getspecific
    251 }
    252 
    253 
    254 ####################################################
    255 # To do with dynamic linking
    256 #
    257 # helgrind---ld.so-...-dlsym was merged into helgrind-glibc2X-001
    258 
    259 {
    260    helgrind---_dl_allocate_tls 
    261    Helgrind:Race
    262    fun:mempcpy
    263    fun:_dl_allocate_tls_init
    264    ...
    265    fun:pthread_create@@GLIBC_2.2*
    266    fun:pthread_create_WRK
    267    fun:pthread_create@*
    268 }
    269 
    270 ####################################################
    271 # To do with GNU libgomp
    272 #
    273 {
    274    helgrind---libgomp43-1
    275    Helgrind:Race
    276    fun:gomp_ordered_sync
    277 }
    278 
    279 {
    280    helgrind---libgomp43-1
    281    Helgrind:Race
    282    fun:gomp_ordered_next
    283 }
    284 
    285 {
    286    helgrind---libgomp43-1
    287    Helgrind:Race
    288    fun:gomp_ordered_last
    289 }
    290