2 # FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of
3 # other stuff. They should be removed.
5 ##----------------------------------------------------------------------##
6 # Suppressions for the Helgrind tool when using
7 # a glibc-2.{3,4,5,6,7,8,9} system
9 ####################################################
11 # These are generic cover-alls which catch a lot of stuff
12 # in various combinations of ld, libc and libpthread
14 # Note this is heavyhanded and not very clever:
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
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.
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.
32 # helgrind-glibc2X-001
34 # obj:*/lib*/ld-2.*so*
37 # helgrind-glibc2X-002 was merged into helgrind-glibc2X-001
39 # helgrind-glibc2X-003 was merged into helgrind-glibc2X-001
44 obj:*/lib*/libc-2.*so*
48 helgrind-glibc-io-xsputn-mempcpy
52 obj:*/lib*/libc-2.*so*
58 obj:*/lib*/libpthread-2.*so*
61 # helgrind-glibc2X-006 was merged into helgrind-glibc2X-005
63 # helgrind-glibc2X-007 was merged into helgrind-glibc2X-001
65 # helgrind-glibc2X-008 was merged into helgrind-glibc2X-004
67 # helgrind-glibc2X-009 was merged into helgrind-glibc2X-004
69 # helgrind-glibc2X-010 was merged into helgrind-glibc2X-001
71 # helgrind-glibc2X-011 was merged into helgrind-glibc2X-004
73 # helgrind-glibc2X-012 was merged into helgrind-glibc2X-001
75 # helgrind-glibc2X-013 was merged into helgrind-glibc2X-001
77 # helgrind-glibc2X-014 was merged into helgrind-glibc2X-001
79 # helgrind-glibc2X-015 was merged into helgrind-glibc2X-004
81 # helgrind-glibc2X-016 was merged into helgrind-glibc2X-004
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.
93 obj:*/lib*/libpthread-2.*so*
100 obj:*/lib*/libpthread-2.*so*
105 fun:pthread_cond_*@@GLIBC_2.*
115 fun:pthread_rwlock_*lock*
125 obj:*/lib*/libpthread-2.*so*
141 obj:*/lib*/libc-2.*so*
152 fun:pthread_barrier_wait*
156 ####################################################
157 # qt4 specific (GNU mangling)
160 helgrind-qt4---QMutex::lock()-QMutex::lock()
163 fun:_ZN6QMutex4lockEv
164 fun:_ZN6QMutex4lockEv
168 helgrind-qt4---QMutex::unlock()-QMutex::unlock()
171 fun:_ZN6QMutex6unlockEv
172 fun:_ZN6QMutex6unlockEv
176 helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*)
178 fun:pthread_setspecific
179 fun:_ZN14QThreadPrivate5startEPv
183 ####################################################
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..
192 helgrind---*Unwind*-...-pthread_exit
200 helgrind---...-*Unwind*-*pthread_unwind*
208 helgrind---...-*Unwind*-*pthread_unwind*
213 fun:_Unwind_Backtrace
219 ####################################################
220 # To do with thread stack allocation and deallocation?
223 helgrind---free_stacks-__deallocate_stack
226 fun:__deallocate_stack
230 helgrind---__deallocate_stack-start_thread-clone
232 fun:__deallocate_stack
238 ####################################################
239 # To do with pthread_{set,get}specific
242 helgrind---pthread_setspecific
244 fun:pthread_setspecific
248 helgrind---pthread_getspecific
250 fun:pthread_getspecific
254 ####################################################
255 # To do with dynamic linking
257 # helgrind---ld.so-...-dlsym was merged into helgrind-glibc2X-001
260 helgrind---_dl_allocate_tls
263 fun:_dl_allocate_tls_init
265 fun:pthread_create@@GLIBC_2.2*
266 fun:pthread_create_WRK
271 helgrind---_dl_allocate_tls2
275 fun:_dl_allocate_tls_init
277 fun:pthread_create@@GLIBC_2.2*
278 fun:pthread_create_WRK
282 ####################################################
283 # To do with GNU libgomp
286 helgrind---libgomp43-1
288 fun:gomp_ordered_sync
292 helgrind---libgomp43-1
294 fun:gomp_ordered_next
298 helgrind---libgomp43-1
300 fun:gomp_ordered_last