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