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