Home | History | Annotate | Download | only in main
      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 #{
     28 #   helgrind-glibc2X-001
     29 #   Helgrind:Race
     30 #   obj:/lib*/ld-2.*so*
     31 #}
     32 
     33 # helgrind-glibc2X-002 was merged into helgrind-glibc2X-001
     34 
     35 # helgrind-glibc2X-003 was merged into helgrind-glibc2X-001
     36 
     37 {
     38    helgrind-glibc2X-004
     39    Helgrind:Race
     40    obj:/lib*/libc-2.*so*
     41 }
     42 
     43 {
     44    helgrind-glibc2X-005
     45    Helgrind:Race
     46    obj:/lib*/libpthread-2.*so*
     47 }
     48 
     49 # helgrind-glibc2X-006 was merged into helgrind-glibc2X-005
     50 
     51 # helgrind-glibc2X-007 was merged into helgrind-glibc2X-001
     52 
     53 # helgrind-glibc2X-008 was merged into helgrind-glibc2X-004
     54 
     55 # helgrind-glibc2X-009 was merged into helgrind-glibc2X-004
     56 
     57 # helgrind-glibc2X-010 was merged into helgrind-glibc2X-001
     58 
     59 # helgrind-glibc2X-011 was merged into helgrind-glibc2X-004
     60 
     61 # helgrind-glibc2X-012 was merged into helgrind-glibc2X-001
     62 
     63 # helgrind-glibc2X-013 was merged into helgrind-glibc2X-001
     64 
     65 # helgrind-glibc2X-014 was merged into helgrind-glibc2X-001
     66 
     67 # helgrind-glibc2X-015 was merged into helgrind-glibc2X-004
     68 
     69 # helgrind-glibc2X-016 was merged into helgrind-glibc2X-004
     70 
     71 # These are very ugly.  They are needed to suppress errors inside (eg)
     72 # NPTL's pthread_cond_signal.  Why only one stack frame -- at least we
     73 # should see the wrapper calling the real functions, right?
     74 # Unfortunately, no: the real functions are handwritten assembly (in
     75 # the glibc-2.5 sources) and does not create a proper stack frame.
     76 # Therefore it's only one level of unwinding before we're back out in
     77 # user code rather than the 2 levels you'd expect.
     78 {
     79    helgrind-glibc2X-101
     80    Helgrind:Race
     81    obj:/lib*/libpthread-2.*so*
     82    fun:pthread_*
     83 }
     84 {
     85    helgrind-glibc2X-102
     86    Helgrind:Race
     87    fun:mythread_wrapper
     88    obj:/lib*/libpthread-2.*so*
     89 }
     90 {
     91    helgrind-glibc2X-103
     92    Helgrind:Race
     93    fun:pthread_cond_*@@GLIBC_2.*
     94 }
     95 {
     96    helgrind-glibc2X-104
     97    Helgrind:Race
     98    fun:__lll_mutex_*
     99 }
    100 {
    101    helgrind-glibc2X-105
    102    Helgrind:Race
    103    fun:pthread_rwlock_*lock*
    104 }
    105 {
    106    helgrind-glibc2X-106
    107    Helgrind:Race
    108    fun:__lll_lock_wait
    109 }
    110 {
    111    helgrind-glibc2X-107
    112    Helgrind:Race
    113    obj:/lib*/libpthread-2.*so*
    114    fun:sem_*
    115 }
    116 {
    117    helgrind-glibc2X-108
    118    Helgrind:Race
    119    fun:clone
    120 }
    121 {
    122    helgrind-glibc2X-109
    123    Helgrind:Race
    124    fun:start_thread
    125 }
    126 {
    127    helgrind-glibc2X-110
    128    Helgrind:Race
    129    obj:/lib*/libc-2.*so*
    130    fun:pthread_*
    131 }
    132 {
    133    helgrind-glibc2X-111
    134    Helgrind:Race
    135    fun:__lll_*lock_*
    136 }
    137 {
    138    helgrind-glibc2X-113
    139    Helgrind:Race
    140    fun:pthread_barrier_wait*
    141 }
    142 
    143 
    144 ####################################################
    145 # qt4 specific (GNU mangling)
    146 #
    147 {
    148    helgrind-qt4---QMutex::lock()-QMutex::lock()
    149    Helgrind:Race
    150    ...
    151    fun:_ZN6QMutex4lockEv
    152    fun:_ZN6QMutex4lockEv
    153 }
    154 
    155 {                                                               
    156    helgrind-qt4---QMutex::unlock()-QMutex::unlock()
    157    Helgrind:Race                                                
    158    ...
    159    fun:_ZN6QMutex6unlockEv                                      
    160    fun:_ZN6QMutex6unlockEv
    161 }
    162 
    163 {
    164    helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*)
    165    Helgrind:Race
    166    fun:pthread_setspecific
    167    fun:_ZN14QThreadPrivate5startEPv
    168 }
    169 
    170 
    171 ####################################################
    172 # Other stuff.
    173 #
    174 # pthread_exit apparently calls some kind of unwind
    175 # mechanism - maybe to remove some number of frames
    176 # from the thread's stack, so as to get back to the 
    177 # outermost frame for the thread?  Anyway..
    178 
    179 {
    180    helgrind---*Unwind*-...-pthread_exit
    181    Helgrind:Race
    182    fun:*Unwind*
    183    ...
    184    fun:pthread_exit
    185 }
    186 
    187 {
    188    helgrind---...-*Unwind*-*pthread_unwind*
    189    Helgrind:Race
    190    ...
    191    fun:*Unwind*
    192    fun:*pthread_unwind*
    193 }
    194 
    195 {
    196    helgrind---...-*Unwind*-*pthread_unwind*
    197    Helgrind:Race
    198    ...
    199    fun:_Unwind*
    200    ...
    201    fun:_Unwind_Backtrace
    202 }
    203 
    204 
    205 
    206 
    207 ####################################################
    208 # To do with thread stack allocation and deallocation?
    209 #
    210 {
    211    helgrind---free_stacks-__deallocate_stack
    212    Helgrind:Race
    213    fun:free_stacks
    214    fun:__deallocate_stack
    215 }
    216 
    217 {
    218    helgrind---__deallocate_stack-start_thread-clone
    219    Helgrind:Race
    220    fun:__deallocate_stack
    221    fun:start_thread
    222    fun:clone
    223 }
    224 
    225 
    226 ####################################################
    227 # To do with pthread_{set,get}specific
    228 #
    229 {
    230    helgrind---pthread_setspecific
    231    Helgrind:Race
    232    fun:pthread_setspecific
    233 }
    234 
    235 {
    236    helgrind---pthread_getspecific
    237    Helgrind:Race
    238    fun:pthread_getspecific
    239 }
    240 
    241 
    242 ####################################################
    243 # To do with dynamic linking
    244 #
    245 # helgrind---ld.so-...-dlsym was merged into helgrind-glibc2X-001
    246 
    247 
    248 ####################################################
    249 # To do with GNU libgomp
    250 #
    251 {
    252    helgrind---libgomp43-1
    253    Helgrind:Race
    254    fun:gomp_ordered_sync
    255 }
    256 
    257 {
    258    helgrind---libgomp43-1
    259    Helgrind:Race
    260    fun:gomp_ordered_next
    261 }
    262 
    263 {
    264    helgrind---libgomp43-1
    265    Helgrind:Race
    266    fun:gomp_ordered_last
    267 }
    268