Merge lp:~afrantzis/mir/workaround-valgrind-with-glibc-2.21 into lp:mir
- workaround-valgrind-with-glibc-2.21
- Merge into development-branch
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Alan Griffiths | ||||
Approved revision: | no longer in the source branch. | ||||
Merged at revision: | 2420 | ||||
Proposed branch: | lp:~afrantzis/mir/workaround-valgrind-with-glibc-2.21 | ||||
Merge into: | lp:mir | ||||
Diff against target: |
1492 lines (+1436/-3) 4 files modified
cmake/MirCommon.cmake (+2/-0) tests/unit-tests/test_fatal.cpp (+3/-3) tools/valgrind_suppressions_armhf (+27/-0) tools/valgrind_suppressions_glibc_2.21 (+1404/-0) |
||||
To merge this branch: | bzr merge lp:~afrantzis/mir/workaround-valgrind-with-glibc-2.21 | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Alan Griffiths | Approve | ||
Kevin DuBois (community) | Approve | ||
PS Jenkins bot (community) | continuous-integration | Needs Fixing | |
Review via email: mp+253815@code.launchpad.net |
Commit message
tests: Temporarily provide own version of glibc 2.21 valgrind suppressions
Workaround for bug #1435261.
Description of the change
tests: Temporarily provide own version of glibc 2.21 valgrind suppressions
Workaround for bug #1435261.
PS Jenkins bot (ps-jenkins) wrote : | # |
Alexandros Frantzis (afrantzis) wrote : | # |
mir-android-
The mir-android-
I added __udivmoddi4 valgrind suppression, which should help with the armhf builds. Let's see...
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2413
http://
Executed test runs:
None: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2414
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2415
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:24157
http://
Executed test runs:
None: http://
None: http://
ABORTED: http://
None: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2416
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2417
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2418
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
ABORTED: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Alan Griffiths (alan-griffiths) wrote : | # |
Expedient. But in a better world we wouldn't need most of this (we should revert if/when we can).
Preview Diff
1 | === modified file 'cmake/MirCommon.cmake' |
2 | --- cmake/MirCommon.cmake 2015-03-19 16:50:55 +0000 |
3 | +++ cmake/MirCommon.cmake 2015-03-24 08:49:52 +0000 |
4 | @@ -30,8 +30,10 @@ |
5 | if(VALGRIND_EXECUTABLE) |
6 | set(VALGRIND_ARGS "--error-exitcode=1" "--trace-children=yes" "--leak-check=full" "--show-leak-kinds=definite" "--errors-for-leak-kinds=definite") |
7 | set(VALGRIND_ARGS ${VALGRIND_ARGS} "--suppressions=${CMAKE_SOURCE_DIR}/tools/valgrind_suppressions_generic") |
8 | + set(VALGRIND_ARGS ${VALGRIND_ARGS} "--suppressions=${CMAKE_SOURCE_DIR}/tools/valgrind_suppressions_glibc_2.21") |
9 | set(DISCOVER_FLAGS "--enable-memcheck") |
10 | set(DISCOVER_FLAGS ${DISCOVER_FLAGS} "--suppressions=${CMAKE_SOURCE_DIR}/tools/valgrind_suppressions_generic") |
11 | + set(DISCOVER_FLAGS ${DISCOVER_FLAGS} "--suppressions=${CMAKE_SOURCE_DIR}/tools/valgrind_suppressions_glibc_2.21") |
12 | if (TARGET_ARCH STREQUAL "arm-linux-gnueabihf") |
13 | set(VALGRIND_ARGS ${VALGRIND_ARGS} "--suppressions=${CMAKE_SOURCE_DIR}/tools/valgrind_suppressions_armhf") |
14 | set(DISCOVER_FLAGS ${DISCOVER_FLAGS} "--suppressions=${CMAKE_SOURCE_DIR}/tools/valgrind_suppressions_armhf") |
15 | |
16 | === modified file 'tests/unit-tests/test_fatal.cpp' |
17 | --- tests/unit-tests/test_fatal.cpp 2015-01-21 07:34:50 +0000 |
18 | +++ tests/unit-tests/test_fatal.cpp 2015-03-24 08:49:52 +0000 |
19 | @@ -24,7 +24,7 @@ |
20 | |
21 | using namespace testing; |
22 | |
23 | -TEST(FatalTest, abort_formats_message_to_stderr) |
24 | +TEST(FatalErrorDeathTest, abort_formats_message_to_stderr) |
25 | { |
26 | mir::FatalErrorStrategy on_error{mir::fatal_error_abort}; |
27 | |
28 | @@ -32,7 +32,7 @@ |
29 | "Mary had 1 little lamb"); |
30 | } |
31 | |
32 | -TEST(FatalTest, abort_raises_sigabrt) |
33 | +TEST(FatalErrorDeathTest, abort_raises_sigabrt) |
34 | { |
35 | mir::FatalErrorStrategy on_error{mir::fatal_error_abort}; |
36 | |
37 | @@ -41,7 +41,7 @@ |
38 | "Hello world"); |
39 | } |
40 | |
41 | -TEST(FatalTest, throw_formats_message_to_what) |
42 | +TEST(FatalErrorTest, throw_formats_message_to_what) |
43 | { |
44 | EXPECT_THROW( |
45 | mir::fatal_error("%s had %d %s %s", "Mary", 1, "little", "lamb"), |
46 | |
47 | === modified file 'tools/valgrind_suppressions_armhf' |
48 | --- tools/valgrind_suppressions_armhf 2015-03-06 03:52:41 +0000 |
49 | +++ tools/valgrind_suppressions_armhf 2015-03-24 08:49:52 +0000 |
50 | @@ -60,6 +60,33 @@ |
51 | ... |
52 | } |
53 | |
54 | +{ |
55 | + libc_udivmoddi4_cond |
56 | + Memcheck:Cond |
57 | + fun:__udivmoddi4 |
58 | +} |
59 | + |
60 | +{ |
61 | + libc_udivmoddi4_value4 |
62 | + Memcheck:Value4 |
63 | + fun:__udivmoddi4 |
64 | +} |
65 | + |
66 | +# It's unfortunate that we need these, since they will |
67 | +# suppress errors Addr4 and Value4 from libc regardless |
68 | +# of call depth |
69 | +{ |
70 | + libc_addr4 |
71 | + Memcheck:Addr4 |
72 | + obj:/lib/arm-linux-gnueabihf/libc-2.*.so |
73 | +} |
74 | + |
75 | +{ |
76 | + libc_value4 |
77 | + Memcheck:Value4 |
78 | + obj:/lib/arm-linux-gnueabihf/libc-2.*.so |
79 | +} |
80 | + |
81 | # libgcc_s |
82 | |
83 | { |
84 | |
85 | === added file 'tools/valgrind_suppressions_glibc_2.21' |
86 | --- tools/valgrind_suppressions_glibc_2.21 1970-01-01 00:00:00 +0000 |
87 | +++ tools/valgrind_suppressions_glibc_2.21 2015-03-24 08:49:52 +0000 |
88 | @@ -0,0 +1,1404 @@ |
89 | +# This is a generated file, composed of the following suppression rules: |
90 | +# exp-sgcheck.supp xfree-3.supp xfree-4.supp glibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp |
91 | +{ |
92 | + ld-2.X possibly applying relocations |
93 | + exp-sgcheck:SorG |
94 | + obj:*/*lib*/ld-2.*so* |
95 | + obj:*/*lib*/ld-2.*so* |
96 | +} |
97 | + |
98 | +# I'm pretty sure this is a false positive caused by the sg_ stuff |
99 | +{ |
100 | + glibc realpath false positive |
101 | + exp-sgcheck:SorG |
102 | + fun:realpath |
103 | + fun:* |
104 | +} |
105 | + |
106 | +{ |
107 | + I think this is glibc's ultra optimised getenv doing 2 byte reads |
108 | + exp-sgcheck:SorG |
109 | + fun:getenv |
110 | +} |
111 | + |
112 | +##----------------------------------------------------------------------## |
113 | + |
114 | +# Errors to suppress by default with XFree86 3.3.6) |
115 | + |
116 | +# Format of this file is: |
117 | +# { |
118 | +# name_of_suppression |
119 | +# tool_name:supp_kind |
120 | +# (optional extra info for some suppression types) |
121 | +# caller0 name, or /name/of/so/file.so |
122 | +# caller1 name, or ditto |
123 | +# (optionally: caller2 name) |
124 | +# (optionally: caller3 name) |
125 | +# } |
126 | +# |
127 | +# For Memcheck, the supp_kinds are: |
128 | +# |
129 | +# Param Value1 Value2 Value4 Value8 Value16 Jump |
130 | +# Free Addr1 Addr2 Addr4 Addr8 Addr16 |
131 | +# Cond (previously known as Value0) |
132 | +# |
133 | +# and the optional extra info is: |
134 | +# if Param: name of system call param |
135 | + |
136 | +##----------------------------------------------------------------------## |
137 | + |
138 | +{ |
139 | + X11-Cond-0 |
140 | + Memcheck:Cond |
141 | + obj:*libXt.so.6.0 |
142 | + obj:*libXt.so.6.0 |
143 | + obj:*libXt.so.6.0 |
144 | +} |
145 | +{ |
146 | + X11-Cond-1 |
147 | + Memcheck:Cond |
148 | + fun:__rawmemchr |
149 | + obj:*libXt.so.6.0 |
150 | + obj:*libXt.so.6.0 |
151 | +} |
152 | + |
153 | + |
154 | +# Suppressions for XFree86-3.3.X |
155 | + |
156 | +{ |
157 | + X11-Addr4-1 |
158 | + Memcheck:Addr4 |
159 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
160 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
161 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
162 | +} |
163 | + |
164 | +{ |
165 | + X11-Addr4-2 |
166 | + Memcheck:Addr4 |
167 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
168 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
169 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
170 | +} |
171 | + |
172 | +{ |
173 | + X11-Addr4-3 |
174 | + Memcheck:Addr4 |
175 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
176 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
177 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
178 | +} |
179 | + |
180 | +{ |
181 | + X11-Addr4-4 |
182 | + Memcheck:Addr4 |
183 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
184 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
185 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
186 | +} |
187 | + |
188 | +{ |
189 | + X11-Addr4-5 |
190 | + Memcheck:Addr4 |
191 | + fun:__rawmemchr |
192 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
193 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
194 | +} |
195 | + |
196 | +{ |
197 | + X11-Addr4-6 |
198 | + Memcheck:Addr4 |
199 | + obj:/usr/X11R6/lib/libXmu.so.6.0 |
200 | + obj:/usr/X11R6/lib/libXmu.so.6.0 |
201 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
202 | +} |
203 | + |
204 | +{ |
205 | + X11-Addr4-7 |
206 | + Memcheck:Addr4 |
207 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
208 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
209 | + obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1 |
210 | +} |
211 | + |
212 | +{ |
213 | + X11-Param-1 |
214 | + Memcheck:Param |
215 | + write(buf) |
216 | + fun:__libc_write |
217 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
218 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
219 | +} |
220 | + |
221 | +{ |
222 | + X11-Addr4-8 |
223 | + Memcheck:Addr4 |
224 | + obj:/usr/X11R6/lib/libX11.so.6.1 |
225 | + obj:/usr/X11R6/lib/libXpm.so.4.11 |
226 | + obj:/usr/X11R6/lib/libXpm.so.4.11 |
227 | +} |
228 | + |
229 | +{ |
230 | + X11-Addr4-8 |
231 | + Memcheck:Addr4 |
232 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
233 | + obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1 |
234 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
235 | +} |
236 | + |
237 | +{ |
238 | + X11-Addr4-9 |
239 | + Memcheck:Addr4 |
240 | + obj:/usr/X11R6/lib/libXaw.so.6.1 |
241 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
242 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
243 | +} |
244 | + |
245 | +{ |
246 | + X11-Addr4-10 |
247 | + Memcheck:Addr4 |
248 | + obj:/usr/X11R6/lib/libXaw.so.6.1 |
249 | + obj:/usr/X11R6/lib/libXaw.so.6.1 |
250 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
251 | +} |
252 | + |
253 | +{ |
254 | + X11-Addr4-11 |
255 | + Memcheck:Addr4 |
256 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
257 | + obj:/usr/X11R6/lib/libXt.so.6.0 |
258 | + obj:/usr/X11R6/lib/libXaw.so.6.1 |
259 | +} |
260 | + |
261 | + |
262 | + |
263 | +##----------------------------------------------------------------------## |
264 | + |
265 | +##----------------------------------------------------------------------## |
266 | + |
267 | +# Errors to suppress by default with XFree86 4.1.0) |
268 | + |
269 | +# *** And a bunch of other stuff which is completely unrelated |
270 | +# to X. The default suppressions are a bit of a mess and could do |
271 | +# with a good tidying up. |
272 | + |
273 | +# Format of this file is: |
274 | +# { |
275 | +# name_of_suppression |
276 | +# tool_name:supp_kind |
277 | +# (optional extra info for some suppression types) |
278 | +# caller0 name, or /name/of/so/file.so |
279 | +# caller1 name, or ditto |
280 | +# (optionally: caller2 name) |
281 | +# (optionally: caller3 name) |
282 | +# } |
283 | +# |
284 | +# For Memcheck, the supp_kinds are: |
285 | +# |
286 | +# Param Value1 Value2 Value4 Value8 Value16 Jump |
287 | +# Free Addr1 Addr2 Addr4 Addr8 Addr16 |
288 | +# Cond (previously known as Value0) |
289 | +# |
290 | +# and the optional extra info is: |
291 | +# if Param: name of system call param |
292 | + |
293 | +# Resulting from R H 8.0 |
294 | +{ |
295 | + *libc_write/libX11.so.6.2/*X11TransWrite(Param) |
296 | + Memcheck:Param |
297 | + write(buf) |
298 | + fun:*libc_write |
299 | + obj:/usr/*lib*/libX11.so* |
300 | + fun:*X11TransWrite |
301 | +} |
302 | + |
303 | +{ |
304 | + libX11.so.6.2/libX11.so.6.2/libX11.so.6.2(Cond) |
305 | + Memcheck:Cond |
306 | + obj:/usr/*lib*/libX11.so* |
307 | + obj:/usr/*lib*/libX11.so* |
308 | + obj:/usr/*lib*/libX11.so* |
309 | +} |
310 | + |
311 | +{ |
312 | + libXt.so.6.2/libXt.so.6.2/libXt.so.6.2(Cond) |
313 | + Memcheck:Cond |
314 | + obj:/usr/*lib*/libXt.so* |
315 | + obj:/usr/*lib*/libXt.so* |
316 | + obj:/usr/*lib*/libXt.so* |
317 | +} |
318 | + |
319 | + |
320 | +{ |
321 | + libXaw.so.7.0/libXaw.so.7.0/libXaw.so.7.0(Cond) |
322 | + Memcheck:Cond |
323 | + obj:/usr/*lib*/libXaw.so* |
324 | + obj:/usr/*lib*/libXaw.so* |
325 | + obj:/usr/*lib*/libXaw.so* |
326 | +} |
327 | + |
328 | +{ |
329 | + libXmu.so.6.2/libXmu.so.6.2/libXmu.so.6.2(Cond) |
330 | + Memcheck:Cond |
331 | + obj:/usr/*lib*/libXmu.so* |
332 | + obj:/usr/*lib*/libXmu.so* |
333 | + obj:/usr/*lib*/libXmu.so* |
334 | +} |
335 | + |
336 | +{ |
337 | + libXt.so.6.0/libXt.so.6.0/libXaw.so.7.0(Cond) |
338 | + Memcheck:Cond |
339 | + obj:/usr/*lib*/libXt.so* |
340 | + obj:/usr/*lib*/libXt.so* |
341 | + obj:/usr/*lib*/libXaw.so* |
342 | +} |
343 | + |
344 | +{ |
345 | + libXaw.so.7.0/libXaw.so.7.0/libXt.so.6.0(Value4) |
346 | + Memcheck:Value4 |
347 | + obj:/usr/*lib*/libXaw.so* |
348 | + obj:/usr/*lib*/libXaw.so* |
349 | + obj:/usr/*lib*/libXt.so* |
350 | +} |
351 | + |
352 | +{ |
353 | + libXaw.so.7.0/libXaw.so.7.0/libXt.so.6.0(Cond) |
354 | + Memcheck:Cond |
355 | + obj:/usr/*lib*/libXaw.so* |
356 | + obj:/usr/*lib*/libXaw.so* |
357 | + obj:/usr/*lib*/libXt.so* |
358 | +} |
359 | + |
360 | +{ |
361 | + libX11.so.6.2/libX11.so.6.2/libXaw.so.7.0(Cond) |
362 | + Memcheck:Cond |
363 | + obj:/usr/*lib*/libX11.so* |
364 | + obj:/usr/*lib*/libX11.so* |
365 | + obj:/usr/*lib*/libXaw.so* |
366 | +} |
367 | + |
368 | +{ |
369 | + libX11.so.6.2/libX11.so.6.2/libXaw.so.7.0(Addr4) |
370 | + Memcheck:Addr4 |
371 | + obj:/usr/*lib*/libX11.so* |
372 | + obj:/usr/*lib*/libX11.so* |
373 | + obj:/usr/*lib*/libXaw.so* |
374 | +} |
375 | + |
376 | +{ |
377 | + libX11.so.6.2/libXaw.so.7.0/libXaw.so.7.0(Cond) |
378 | + Memcheck:Cond |
379 | + obj:/usr/*lib*/libX11.so* |
380 | + obj:/usr/*lib*/libXaw.so* |
381 | + obj:/usr/*lib*/libXaw.so* |
382 | +} |
383 | + |
384 | +{ |
385 | + libXpm.so.4.11/libXpm.so.4.11/libXpm.so.4.11 |
386 | + Memcheck:Cond |
387 | + obj:/usr/*lib*/libXpm.so.4.11 |
388 | + obj:/usr/*lib*/libXpm.so.4.11 |
389 | + obj:/usr/*lib*/libXpm.so.4.11 |
390 | +} |
391 | + |
392 | +{ |
393 | + struct with uninitialized paddings |
394 | + Memcheck:Param |
395 | + writev(vector[...]) |
396 | + fun:*_writev |
397 | + fun:_X11TransSocketWritev |
398 | + fun:_X11TransWritev |
399 | + fun:* |
400 | +} |
401 | + |
402 | +{ |
403 | + struct with uninitialized paddings - libxcb |
404 | + Memcheck:Param |
405 | + writev(vector[...]) |
406 | + obj:/lib*/*.so |
407 | + obj:/usr/lib*/libxcb.so.1.0.0 |
408 | + obj:/usr/lib*/libxcb.so.1.0.0 |
409 | + fun:xcb_send_request |
410 | + fun:_X* |
411 | +} |
412 | + |
413 | +{ |
414 | + struct with uninitialized paddings - libxcb |
415 | + Memcheck:Param |
416 | + writev(vector[...]) |
417 | + obj:/lib*/*.so |
418 | + obj:/usr/lib*/libxcb.so.1.0.0 |
419 | + obj:/usr/lib*/libxcb.so.1.0.0 |
420 | + obj:/usr/lib*/libxcb.so.1.0.0 |
421 | + fun:xcb_* |
422 | + fun:_X* |
423 | +} |
424 | + |
425 | +{ |
426 | + another struct with uninitialized paddings |
427 | + Memcheck:Param |
428 | + write(buf) |
429 | + obj:* |
430 | + fun:_IceTransSocketWrite |
431 | + fun:_IceTransWrite |
432 | + fun:_IceWrite |
433 | +} |
434 | + |
435 | +{ |
436 | + Xorg 6.8.1 uninit _write* padding |
437 | + Memcheck:Param |
438 | + write(buf) |
439 | + fun:* |
440 | + fun:_X11TransWrite |
441 | + obj:/usr/*lib*/libX11.so* |
442 | +} |
443 | + |
444 | +{ |
445 | + Xorg 6.8.1 uninit write padding |
446 | + Memcheck:Param |
447 | + write(buf) |
448 | + fun:write |
449 | + fun:_X11TransWrite |
450 | + obj:/usr/*lib*/libX11.so* |
451 | +} |
452 | + |
453 | +{ |
454 | + Xorg 6.8.1 ICE uninit __write* padding |
455 | + Memcheck:Param |
456 | + write(buf) |
457 | + obj:* |
458 | + fun:_IceTransWrite |
459 | + fun:_IceWrite |
460 | + fun:IceFlush |
461 | +} |
462 | + |
463 | +{ |
464 | + Xorg 6.8.1 writev uninit padding |
465 | + Memcheck:Param |
466 | + writev(vector[...]) |
467 | + fun:writev |
468 | + obj:/usr/*lib*/libX11.so* |
469 | + fun:_X11TransWritev |
470 | + fun:_XSend |
471 | +} |
472 | + |
473 | +{ |
474 | + Xorg 6.9.0 writev uninit padding |
475 | + Memcheck:Param |
476 | + writev(vector[...]) |
477 | + fun:do_writev |
478 | + fun:writev |
479 | + obj:/usr/*lib*/libX11.so* |
480 | + fun:_X11TransWritev |
481 | + fun:_XSend |
482 | +} |
483 | + |
484 | +{ |
485 | + X on SUSE11 writev uninit padding |
486 | + Memcheck:Param |
487 | + writev(vector[...]) |
488 | + fun:writev |
489 | + obj:/usr/lib*/libxcb.so* |
490 | + obj:/usr/lib*/libxcb.so* |
491 | +} |
492 | +{ |
493 | + X on SUSE11 writev uninit padding 2 |
494 | + Memcheck:Param |
495 | + writev(vector[...]) |
496 | + obj:/lib*/ld-2.*.so* |
497 | + obj:/usr/lib*/libxcb.so* |
498 | + obj:/usr/lib*/libxcb.so* |
499 | +} |
500 | +{ |
501 | + X on SUSE11 writev uninit padding 3 |
502 | + Memcheck:Param |
503 | + writev(vector[...]) |
504 | + obj:/lib*/ld-2.*.so* |
505 | + obj:/usr/lib*/libORBit*.so* |
506 | + obj:/usr/lib*/libORBit*.so* |
507 | +} |
508 | +{ |
509 | + X on SUSE11 writev uninit padding 4 |
510 | + Memcheck:Param |
511 | + writev(vector[...]) |
512 | + obj:/lib*/libc-2.*.so* |
513 | + obj:/usr/lib*/libORBit*.so* |
514 | + obj:/usr/lib*/libORBit*.so* |
515 | +} |
516 | + |
517 | + |
518 | +# There's something strange about a % 127 in XftFontOpenInfo |
519 | +# (hashing) which gcc turns into a multiply by 33818641 and |
520 | +# some other guff instead. I don't understand it enough to |
521 | +# know if libXft is broken or if memcheck's value tracking is |
522 | +# inadequate here. Anyway, for the moment, suppress it. |
523 | +# |
524 | +# Use of uninitialised value of size 8 |
525 | +# at 0x71A59F8: XftFontOpenInfo (in /usr/X11R6/lib64/libXft.so.2.1.2) |
526 | +# by 0x71A5F0D: XftFontOpenPattern (in /usr/X11R6/lib64/libXft.so.2.1.2) |
527 | +# by 0x65F166E: loadFontConfigFont(QFontPrivate const*, QFontDef const&, |
528 | +# QFont::Script) (qfontdatabase_x11.cpp:1942) |
529 | +# by 0x65F5DE4: QFontDatabase::findFont(QFont::Script, QFontPrivate const*, |
530 | +# QFontDef const&, int) (qfontdatabase.cpp:996) |
531 | +{ |
532 | + XftFontOpenInfo-umod-127-strangeness |
533 | + Memcheck:Value8 |
534 | + obj:/usr/X11*/lib*/libXft.so* |
535 | + obj:/usr/X11*/lib*/libXft.so* |
536 | +} |
537 | +{ |
538 | + XftFontOpenInfo-umod-127-strangeness-a-la-xorg |
539 | + Memcheck:Value8 |
540 | + obj:/usr/lib*/libXft.so* |
541 | + obj:/usr/lib*/libXft.so* |
542 | +} |
543 | + |
544 | +{ |
545 | + More X padding stuff |
546 | + Memcheck:Param |
547 | + writev(vector[...]) |
548 | + fun:*writev* |
549 | + obj:/usr/X11*/lib*/libX11.so* |
550 | + obj:/usr/X11*/lib*/libX11.so* |
551 | +} |
552 | + |
553 | +# Inlined strlen in libX11 on Ubuntu 9.10 amd64, unfortunately. |
554 | +# Invalid read of size 4 |
555 | +# at 0x9B5CCE6: ??? (in /usr/lib/libX11.so.6.2.0) |
556 | +# by 0x9B5D011: XGetAtomName (in /usr/lib/libX11.so.6.2.0) |
557 | +# by 0x86407C3: gdk_x11_xatom_to_atom_for_display |
558 | +# (in /usr/lib/libgdk-x11-2.0.so.0.1800.3) |
559 | +# by 0x8636817: ??? (in /usr/lib/libgdk-x11-2.0.so.0.1800.3) |
560 | +# Address 0x1a558e1c is 28 bytes inside a block of size 30 alloc'd |
561 | +# at 0x4C2552D: malloc (vg_replace_malloc.c:236) |
562 | +# by 0x9B642C0: _XUpdateAtomCache (in /usr/lib/libX11.so.6.2.0) |
563 | +# by 0x9B647F1: ??? (in /usr/lib/libX11.so.6.2.0) |
564 | +# by 0x9B81818: ??? (in /usr/lib/libX11.so.6.2.0) |
565 | +{ |
566 | + libX11.so.6.2.0/libX11.so.6.2.0(Addr4) |
567 | + Memcheck:Addr4 |
568 | + obj:/usr/*lib*/libX11.so* |
569 | + obj:/usr/*lib*/libX11.so* |
570 | +} |
571 | + |
572 | +##----------------------------------------------------------------------## |
573 | +# Completely inappropriate place, but ... |
574 | + |
575 | +{ |
576 | + ifort-9.X-on-i686-1 |
577 | + Memcheck:Addr4 |
578 | + fun:unaligned_bigint |
579 | + fun:hash |
580 | + fun:for__add_to_lf_table |
581 | +} |
582 | +{ |
583 | + ifort-9.X-on-amd64-1 |
584 | + Memcheck:Addr8 |
585 | + fun:unaligned_bigint |
586 | + fun:hash |
587 | + fun:for__add_to_lf_table |
588 | +} |
589 | + |
590 | + |
591 | +# zlib-1.2.x uses uninitialised memory in some tricky way which |
592 | +# apparently is harmless (it must amount to a vectorised while-loop, |
593 | +# nothing else makes sense). Fools Memcheck though. See the mentioned |
594 | +# URL for details. |
595 | +{ |
596 | + zlib-1.2.x trickyness (1a): See http://www.zlib.net/zlib_faq.html#faq36 |
597 | + Memcheck:Cond |
598 | + obj:/*lib*/libz.so.1.2.* |
599 | + ... |
600 | + obj:/*lib*/libz.so.1.2.* |
601 | + fun:deflate |
602 | +} |
603 | +{ |
604 | + zlib-1.2.x trickyness (1b): See http://www.zlib.net/zlib_faq.html#faq36 |
605 | + Memcheck:Cond |
606 | + obj:/*lib*/libz.so.1.2.* |
607 | + fun:deflate |
608 | +} |
609 | + |
610 | +{ |
611 | + zlib-1.2.x trickyness (2a): See http://www.zlib.net/zlib_faq.html#faq36 |
612 | + Memcheck:Value8 |
613 | + obj:/*lib*/libz.so.1.2.* |
614 | + ... |
615 | + obj:/*lib*/libz.so.1.2.* |
616 | + fun:deflate |
617 | +} |
618 | +{ |
619 | + zlib-1.2.x trickyness (2b): See http://www.zlib.net/zlib_faq.html#faq36 |
620 | + Memcheck:Value8 |
621 | + obj:/*lib*/libz.so.1.2.* |
622 | + fun:deflate |
623 | +} |
624 | + |
625 | +{ |
626 | + zlib-1.2.x trickyness (3a): See http://www.zlib.net/zlib_faq.html#faq36 |
627 | + Memcheck:Value4 |
628 | + obj:/*lib*/libz.so.1.2.* |
629 | + ... |
630 | + obj:/*lib*/libz.so.1.2.* |
631 | + fun:deflate |
632 | +} |
633 | +{ |
634 | + zlib-1.2.x trickyness (3b): See http://www.zlib.net/zlib_faq.html#faq36 |
635 | + Memcheck:Value4 |
636 | + obj:/*lib*/libz.so.1.2.* |
637 | + fun:deflate |
638 | +} |
639 | + |
640 | + |
641 | +##----------------------------------------------------------------------## |
642 | + |
643 | +## More general versions of some of the old X suppressions above |
644 | +{ |
645 | + Ubuntu804 libXaw.so.7.0/libXaw.so.7.0/libXaw.so.7.0(Cond) |
646 | + Memcheck:Cond |
647 | + obj:/usr/*lib*/libXaw*so* |
648 | + obj:/usr/*lib*/libXaw*so* |
649 | + obj:/usr/*lib*/libXaw*so* |
650 | +} |
651 | +{ |
652 | + Ubuntu804 libXaw.so.7.0/libXaw.so.7.0/libXt(Cond) |
653 | + Memcheck:Cond |
654 | + obj:/usr/*lib*/libXaw*so* |
655 | + obj:/usr/*lib*/libXaw*so* |
656 | + obj:/usr/*lib*/libXt*so* |
657 | +} |
658 | + |
659 | +{ |
660 | + Ubuntu804-hack-1 |
661 | + Memcheck:Overlap |
662 | + fun:mempcpy |
663 | + fun:_IO_default_xsputn |
664 | + obj:/lib*/libc-2.*so* |
665 | +} |
666 | +# |
667 | +# Suppression patterns for ld, the dynamic loader. |
668 | +# |
669 | + |
670 | +# Suppress all data races triggered by ld. |
671 | +{ |
672 | + drd-ld |
673 | + drd:ConflictingAccess |
674 | + obj:*/lib*/ld-*.so |
675 | +} |
676 | + |
677 | +# |
678 | +# Suppression patterns for libc. |
679 | +# |
680 | + |
681 | +# Suppress all data races where the topmost frame is inside libc.so. Although |
682 | +# this could hide some real data races, unfortunately this is the only way to |
683 | +# not report any false positives on stdio functions. The glibc functions |
684 | +# manipulating FILE objects use locking primitives that cannot be intercepted |
685 | +# easily. See also the definitions of _IO_lock_lock() etc. in the file |
686 | +# nptl/sysdeps/pthread/bits/stdio-lock.h in the glibc source tree. |
687 | +{ |
688 | + drd-libc-stdio |
689 | + drd:ConflictingAccess |
690 | + obj:*/lib*/libc-* |
691 | +} |
692 | +{ |
693 | + drd-libc-thread-cancellation-test |
694 | + drd:ConflictingAccess |
695 | + fun:write |
696 | +} |
697 | +{ |
698 | + drd-libc-random |
699 | + drd:ConflictingAccess |
700 | + fun:random_r |
701 | + fun:random |
702 | +} |
703 | + |
704 | +# |
705 | +# Suppression patterns for libstdc++, the implementation of the standard C++ |
706 | +# library included with the gcc compiler. |
707 | +# |
708 | +# Note: several versions of the libstdc++ library (4.2.2, 4.3.2, 4.4.0, 4.5.0 |
709 | +# and their predecessors) contain an implementation of the std::string class |
710 | +# that triggers conflicting memory accesses. See also |
711 | +# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40518 |
712 | +# |
713 | + |
714 | +# { |
715 | +# drd-libstdc++-std::string::string() |
716 | +# drd:ConflictingAccess |
717 | +# fun:_ZNSsC1ERKSs |
718 | +# } |
719 | + |
720 | +{ |
721 | + drd-libstdc++-cxa_guard_release |
722 | + drd:CondErr |
723 | + fun:pthread_cond_broadcast@* |
724 | + fun:__cxa_guard_release |
725 | +} |
726 | + |
727 | + |
728 | +# |
729 | +# Suppression patterns for libpthread. |
730 | +# |
731 | + |
732 | +{ |
733 | + drd-libpthread-pthread_create |
734 | + drd:ConflictingAccess |
735 | + ... |
736 | + fun:pthread_create* |
737 | +} |
738 | +{ |
739 | + drd-libpthread-pthread_join |
740 | + drd:ConflictingAccess |
741 | + fun:pthread_join |
742 | + fun:pthread_join |
743 | +} |
744 | +{ |
745 | + drd-libpthread-__deallocate_stack |
746 | + drd:ConflictingAccess |
747 | + ... |
748 | + fun:__deallocate_stack |
749 | +} |
750 | +{ |
751 | + drd-libpthread-__free_stacks |
752 | + drd:ConflictingAccess |
753 | + fun:__free_stacks |
754 | +} |
755 | +{ |
756 | + drd-libpthread-__free_tcb |
757 | + drd:ConflictingAccess |
758 | + ... |
759 | + fun:__free_tcb |
760 | +} |
761 | +{ |
762 | + drd-libpthread-__nptl_deallocate_tsd |
763 | + drd:ConflictingAccess |
764 | + fun:__nptl_deallocate_tsd |
765 | +} |
766 | +{ |
767 | + drd-libpthread-pthread_detach |
768 | + drd:ConflictingAccess |
769 | + fun:pthread_detach |
770 | + fun:pthread_detach |
771 | +} |
772 | +{ |
773 | + drd-libpthread-pthread_once |
774 | + drd:ConflictingAccess |
775 | + fun:pthread_once |
776 | +} |
777 | +{ |
778 | + drd-libpthread-pthread_cancel_init |
779 | + drd:ConflictingAccess |
780 | + fun:pthread_cancel_init |
781 | +} |
782 | +{ |
783 | + drd-libpthread-_Unwind_ForcedUnwind |
784 | + drd:ConflictingAccess |
785 | + ... |
786 | + fun:_Unwind_ForcedUnwind |
787 | +} |
788 | +{ |
789 | + drd-libpthread-_Unwind_GetCFA |
790 | + drd:ConflictingAccess |
791 | + fun:_Unwind_GetCFA |
792 | +} |
793 | +{ |
794 | + drd-libpthread-_Unwind_Resume |
795 | + drd:ConflictingAccess |
796 | + ... |
797 | + fun:_Unwind_Resume |
798 | +} |
799 | +{ |
800 | + drd-libpthread-? |
801 | + drd:ConflictingAccess |
802 | + obj:*/lib/libgcc_s.so.1 |
803 | +} |
804 | +{ |
805 | + drd-libpthread-nanosleep |
806 | + drd:ConflictingAccess |
807 | + fun:nanosleep |
808 | +} |
809 | + |
810 | +# |
811 | +# Suppression patterns for libgomp. |
812 | +# |
813 | + |
814 | +# Unfortunately many statements in libgomp trigger conflicting accesses. It is |
815 | +# not clear to me which of these are safe and which ones not. See also |
816 | +# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362 |
817 | +{ |
818 | + drd-libgomp |
819 | + drd:ConflictingAccess |
820 | + obj:/usr/lib*/libgomp.so* |
821 | +} |
822 | + |
823 | +# |
824 | +# Suppression patterns for libX11. |
825 | +# |
826 | + |
827 | +{ |
828 | + drd-libX11-XCreateFontSet |
829 | + drd:CondErr |
830 | + fun:pthread_cond_init* |
831 | + fun:_XReply |
832 | + fun:XListFontsWithInfo |
833 | + obj:/usr/lib*/libX11.so* |
834 | + fun:XCreateOC |
835 | + fun:XCreateFontSet |
836 | +} |
837 | + |
838 | +# |
839 | +# Suppression patterns for libxcb. |
840 | +# |
841 | + |
842 | +{ |
843 | + drd-libxcb-xcb_wait_for_reply |
844 | + drd:CondErr |
845 | + ... |
846 | + fun:pthread_cond_destroy* |
847 | + fun:xcb_wait_for_reply |
848 | +} |
849 | + |
850 | +# |
851 | +# Suppression patterns for libglib. |
852 | +# |
853 | + |
854 | +{ |
855 | + drd-libglib-access-g_threads_got_initialized |
856 | + drd:ConflictingAccess |
857 | + ... |
858 | + fun:g_slice_alloc |
859 | + fun:g_ptr_array_sized_new |
860 | +} |
861 | +{ |
862 | + drd-libglib-access-g_threads_got_initialized |
863 | + drd:ConflictingAccess |
864 | + ... |
865 | + fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext |
866 | + fun:_ZN20QEventDispatcherGlibC1EP7QObject |
867 | + obj:/usr/lib*/libQtCore.so.4.* |
868 | + obj:/usr/lib*/libQtCore.so.4.* |
869 | +} |
870 | +{ |
871 | + drd-libglib-access-g_mem_initialized |
872 | + drd:ConflictingAccess |
873 | + fun:g_malloc0 |
874 | +} |
875 | +{ |
876 | + drd-libglib-g_private_get_posix_impl |
877 | + drd:ConflictingAccess |
878 | + fun:g_private_get_posix_impl |
879 | +} |
880 | +{ |
881 | + drd-libglib-g_private_set_posix_impl |
882 | + drd:ConflictingAccess |
883 | + fun:g_private_set_posix_impl |
884 | +} |
885 | +{ |
886 | + drd-libglib-g_get_language_names |
887 | + drd:ConflictingAccess |
888 | + fun:g_slice_free_chain_with_offset |
889 | +} |
890 | +{ |
891 | + drd-libglib-g_main_context_new |
892 | + drd:ConflictingAccess |
893 | + fun:fcntl |
894 | + obj:/usr/lib*/libglib-*.so* |
895 | + fun:g_main_context_new |
896 | +} |
897 | + |
898 | +# |
899 | +# Suppression patterns for libQtCore. |
900 | +# |
901 | + |
902 | +{ |
903 | + drd-libQtCore-deref-that-calls-QThreadData-destructor |
904 | + drd:ConflictingAccess |
905 | + fun:_ZN11QThreadDataD1Ev |
906 | + obj:/usr/lib*/libQtCore.so.4.* |
907 | +} |
908 | +{ |
909 | + drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList |
910 | + drd:ConflictingAccess |
911 | + obj:/usr/lib*/libQtCore.so.4.* |
912 | + fun:_ZN11QMetaObject8activateEP7QObjectiiPPv |
913 | + fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv |
914 | +} |
915 | +{ |
916 | + drd-libQtCore-QObjectPrivate::clearGuards(QObject*) |
917 | + drd:ConflictingAccess |
918 | + fun:_ZN14QReadWriteLock12lockForWriteEv |
919 | + fun:_ZN14QObjectPrivate11clearGuardsEP7QObject |
920 | + fun:_ZN7QObjectD2Ev |
921 | +} |
922 | +{ |
923 | + drd-libQtCore-QObjectPrivate::clearGuards(QObject*) |
924 | + drd:ConflictingAccess |
925 | + fun:_ZN14QReadWriteLock12lockForWriteEv |
926 | + fun:_ZN12QWriteLocker6relockEv |
927 | + fun:_ZN12QWriteLockerC1EP14QReadWriteLock |
928 | + fun:_ZN14QObjectPrivate11clearGuardsEP7QObject |
929 | + fun:_ZN7QObjectD2Ev |
930 | + fun:_ZN24QAbstractEventDispatcherD2Ev |
931 | + fun:_ZN20QEventDispatcherGlibD0Ev |
932 | +} |
933 | +{ |
934 | + drd-libQtCore-QMutexPool::get(void const*) |
935 | + drd:ConflictingAccess |
936 | + fun:_ZN10QMutexPool3getEPKv |
937 | +} |
938 | +{ |
939 | + drd-libQtCore-qt_gettime_is_monotonic() |
940 | + drd:ConflictingAccess |
941 | + fun:_Z23qt_gettime_is_monotonicv |
942 | +} |
943 | + |
944 | +# |
945 | +# Suppression patterns for libboost. |
946 | +# |
947 | + |
948 | +# Suppress the races on boost::once_flag::epoch and on |
949 | +# boost::detail::this_thread_epoch. See also the source file |
950 | +# boost/thread/pthread/once.hpp in the Boost source tree |
951 | +# (https://svn.boost.org/trac/boost/browser/trunk/boost/thread/pthread/once.hpp). |
952 | +{ |
953 | + drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)()) |
954 | + drd:ConflictingAccess |
955 | + ... |
956 | + fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_ |
957 | +} |
958 | +{ |
959 | + drd-libboost-boost::detail::get_once_per_thread_epoch() |
960 | + drd:ConflictingAccess |
961 | + fun:_ZN5boost6detail25get_once_per_thread_epochEv |
962 | +} |
963 | +# Suppress the race reports on boost::detail::current_thread_tls_key. See also |
964 | +# https://svn.boost.org/trac/boost/ticket/3526 for more information about why |
965 | +# the access pattern of current_thread_tls_key is safe. |
966 | +{ |
967 | + drd-libboost-boost::detail::get_current_thread_data() |
968 | + drd:ConflictingAccess |
969 | + ... |
970 | + fun:_ZN5boost6detail23get_current_thread_dataEv |
971 | +} |
972 | +{ |
973 | + drd-libboost-boost::detail::set_current_thread_data(boost::detail::thread_data_base*) |
974 | + drd:ConflictingAccess |
975 | + ... |
976 | + fun:_ZN5boost6detail23set_current_thread_dataEPNS0_16thread_data_baseE |
977 | +} |
978 | + |
979 | +# FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of |
980 | +# other stuff. They should be removed. |
981 | + |
982 | +##----------------------------------------------------------------------## |
983 | +# Suppressions for the Helgrind tool when using |
984 | +# a glibc-2.{3,4,5,6,7,8,9} system |
985 | + |
986 | +#################################################### |
987 | +# glibc-2.X specific |
988 | +# These are generic cover-alls which catch a lot of stuff |
989 | +# in various combinations of ld, libc and libpthread |
990 | +# |
991 | +# Note this is heavyhanded and not very clever: |
992 | +# |
993 | +# - suppress anything that has its top frame in ld.so |
994 | +# That's fine, since it's mostly dynamic linking stuff, |
995 | +# which has various deliberate (harmless) races |
996 | +# |
997 | +# - suppress anything that has its top frame in libc.so. |
998 | +# This really isn't clever, since it could hide some |
999 | +# legitimate races. But the problem is, if we don't do |
1000 | +# this, then loads of errors to do with stdio are reported, because |
1001 | +# H fails to see glibc's internal locking/unlocking of FILE*s |
1002 | +# as required by POSIX. A better solution is needed. |
1003 | + |
1004 | +#{ |
1005 | +# helgrind-glibc2X-001 |
1006 | +# Helgrind:Race |
1007 | +# obj:*/lib*/ld-2.*so* |
1008 | +#} |
1009 | + |
1010 | +# helgrind-glibc2X-002 was merged into helgrind-glibc2X-001 |
1011 | + |
1012 | +# helgrind-glibc2X-003 was merged into helgrind-glibc2X-001 |
1013 | + |
1014 | +{ |
1015 | + helgrind-glibc2X-004 |
1016 | + Helgrind:Race |
1017 | + obj:*/lib*/libc-2.*so* |
1018 | +} |
1019 | + |
1020 | +{ |
1021 | + helgrind-glibc2X-005 |
1022 | + Helgrind:Race |
1023 | + obj:*/lib*/libpthread-2.*so* |
1024 | +} |
1025 | + |
1026 | +# helgrind-glibc2X-006 was merged into helgrind-glibc2X-005 |
1027 | + |
1028 | +# helgrind-glibc2X-007 was merged into helgrind-glibc2X-001 |
1029 | + |
1030 | +# helgrind-glibc2X-008 was merged into helgrind-glibc2X-004 |
1031 | + |
1032 | +# helgrind-glibc2X-009 was merged into helgrind-glibc2X-004 |
1033 | + |
1034 | +# helgrind-glibc2X-010 was merged into helgrind-glibc2X-001 |
1035 | + |
1036 | +# helgrind-glibc2X-011 was merged into helgrind-glibc2X-004 |
1037 | + |
1038 | +# helgrind-glibc2X-012 was merged into helgrind-glibc2X-001 |
1039 | + |
1040 | +# helgrind-glibc2X-013 was merged into helgrind-glibc2X-001 |
1041 | + |
1042 | +# helgrind-glibc2X-014 was merged into helgrind-glibc2X-001 |
1043 | + |
1044 | +# helgrind-glibc2X-015 was merged into helgrind-glibc2X-004 |
1045 | + |
1046 | +# helgrind-glibc2X-016 was merged into helgrind-glibc2X-004 |
1047 | + |
1048 | +# These are very ugly. They are needed to suppress errors inside (eg) |
1049 | +# NPTL's pthread_cond_signal. Why only one stack frame -- at least we |
1050 | +# should see the wrapper calling the real functions, right? |
1051 | +# Unfortunately, no: the real functions are handwritten assembly (in |
1052 | +# the glibc-2.5 sources) and does not create a proper stack frame. |
1053 | +# Therefore it's only one level of unwinding before we're back out in |
1054 | +# user code rather than the 2 levels you'd expect. |
1055 | +{ |
1056 | + helgrind-glibc2X-101 |
1057 | + Helgrind:Race |
1058 | + obj:*/lib*/libpthread-2.*so* |
1059 | + fun:pthread_* |
1060 | +} |
1061 | +{ |
1062 | + helgrind-glibc2X-102 |
1063 | + Helgrind:Race |
1064 | + fun:mythread_wrapper |
1065 | + obj:*/lib*/libpthread-2.*so* |
1066 | +} |
1067 | +{ |
1068 | + helgrind-glibc2X-103 |
1069 | + Helgrind:Race |
1070 | + fun:pthread_cond_*@@GLIBC_2.* |
1071 | +} |
1072 | +{ |
1073 | + helgrind-glibc2X-104 |
1074 | + Helgrind:Race |
1075 | + fun:__lll_mutex_* |
1076 | +} |
1077 | +{ |
1078 | + helgrind-glibc2X-105 |
1079 | + Helgrind:Race |
1080 | + fun:pthread_rwlock_*lock* |
1081 | +} |
1082 | +{ |
1083 | + helgrind-glibc2X-106 |
1084 | + Helgrind:Race |
1085 | + fun:__lll_lock_wait |
1086 | +} |
1087 | +{ |
1088 | + helgrind-glibc2X-107 |
1089 | + Helgrind:Race |
1090 | + obj:*/lib*/libpthread-2.*so* |
1091 | + fun:sem_* |
1092 | +} |
1093 | +{ |
1094 | + helgrind-glibc2X-108 |
1095 | + Helgrind:Race |
1096 | + fun:clone |
1097 | +} |
1098 | +{ |
1099 | + helgrind-glibc2X-109 |
1100 | + Helgrind:Race |
1101 | + fun:start_thread |
1102 | +} |
1103 | +{ |
1104 | + helgrind-glibc2X-110 |
1105 | + Helgrind:Race |
1106 | + obj:*/lib*/libc-2.*so* |
1107 | + fun:pthread_* |
1108 | +} |
1109 | +{ |
1110 | + helgrind-glibc2X-111 |
1111 | + Helgrind:Race |
1112 | + fun:__lll_*lock_* |
1113 | +} |
1114 | +{ |
1115 | + helgrind-glibc2X-113 |
1116 | + Helgrind:Race |
1117 | + fun:pthread_barrier_wait* |
1118 | +} |
1119 | + |
1120 | + |
1121 | +#################################################### |
1122 | +# qt4 specific (GNU mangling) |
1123 | +# |
1124 | +{ |
1125 | + helgrind-qt4---QMutex::lock()-QMutex::lock() |
1126 | + Helgrind:Race |
1127 | + ... |
1128 | + fun:_ZN6QMutex4lockEv |
1129 | + fun:_ZN6QMutex4lockEv |
1130 | +} |
1131 | + |
1132 | +{ |
1133 | + helgrind-qt4---QMutex::unlock()-QMutex::unlock() |
1134 | + Helgrind:Race |
1135 | + ... |
1136 | + fun:_ZN6QMutex6unlockEv |
1137 | + fun:_ZN6QMutex6unlockEv |
1138 | +} |
1139 | + |
1140 | +{ |
1141 | + helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*) |
1142 | + Helgrind:Race |
1143 | + fun:pthread_setspecific |
1144 | + fun:_ZN14QThreadPrivate5startEPv |
1145 | +} |
1146 | + |
1147 | + |
1148 | +#################################################### |
1149 | +# Other stuff. |
1150 | +# |
1151 | +# pthread_exit apparently calls some kind of unwind |
1152 | +# mechanism - maybe to remove some number of frames |
1153 | +# from the thread's stack, so as to get back to the |
1154 | +# outermost frame for the thread? Anyway.. |
1155 | + |
1156 | +{ |
1157 | + helgrind---*Unwind*-...-pthread_exit |
1158 | + Helgrind:Race |
1159 | + fun:*Unwind* |
1160 | + ... |
1161 | + fun:pthread_exit |
1162 | +} |
1163 | + |
1164 | +{ |
1165 | + helgrind---...-*Unwind*-*pthread_unwind* |
1166 | + Helgrind:Race |
1167 | + ... |
1168 | + fun:*Unwind* |
1169 | + fun:*pthread_unwind* |
1170 | +} |
1171 | + |
1172 | +{ |
1173 | + helgrind---...-*Unwind*-*pthread_unwind* |
1174 | + Helgrind:Race |
1175 | + ... |
1176 | + fun:_Unwind* |
1177 | + ... |
1178 | + fun:_Unwind_Backtrace |
1179 | +} |
1180 | + |
1181 | + |
1182 | + |
1183 | + |
1184 | +#################################################### |
1185 | +# To do with thread stack allocation and deallocation? |
1186 | +# |
1187 | +{ |
1188 | + helgrind---free_stacks-__deallocate_stack |
1189 | + Helgrind:Race |
1190 | + fun:free_stacks |
1191 | + fun:__deallocate_stack |
1192 | +} |
1193 | + |
1194 | +{ |
1195 | + helgrind---__deallocate_stack-start_thread-clone |
1196 | + Helgrind:Race |
1197 | + fun:__deallocate_stack |
1198 | + fun:start_thread |
1199 | + fun:clone |
1200 | +} |
1201 | + |
1202 | + |
1203 | +#################################################### |
1204 | +# To do with pthread_{set,get}specific |
1205 | +# |
1206 | +{ |
1207 | + helgrind---pthread_setspecific |
1208 | + Helgrind:Race |
1209 | + fun:pthread_setspecific |
1210 | +} |
1211 | + |
1212 | +{ |
1213 | + helgrind---pthread_getspecific |
1214 | + Helgrind:Race |
1215 | + fun:pthread_getspecific |
1216 | +} |
1217 | + |
1218 | + |
1219 | +#################################################### |
1220 | +# To do with dynamic linking |
1221 | +# |
1222 | +# helgrind---ld.so-...-dlsym was merged into helgrind-glibc2X-001 |
1223 | + |
1224 | +{ |
1225 | + helgrind---_dl_allocate_tls |
1226 | + Helgrind:Race |
1227 | + fun:mempcpy |
1228 | + fun:_dl_allocate_tls_init |
1229 | + ... |
1230 | + fun:pthread_create@@GLIBC_2.2* |
1231 | + fun:pthread_create_WRK |
1232 | + fun:pthread_create@* |
1233 | +} |
1234 | + |
1235 | +#################################################### |
1236 | +# To do with GNU libgomp |
1237 | +# |
1238 | +{ |
1239 | + helgrind---libgomp43-1 |
1240 | + Helgrind:Race |
1241 | + fun:gomp_ordered_sync |
1242 | +} |
1243 | + |
1244 | +{ |
1245 | + helgrind---libgomp43-1 |
1246 | + Helgrind:Race |
1247 | + fun:gomp_ordered_next |
1248 | +} |
1249 | + |
1250 | +{ |
1251 | + helgrind---libgomp43-1 |
1252 | + Helgrind:Race |
1253 | + fun:gomp_ordered_last |
1254 | +} |
1255 | + |
1256 | +##----------------------------------------------------------------------## |
1257 | + |
1258 | +# Errors to suppress by default with glibc 2.21.x |
1259 | + |
1260 | +# IMPORTANT: DO NOT EDIT glibc-2.X.supp, as it is as a generated |
1261 | +# file. Instead edit glibc-2.X.supp.in. |
1262 | + |
1263 | +# Format of this file is: |
1264 | +# { |
1265 | +# name_of_suppression |
1266 | +# tool_name:supp_kind |
1267 | +# (optional extra info for some suppression types) |
1268 | +# caller0 name, or /name/of/so/file.so |
1269 | +# caller1 name, or ditto |
1270 | +# (optionally: caller2 name) |
1271 | +# (optionally: caller3 name) |
1272 | +# } |
1273 | +# |
1274 | +# For Memcheck, the supp_kinds are: |
1275 | +# |
1276 | +# Param Value1 Value2 Value4 Value8 Value16 Jump |
1277 | +# Free Addr1 Addr2 Addr4 Addr8 Addr16 |
1278 | +# Cond (previously known as Value0) |
1279 | +# |
1280 | +# and the optional extra info is: |
1281 | +# if Param: name of system call param |
1282 | + |
1283 | +##----------------------------------------------------------------------## |
1284 | +##--- generic suppressions ---## |
1285 | +##----------------------------------------------------------------------## |
1286 | + |
1287 | +{ |
1288 | + dl-hack3-cond-0 |
1289 | + Memcheck:Cond |
1290 | + fun:_dl_start |
1291 | + fun:_start |
1292 | +} |
1293 | +{ |
1294 | + dl-hack3-cond-1 |
1295 | + Memcheck:Cond |
1296 | + obj:*/lib*/ld-2.21*.so* |
1297 | + obj:*/lib*/ld-2.21*.so* |
1298 | + obj:*/lib*/ld-2.21*.so* |
1299 | +} |
1300 | +{ |
1301 | + dl-hack3-cond-2 |
1302 | + Memcheck:Cond |
1303 | + obj:*/lib*/ld-2.21*.so* |
1304 | + obj:*/lib*/ld-2.21*.so* |
1305 | + obj:*/lib*/libc-2.21*.so* |
1306 | +} |
1307 | +{ |
1308 | + dl-hack3-cond-3 |
1309 | + Memcheck:Cond |
1310 | + obj:*/lib*/ld-2.21*.so* |
1311 | + obj:*/lib*/libc-2.21*.so* |
1312 | + obj:*/lib*/libc-2.21*.so* |
1313 | +} |
1314 | +{ |
1315 | + dl-hack3-cond-4 |
1316 | + Memcheck:Cond |
1317 | + obj:*/lib*/ld-2.21*.so* |
1318 | + obj:*/lib*/ld-2.21*.so* |
1319 | + obj:*/lib*/libdl-2.21*.so* |
1320 | +} |
1321 | + |
1322 | +{ |
1323 | + dl-hack4-64bit-addr-1 |
1324 | + Memcheck:Addr8 |
1325 | + obj:*/lib*/ld-2.21*.so* |
1326 | + obj:*/lib*/ld-2.21*.so* |
1327 | + obj:*/lib*/ld-2.21*.so* |
1328 | +} |
1329 | +{ |
1330 | + dl-hack4-64bit-addr-2 |
1331 | + Memcheck:Addr8 |
1332 | + obj:*/lib*/ld-2.21*.so* |
1333 | + obj:*/lib*/ld-2.21*.so* |
1334 | + obj:*/lib*/libc-2.21*.so* |
1335 | +} |
1336 | +{ |
1337 | + dl-hack4-64bit-addr-3 |
1338 | + Memcheck:Addr8 |
1339 | + obj:*/lib*/ld-2.21*.so* |
1340 | + obj:*/lib*/ld-2.21*.so* |
1341 | + obj:*/lib*/libdl-2.21*.so* |
1342 | +} |
1343 | + |
1344 | +{ |
1345 | + dl-hack5-32bit-addr-1 |
1346 | + Memcheck:Addr4 |
1347 | + obj:*/lib*/ld-2.21*.so |
1348 | + obj:*/lib*/ld-2.21*.so |
1349 | + obj:*/lib*/ld-2.21*.so |
1350 | +} |
1351 | +{ |
1352 | + dl-hack5-32bit-addr-3 |
1353 | + Memcheck:Addr4 |
1354 | + obj:*/lib*/ld-2.21*.so |
1355 | + obj:*/lib*/ld-2.21*.so |
1356 | + obj:*/lib*/libdl-2.21*.so* |
1357 | +} |
1358 | +{ |
1359 | + dl-hack5-32bit-addr-4 |
1360 | + Memcheck:Addr4 |
1361 | + obj:*/lib*/ld-2.21*.so |
1362 | + obj:*/lib*/libdl-2.21*.so* |
1363 | + obj:*/lib*/ld-2.21*.so |
1364 | +} |
1365 | + |
1366 | + |
1367 | +##----------------------------------------------------------------------## |
1368 | +##--- Misc ad-hoc hacks ---## |
1369 | +##----------------------------------------------------------------------## |
1370 | +{ |
1371 | + glibc-2.5.x-on-SUSE-10.2-(PPC)-1 |
1372 | + Memcheck:Cond |
1373 | + fun:_dl_start_final |
1374 | + fun:_dl_start |
1375 | + fun:_start |
1376 | +} |
1377 | +{ |
1378 | + glibc-2.5.x-on-SUSE-10.2-(PPC)-2a |
1379 | + Memcheck:Cond |
1380 | + fun:index |
1381 | + obj:*ld-2.21.*.so |
1382 | +} |
1383 | +{ |
1384 | + glibc-2.5.x-on-SuSE-10.2-(PPC)-2b |
1385 | + Memcheck:Addr4 |
1386 | + fun:index |
1387 | + fun:expand_dynamic_string_token |
1388 | +} |
1389 | +{ |
1390 | + glibc-2.5.5-on-SuSE-10.2-(PPC)-2c |
1391 | + Memcheck:Addr4 |
1392 | + fun:index |
1393 | + obj:*ld-2.21.*.so |
1394 | +} |
1395 | +{ |
1396 | + glibc-2.3.5-on-SuSE-10.1-(PPC)-3 |
1397 | + Memcheck:Addr4 |
1398 | + fun:*wordcopy_fwd_dest_aligned* |
1399 | + fun:mem*cpy |
1400 | + obj:*lib*2.21.*.so |
1401 | +} |
1402 | + |
1403 | +{ |
1404 | + glibc-2.21-on-SUSE-10.3-(x86) |
1405 | + Memcheck:Addr4 |
1406 | + obj:*/lib/ld-2.21*.so |
1407 | + obj:*/lib/ld-2.21*.so |
1408 | + obj:*/lib/ld-2.21*.so |
1409 | +} |
1410 | + |
1411 | +{ |
1412 | + glibc24-64bit-padding-1a |
1413 | + Memcheck:Param |
1414 | + socketcall.sendto(msg) |
1415 | + fun:send |
1416 | + fun:get_mapping |
1417 | + fun:__nscd_get_map_ref |
1418 | + fun:nscd* |
1419 | +} |
1420 | +{ |
1421 | + glibc24-64bit-padding-1b |
1422 | + Memcheck:Param |
1423 | + socketcall.sendto(msg) |
1424 | + fun:__sendto_nocancel |
1425 | + obj:/*libc-2.21*.so |
1426 | + obj:/*libc-2.21*.so |
1427 | + obj:/*libc-2.21*.so |
1428 | +} |
1429 | +{ |
1430 | + glibc24-64bit-padding-1c |
1431 | + Memcheck:Param |
1432 | + socketcall.send(msg) |
1433 | + fun:send |
1434 | + fun:__nscd_get_map_ref |
1435 | + fun:nscd_get*_r |
1436 | + fun:*nscd* |
1437 | + obj:/*libc-2.21*.so |
1438 | +} |
1439 | + |
1440 | + |
1441 | +{ |
1442 | + X11-64bit-padding-3a |
1443 | + Memcheck:Param |
1444 | + write(buf) |
1445 | + obj:/*libpthread-2.4.so* |
1446 | + obj:/usr/lib*/libX11.so* |
1447 | + obj:/usr/lib*/libX11.so* |
1448 | + obj:/usr/lib*/libX11.so* |
1449 | +} |
1450 | + |
1451 | +{ |
1452 | + X11-64bit-padding-4a |
1453 | + Memcheck:Param |
1454 | + socketcall.sendto(msg) |
1455 | + fun:send |
1456 | + obj:/*libc-2.21*.so |
1457 | + obj:/*libc-2.21*.so |
1458 | + obj:/*libc-2.21*.so |
1459 | +} |
1460 | +{ |
1461 | + X11-64bit-padding-4b |
1462 | + Memcheck:Param |
1463 | + socketcall.send(msg) |
1464 | + fun:send |
1465 | + obj:/*libc-2.21*.so |
1466 | + obj:/*libc-2.21*.so |
1467 | + obj:/*libc-2.21*.so |
1468 | +} |
1469 | + |
1470 | +##----------------------------------------------------------------------## |
1471 | +# MontaVista Linux 4.0.1 on ppc32 |
1472 | +{ |
1473 | + MVL-401-linuxthreads-pthread_create |
1474 | + Memcheck:Param |
1475 | + write(buf) |
1476 | + fun:pthread_create |
1477 | +} |
1478 | +{ |
1479 | + MVL-401-linuxthreads-pthread_create |
1480 | + Memcheck:Param |
1481 | + write(buf) |
1482 | + obj:*/lib/libpthread-0.10.so |
1483 | + fun:pthread_create |
1484 | +} |
1485 | + |
1486 | +##----------------------------------------------------------------------## |
1487 | +# Ubuntu 10.04 on ARM (Thumb). Not sure why this is necessary. |
1488 | +{ |
1489 | + U1004-ARM-_dl_relocate_object |
1490 | + Memcheck:Cond |
1491 | + fun:_dl_relocate_object |
1492 | +} |
FAILED: Continuous integration, rev:2412 jenkins. qa.ubuntu. com/job/ mir-ci/ 3320/ jenkins. qa.ubuntu. com/job/ mir-android- vivid-i386- build/1768/ console jenkins. qa.ubuntu. com/job/ mir-clang- vivid-amd64- build/1767 jenkins. qa.ubuntu. com/job/ mir-mediumtests -vivid- touch/1720/ console jenkins. qa.ubuntu. com/job/ mir-vivid- amd64-ci/ 1317 jenkins. qa.ubuntu. com/job/ mir-vivid- amd64-ci/ 1317/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ mir-mediumtests -builder- vivid-armhf/ 1720/console
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/mir- ci/3320/ rebuild
http://