diff options
author | Stephane Marchesin <marchesin@icps.u-strasbg.fr> | 2009-05-04 19:05:59 +0200 |
---|---|---|
committer | Stephane Marchesin <marchesin@icps.u-strasbg.fr> | 2009-05-04 19:05:59 +0200 |
commit | 6e410b3bb6ff51580897431105aae14591cbf7fb (patch) | |
tree | f8aeba9352710f10cd6b1d5138c8fc3ece91c8c3 /glibc-2.34567-NPTL-helgrind.supp |
Diffstat (limited to 'glibc-2.34567-NPTL-helgrind.supp')
-rw-r--r-- | glibc-2.34567-NPTL-helgrind.supp | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/glibc-2.34567-NPTL-helgrind.supp b/glibc-2.34567-NPTL-helgrind.supp new file mode 100644 index 0000000..0a4aeaa --- /dev/null +++ b/glibc-2.34567-NPTL-helgrind.supp @@ -0,0 +1,272 @@ + +# FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of +# other stuff. They should be removed. + +##----------------------------------------------------------------------## +# Suppressions for the Helgrind tool when using +# a glibc-2.{3,4,5,6,7,8,9} system + +#################################################### +# glibc-2.X specific +# These are generic cover-alls which catch a lot of stuff +# in various combinations of ld, libc and libpthread +# +# Note this is heavyhanded and not very clever: +# +# - suppress anything that has its top frame in ld.so +# That's fine, since it's mostly dynamic linking stuff, +# which has various deliberate (harmless) races +# +# - suppress anything that has its top frame in libc.so. +# This really isn't clever, since it could hide some +# legitimate races. But the problem is, if we don't do +# this, then loads of errors to do with stdio are reported, because +# H fails to see glibc's internal locking/unlocking of FILE*s +# as required by POSIX. A better solution is needed. + +{ + helgrind-glibc2X-001 + Helgrind:Race + obj:/lib*/ld-2.*so* +} + +# helgrind-glibc2X-002 was merged into helgrind-glibc2X-001 + +# helgrind-glibc2X-003 was merged into helgrind-glibc2X-001 + +{ + helgrind-glibc2X-004 + Helgrind:Race + obj:/lib*/libc-2.*so* +} + +{ + helgrind-glibc2X-005 + Helgrind:Race + obj:/lib*/libpthread-2.*so* +} + +# helgrind-glibc2X-006 was merged into helgrind-glibc2X-005 + +# helgrind-glibc2X-007 was merged into helgrind-glibc2X-001 + +# helgrind-glibc2X-008 was merged into helgrind-glibc2X-004 + +# helgrind-glibc2X-009 was merged into helgrind-glibc2X-004 + +# helgrind-glibc2X-010 was merged into helgrind-glibc2X-001 + +# helgrind-glibc2X-011 was merged into helgrind-glibc2X-004 + +# helgrind-glibc2X-012 was merged into helgrind-glibc2X-001 + +# helgrind-glibc2X-013 was merged into helgrind-glibc2X-001 + +# helgrind-glibc2X-014 was merged into helgrind-glibc2X-001 + +# helgrind-glibc2X-015 was merged into helgrind-glibc2X-004 + +# helgrind-glibc2X-016 was merged into helgrind-glibc2X-004 + +# These are very ugly. They are needed to suppress errors inside (eg) +# NPTL's pthread_cond_signal. Why only one stack frame -- at least we +# should see the wrapper calling the real functions, right? +# Unfortunately, no: the real functions are handwritten assembly (in +# the glibc-2.5 sources) and does not create a proper stack frame. +# Therefore it's only one level of unwinding before we're back out in +# user code rather than the 2 levels you'd expect. +{ + helgrind-glibc2X-101 + Helgrind:Race + obj:/lib*/libpthread-2.*so* + fun:pthread_* +} +{ + helgrind-glibc2X-102 + Helgrind:Race + fun:mythread_wrapper + obj:/lib*/libpthread-2.*so* +} +{ + helgrind-glibc2X-103 + Helgrind:Race + fun:pthread_cond_*@@GLIBC_2.* +} +{ + helgrind-glibc2X-104 + Helgrind:Race + fun:__lll_mutex_* +} +{ + helgrind-glibc2X-105 + Helgrind:Race + fun:pthread_rwlock_*lock* +} +{ + helgrind-glibc2X-106 + Helgrind:Race + fun:__lll_lock_wait +} +{ + helgrind-glibc2X-107 + Helgrind:Race + obj:/lib*/libpthread-2.*so* + fun:sem_* +} +{ + helgrind-glibc2X-108 + Helgrind:Race + fun:clone +} +{ + helgrind-glibc2X-109 + Helgrind:Race + fun:start_thread +} +{ + helgrind-glibc2X-110 + Helgrind:Race + obj:/lib*/libc-2.*so* + fun:pthread_* +} +{ + helgrind-glibc2X-111 + Helgrind:Race + fun:__lll_*lock_* +} +{ + helgrind-glibc2X-112 + Helgrind:Race + fun:pthread_create@* +} +{ + helgrind-glibc2X-113 + Helgrind:Race + fun:pthread_barrier_wait* +} + + +#################################################### +# qt4 specific (GNU mangling) +# +{ + helgrind-qt4---QMutex::lock()-QMutex::lock() + Helgrind:Race + ... + fun:_ZN6QMutex4lockEv + fun:_ZN6QMutex4lockEv +} + +{ + helgrind-qt4---QMutex::unlock()-QMutex::unlock() + Helgrind:Race + ... + fun:_ZN6QMutex6unlockEv + fun:_ZN6QMutex6unlockEv +} + +{ + helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*) + Helgrind:Race + fun:pthread_setspecific + fun:_ZN14QThreadPrivate5startEPv +} + + +#################################################### +# Other stuff. +# +# pthread_exit apparently calls some kind of unwind +# mechanism - maybe to remove some number of frames +# from the thread's stack, so as to get back to the +# outermost frame for the thread? Anyway.. + +{ + helgrind---*Unwind*-...-pthread_exit + Helgrind:Race + fun:*Unwind* + ... + fun:pthread_exit +} + +{ + helgrind---...-*Unwind*-*pthread_unwind* + Helgrind:Race + ... + fun:*Unwind* + fun:*pthread_unwind* +} + +{ + helgrind---...-*Unwind*-*pthread_unwind* + Helgrind:Race + ... + fun:_Unwind* + ... + fun:_Unwind_Backtrace +} + + + + +#################################################### +# To do with thread stack allocation and deallocation? +# +{ + helgrind---free_stacks-__deallocate_stack + Helgrind:Race + fun:free_stacks + fun:__deallocate_stack +} + +{ + helgrind---__deallocate_stack-start_thread-clone + Helgrind:Race + fun:__deallocate_stack + fun:start_thread + fun:clone +} + + +#################################################### +# To do with pthread_{set,get}specific +# +{ + helgrind---pthread_setspecific + Helgrind:Race + fun:pthread_setspecific +} + +{ + helgrind---pthread_getspecific + Helgrind:Race + fun:pthread_getspecific +} + + +#################################################### +# To do with dynamic linking +# +# helgrind---ld.so-...-dlsym was merged into helgrind-glibc2X-001 + + +#################################################### +# To do with GNU libgomp +# +{ + helgrind---libgomp43-1 + Helgrind:Race + fun:gomp_ordered_sync +} + +{ + helgrind---libgomp43-1 + Helgrind:Race + fun:gomp_ordered_next +} + +{ + helgrind---libgomp43-1 + Helgrind:Race + fun:gomp_ordered_last +} |