Mir

Merge lp:~afrantzis/mir/workaround-valgrind-with-glibc-2.21 into lp:mir

Proposed by Alexandros Frantzis
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
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.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

mir-android-vivid-amd64-build passed, which means this branch does indeed help.

The mir-android-vivid-i386-build failure is an infrastructure glitch.

I added __udivmoddi4 valgrind suppression, which should help with the armhf builds. Let's see...

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote :

lgtm, thanks!

review: Approve
Revision history for this message
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).

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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+}

Subscribers

People subscribed via source and target branches