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