--- /dev/null
+K 13
+svn:externals
+V 37
+VEX svn://svn.valgrind.org/vex/trunk
+
+K 10
+svn:ignore
+V 422
+.in_place
+acinclude.m4
+aclocal.m4
+autom4te-*.cache
+autom4te.cache
+bin
+cachegrind
+cachegrind.out.*
+compile
+config.guess
+config.h*
+config.log
+config.status
+config.sub
+configure
+default.supp
+depcomp
+glibc-2.X.supp
+include
+install-sh
+lib
+Makefile
+Makefile.in
+Makefile.vex.in
+missing
+mkinstalldirs
+share
+stamp-h*
+svn-commit.2.tmp
+svn-commit.tmp
+valgrind
+valgrind.pc
+valgrind.spec
+valt_load_address*.lds
+vg_annotate
+vg_cachegen
+
+END
--- /dev/null
+10
+
+dir
+11479
+svn://svn.valgrind.org/valgrind/trunk
+svn://svn.valgrind.org/valgrind
+
+
+
+2010-11-12T10:40:20.282663Z
+11479
+tom
+has-props
+
+
+svn:externals
+
+
+
+
+
+
+
+
+
+
+a5019735-40e9-0310-863c-91ae7b9d1cf9
+\f
+Makefile.all.am
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+25f74ab5e3de4066f8ea7708780bd128
+2010-10-18T18:11:42.913001Z
+11457
+sewardj
+has-props
+\f
+glibc-2.X.supp.in
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+2ca851edc7d2fc63c525597054801612
+2010-08-22T12:13:35.007742Z
+11281
+sewardj
+has-props
+\f
+glibc-2.X-drd.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+393e756496491c36eb9f9f77445b3f76
+2010-09-02T14:51:02.021715Z
+11330
+bart
+\f
+README_DEVELOPERS
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+b714b29572d1a9a937f4fe6c1b03b86c
+2010-10-13T21:47:29.177681Z
+11440
+sewardj
+has-props
+\f
+AUTHORS
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+253df0b250fc7e28cde74804d74c263d
+2010-10-13T21:47:29.177681Z
+11440
+sewardj
+has-props
+\f
+Makefile.tool.am
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+bd3ca67c59d3405725f76200f64867af
+2010-07-01T00:20:20.236166Z
+11194
+njn
+has-props
+\f
+mpi
+dir
+\f
+docs
+dir
+\f
+helgrind
+dir
+\f
+exp-ptrcheck
+dir
+\f
+xfree-3.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+eeea56187947e758ea0fb8ce87fa1f68
+2006-12-16T00:54:12.348895Z
+6402
+njn
+has-props
+\f
+callgrind
+dir
+\f
+glibc-2.34567-NPTL-helgrind.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+42de86dd99438e2f769745927e4f3966
+2010-04-12T19:53:05.076768Z
+11102
+sewardj
+\f
+vg-in-place
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+5e18d3a425c01a93359c28c01236ac1c
+2008-11-08T15:11:03.769309Z
+8741
+sewardj
+has-props
+\f
+tests
+dir
+\f
+exp-bbv
+dir
+\f
+darwin9.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+c57462319069939fcc273c9eea0f8306
+2010-08-31T13:43:06.225958Z
+11310
+sewardj
+\f
+glibc-2.3.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+bad5bd043f0185c369be0932606ea19d
+2007-11-10T20:12:23.934084Z
+7137
+sewardj
+has-props
+\f
+glibc-2.2-LinuxThreads-helgrind.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+955d37fa6bfc5663cc055e3c99037b2e
+2007-11-11T06:13:01.534199Z
+7146
+sewardj
+\f
+glibc-2.5.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+a3b68476dac08159e92d0c5f757b5e0c
+2007-01-05T15:09:53.273915Z
+6473
+sewardj
+\f
+COPYING
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+c46082167a314d785d012a244748d803
+2004-11-30T10:43:45.490537Z
+3153
+njn
+has-props
+\f
+glibc-2.7.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+e6f5a0c4707116f8a16eb73fb1a4f68a
+2007-11-18T14:40:02.507727Z
+7181
+sewardj
+\f
+exp-dhat
+dir
+\f
+autogen.sh
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+8318f285284c6473f2deaa8a065b5b97
+2003-12-16T02:15:21.000000Z
+2120
+fitzhardinge
+has-props
+\f
+NEWS
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+96b08ef02fb12d03916d520059860949
+2010-10-22T06:44:59.359895Z
+11475
+sewardj
+has-props
+\f
+valgrind.pc.in
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+d6b6b0d5011d31100711120557ebca2f
+2010-01-21T10:24:37.724976Z
+11029
+tom
+has-props
+\f
+memcheck
+dir
+\f
+README_PACKAGERS
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+cee7a92ca6c81db64e8ab1235605a54f
+2009-08-04T07:02:54.528922Z
+10709
+njn
+has-props
+\f
+nightly
+dir
+\f
+darwin10-drd.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+c5dc4e1b5229050fecd8726bed0328b1
+2010-07-01T00:28:09.458458Z
+11195
+njn
+\f
+massif
+dir
+\f
+include
+dir
+\f
+exp-ptrcheck.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+bc7503d9272b33474214598e9a77dcf8
+2010-08-20T18:25:40.681405Z
+11272
+sewardj
+\f
+Makefile.tool-tests.am
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+f773e40253cd1a4135813a0640ee0a88
+2009-06-24T00:37:09.222418Z
+10364
+njn
+\f
+configure.in
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+924814652f4a2277d67a9fc3af2c0072
+2010-11-12T10:40:20.282663Z
+11479
+tom
+has-props
+\f
+aix5libc.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+379ee0ada2bdf194f60324de687a7f1e
+2006-12-12T01:38:15.595827Z
+6395
+sewardj
+\f
+cachegrind
+dir
+\f
+perf
+dir
+\f
+README
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+557092e58ea422862af620f837a496ae
+2010-10-13T21:47:29.177681Z
+11440
+sewardj
+has-props
+\f
+none
+dir
+\f
+COPYING.DOCS
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+8fdeb5abdb235a08e76835f8f3260215
+2004-11-30T10:43:45.490537Z
+3153
+njn
+\f
+xfree-4.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+fdc8b5c0cdd74cd5baad1d7d53c1ec4b
+2010-01-08T10:53:04.778267Z
+11023
+sewardj
+has-props
+\f
+valgrind.spec.in
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+eb148034d1222d47d659baed871ecfea
+2009-07-04T00:38:11.161259Z
+10405
+njn
+has-props
+\f
+glibc-2.2.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+1ee6c689eb81ca5aed0dfb4a45fdd935
+2007-11-10T20:12:23.934084Z
+7137
+sewardj
+has-props
+\f
+glibc-2.4.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+7b12f1fb1939db6eefc2791185f244af
+2007-01-05T15:09:53.273915Z
+6473
+sewardj
+\f
+lackey
+dir
+\f
+auxprogs
+dir
+\f
+drd
+dir
+\f
+glibc-2.6.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+32ad18bef9266f3f25384f84fbc0870b
+2007-11-13T20:51:26.552275Z
+7154
+sewardj
+\f
+Makefile.am
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+af2cc75b751287092e32230cdbb1a65f
+2010-10-12T10:09:15.769768Z
+11431
+sewardj
+has-props
+\f
+Makefile.vex.am
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+4e3a63a7eb57f5e9463f726069c023dc
+2010-09-28T15:09:47.355885Z
+11387
+sewardj
+\f
+README_MISSING_SYSCALL_OR_IOCTL
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+db412a017141cfa4efe45e1b30e4da1a
+2010-03-31T07:34:30.389108Z
+11098
+tom
+has-props
+\f
+darwin9-drd.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+8c657f01522c99236796a99cab5bcdf8
+2010-07-01T00:20:20.236166Z
+11194
+njn
+\f
+darwin10.supp
+file
+
+
+
+
+2010-11-17T08:57:34.000000Z
+83c5d4dae7876f6af0dbf3160d3971fc
+2010-10-07T15:45:59.428482Z
+11413
+sewardj
+\f
+coregrind
+dir
+\f
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 14
+svn:executable
+V 1
+*
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:mergeinfo
+V 0
+
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 14
+svn:executable
+V 1
+*
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+K 13
+svn:eol-style
+V 6
+native
+K 12
+svn:keywords
+V 23
+author date id revision
+END
--- /dev/null
+
+Julian Seward was the original founder, designer and author of
+Valgrind, created the dynamic translation frameworks, wrote Memcheck,
+the 3.X versions of Helgrind, Ptrcheck, DHAT, and did lots of other
+things.
+
+Nicholas Nethercote did the core/tool generalisation, wrote
+Cachegrind and Massif, and tons of other stuff.
+
+Tom Hughes did a vast number of bug fixes, helped out with support for
+more recent Linux/glibc versions, set up the present build system, and has
+helped out with test and build machines.
+
+Jeremy Fitzhardinge wrote Helgrind (in the 2.X line) and totally
+overhauled low-level syscall/signal and address space layout stuff,
+among many other things.
+
+Josef Weidendorfer wrote and maintains Callgrind and the associated
+KCachegrind GUI.
+
+Paul Mackerras did a lot of the initial per-architecture factoring
+that forms the basis of the 3.0 line and was also seen in 2.4.0.
+He also did UCode-based dynamic translation support for PowerPC, and
+created a set of ppc-linux derivatives of the 2.X release line.
+
+Greg Parker wrote the Mac OS X port.
+
+Dirk Mueller contributed the malloc/free mismatch checking
+and other bits and pieces, and acts as our KDE liaison.
+
+Robert Walsh added file descriptor leakage checking, new library
+interception machinery, support for client allocation pools, and minor
+other tweakage.
+
+Bart Van Assche wrote and maintains DRD.
+
+Cerion Armour-Brown worked on PowerPC instruction set support in the
+Vex dynamic-translation framework. Maynard Johnson improved the
+Power6 support.
+
+Kirill Batuzov and Dmitry Zhurikhin did the NEON instruction set
+support for ARM. Donna Robinson did the v6 media instruction support.
+
+Donna Robinson created and maintains the very excellent
+http://www.valgrind.org.
+
+Vince Weaver wrote and maintains BBV.
+
+Frederic Gobry helped with autoconf and automake.
+
+Daniel Berlin modified readelf's dwarf2 source line reader, written by Nick
+Clifton, for use in Valgrind.o
+
+Michael Matz and Simon Hausmann modified the GNU binutils demangler(s) for
+use in Valgrind.
+
+David Woodhouse has helped out with test and build machines over the course
+of many releases.
+
+Many, many people sent bug reports, patches, and helpful feedback.
+
+Development of Valgrind was supported in part by the Tri-Lab Partners
+(Lawrence Livermore National Laboratory, Los Alamos National
+Laboratory, and Sandia National Laboratories) of the U.S. Department
+of Energy's Advanced Simulation & Computing (ASC) Program.
--- /dev/null
+ GNU Free Documentation License
+ Version 1.2, November 2002
+
+
+ Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The "Document", below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as "you". You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".) To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+
+# This file should be included (directly or indirectly) by every
+# Makefile.am that builds programs. And also the top-level Makefile.am.
+
+#----------------------------------------------------------------------------
+# Global stuff
+#----------------------------------------------------------------------------
+
+inplacedir = $(top_builddir)/.in_place
+
+# This used to be required when Vex had a handwritten Makefile. It
+# shouldn't be needed any more, though.
+##.NOTPARALLEL:
+
+#----------------------------------------------------------------------------
+# noinst_PROGRAMS and noinst_DSYMS targets
+#----------------------------------------------------------------------------
+
+# On Darwin, for a program 'p', the DWARF debug info is stored in the
+# directory 'p.dSYM'. This must be generated after the executable is
+# created, with 'dsymutil p'. We could redefine LINK with a script that
+# executes 'dsymutil' after linking, but that's a pain. Instead we use this
+# hook so that every time "make check" is run, we subsequently invoke
+# 'dsymutil' on all the executables that lack a .dSYM directory, or that are
+# newer than their corresponding .dSYM directory.
+build-noinst_DSYMS: $(noinst_DSYMS)
+ for f in $(noinst_DSYMS); do \
+ if [ ! -e $$f.dSYM -o $$f -nt $$f.dSYM ] ; then \
+ echo "dsymutil $$f"; \
+ dsymutil $$f; \
+ fi; \
+ done
+
+# This is used by coregrind/Makefile.am and Makefile.tool.am for doing
+# "in-place" installs. It copies $(noinst_PROGRAMS) into $inplacedir.
+# It needs to be depended on by an 'all-local' rule.
+inplace-noinst_PROGRAMS: $(noinst_PROGRAMS)
+ mkdir -p $(inplacedir); \
+ for f in $(noinst_PROGRAMS) ; do \
+ rm -f $(inplacedir)/$$f; \
+ ln -f -s ../$(subdir)/$$f $(inplacedir); \
+ done
+
+# Similar to inplace-noinst_PROGRAMS
+inplace-noinst_DSYMS: build-noinst_DSYMS
+ mkdir -p $(inplacedir); \
+ for f in $(noinst_DSYMS); do \
+ rm -f $(inplacedir)/$$f.dSYM; \
+ ln -f -s ../$(subdir)/$$f.dSYM $(inplacedir); \
+ done
+
+# This is used by coregrind/Makefile.am and by <tool>/Makefile.am for doing
+# "make install". It copies $(noinst_PROGRAMS) into $prefix/lib/valgrind/.
+# It needs to be depended on by an 'install-exec-local' rule.
+install-noinst_PROGRAMS: $(noinst_PROGRAMS)
+ $(mkinstalldirs) $(DESTDIR)$(pkglibdir); \
+ for f in $(noinst_PROGRAMS); do \
+ $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibdir); \
+ done
+
+# Similar to install-noinst_PROGRAMS.
+# Nb: we don't use $(INSTALL_PROGRAM) here because it doesn't work with
+# directories. XXX: not sure whether the resulting permissions will be
+# correct when using 'cp -R'...
+install-noinst_DSYMS: build-noinst_DSYMS
+ $(mkinstalldirs) $(DESTDIR)$(pkglibdir); \
+ for f in $(noinst_DSYMS); do \
+ cp -R $$f.dSYM $(DESTDIR)$(pkglibdir); \
+ done
+
+# This needs to be depended on by a 'clean-local' rule.
+clean-noinst_DSYMS:
+ for f in $(noinst_DSYMS); do \
+ rm -rf $$f.dSYM; \
+ done
+
+#----------------------------------------------------------------------------
+# Flags
+#----------------------------------------------------------------------------
+
+# Baseline flags for all compilations. Aim here is to maximise
+# performance and get whatever useful warnings we can out of gcc.
+AM_CFLAGS_BASE = \
+ -O2 -g \
+ -Wall \
+ -Wmissing-prototypes \
+ -Wshadow \
+ -Wpointer-arith \
+ -Wstrict-prototypes \
+ -Wmissing-declarations \
+ @FLAG_W_NO_FORMAT_ZERO_LENGTH@ \
+ -fno-strict-aliasing
+
+# These flags are used for building the preload shared objects.
+# The aim is to give reasonable performance but also to have good
+# stack traces, since users often see stack traces extending
+# into (and through) the preloads.
+if VGCONF_OS_IS_DARWIN
+AM_CFLAGS_PIC = -dynamic -O -g -fno-omit-frame-pointer -fno-strict-aliasing \
+ -mno-dynamic-no-pic -fpic -fPIC
+else
+AM_CFLAGS_PIC = -fpic -O -g -fno-omit-frame-pointer -fno-strict-aliasing
+endif
+
+
+# Flags for specific targets.
+#
+# Nb: the AM_CPPFLAGS_* values are suitable for building tools and auxprogs.
+# For building the core, coregrind/Makefile.am files add some extra things.
+#
+# Also: in newer versions of automake (1.10 onwards?) asm files ending with
+# '.S' are considered "pre-processed" (as opposed to those ending in '.s')
+# and so the CPPFLAGS are passed to the assembler. But this is not true for
+# older automakes (e.g. 1.8.5, 1.9.6), sigh. So we include
+# AM_CPPFLAGS_<PLATFORM> in each AM_CCASFLAGS_<PLATFORM> variable. This
+# means some of the flags are duplicated on systems with newer versions of
+# automake, but this does not really matter and seems hard to avoid.
+
+AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/VEX/pub \
+ -DVGA_@VGCONF_ARCH_PRI@=1 \
+ -DVGO_@VGCONF_OS@=1 \
+ -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1
+if VGCONF_HAVE_PLATFORM_SEC
+AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/VEX/pub \
+ -DVGA_@VGCONF_ARCH_SEC@=1 \
+ -DVGO_@VGCONF_OS@=1 \
+ -DVGP_@VGCONF_ARCH_SEC@_@VGCONF_OS@=1
+endif
+
+AM_FLAG_M3264_X86_LINUX = @FLAG_M32@
+AM_CFLAGS_X86_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \
+ $(AM_CFLAGS_BASE)
+AM_CCASFLAGS_X86_LINUX = $(AM_CPPFLAGS_X86_LINUX) @FLAG_M32@ -g
+
+AM_FLAG_M3264_AMD64_LINUX = @FLAG_M64@
+AM_CFLAGS_AMD64_LINUX = @FLAG_M64@ -fomit-frame-pointer \
+ @PREFERRED_STACK_BOUNDARY@ $(AM_CFLAGS_BASE)
+AM_CCASFLAGS_AMD64_LINUX = $(AM_CPPFLAGS_AMD64_LINUX) @FLAG_M64@ -g
+
+AM_FLAG_M3264_PPC32_LINUX = @FLAG_M32@
+AM_CFLAGS_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE)
+AM_CCASFLAGS_PPC32_LINUX = $(AM_CPPFLAGS_PPC32_LINUX) @FLAG_M32@ -g
+
+AM_FLAG_M3264_PPC64_LINUX = @FLAG_M64@
+AM_CFLAGS_PPC64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE)
+AM_CCASFLAGS_PPC64_LINUX = $(AM_CPPFLAGS_PPC64_LINUX) @FLAG_M64@ -g
+
+AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@
+AM_CFLAGS_ARM_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \
+ $(AM_CFLAGS_BASE) -marm
+AM_CCASFLAGS_ARM_LINUX = $(AM_CPPFLAGS_ARM_LINUX) @FLAG_M32@ -marm -g
+
+AM_FLAG_M3264_PPC32_AIX5 = @FLAG_MAIX32@
+AM_CFLAGS_PPC32_AIX5 = @FLAG_MAIX32@ -mcpu=powerpc $(AM_CFLAGS_BASE)
+AM_CCASFLAGS_PPC32_AIX5 = $(AM_CPPFLAGS_PPC32_AIX5) \
+ @FLAG_MAIX32@ -mcpu=powerpc -g
+
+AM_FLAG_M3264_PPC64_AIX5 = @FLAG_MAIX64@
+AM_CFLAGS_PPC64_AIX5 = @FLAG_MAIX64@ -mcpu=powerpc64 $(AM_CFLAGS_BASE)
+AM_CCASFLAGS_PPC64_AIX5 = $(AM_CPPFLAGS_PPC64_AIX5) \
+ @FLAG_MAIX64@ -mcpu=powerpc64 -g
+
+AM_FLAG_M3264_X86_DARWIN = -arch i386
+AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \
+ -mmacosx-version-min=10.5 \
+ -fno-stack-protector -fno-pic -fno-PIC
+
+AM_CCASFLAGS_X86_DARWIN = $(AM_CPPFLAGS_X86_DARWIN) -arch i386 -g
+
+AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64
+AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \
+ -mmacosx-version-min=10.5 -fno-stack-protector
+AM_CCASFLAGS_AMD64_DARWIN = $(AM_CPPFLAGS_AMD64_DARWIN) -arch x86_64 -g
+
+# Flags for the primary target. These must be used to build the
+# regtests and performance tests. In fact, these must be used to
+# build anything which is built only once on a dual-arch build.
+#
+AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_@VGCONF_PLATFORM_PRI_CAPS@)
+AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+AM_CFLAGS_PRI = $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+
+if VGCONF_HAVE_PLATFORM_SEC
+ AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_@VGCONF_PLATFORM_SEC_CAPS@)
+else
+ AM_FLAG_M3264_SEC =
+endif
+
+
+# Baseline link flags for making vgpreload shared objects.
+#
+PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst
+PRELOAD_LDFLAGS_COMMON_AIX5 = -nodefaultlibs -shared -Wl,-G -Wl,-bnogc
+PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load
+
+PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+PRELOAD_LDFLAGS_PPC64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+PRELOAD_LDFLAGS_PPC32_AIX5 = $(PRELOAD_LDFLAGS_COMMON_AIX5) @FLAG_MAIX32@
+PRELOAD_LDFLAGS_PPC64_AIX5 = $(PRELOAD_LDFLAGS_COMMON_AIX5) @FLAG_MAIX64@
+PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386
+PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64
+
--- /dev/null
+
+AUTOMAKE_OPTIONS = foreign 1.7 dist-bzip2
+
+include $(top_srcdir)/Makefile.all.am
+
+TOOLS = memcheck \
+ cachegrind \
+ callgrind \
+ massif \
+ lackey \
+ none \
+ helgrind \
+ drd
+
+EXP_TOOLS = exp-ptrcheck \
+ exp-bbv \
+ exp-dhat
+
+# DDD: once all tools work on Darwin, TEST_TOOLS and TEST_EXP_TOOLS can be
+# replaced with TOOLS and EXP_TOOLS.
+TEST_TOOLS = $(TOOLS)
+if !VGCONF_OS_IS_DARWIN
+ TEST_EXP_TOOLS = $(EXP_TOOLS)
+else
+ TEST_EXP_TOOLS = exp-bbv
+endif
+
+# Put docs last because building the HTML is slow and we want to get
+# everything else working before we try it.
+SUBDIRS = \
+ include \
+ VEX \
+ coregrind \
+ . \
+ $(TOOLS) \
+ $(EXP_TOOLS) \
+ tests \
+ perf \
+ auxprogs \
+ mpi \
+ docs
+DIST_SUBDIRS = $(SUBDIRS)
+
+SUPP_FILES = \
+ glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp glibc-2.5.supp \
+ glibc-2.6.supp glibc-2.7.supp glibc-2.X.supp.in \
+ aix5libc.supp xfree-3.supp xfree-4.supp \
+ glibc-2.34567-NPTL-helgrind.supp \
+ glibc-2.2-LinuxThreads-helgrind.supp \
+ glibc-2.X-drd.supp \
+ exp-ptrcheck.supp \
+ darwin9.supp darwin9-drd.supp \
+ darwin10.supp darwin10-drd.supp
+DEFAULT_SUPP_FILES = @DEFAULT_SUPP@
+
+# We include all the base .supp files in the distribution, but not
+# default.supp, as it is built from the base .supp files at compile-time.
+dist_noinst_DATA = $(SUPP_FILES)
+
+pkglib_DATA = default.supp
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = valgrind.pc
+
+BUILT_SOURCES = default.supp valgrind.pc
+CLEANFILES = default.supp
+
+default.supp: $(DEFAULT_SUPP_FILES)
+ echo "# This is a generated file, composed of the following suppression rules:" > default.supp
+ echo "# " $(DEFAULT_SUPP_FILES) >> default.supp
+ cat $(DEFAULT_SUPP_FILES) >> default.supp
+
+## Preprend @PERL@ because tests/vg_regtest isn't executable
+regtest: check
+ @PERL@ tests/vg_regtest $(TEST_TOOLS) $(TEST_EXP_TOOLS)
+nonexp-regtest: check
+ @PERL@ tests/vg_regtest $(TEST_TOOLS)
+exp-regtest: check
+ @PERL@ tests/vg_regtest $(TEST_EXP_TOOLS)
+
+## Preprend @PERL@ because tests/vg_perf isn't executable
+perf: check
+ @PERL@ perf/vg_perf perf
+
+# Nb: no need to include any Makefile.am files here, or files included from
+# them, as automake includes them automatically. Also not COPYING, README
+# or NEWS.
+# We include valgrind.spec as well as valgrind.spec.in to save packagers
+# from having to run configure (bug 188560).
+EXTRA_DIST = \
+ COPYING.DOCS \
+ README_DEVELOPERS \
+ README_PACKAGERS \
+ README_MISSING_SYSCALL_OR_IOCTL \
+ valgrind.pc.in \
+ valgrind.spec.in \
+ valgrind.spec
+
+dist_noinst_SCRIPTS = \
+ vg-in-place
+
+all-local: default.supp
+ mkdir -p $(inplacedir)
+ rm -f $(inplacedir)/default.supp
+ ln -s ../default.supp $(inplacedir)
+
+clean-local:
+ rm -rf $(inplacedir)
+
+
--- /dev/null
+# This file is used for tool tests, and also in perf/Makefile.am.
+
+include $(top_srcdir)/Makefile.all.am
+
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \
+ -I$(top_srcdir)/coregrind -I$(top_builddir)/include \
+ -I$(top_srcdir)/VEX/pub \
+ -DVGA_$(VGCONF_ARCH_PRI)=1 \
+ -DVGO_$(VGCONF_OS)=1 \
+ -DVGP_$(VGCONF_ARCH_PRI)_$(VGCONF_OS)=1
+# Nb: Tools need to augment these flags with an arch-selection option, such
+# as $(AM_FLAG_M3264_PRI).
+AM_CFLAGS = -Winline -Wall -Wshadow -g
+AM_CXXFLAGS = -Winline -Wall -Wshadow -g
+# Include AM_CPPFLAGS in AM_CCASFLAGS to allow for older versions of
+# automake; see comments in Makefile.all.am for more detail.
+AM_CCASFLAGS = $(AM_CPPFLAGS)
+
+if VGCONF_OS_IS_DARWIN
+noinst_DSYMS = $(check_PROGRAMS)
+endif
+
+check-local: build-noinst_DSYMS
+
+clean-local: clean-noinst_DSYMS
--- /dev/null
+
+SUBDIRS = . tests
+
+include $(top_srcdir)/Makefile.all.am
+
+#----------------------------------------------------------------------------
+# <tool>-<platform> stuff
+#----------------------------------------------------------------------------
+
+TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@ = \
+ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a \
+ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
+if VGCONF_HAVE_PLATFORM_SEC
+TOOL_DEPENDENCIES_@VGCONF_PLATFORM_SEC_CAPS@ = \
+ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
+ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
+endif
+
+
+TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
+ $(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) $(TOOL_LDADD_COMMON)
+if VGCONF_HAVE_PLATFORM_SEC
+TOOL_LDADD_@VGCONF_PLATFORM_SEC_CAPS@ = \
+ $(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_SEC_CAPS@) $(TOOL_LDADD_COMMON)
+endif
+
+
+# -Wl,--build-id=none is needed when linking tools on Linux. Without this
+# flag newer ld versions (2.20 and later) create a .note.gnu.build-id at the
+# default text segment address, which of course means the resulting executable
+# is unusable. So we have to tell ld not to generate that, with --build-id=none.
+TOOL_LDFLAGS_COMMON_LINUX = \
+ -static -nodefaultlibs -nostartfiles -u _start @FLAG_NO_BUILD_ID@
+TOOL_LDFLAGS_COMMON_AIX5 = \
+ -static -Wl,-e_start_valgrind
+TOOL_LDFLAGS_COMMON_DARWIN = \
+ -nodefaultlibs -nostartfiles -Wl,-u,__start -Wl,-e,__start
+
+TOOL_LDFLAGS_X86_LINUX = \
+ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+
+TOOL_LDFLAGS_AMD64_LINUX = \
+ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+
+TOOL_LDFLAGS_PPC32_LINUX = \
+ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+
+TOOL_LDFLAGS_PPC64_LINUX = \
+ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+
+TOOL_LDFLAGS_ARM_LINUX = \
+ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+
+TOOL_LDFLAGS_PPC32_AIX5 = \
+ $(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX32@
+
+TOOL_LDFLAGS_PPC64_AIX5 = \
+ $(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX64@ -Wl,-bbigtoc
+
+TOOL_LDFLAGS_X86_DARWIN = \
+ $(TOOL_LDFLAGS_COMMON_DARWIN) -arch i386
+
+TOOL_LDFLAGS_AMD64_DARWIN = \
+ $(TOOL_LDFLAGS_COMMON_DARWIN) -arch x86_64
+
+# NB for 64-bit darwin. We may want to set -Wl,-pagezero_size to
+# something smaller than the default of 4G, so as to facilitate
+# loading clients who are also linked thusly (currently m_ume.c
+# will fail to load them). Although such setting is probably
+# better done in link_tool_exe.c.
+#
+# -Wl,-pagezero_size,0x100000000
+
+
+#----------------------------------------------------------------------------
+# vgpreload_<tool>-<platform>.a stuff
+#----------------------------------------------------------------------------
+
+LIBREPLACEMALLOC_X86_LINUX = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-linux.a
+
+LIBREPLACEMALLOC_AMD64_LINUX = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-linux.a
+
+LIBREPLACEMALLOC_PPC32_LINUX = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-linux.a
+
+LIBREPLACEMALLOC_PPC64_LINUX = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-linux.a
+
+LIBREPLACEMALLOC_ARM_LINUX = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-arm-linux.a
+
+LIBREPLACEMALLOC_PPC32_AIX5 = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-aix5.a
+
+LIBREPLACEMALLOC_PPC64_AIX5 = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-aix5.a
+
+LIBREPLACEMALLOC_X86_DARWIN = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-darwin.a
+
+LIBREPLACEMALLOC_AMD64_DARWIN = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-darwin.a
+
+
+LIBREPLACEMALLOC_LDFLAGS_X86_LINUX = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_X86_LINUX) \
+ -Wl,--no-whole-archive
+
+LIBREPLACEMALLOC_LDFLAGS_AMD64_LINUX = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_AMD64_LINUX) \
+ -Wl,--no-whole-archive
+
+LIBREPLACEMALLOC_LDFLAGS_PPC32_LINUX = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_PPC32_LINUX) \
+ -Wl,--no-whole-archive
+
+LIBREPLACEMALLOC_LDFLAGS_PPC64_LINUX = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_PPC64_LINUX) \
+ -Wl,--no-whole-archive
+
+LIBREPLACEMALLOC_LDFLAGS_ARM_LINUX = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_ARM_LINUX) \
+ -Wl,--no-whole-archive
+
+LIBREPLACEMALLOC_LDFLAGS_PPC32_AIX5 = \
+ $(LIBREPLACEMALLOC_PPC32_AIX5)
+
+LIBREPLACEMALLOC_LDFLAGS_PPC64_AIX5 = \
+ $(LIBREPLACEMALLOC_PPC64_AIX5)
+
+LIBREPLACEMALLOC_LDFLAGS_X86_DARWIN = \
+ $(LIBREPLACEMALLOC_X86_DARWIN)
+
+LIBREPLACEMALLOC_LDFLAGS_AMD64_DARWIN = \
+ $(LIBREPLACEMALLOC_AMD64_DARWIN)
+
+#----------------------------------------------------------------------------
+# General stuff
+#----------------------------------------------------------------------------
+
+all-local: inplace-noinst_PROGRAMS inplace-noinst_DSYMS
+
+clean-local: clean-noinst_DSYMS
+
+install-exec-local: install-noinst_PROGRAMS install-noinst_DSYMS
+
--- /dev/null
+# VEX/Makefile is generated from this file at configure-time.
+
+include $(top_srcdir)/Makefile.all.am
+
+#----------------------------------------------------------------------------
+# Headers, etc
+#----------------------------------------------------------------------------
+
+EXTRA_DIST = \
+ HACKING.README \
+ LICENSE.README \
+ LICENSE.GPL \
+ quote.txt \
+ newline.txt \
+ auxprogs/genoffsets.c
+
+pkginclude_HEADERS = \
+ pub/libvex.h \
+ pub/libvex_basictypes.h \
+ pub/libvex_emwarn.h \
+ pub/libvex_guest_offsets.h \
+ pub/libvex_guest_x86.h \
+ pub/libvex_guest_amd64.h \
+ pub/libvex_guest_ppc32.h \
+ pub/libvex_guest_ppc64.h \
+ pub/libvex_guest_arm.h \
+ pub/libvex_ir.h \
+ pub/libvex_trc_values.h
+
+noinst_HEADERS = \
+ priv/main_globals.h \
+ priv/main_util.h \
+ priv/ir_match.h \
+ priv/ir_opt.h \
+ priv/guest_generic_bb_to_IR.h \
+ priv/guest_generic_x87.h \
+ priv/guest_x86_defs.h \
+ priv/guest_amd64_defs.h \
+ priv/guest_ppc_defs.h \
+ priv/guest_arm_defs.h \
+ priv/host_generic_regs.h \
+ priv/host_generic_simd64.h \
+ priv/host_generic_simd128.h \
+ priv/host_x86_defs.h \
+ priv/host_amd64_defs.h \
+ priv/host_ppc_defs.h \
+ priv/host_arm_defs.h
+
+BUILT_SOURCES = pub/libvex_guest_offsets.h
+CLEANFILES = pub/libvex_guest_offsets.h
+
+# This is very uggerly. Need to sed out both "xyzzyN" and
+# "xyzzy$N" since gcc on different targets emits the constants
+# differently -- with a leading $ on x86/amd64 but none on ppc32/64.
+pub/libvex_guest_offsets.h: auxprogs/genoffsets.c \
+ pub/libvex_basictypes.h \
+ pub/libvex_guest_x86.h \
+ pub/libvex_guest_amd64.h \
+ pub/libvex_guest_ppc32.h \
+ pub/libvex_guest_ppc64.h \
+ pub/libvex_guest_arm.h
+ rm -f auxprogs/genoffsets.s
+ $(CC) $(LIBVEX_CFLAGS) \
+ $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) \
+ -O -S -o auxprogs/genoffsets.s \
+ auxprogs/genoffsets.c
+ grep xyzzy auxprogs/genoffsets.s | grep define \
+ | sed "s/xyzzy\\$$//g" \
+ | sed "s/xyzzy#//g" \
+ | sed "s/xyzzy//g" \
+ > pub/libvex_guest_offsets.h
+ rm -f auxprogs/genoffsets.s
+
+#----------------------------------------------------------------------------
+# libvex-<platform>.a
+#----------------------------------------------------------------------------
+
+pkglib_LIBRARIES = libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
+if VGCONF_HAVE_PLATFORM_SEC
+pkglib_LIBRARIES += libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
+endif
+
+LIBVEX_SOURCES_COMMON = \
+ priv/main_globals.c \
+ priv/main_main.c \
+ priv/main_util.c \
+ priv/ir_defs.c \
+ priv/ir_match.c \
+ priv/ir_opt.c \
+ priv/guest_generic_bb_to_IR.c \
+ priv/guest_generic_x87.c \
+ priv/guest_x86_helpers.c \
+ priv/guest_x86_toIR.c \
+ priv/guest_amd64_helpers.c \
+ priv/guest_amd64_toIR.c \
+ priv/guest_ppc_helpers.c \
+ priv/guest_ppc_toIR.c \
+ priv/guest_arm_helpers.c \
+ priv/guest_arm_toIR.c \
+ priv/host_generic_regs.c \
+ priv/host_generic_simd64.c \
+ priv/host_generic_simd128.c \
+ priv/host_generic_reg_alloc2.c \
+ priv/host_x86_defs.c \
+ priv/host_x86_isel.c \
+ priv/host_amd64_defs.c \
+ priv/host_amd64_isel.c \
+ priv/host_ppc_defs.c \
+ priv/host_ppc_isel.c \
+ priv/host_arm_defs.c \
+ priv/host_arm_isel.c
+
+LIBVEX_CFLAGS = \
+ -Wbad-function-cast \
+ -Wcast-qual \
+ -Wcast-align \
+ -fstrict-aliasing
+
+libvex_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_SOURCES = $(LIBVEX_SOURCES_COMMON)
+libvex_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_CPPFLAGS = \
+ $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) -Ipriv
+libvex_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_CFLAGS = \
+ $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) $(LIBVEX_CFLAGS)
+if VGCONF_HAVE_PLATFORM_SEC
+libvex_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_SOURCES = $(LIBVEX_SOURCES_COMMON)
+libvex_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_CPPFLAGS = \
+ $(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) -Ipriv
+libvex_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_CFLAGS = \
+ $(AM_CFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) $(LIBVEX_CFLAGS)
+endif
+
--- /dev/null
+
+Release 3.6.0 (21 October 2010)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.6.0 is a feature release with many significant improvements and the
+usual collection of bug fixes.
+
+This release supports X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux,
+PPC64/Linux, X86/Darwin and AMD64/Darwin. Support for recent distros
+and toolchain components (glibc 2.12, gcc 4.5, OSX 10.6) has been added.
+
+ -------------------------
+
+Here are some highlights. Details are shown further down:
+
+* Support for ARM/Linux.
+
+* Support for recent Linux distros: Ubuntu 10.10 and Fedora 14.
+
+* Support for Mac OS X 10.6, both 32- and 64-bit executables.
+
+* Support for the SSE4.2 instruction set.
+
+* Enhancements to the Callgrind profiler, including the ability to
+ handle CPUs with three levels of cache.
+
+* A new experimental heap profiler, DHAT.
+
+* A huge number of bug fixes and small enhancements.
+
+ -------------------------
+
+Here are details of the above changes, together with descriptions of
+many other changes, and a list of fixed bugs.
+
+* ================== PLATFORM CHANGES =================
+
+* Support for ARM/Linux. Valgrind now runs on ARMv7 capable CPUs
+ running Linux. It is known to work on Ubuntu 10.04, Ubuntu 10.10,
+ and Maemo 5, so you can run Valgrind on your Nokia N900 if you want.
+
+ This requires a CPU capable of running the ARMv7-A instruction set
+ (Cortex A5, A8 and A9). Valgrind provides fairly complete coverage
+ of the user space instruction set, including ARM and Thumb integer
+ code, VFPv3, NEON and V6 media instructions. The Memcheck,
+ Cachegrind and Massif tools work properly; other tools work to
+ varying degrees.
+
+* Support for recent Linux distros (Ubuntu 10.10 and Fedora 14), along
+ with support for recent releases of the underlying toolchain
+ components, notably gcc-4.5 and glibc-2.12.
+
+* Support for Mac OS X 10.6, both 32- and 64-bit executables. 64-bit
+ support also works much better on OS X 10.5, and is as solid as
+ 32-bit support now.
+
+* Support for the SSE4.2 instruction set. SSE4.2 is supported in
+ 64-bit mode. In 32-bit mode, support is only available up to and
+ including SSSE3. Some exceptions: SSE4.2 AES instructions are not
+ supported in 64-bit mode, and 32-bit mode does in fact support the
+ bare minimum SSE4 instructions to needed to run programs on Mac OS X
+ 10.6 on 32-bit targets.
+
+* Support for IBM POWER6 cpus has been improved. The Power ISA up to
+ and including version 2.05 is supported.
+
+* ==================== TOOL CHANGES ====================
+
+* Cachegrind has a new processing script, cg_diff, which finds the
+ difference between two profiles. It's very useful for evaluating
+ the performance effects of a change in a program.
+
+ Related to this change, the meaning of cg_annotate's (rarely-used)
+ --threshold option has changed; this is unlikely to affect many
+ people, if you do use it please see the user manual for details.
+
+* Callgrind now can do branch prediction simulation, similar to
+ Cachegrind. In addition, it optionally can count the number of
+ executed global bus events. Both can be used for a better
+ approximation of a "Cycle Estimation" as derived event (you need to
+ update the event formula in KCachegrind yourself).
+
+* Cachegrind and Callgrind now refer to the LL (last-level) cache
+ rather than the L2 cache. This is to accommodate machines with
+ three levels of caches -- if Cachegrind/Callgrind auto-detects the
+ cache configuration of such a machine it will run the simulation as
+ if the L2 cache isn't present. This means the results are less
+ likely to match the true result for the machine, but
+ Cachegrind/Callgrind's results are already only approximate, and
+ should not be considered authoritative. The results are still
+ useful for giving a general idea about a program's locality.
+
+* Massif has a new option, --pages-as-heap, which is disabled by
+ default. When enabled, instead of tracking allocations at the level
+ of heap blocks (as allocated with malloc/new/new[]), it instead
+ tracks memory allocations at the level of memory pages (as mapped by
+ mmap, brk, etc). Each mapped page is treated as its own block.
+ Interpreting the page-level output is harder than the heap-level
+ output, but this option is useful if you want to account for every
+ byte of memory used by a program.
+
+* DRD has two new command-line options: --free-is-write and
+ --trace-alloc. The former allows to detect reading from already freed
+ memory, and the latter allows tracing of all memory allocations and
+ deallocations.
+
+* DRD has several new annotations. Custom barrier implementations can
+ now be annotated, as well as benign races on static variables.
+
+* DRD's happens before / happens after annotations have been made more
+ powerful, so that they can now also be used to annotate e.g. a smart
+ pointer implementation.
+
+* Helgrind's annotation set has also been drastically improved, so as
+ to provide to users a general set of annotations to describe locks,
+ semaphores, barriers and condition variables. Annotations to
+ describe thread-safe reference counted heap objects have also been
+ added.
+
+* Memcheck has a new command-line option, --show-possibly-lost, which
+ is enabled by default. When disabled, the leak detector will not
+ show possibly-lost blocks.
+
+* A new experimental heap profiler, DHAT (Dynamic Heap Analysis Tool),
+ has been added. DHAT keeps track of allocated heap blocks, and also
+ inspects every memory reference to see which block (if any) is being
+ accessed. This gives a lot of insight into block lifetimes,
+ utilisation, turnover, liveness, and the location of hot and cold
+ fields. You can use DHAT to do hot-field profiling.
+
+* ==================== OTHER CHANGES ====================
+
+* Improved support for unfriendly self-modifying code: the extra
+ overhead incurred by --smc-check=all has been reduced by
+ approximately a factor of 5 as compared with 3.5.0.
+
+* Ability to show directory names for source files in error messages.
+ This is combined with a flexible mechanism for specifying which
+ parts of the paths should be shown. This is enabled by the new flag
+ --fullpath-after.
+
+* A new flag, --require-text-symbol, which will stop the run if a
+ specified symbol is not found it a given shared object when it is
+ loaded into the process. This makes advanced working with function
+ intercepting and wrapping safer and more reliable.
+
+* Improved support for the Valkyrie GUI, version 2.0.0. GUI output
+ and control of Valgrind is now available for the tools Memcheck and
+ Helgrind. XML output from Valgrind is available for Memcheck,
+ Helgrind and exp-Ptrcheck.
+
+* More reliable stack unwinding on amd64-linux, particularly in the
+ presence of function wrappers, and with gcc-4.5 compiled code.
+
+* Modest scalability (performance improvements) for massive
+ long-running applications, particularly for those with huge amounts
+ of code.
+
+* Support for analyzing programs running under Wine with has been
+ improved. The header files <valgrind/valgrind.h>,
+ <valgrind/memcheck.h> and <valgrind/drd.h> can now be used in
+ Windows-programs compiled with MinGW or one of the Microsoft Visual
+ Studio compilers.
+
+* A rare but serious error in the 64-bit x86 CPU simulation was fixed.
+ The 32-bit simulator was not affected. This did not occur often,
+ but when it did would usually crash the program under test.
+ Bug 245925.
+
+* A large number of bugs were fixed. These are shown below.
+
+* A number of bugs were investigated, and were candidates for fixing,
+ but are not fixed in 3.6.0, due to lack of developer time. They may
+ get fixed in later releases. They are:
+
+ 194402 vex amd64->IR: 0x48 0xF 0xAE 0x4 0x24 0x49 (FXSAVE64)
+ 212419 false positive "lock order violated" (A+B vs A)
+ 213685 Undefined value propagates past dependency breaking instruction
+ 216837 Incorrect instrumentation of NSOperationQueue on Darwin
+ 237920 valgrind segfault on fork failure
+ 242137 support for code compiled by LLVM-2.8
+ 242423 Another unknown Intel cache config value
+ 243232 Inconsistent Lock Orderings report with trylock
+ 243483 ppc: callgrind triggers VEX assertion failure
+ 243935 Helgrind: implementation of ANNOTATE_HAPPENS_BEFORE() is wrong
+ 244677 Helgrind crash hg_main.c:616 (map_threads_lookup): Assertion
+ 'thr' failed.
+ 246152 callgrind internal error after pthread_cancel on 32 Bit Linux
+ 249435 Analyzing wine programs with callgrind triggers a crash
+ 250038 ppc64: Altivec lvsr and lvsl instructions fail their regtest
+ 250065 Handling large allocations
+ 250101 huge "free" memory usage due to m_mallocfree.c
+ "superblocks fragmentation"
+ 251569 vex amd64->IR: 0xF 0x1 0xF9 0x8B 0x4C 0x24 (RDTSCP)
+ 252091 Callgrind on ARM does not detect function returns correctly
+ 252600 [PATCH] Allow lhs to be a pointer for shl/shr
+ 254420 memory pool tracking broken
+ n-i-bz support for adding symbols for JIT generated code
+
+
+The following bugs have been fixed or resolved. Note that "n-i-bz"
+stands for "not in bugzilla" -- that is, a bug that was reported to us
+but never got a bugzilla entry. We encourage you to file bugs in
+bugzilla (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
+mailing the developers (or mailing lists) directly -- bugs that are
+not entered into bugzilla tend to get forgotten about or ignored.
+
+To see details of a given bug, visit
+https://bugs.kde.org/show_bug.cgi?id=XXXXXX
+where XXXXXX is the bug number as listed below.
+
+135264 dcbzl instruction missing
+142688 == 250799
+153699 Valgrind should report unaligned reads with movdqa
+180217 == 212335
+190429 Valgrind reports lost of errors in ld.so
+ with x86_64 2.9.90 glibc
+197266 valgrind appears to choke on the xmms instruction
+ "roundsd" on x86_64
+197988 Crash when demangling very large symbol names
+202315 unhandled syscall: 332 (inotify_init1)
+203256 Add page-level profiling to Massif
+205093 dsymutil=yes needs quotes, locking (partial fix)
+205241 Snow Leopard 10.6 support (partial fix)
+206600 Leak checker fails to upgrade indirect blocks when their
+ parent becomes reachable
+210935 port valgrind.h (not valgrind) to win32 so apps run under
+ wine can make client requests
+211410 vex amd64->IR: 0x15 0xFF 0xFF 0x0 0x0 0x89
+ within Linux ip-stack checksum functions
+212335 unhandled instruction bytes: 0xF3 0xF 0xBD 0xC0
+ (lzcnt %eax,%eax)
+213685 Undefined value propagates past dependency breaking instruction
+ (partial fix)
+215914 Valgrind inserts bogus empty environment variable
+217863 == 197988
+219538 adjtimex syscall wrapper wrong in readonly adjtime mode
+222545 shmat fails under valgind on some arm targets
+222560 ARM NEON support
+230407 == 202315
+231076 == 202315
+232509 Docs build fails with formatting inside <title></title> elements
+232793 == 202315
+235642 [PATCH] syswrap-linux.c: support evdev EVIOCG* ioctls
+236546 vex x86->IR: 0x66 0xF 0x3A 0xA
+237202 vex amd64->IR: 0xF3 0xF 0xB8 0xC0 0x49 0x3B
+237371 better support for VALGRIND_MALLOCLIKE_BLOCK
+237485 symlink (syscall 57) is not supported on Mac OS
+237723 sysno == 101 exp-ptrcheck: the 'impossible' happened:
+ unhandled syscall
+238208 is_just_below_ESP doesn't take into account red-zone
+238345 valgrind passes wrong $0 when executing a shell script
+238679 mq_timedreceive syscall doesn't flag the reception buffer
+ as "defined"
+238696 fcntl command F_DUPFD_CLOEXEC not supported
+238713 unhandled instruction bytes: 0x66 0xF 0x29 0xC6
+238713 unhandled instruction bytes: 0x66 0xF 0x29 0xC6
+238745 3.5.0 Make fails on PPC Altivec opcodes, though configure
+ says "Altivec off"
+239992 vex amd64->IR: 0x48 0xF 0xC4 0xC1 0x0 0x48
+240488 == 197988
+240639 == 212335
+241377 == 236546
+241903 == 202315
+241920 == 212335
+242606 unhandled syscall: setegid (in Ptrcheck)
+242814 Helgrind "Impossible has happened" during
+ QApplication::initInstance();
+243064 Valgrind attempting to read debug information from iso
+243270 Make stack unwinding in Valgrind wrappers more reliable
+243884 exp-ptrcheck: the 'impossible happened: unhandled syscall
+ sysno = 277 (mq_open)
+244009 exp-ptrcheck unknown syscalls in analyzing lighttpd
+244493 ARM VFP d16-d31 registers support
+244670 add support for audit_session_self syscall on Mac OS 10.6
+244921 The xml report of helgrind tool is not well format
+244923 In the xml report file, the <preamble> not escape the
+ xml char, eg '<','&','>'
+245535 print full path names in plain text reports
+245925 x86-64 red zone handling problem
+246258 Valgrind not catching integer underruns + new [] s
+246311 reg/reg cmpxchg doesn't work on amd64
+246549 unhandled syscall unix:277 while testing 32-bit Darwin app
+246888 Improve Makefile.vex.am
+247510 [OS X 10.6] Memcheck reports unaddressable bytes passed
+ to [f]chmod_extended
+247526 IBM POWER6 (ISA 2.05) support is incomplete
+247561 Some leak testcases fails due to reachable addresses in
+ caller save regs
+247875 sizeofIRType to handle Ity_I128
+247894 [PATCH] unhandled syscall sys_readahead
+247980 Doesn't honor CFLAGS passed to configure
+248373 darwin10.supp is empty in the trunk
+248822 Linux FIBMAP ioctl has int parameter instead of long
+248893 [PATCH] make readdwarf.c big endianess safe to enable
+ unwinding on big endian systems
+249224 Syscall 336 not supported (SYS_proc_info)
+249359 == 245535
+249775 Incorrect scheme for detecting NEON capabilities of host CPU
+249943 jni JVM init fails when using valgrind
+249991 Valgrind incorrectly declares AESKEYGENASSIST support
+ since VEX r2011
+249996 linux/arm: unhandled syscall: 181 (__NR_pwrite64)
+250799 frexp$fenv_access_off function generates SIGILL
+250998 vex x86->IR: unhandled instruction bytes: 0x66 0x66 0x66 0x2E
+251251 support pclmulqdq insn
+251362 valgrind: ARM: attach to debugger either fails or provokes
+ kernel oops
+251674 Unhandled syscall 294
+251818 == 254550
+
+254257 Add support for debugfiles found by build-id
+254550 [PATCH] Implement DW_ATE_UTF (DWARF4)
+254646 Wrapped functions cause stack misalignment on OS X
+ (and possibly Linux)
+254556 ARM: valgrinding anything fails with SIGSEGV for 0xFFFF0FA0
+
+(3.6.0: 21 October 2010, vex r2068, valgrind r11471).
+
+
+
+Release 3.5.0 (19 August 2009)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.5.0 is a feature release with many significant improvements and the
+usual collection of bug fixes. The main improvement is that Valgrind
+now works on Mac OS X.
+
+This release supports X86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux
+and X86/Darwin. Support for recent distros and toolchain components
+(glibc 2.10, gcc 4.5) has been added.
+
+ -------------------------
+
+Here is a short summary of the changes. Details are shown further
+down:
+
+* Support for Mac OS X (10.5.x).
+
+* Improvements and simplifications to Memcheck's leak checker.
+
+* Clarification and simplifications in various aspects of Valgrind's
+ text output.
+
+* XML output for Helgrind and Ptrcheck.
+
+* Performance and stability improvements for Helgrind and DRD.
+
+* Genuinely atomic support for x86/amd64/ppc atomic instructions.
+
+* A new experimental tool, BBV, useful for computer architecture
+ research.
+
+* Improved Wine support, including ability to read Windows PDB
+ debuginfo.
+
+ -------------------------
+
+Here are details of the above changes, followed by descriptions of
+many other minor changes, and a list of fixed bugs.
+
+
+* Valgrind now runs on Mac OS X. (Note that Mac OS X is sometimes
+ called "Darwin" because that is the name of the OS core, which is the
+ level that Valgrind works at.)
+
+ Supported systems:
+
+ - It requires OS 10.5.x (Leopard). Porting to 10.4.x is not planned
+ because it would require work and 10.4 is only becoming less common.
+
+ - 32-bit programs on x86 and AMD64 (a.k.a x86-64) machines are supported
+ fairly well. For 10.5.x, 32-bit programs are the default even on
+ 64-bit machines, so it handles most current programs.
+
+ - 64-bit programs on x86 and AMD64 (a.k.a x86-64) machines are not
+ officially supported, but simple programs at least will probably work.
+ However, start-up is slow.
+
+ - PowerPC machines are not supported.
+
+ Things that don't work:
+
+ - The Ptrcheck tool.
+
+ - Objective-C garbage collection.
+
+ - --db-attach=yes.
+
+ - If you have Rogue Amoeba's "Instant Hijack" program installed,
+ Valgrind will fail with a SIGTRAP at start-up. See
+ https://bugs.kde.org/show_bug.cgi?id=193917 for details and a
+ simple work-around.
+
+ Usage notes:
+
+ - You will likely find --dsymutil=yes a useful option, as error
+ messages may be imprecise without it.
+
+ - Mac OS X support is new and therefore will be less robust than the
+ Linux support. Please report any bugs you find.
+
+ - Threaded programs may run more slowly than on Linux.
+
+ Many thanks to Greg Parker for developing this port over several years.
+
+
+* Memcheck's leak checker has been improved.
+
+ - The results for --leak-check=summary now match the summary results
+ for --leak-check=full. Previously they could differ because
+ --leak-check=summary counted "indirectly lost" blocks and
+ "suppressed" blocks as "definitely lost".
+
+ - Blocks that are only reachable via at least one interior-pointer,
+ but are directly pointed to by a start-pointer, were previously
+ marked as "still reachable". They are now correctly marked as
+ "possibly lost".
+
+ - The default value for the --leak-resolution option has been
+ changed from "low" to "high". In general, this means that more
+ leak reports will be produced, but each leak report will describe
+ fewer leaked blocks.
+
+ - With --leak-check=full, "definitely lost" and "possibly lost"
+ leaks are now considered as proper errors, ie. they are counted
+ for the "ERROR SUMMARY" and affect the behaviour of
+ --error-exitcode. These leaks are not counted as errors if
+ --leak-check=summary is specified, however.
+
+ - Documentation for the leak checker has been improved.
+
+
+* Various aspects of Valgrind's text output have changed.
+
+ - Valgrind's start-up message has changed. It is shorter but also
+ includes the command being run, which makes it easier to use
+ --trace-children=yes. An example:
+
+ - Valgrind's shut-down messages have also changed. This is most
+ noticeable with Memcheck, where the leak summary now occurs before
+ the error summary. This change was necessary to allow leaks to be
+ counted as proper errors (see the description of the leak checker
+ changes above for more details). This was also necessary to fix a
+ longstanding bug in which uses of suppressions against leaks were
+ not "counted", leading to difficulties in maintaining suppression
+ files (see https://bugs.kde.org/show_bug.cgi?id=186790).
+
+ - Behavior of -v has changed. In previous versions, -v printed out
+ a mixture of marginally-user-useful information, and tool/core
+ statistics. The statistics printing has now been moved to its own
+ flag, --stats=yes. This means -v is less verbose and more likely
+ to convey useful end-user information.
+
+ - The format of some (non-XML) stack trace entries has changed a
+ little. Previously there were six possible forms:
+
+ 0x80483BF: really (a.c:20)
+ 0x80483BF: really (in /foo/a.out)
+ 0x80483BF: really
+ 0x80483BF: (within /foo/a.out)
+ 0x80483BF: ??? (a.c:20)
+ 0x80483BF: ???
+
+ The third and fourth of these forms have been made more consistent
+ with the others. The six possible forms are now:
+
+ 0x80483BF: really (a.c:20)
+ 0x80483BF: really (in /foo/a.out)
+ 0x80483BF: really (in ???)
+ 0x80483BF: ??? (in /foo/a.out)
+ 0x80483BF: ??? (a.c:20)
+ 0x80483BF: ???
+
+ Stack traces produced when --xml=yes is specified are different
+ and unchanged.
+
+
+* Helgrind and Ptrcheck now support XML output, so they can be used
+ from GUI tools. Also, the XML output mechanism has been
+ overhauled.
+
+ - The XML format has been overhauled and generalised, so it is more
+ suitable for error reporting tools in general. The Memcheck
+ specific aspects of it have been removed. The new format, which
+ is an evolution of the old format, is described in
+ docs/internals/xml-output-protocol4.txt.
+
+ - Memcheck has been updated to use the new format.
+
+ - Helgrind and Ptrcheck are now able to emit output in this format.
+
+ - The XML output mechanism has been overhauled. XML is now output
+ to its own file descriptor, which means that:
+
+ * Valgrind can output text and XML independently.
+
+ * The longstanding problem of XML output being corrupted by
+ unexpected un-tagged text messages is solved.
+
+ As before, the destination for text output is specified using
+ --log-file=, --log-fd= or --log-socket=.
+
+ As before, XML output for a tool is enabled using --xml=yes.
+
+ Because there's a new XML output channel, the XML output
+ destination is now specified by --xml-file=, --xml-fd= or
+ --xml-socket=.
+
+ Initial feedback has shown this causes some confusion. To
+ clarify, the two envisaged usage scenarios are:
+
+ (1) Normal text output. In this case, do not specify --xml=yes
+ nor any of --xml-file=, --xml-fd= or --xml-socket=.
+
+ (2) XML output. In this case, specify --xml=yes, and one of
+ --xml-file=, --xml-fd= or --xml-socket= to select the XML
+ destination, one of --log-file=, --log-fd= or --log-socket=
+ to select the destination for any remaining text messages,
+ and, importantly, -q.
+
+ -q makes Valgrind completely silent on the text channel,
+ except in the case of critical failures, such as Valgrind
+ itself segfaulting, or failing to read debugging information.
+ Hence, in this scenario, it suffices to check whether or not
+ any output appeared on the text channel. If yes, then it is
+ likely to be a critical error which should be brought to the
+ attention of the user. If no (the text channel produced no
+ output) then it can be assumed that the run was successful.
+
+ This allows GUIs to make the critical distinction they need to
+ make (did the run fail or not?) without having to search or
+ filter the text output channel in any way.
+
+ It is also recommended to use --child-silent-after-fork=yes in
+ scenario (2).
+
+
+* Improvements and changes in Helgrind:
+
+ - XML output, as described above
+
+ - Checks for consistent association between pthread condition
+ variables and their associated mutexes are now performed.
+
+ - pthread_spinlock functions are supported.
+
+ - Modest performance improvements.
+
+ - Initial (skeletal) support for describing the behaviour of
+ non-POSIX synchronisation objects through ThreadSanitizer
+ compatible ANNOTATE_* macros.
+
+ - More controllable tradeoffs between performance and the level of
+ detail of "previous" accesses in a race. There are now three
+ settings:
+
+ * --history-level=full. This is the default, and was also the
+ default in 3.4.x. It shows both stacks involved in a race, but
+ requires a lot of memory and can be very slow in programs that
+ do many inter-thread synchronisation events.
+
+ * --history-level=none. This only shows the later stack involved
+ in a race. This can be much faster than --history-level=full,
+ but makes it much more difficult to find the other access
+ involved in the race.
+
+ The new intermediate setting is
+
+ * --history-level=approx
+
+ For the earlier (other) access, two stacks are presented. The
+ earlier access is guaranteed to be somewhere in between the two
+ program points denoted by those stacks. This is not as useful
+ as showing the exact stack for the previous access (as per
+ --history-level=full), but it is better than nothing, and it's
+ almost as fast as --history-level=none.
+
+
+* New features and improvements in DRD:
+
+ - The error messages printed by DRD are now easier to interpret.
+ Instead of using two different numbers to identify each thread
+ (Valgrind thread ID and DRD thread ID), DRD does now identify
+ threads via a single number (the DRD thread ID). Furthermore
+ "first observed at" information is now printed for all error
+ messages related to synchronization objects.
+
+ - Added support for named semaphores (sem_open() and sem_close()).
+
+ - Race conditions between pthread_barrier_wait() and
+ pthread_barrier_destroy() calls are now reported.
+
+ - Added support for custom allocators through the macros
+ VALGRIND_MALLOCLIKE_BLOCK() VALGRIND_FREELIKE_BLOCK() (defined in
+ in <valgrind/valgrind.h>). An alternative for these two macros is
+ the new client request VG_USERREQ__DRD_CLEAN_MEMORY (defined in
+ <valgrind/drd.h>).
+
+ - Added support for annotating non-POSIX synchronization objects
+ through several new ANNOTATE_*() macros.
+
+ - OpenMP: added support for the OpenMP runtime (libgomp) included
+ with gcc versions 4.3.0 and 4.4.0.
+
+ - Faster operation.
+
+ - Added two new command-line options (--first-race-only and
+ --segment-merging-interval).
+
+
+* Genuinely atomic support for x86/amd64/ppc atomic instructions
+
+ Valgrind will now preserve (memory-access) atomicity of LOCK-
+ prefixed x86/amd64 instructions, and any others implying a global
+ bus lock. Ditto for PowerPC l{w,d}arx/st{w,d}cx. instructions.
+
+ This means that Valgrinded processes will "play nicely" in
+ situations where communication with other processes, or the kernel,
+ is done through shared memory and coordinated with such atomic
+ instructions. Prior to this change, such arrangements usually
+ resulted in hangs, races or other synchronisation failures, because
+ Valgrind did not honour atomicity of such instructions.
+
+
+* A new experimental tool, BBV, has been added. BBV generates basic
+ block vectors for use with the SimPoint analysis tool, which allows
+ a program's overall behaviour to be approximated by running only a
+ fraction of it. This is useful for computer architecture
+ researchers. You can run BBV by specifying --tool=exp-bbv (the
+ "exp-" prefix is short for "experimental"). BBV was written by
+ Vince Weaver.
+
+
+* Modestly improved support for running Windows applications under
+ Wine. In particular, initial support for reading Windows .PDB debug
+ information has been added.
+
+
+* A new Memcheck client request VALGRIND_COUNT_LEAK_BLOCKS has been
+ added. It is similar to VALGRIND_COUNT_LEAKS but counts blocks
+ instead of bytes.
+
+
+* The Valgrind client requests VALGRIND_PRINTF and
+ VALGRIND_PRINTF_BACKTRACE have been changed slightly. Previously,
+ the string was always printed immediately on its own line. Now, the
+ string will be added to a buffer but not printed until a newline is
+ encountered, or other Valgrind output is printed (note that for
+ VALGRIND_PRINTF_BACKTRACE, the back-trace itself is considered
+ "other Valgrind output"). This allows you to use multiple
+ VALGRIND_PRINTF calls to build up a single output line, and also to
+ print multiple output lines with a single request (by embedding
+ multiple newlines in the string).
+
+
+* The graphs drawn by Massif's ms_print program have changed slightly:
+
+ - The half-height chars '.' and ',' are no longer drawn, because
+ they are confusing. The --y option can be used if the default
+ y-resolution is not high enough.
+
+ - Horizontal lines are now drawn after the top of a snapshot if
+ there is a gap until the next snapshot. This makes it clear that
+ the memory usage has not dropped to zero between snapshots.
+
+
+* Something that happened in 3.4.0, but wasn't clearly announced: the
+ option --read-var-info=yes can be used by some tools (Memcheck,
+ Helgrind and DRD). When enabled, it causes Valgrind to read DWARF3
+ variable type and location information. This makes those tools
+ start up more slowly and increases memory consumption, but
+ descriptions of data addresses in error messages become more
+ detailed.
+
+
+* exp-Omega, an experimental instantaneous leak-detecting tool, was
+ disabled in 3.4.0 due to a lack of interest and maintenance,
+ although the source code was still in the distribution. The source
+ code has now been removed from the distribution. For anyone
+ interested, the removal occurred in SVN revision r10247.
+
+
+* Some changes have been made to the build system.
+
+ - VEX/ is now integrated properly into the build system. This means
+ that dependency tracking within VEX/ now works properly, "make
+ install" will work without requiring "make" before it, and
+ parallel builds (ie. 'make -j') now work (previously a
+ .NOTPARALLEL directive was used to serialize builds, ie. 'make -j'
+ was effectively ignored).
+
+ - The --with-vex configure option has been removed. It was of
+ little use and removing it simplified the build system.
+
+ - The location of some install files has changed. This should not
+ affect most users. Those who might be affected:
+
+ * For people who use Valgrind with MPI programs, the installed
+ libmpiwrap.so library has moved from
+ $(INSTALL)/<platform>/libmpiwrap.so to
+ $(INSTALL)/libmpiwrap-<platform>.so.
+
+ * For people who distribute standalone Valgrind tools, the
+ installed libraries such as $(INSTALL)/<platform>/libcoregrind.a
+ have moved to $(INSTALL)/libcoregrind-<platform>.a.
+
+ These changes simplify the build system.
+
+ - Previously, all the distributed suppression (*.supp) files were
+ installed. Now, only default.supp is installed. This should not
+ affect users as the other installed suppression files were not
+ read; the fact that they were installed was a mistake.
+
+
+* KNOWN LIMITATIONS:
+
+ - Memcheck is unusable with the Intel compiler suite version 11.1,
+ when it generates code for SSE2-and-above capable targets. This
+ is because of icc's use of highly optimised inlined strlen
+ implementations. It causes Memcheck to report huge numbers of
+ false errors even in simple programs. Helgrind and DRD may also
+ have problems.
+
+ Versions 11.0 and earlier may be OK, but this has not been
+ properly tested.
+
+
+The following bugs have been fixed or resolved. Note that "n-i-bz"
+stands for "not in bugzilla" -- that is, a bug that was reported to us
+but never got a bugzilla entry. We encourage you to file bugs in
+bugzilla (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
+mailing the developers (or mailing lists) directly -- bugs that are
+not entered into bugzilla tend to get forgotten about or ignored.
+
+To see details of a given bug, visit
+https://bugs.kde.org/show_bug.cgi?id=XXXXXX
+where XXXXXX is the bug number as listed below.
+
+84303 How about a LockCheck tool?
+91633 dereference of null ptr in vgPlain_st_basetype
+97452 Valgrind doesn't report any pthreads problems
+100628 leak-check gets assertion failure when using
+ VALGRIND_MALLOCLIKE_BLOCK on malloc()ed memory
+108528 NPTL pthread cleanup handlers not called
+110126 Valgrind 2.4.1 configure.in tramples CFLAGS
+110128 mallinfo is not implemented...
+110770 VEX: Generated files not always updated when making valgrind
+111102 Memcheck: problems with large (memory footprint) applications
+115673 Vex's decoder should never assert
+117564 False positive: Syscall param clone(child_tidptr) contains
+ uninitialised byte(s)
+119404 executing ssh from inside valgrind fails
+133679 Callgrind does not write path names to sources with dwarf debug
+ info
+135847 configure.in problem with non gnu compilers (and possible fix)
+136154 threads.c:273 (vgCallgrind_post_signal): Assertion
+ '*(vgCallgrind_current_fn_stack.top) == 0' failed.
+136230 memcheck reports "possibly lost", should be "still reachable"
+137073 NULL arg to MALLOCLIKE_BLOCK causes crash
+137904 Valgrind reports a memory leak when using POSIX threads,
+ while it shouldn't
+139076 valgrind VT_GETSTATE error
+142228 complaint of elf_dynamic_do_rela in trivial usage
+145347 spurious warning with USBDEVFS_REAPURB
+148441 (wine) can't find memory leak in Wine, win32 binary
+ executable file.
+148742 Leak-check fails assert on exit
+149878 add (proper) check for calloc integer overflow
+150606 Call graph is broken when using callgrind control
+152393 leak errors produce an exit code of 0. I need some way to
+ cause leak errors to result in a nonzero exit code.
+157154 documentation (leak-resolution doc speaks about num-callers
+ def=4) + what is a loss record
+159501 incorrect handling of ALSA ioctls
+162020 Valgrinding an empty/zero-byte file crashes valgrind
+162482 ppc: Valgrind crashes while reading stabs information
+162718 x86: avoid segment selector 0 in sys_set_thread_area()
+163253 (wine) canonicaliseSymtab forgot some fields in DiSym
+163560 VEX/test_main.c is missing from valgrind-3.3.1
+164353 malloc_usable_size() doesn't return a usable size
+165468 Inconsistent formatting in memcheck manual -- please fix
+169505 main.c:286 (endOfInstr):
+ Assertion 'ii->cost_offset == *cost_offset' failed
+177206 Generate default.supp during compile instead of configure
+177209 Configure valt_load_address based on arch+os
+177305 eventfd / syscall 323 patch lost
+179731 Tests fail to build because of inlining of non-local asm labels
+181394 helgrind: libhb_core.c:3762 (msm_write): Assertion
+ 'ordxx == POrd_EQ || ordxx == POrd_LT' failed.
+181594 Bogus warning for empty text segment
+181707 dwarf doesn't require enumerations to have name
+185038 exp-ptrcheck: "unhandled syscall: 285" (fallocate) on x86_64
+185050 exp-ptrcheck: sg_main.c:727 (add_block_to_GlobalTree):
+ Assertion '!already_present' failed.
+185359 exp-ptrcheck: unhandled syscall getresuid()
+185794 "WARNING: unhandled syscall: 285" (fallocate) on x86_64
+185816 Valgrind is unable to handle debug info for files with split
+ debug info that are prelinked afterwards
+185980 [darwin] unhandled syscall: sem_open
+186238 bbToIR_AMD64: disInstr miscalculated next %rip
+186507 exp-ptrcheck unhandled syscalls prctl, etc.
+186790 Suppression pattern used for leaks are not reported
+186796 Symbols with length>200 in suppression files are ignored
+187048 drd: mutex PTHREAD_PROCESS_SHARED attribute missinterpretation
+187416 exp-ptrcheck: support for __NR_{setregid,setreuid,setresuid}
+188038 helgrind: hg_main.c:926: mk_SHVAL_fail: the 'impossible' happened
+188046 bashisms in the configure script
+188127 amd64->IR: unhandled instruction bytes: 0xF0 0xF 0xB0 0xA
+188161 memcheck: --track-origins=yes asserts "mc_machine.c:672
+ (get_otrack_shadow_offset_wrk): the 'impossible' happened."
+188248 helgrind: pthread_cleanup_push, pthread_rwlock_unlock,
+ assertion fail "!lock->heldBy"
+188427 Add support for epoll_create1 (with patch)
+188530 Support for SIOCGSTAMPNS
+188560 Include valgrind.spec in the tarball
+188572 Valgrind on Mac should suppress setenv() mem leak
+189054 Valgrind fails to build because of duplicate non-local asm labels
+189737 vex amd64->IR: unhandled instruction bytes: 0xAC
+189762 epoll_create syscall not handled (--tool=exp-ptrcheck)
+189763 drd assertion failure: s_threadinfo[tid].is_recording
+190219 unhandled syscall: 328 (x86-linux)
+190391 dup of 181394; see above
+190429 Valgrind reports lots of errors in ld.so with x86_64 2.9.90 glibc
+190820 No debug information on powerpc-linux
+191095 PATCH: Improve usbdevfs ioctl handling
+191182 memcheck: VALGRIND_LEAK_CHECK quadratic when big nr of chunks
+ or big nr of errors
+191189 --xml=yes should obey --gen-suppressions=all
+191192 syslog() needs a suppression on macosx
+191271 DARWIN: WARNING: unhandled syscall: 33554697 a.k.a.: 265
+191761 getrlimit on MacOSX
+191992 multiple --fn-skip only works sometimes; dependent on order
+192634 V. reports "aspacem sync_check_mapping_callback:
+ segment mismatch" on Darwin
+192954 __extension__ missing on 2 client requests
+194429 Crash at start-up with glibc-2.10.1 and linux-2.6.29
+194474 "INSTALL" file has different build instructions than "README"
+194671 Unhandled syscall (sem_wait?) from mac valgrind
+195069 memcheck: reports leak (memory still reachable) for
+ printf("%d', x)
+195169 drd: (vgDrd_barrier_post_wait):
+ Assertion 'r->sg[p->post_iteration]' failed.
+195268 valgrind --log-file doesn't accept ~/...
+195838 VEX abort: LibVEX_N_SPILL_BYTES too small for CPUID boilerplate
+195860 WARNING: unhandled syscall: unix:223
+196528 need a error suppression for pthread_rwlock_init under os x?
+197227 Support aio_* syscalls on Darwin
+197456 valgrind should reject --suppressions=(directory)
+197512 DWARF2 CFI reader: unhandled CFI instruction 0:10
+197591 unhandled syscall 27 (mincore)
+197793 Merge DCAS branch to the trunk == 85756, 142103
+197794 Avoid duplicate filenames in Vex
+197898 make check fails on current SVN
+197901 make check fails also under exp-ptrcheck in current SVN
+197929 Make --leak-resolution=high the default
+197930 Reduce spacing between leak reports
+197933 Print command line of client at start-up, and shorten preamble
+197966 unhandled syscall 205 (x86-linux, --tool=exp-ptrcheck)
+198395 add BBV to the distribution as an experimental tool
+198624 Missing syscalls on Darwin: 82, 167, 281, 347
+198649 callgrind_annotate doesn't cumulate counters
+199338 callgrind_annotate sorting/thresholds are broken for all but Ir
+199977 Valgrind complains about an unrecognized instruction in the
+ atomic_incs test program
+200029 valgrind isn't able to read Fedora 12 debuginfo
+200760 darwin unhandled syscall: unix:284
+200827 DRD doesn't work on Mac OS X
+200990 VG_(read_millisecond_timer)() does not work correctly
+201016 Valgrind does not support pthread_kill() on Mac OS
+201169 Document --read-var-info
+201323 Pre-3.5.0 performance sanity checking
+201384 Review user manual for the 3.5.0 release
+201585 mfpvr not implemented on ppc
+201708 tests failing because x86 direction flag is left set
+201757 Valgrind doesn't handle any recent sys_futex additions
+204377 64-bit valgrind can not start a shell script
+ (with #!/path/to/shell) if the shell is a 32-bit executable
+n-i-bz drd: fixed assertion failure triggered by mutex reinitialization.
+n-i-bz drd: fixed a bug that caused incorrect messages to be printed
+ about memory allocation events with memory access tracing enabled
+n-i-bz drd: fixed a memory leak triggered by vector clock deallocation
+
+(3.5.0: 19 Aug 2009, vex r1913, valgrind r10846).
+
+
+
+Release 3.4.1 (28 February 2009)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.4.1 is a bug-fix release that fixes some regressions and assertion
+failures in debug info reading in 3.4.0, most notably incorrect stack
+traces on amd64-linux on older (glibc-2.3 based) systems. Various
+other debug info problems are also fixed. A number of bugs in the
+exp-ptrcheck tool introduced in 3.4.0 have been fixed.
+
+In view of the fact that 3.4.0 contains user-visible regressions
+relative to 3.3.x, upgrading to 3.4.1 is recommended. Packagers are
+encouraged to ship 3.4.1 in preference to 3.4.0.
+
+The fixed bugs are as follows. Note that "n-i-bz" stands for "not in
+bugzilla" -- that is, a bug that was reported to us but never got a
+bugzilla entry. We encourage you to file bugs in bugzilla
+(http://bugs.kde.org/enter_valgrind_bug.cgi) rather than mailing the
+developers (or mailing lists) directly -- bugs that are not entered
+into bugzilla tend to get forgotten about or ignored.
+
+n-i-bz Fix various bugs reading icc-11 generated debug info
+n-i-bz Fix various bugs reading gcc-4.4 generated debug info
+n-i-bz Preliminary support for glibc-2.10 / Fedora 11
+n-i-bz Cachegrind and Callgrind: handle non-power-of-two cache sizes,
+ so as to support (eg) 24k Atom D1 and Core2 with 3/6/12MB L2.
+179618 exp-ptrcheck crashed / exit prematurely
+179624 helgrind: false positive races with pthread_create and
+ recv/open/close/read
+134207 pkg-config output contains @VG_PLATFORM@
+176926 floating point exception at valgrind startup with PPC 440EPX
+181594 Bogus warning for empty text segment
+173751 amd64->IR: 0x48 0xF 0x6F 0x45 (even more redundant rex prefixes)
+181707 Dwarf3 doesn't require enumerations to have name
+185038 exp-ptrcheck: "unhandled syscall: 285" (fallocate) on x86_64
+185050 exp-ptrcheck: sg_main.c:727 (add_block_to_GlobalTree):
+ Assertion '!already_present' failed.
+185359 exp-ptrcheck unhandled syscall getresuid()
+
+(3.4.1.RC1: 24 Feb 2008, vex r1884, valgrind r9253).
+(3.4.1: 28 Feb 2008, vex r1884, valgrind r9293).
+
+
+
+Release 3.4.0 (2 January 2009)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.4.0 is a feature release with many significant improvements and the
+usual collection of bug fixes. This release supports X86/Linux,
+AMD64/Linux, PPC32/Linux and PPC64/Linux. Support for recent distros
+(using gcc 4.4, glibc 2.8 and 2.9) has been added.
+
+3.4.0 brings some significant tool improvements. Memcheck can now
+report the origin of uninitialised values, the thread checkers
+Helgrind and DRD are much improved, and we have a new experimental
+tool, exp-Ptrcheck, which is able to detect overruns of stack and
+global arrays. In detail:
+
+* Memcheck is now able to track the origin of uninitialised values.
+ When it reports an uninitialised value error, it will try to show
+ the origin of the value, as either a heap or stack allocation.
+ Origin tracking is expensive and so is not enabled by default. To
+ use it, specify --track-origins=yes. Memcheck's speed will be
+ essentially halved, and memory usage will be significantly
+ increased. Nevertheless it can drastically reduce the effort
+ required to identify the root cause of uninitialised value errors,
+ and so is often a programmer productivity win, despite running more
+ slowly.
+
+* A version (1.4.0) of the Valkyrie GUI, that works with Memcheck in
+ 3.4.0, will be released shortly.
+
+* Helgrind's race detection algorithm has been completely redesigned
+ and reimplemented, to address usability and scalability concerns:
+
+ - The new algorithm has a lower false-error rate: it is much less
+ likely to report races that do not really exist.
+
+ - Helgrind will display full call stacks for both accesses involved
+ in a race. This makes it easier to identify the root causes of
+ races.
+
+ - Limitations on the size of program that can run have been removed.
+
+ - Performance has been modestly improved, although that is very
+ workload-dependent.
+
+ - Direct support for Qt4 threading has been added.
+
+ - pthread_barriers are now directly supported.
+
+ - Helgrind works well on all supported Linux targets.
+
+* The DRD thread debugging tool has seen major improvements:
+
+ - Greatly improved performance and significantly reduced memory
+ usage.
+
+ - Support for several major threading libraries (Boost.Thread, Qt4,
+ glib, OpenMP) has been added.
+
+ - Support for atomic instructions, POSIX semaphores, barriers and
+ reader-writer locks has been added.
+
+ - Works now on PowerPC CPUs too.
+
+ - Added support for printing thread stack usage at thread exit time.
+
+ - Added support for debugging lock contention.
+
+ - Added a manual for Drd.
+
+* A new experimental tool, exp-Ptrcheck, has been added. Ptrcheck
+ checks for misuses of pointers. In that sense it is a bit like
+ Memcheck. However, Ptrcheck can do things Memcheck can't: it can
+ detect overruns of stack and global arrays, it can detect
+ arbitrarily far out-of-bounds accesses to heap blocks, and it can
+ detect accesses heap blocks that have been freed a very long time
+ ago (millions of blocks in the past).
+
+ Ptrcheck currently works only on x86-linux and amd64-linux. To use
+ it, use --tool=exp-ptrcheck. A simple manual is provided, as part
+ of the main Valgrind documentation. As this is an experimental
+ tool, we would be particularly interested in hearing about your
+ experiences with it.
+
+* exp-Omega, an experimental instantaneous leak-detecting tool, is no
+ longer built by default, although the code remains in the repository
+ and the tarball. This is due to three factors: a perceived lack of
+ users, a lack of maintenance, and concerns that it may not be
+ possible to achieve reliable operation using the existing design.
+
+* As usual, support for the latest Linux distros and toolchain
+ components has been added. It should work well on Fedora Core 10,
+ OpenSUSE 11.1 and Ubuntu 8.10. gcc-4.4 (in its current pre-release
+ state) is supported, as is glibc-2.9. The C++ demangler has been
+ updated so as to work well with C++ compiled by even the most recent
+ g++'s.
+
+* You can now use frame-level wildcards in suppressions. This was a
+ frequently-requested enhancement. A line "..." in a suppression now
+ matches zero or more frames. This makes it easier to write
+ suppressions which are precise yet insensitive to changes in
+ inlining behaviour.
+
+* 3.4.0 adds support on x86/amd64 for the SSSE3 instruction set.
+
+* Very basic support for IBM Power6 has been added (64-bit processes only).
+
+* Valgrind is now cross-compilable. For example, it is possible to
+ cross compile Valgrind on an x86/amd64-linux host, so that it runs
+ on a ppc32/64-linux target.
+
+* You can set the main thread's stack size at startup using the
+ new --main-stacksize= flag (subject of course to ulimit settings).
+ This is useful for running apps that need a lot of stack space.
+
+* The limitation that you can't use --trace-children=yes together
+ with --db-attach=yes has been removed.
+
+* The following bugs have been fixed. Note that "n-i-bz" stands for
+ "not in bugzilla" -- that is, a bug that was reported to us but
+ never got a bugzilla entry. We encourage you to file bugs in
+ bugzilla (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
+ mailing the developers (or mailing lists) directly.
+
+ n-i-bz Make return types for some client requests 64-bit clean
+ n-i-bz glibc 2.9 support
+ n-i-bz ignore unsafe .valgrindrc's (CVE-2008-4865)
+ n-i-bz MPI_Init(0,0) is valid but libmpiwrap.c segfaults
+ n-i-bz Building in an env without gdb gives bogus gdb attach
+ 92456 Tracing the origin of uninitialised memory
+ 106497 Valgrind does not demangle some C++ template symbols
+ 162222 ==106497
+ 151612 Suppression with "..." (frame-level wildcards in .supp files)
+ 156404 Unable to start oocalc under memcheck on openSUSE 10.3 (64-bit)
+ 159285 unhandled syscall:25 (stime, on x86-linux)
+ 159452 unhandled ioctl 0x8B01 on "valgrind iwconfig"
+ 160954 ppc build of valgrind crashes with illegal instruction (isel)
+ 160956 mallinfo implementation, w/ patch
+ 162092 Valgrind fails to start gnome-system-monitor
+ 162819 malloc_free_fill test doesn't pass on glibc2.8 x86
+ 163794 assertion failure with "--track-origins=yes"
+ 163933 sigcontext.err and .trapno must be set together
+ 163955 remove constraint !(--db-attach=yes && --trace-children=yes)
+ 164476 Missing kernel module loading system calls
+ 164669 SVN regression: mmap() drops posix file locks
+ 166581 Callgrind output corruption when program forks
+ 167288 Patch file for missing system calls on Cell BE
+ 168943 unsupported scas instruction pentium
+ 171645 Unrecognised instruction (MOVSD, non-binutils encoding)
+ 172417 x86->IR: 0x82 ...
+ 172563 amd64->IR: 0xD9 0xF5 - fprem1
+ 173099 .lds linker script generation error
+ 173177 [x86_64] syscalls: 125/126/179 (capget/capset/quotactl)
+ 173751 amd64->IR: 0x48 0xF 0x6F 0x45 (even more redundant prefixes)
+ 174532 == 173751
+ 174908 --log-file value not expanded correctly for core file
+ 175044 Add lookup_dcookie for amd64
+ 175150 x86->IR: 0xF2 0xF 0x11 0xC1 (movss non-binutils encoding)
+
+Developer-visible changes:
+
+* Valgrind's debug-info reading machinery has been majorly overhauled.
+ It can now correctly establish the addresses for ELF data symbols,
+ which is something that has never worked properly before now.
+
+ Also, Valgrind can now read DWARF3 type and location information for
+ stack and global variables. This makes it possible to use the
+ framework to build tools that rely on knowing the type and locations
+ of stack and global variables, for example exp-Ptrcheck.
+
+ Reading of such information is disabled by default, because most
+ tools don't need it, and because it is expensive in space and time.
+ However, you can force Valgrind to read it, using the
+ --read-var-info=yes flag. Memcheck, Helgrind and DRD are able to
+ make use of such information, if present, to provide source-level
+ descriptions of data addresses in the error messages they create.
+
+(3.4.0.RC1: 24 Dec 2008, vex r1878, valgrind r8882).
+(3.4.0: 3 Jan 2009, vex r1878, valgrind r8899).
+
+
+
+Release 3.3.1 (4 June 2008)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.3.1 fixes a bunch of bugs in 3.3.0, adds support for glibc-2.8 based
+systems (openSUSE 11, Fedora Core 9), improves the existing glibc-2.7
+support, and adds support for the SSSE3 (Core 2) instruction set.
+
+3.3.1 will likely be the last release that supports some very old
+systems. In particular, the next major release, 3.4.0, will drop
+support for the old LinuxThreads threading library, and for gcc
+versions prior to 3.0.
+
+The fixed bugs are as follows. Note that "n-i-bz" stands for "not in
+bugzilla" -- that is, a bug that was reported to us but never got a
+bugzilla entry. We encourage you to file bugs in bugzilla
+(http://bugs.kde.org/enter_valgrind_bug.cgi) rather than mailing the
+developers (or mailing lists) directly -- bugs that are not entered
+into bugzilla tend to get forgotten about or ignored.
+
+n-i-bz Massif segfaults at exit
+n-i-bz Memcheck asserts on Altivec code
+n-i-bz fix sizeof bug in Helgrind
+n-i-bz check fd on sys_llseek
+n-i-bz update syscall lists to kernel 2.6.23.1
+n-i-bz support sys_sync_file_range
+n-i-bz handle sys_sysinfo, sys_getresuid, sys_getresgid on ppc64-linux
+n-i-bz intercept memcpy in 64-bit ld.so's
+n-i-bz Fix wrappers for sys_{futimesat,utimensat}
+n-i-bz Minor false-error avoidance fixes for Memcheck
+n-i-bz libmpiwrap.c: add a wrapper for MPI_Waitany
+n-i-bz helgrind support for glibc-2.8
+n-i-bz partial fix for mc_leakcheck.c:698 assert:
+ 'lc_shadows[i]->data + lc_shadows[i] ...
+n-i-bz Massif/Cachegrind output corruption when programs fork
+n-i-bz register allocator fix: handle spill stores correctly
+n-i-bz add support for PA6T PowerPC CPUs
+126389 vex x86->IR: 0xF 0xAE (FXRSTOR)
+158525 ==126389
+152818 vex x86->IR: 0xF3 0xAC (repz lodsb)
+153196 vex x86->IR: 0xF2 0xA6 (repnz cmpsb)
+155011 vex x86->IR: 0xCF (iret)
+155091 Warning [...] unhandled DW_OP_ opcode 0x23
+156960 ==155901
+155528 support Core2/SSSE3 insns on x86/amd64
+155929 ms_print fails on massif outputs containing long lines
+157665 valgrind fails on shmdt(0) after shmat to 0
+157748 support x86 PUSHFW/POPFW
+158212 helgrind: handle pthread_rwlock_try{rd,wr}lock.
+158425 sys_poll incorrectly emulated when RES==0
+158744 vex amd64->IR: 0xF0 0x41 0xF 0xC0 (xaddb)
+160907 Support for a couple of recent Linux syscalls
+161285 Patch -- support for eventfd() syscall
+161378 illegal opcode in debug libm (FUCOMPP)
+160136 ==161378
+161487 number of suppressions files is limited to 10
+162386 ms_print typo in milliseconds time unit for massif
+161036 exp-drd: client allocated memory was never freed
+162663 signalfd_wrapper fails on 64bit linux
+
+(3.3.1.RC1: 2 June 2008, vex r1854, valgrind r8169).
+(3.3.1: 4 June 2008, vex r1854, valgrind r8180).
+
+
+
+Release 3.3.0 (7 December 2007)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.3.0 is a feature release with many significant improvements and the
+usual collection of bug fixes. This release supports X86/Linux,
+AMD64/Linux, PPC32/Linux and PPC64/Linux. Support for recent distros
+(using gcc 4.3, glibc 2.6 and 2.7) has been added.
+
+The main excitement in 3.3.0 is new and improved tools. Helgrind
+works again, Massif has been completely overhauled and much improved,
+Cachegrind now does branch-misprediction profiling, and a new category
+of experimental tools has been created, containing two new tools:
+Omega and DRD. There are many other smaller improvements. In detail:
+
+- Helgrind has been completely overhauled and works for the first time
+ since Valgrind 2.2.0. Supported functionality is: detection of
+ misuses of the POSIX PThreads API, detection of potential deadlocks
+ resulting from cyclic lock dependencies, and detection of data
+ races. Compared to the 2.2.0 Helgrind, the race detection algorithm
+ has some significant improvements aimed at reducing the false error
+ rate. Handling of various kinds of corner cases has been improved.
+ Efforts have been made to make the error messages easier to
+ understand. Extensive documentation is provided.
+
+- Massif has been completely overhauled. Instead of measuring
+ space-time usage -- which wasn't always useful and many people found
+ confusing -- it now measures space usage at various points in the
+ execution, including the point of peak memory allocation. Its
+ output format has also changed: instead of producing PostScript
+ graphs and HTML text, it produces a single text output (via the new
+ 'ms_print' script) that contains both a graph and the old textual
+ information, but in a more compact and readable form. Finally, the
+ new version should be more reliable than the old one, as it has been
+ tested more thoroughly.
+
+- Cachegrind has been extended to do branch-misprediction profiling.
+ Both conditional and indirect branches are profiled. The default
+ behaviour of Cachegrind is unchanged. To use the new functionality,
+ give the option --branch-sim=yes.
+
+- A new category of "experimental tools" has been created. Such tools
+ may not work as well as the standard tools, but are included because
+ some people will find them useful, and because exposure to a wider
+ user group provides tool authors with more end-user feedback. These
+ tools have a "exp-" prefix attached to their names to indicate their
+ experimental nature. Currently there are two experimental tools:
+
+ * exp-Omega: an instantaneous leak detector. See
+ exp-omega/docs/omega_introduction.txt.
+
+ * exp-DRD: a data race detector based on the happens-before
+ relation. See exp-drd/docs/README.txt.
+
+- Scalability improvements for very large programs, particularly those
+ which have a million or more malloc'd blocks in use at once. These
+ improvements mostly affect Memcheck. Memcheck is also up to 10%
+ faster for all programs, with x86-linux seeing the largest
+ improvement.
+
+- Works well on the latest Linux distros. Has been tested on Fedora
+ Core 8 (x86, amd64, ppc32, ppc64) and openSUSE 10.3. glibc 2.6 and
+ 2.7 are supported. gcc-4.3 (in its current pre-release state) is
+ supported. At the same time, 3.3.0 retains support for older
+ distros.
+
+- The documentation has been modestly reorganised with the aim of
+ making it easier to find information on common-usage scenarios.
+ Some advanced material has been moved into a new chapter in the main
+ manual, so as to unclutter the main flow, and other tidying up has
+ been done.
+
+- There is experimental support for AIX 5.3, both 32-bit and 64-bit
+ processes. You need to be running a 64-bit kernel to use Valgrind
+ on a 64-bit executable.
+
+- There have been some changes to command line options, which may
+ affect you:
+
+ * --log-file-exactly and
+ --log-file-qualifier options have been removed.
+
+ To make up for this --log-file option has been made more powerful.
+ It now accepts a %p format specifier, which is replaced with the
+ process ID, and a %q{FOO} format specifier, which is replaced with
+ the contents of the environment variable FOO.
+
+ * --child-silent-after-fork=yes|no [no]
+
+ Causes Valgrind to not show any debugging or logging output for
+ the child process resulting from a fork() call. This can make the
+ output less confusing (although more misleading) when dealing with
+ processes that create children.
+
+ * --cachegrind-out-file, --callgrind-out-file and --massif-out-file
+
+ These control the names of the output files produced by
+ Cachegrind, Callgrind and Massif. They accept the same %p and %q
+ format specifiers that --log-file accepts. --callgrind-out-file
+ replaces Callgrind's old --base option.
+
+ * Cachegrind's 'cg_annotate' script no longer uses the --<pid>
+ option to specify the output file. Instead, the first non-option
+ argument is taken to be the name of the output file, and any
+ subsequent non-option arguments are taken to be the names of
+ source files to be annotated.
+
+ * Cachegrind and Callgrind now use directory names where possible in
+ their output files. This means that the -I option to
+ 'cg_annotate' and 'callgrind_annotate' should not be needed in
+ most cases. It also means they can correctly handle the case
+ where two source files in different directories have the same
+ name.
+
+- Memcheck offers a new suppression kind: "Jump". This is for
+ suppressing jump-to-invalid-address errors. Previously you had to
+ use an "Addr1" suppression, which didn't make much sense.
+
+- Memcheck has new flags --malloc-fill=<hexnum> and
+ --free-fill=<hexnum> which free malloc'd / free'd areas with the
+ specified byte. This can help shake out obscure memory corruption
+ problems. The definedness and addressability of these areas is
+ unchanged -- only the contents are affected.
+
+- The behaviour of Memcheck's client requests VALGRIND_GET_VBITS and
+ VALGRIND_SET_VBITS have changed slightly. They no longer issue
+ addressability errors -- if either array is partially unaddressable,
+ they just return 3 (as before). Also, SET_VBITS doesn't report
+ definedness errors if any of the V bits are undefined.
+
+- The following Memcheck client requests have been removed:
+ VALGRIND_MAKE_NOACCESS
+ VALGRIND_MAKE_WRITABLE
+ VALGRIND_MAKE_READABLE
+ VALGRIND_CHECK_WRITABLE
+ VALGRIND_CHECK_READABLE
+ VALGRIND_CHECK_DEFINED
+ They were deprecated in 3.2.0, when equivalent but better-named client
+ requests were added. See the 3.2.0 release notes for more details.
+
+- The behaviour of the tool Lackey has changed slightly. First, the output
+ from --trace-mem has been made more compact, to reduce the size of the
+ traces. Second, a new option --trace-superblocks has been added, which
+ shows the addresses of superblocks (code blocks) as they are executed.
+
+- The following bugs have been fixed. Note that "n-i-bz" stands for
+ "not in bugzilla" -- that is, a bug that was reported to us but
+ never got a bugzilla entry. We encourage you to file bugs in
+ bugzilla (http://bugs.kde.org/enter_valgrind_bug.cgi) rather than
+ mailing the developers (or mailing lists) directly.
+
+ n-i-bz x86_linux_REDIR_FOR_index() broken
+ n-i-bz guest-amd64/toIR.c:2512 (dis_op2_E_G): Assertion `0' failed.
+ n-i-bz Support x86 INT insn (INT (0xCD) 0x40 - 0x43)
+ n-i-bz Add sys_utimensat system call for Linux x86 platform
+ 79844 Helgrind complains about race condition which does not exist
+ 82871 Massif output function names too short
+ 89061 Massif: ms_main.c:485 (get_XCon): Assertion `xpt->max_chi...'
+ 92615 Write output from Massif at crash
+ 95483 massif feature request: include peak allocation in report
+ 112163 MASSIF crashed with signal 7 (SIGBUS) after running 2 days
+ 119404 problems running setuid executables (partial fix)
+ 121629 add instruction-counting mode for timing
+ 127371 java vm giving unhandled instruction bytes: 0x26 0x2E 0x64 0x65
+ 129937 ==150380
+ 129576 Massif loses track of memory, incorrect graphs
+ 132132 massif --format=html output does not do html entity escaping
+ 132950 Heap alloc/usage summary
+ 133962 unhandled instruction bytes: 0xF2 0x4C 0xF 0x10
+ 134990 use -fno-stack-protector if possible
+ 136382 ==134990
+ 137396 I would really like helgrind to work again...
+ 137714 x86/amd64->IR: 0x66 0xF 0xF7 0xC6 (maskmovq, maskmovdq)
+ 141631 Massif: percentages don't add up correctly
+ 142706 massif numbers don't seem to add up
+ 143062 massif crashes on app exit with signal 8 SIGFPE
+ 144453 (get_XCon): Assertion 'xpt->max_children != 0' failed.
+ 145559 valgrind aborts when malloc_stats is called
+ 145609 valgrind aborts all runs with 'repeated section!'
+ 145622 --db-attach broken again on x86-64
+ 145837 ==149519
+ 145887 PPC32: getitimer() system call is not supported
+ 146252 ==150678
+ 146456 (update_XCon): Assertion 'xpt->curr_space >= -space_delta'...
+ 146701 ==134990
+ 146781 Adding support for private futexes
+ 147325 valgrind internal error on syscall (SYS_io_destroy, 0)
+ 147498 amd64->IR: 0xF0 0xF 0xB0 0xF (lock cmpxchg %cl,(%rdi))
+ 147545 Memcheck: mc_main.c:817 (get_sec_vbits8): Assertion 'n' failed.
+ 147628 SALC opcode 0xd6 unimplemented
+ 147825 crash on amd64-linux with gcc 4.2 and glibc 2.6 (CFI)
+ 148174 Incorrect type of freed_list_volume causes assertion [...]
+ 148447 x86_64 : new NOP codes: 66 66 66 66 2e 0f 1f
+ 149182 PPC Trap instructions not implemented in valgrind
+ 149504 Assertion hit on alloc_xpt->curr_space >= -space_delta
+ 149519 ppc32: V aborts with SIGSEGV on execution of a signal handler
+ 149892 ==137714
+ 150044 SEGV during stack deregister
+ 150380 dwarf/gcc interoperation (dwarf3 read problems)
+ 150408 ==148447
+ 150678 guest-amd64/toIR.c:3741 (dis_Grp5): Assertion `sz == 4' failed
+ 151209 V unable to execute programs for users with UID > 2^16
+ 151938 help on --db-command= misleading
+ 152022 subw $0x28, %%sp causes assertion failure in memcheck
+ 152357 inb and outb not recognized in 64-bit mode
+ 152501 vex x86->IR: 0x27 0x66 0x89 0x45 (daa)
+ 152818 vex x86->IR: 0xF3 0xAC 0xFC 0x9C (rep lodsb)
+
+Developer-visible changes:
+
+- The names of some functions and types within the Vex IR have
+ changed. Run 'svn log -r1689 VEX/pub/libvex_ir.h' for full details.
+ Any existing standalone tools will have to be updated to reflect
+ these changes. The new names should be clearer. The file
+ VEX/pub/libvex_ir.h is also much better commented.
+
+- A number of new debugging command line options have been added.
+ These are mostly of use for debugging the symbol table and line
+ number readers:
+
+ --trace-symtab-patt=<patt> limit debuginfo tracing to obj name <patt>
+ --trace-cfi=no|yes show call-frame-info details? [no]
+ --debug-dump=syms mimic /usr/bin/readelf --syms
+ --debug-dump=line mimic /usr/bin/readelf --debug-dump=line
+ --debug-dump=frames mimic /usr/bin/readelf --debug-dump=frames
+ --sym-offsets=yes|no show syms in form 'name+offset' ? [no]
+
+- Internally, the code base has been further factorised and
+ abstractified, particularly with respect to support for non-Linux
+ OSs.
+
+(3.3.0.RC1: 2 Dec 2007, vex r1803, valgrind r7268).
+(3.3.0.RC2: 5 Dec 2007, vex r1804, valgrind r7282).
+(3.3.0.RC3: 9 Dec 2007, vex r1804, valgrind r7288).
+(3.3.0: 10 Dec 2007, vex r1804, valgrind r7290).
+
+
+
+Release 3.2.3 (29 Jan 2007)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Unfortunately 3.2.2 introduced a regression which can cause an
+assertion failure ("vex: the `impossible' happened: eqIRConst") when
+running obscure pieces of SSE code. 3.2.3 fixes this and adds one
+more glibc-2.5 intercept. In all other respects it is identical to
+3.2.2. Please do not use (or package) 3.2.2; instead use 3.2.3.
+
+n-i-bz vex: the `impossible' happened: eqIRConst
+n-i-bz Add an intercept for glibc-2.5 __stpcpy_chk
+
+(3.2.3: 29 Jan 2007, vex r1732, valgrind r6560).
+
+
+Release 3.2.2 (22 Jan 2007)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.2.2 fixes a bunch of bugs in 3.2.1, adds support for glibc-2.5 based
+systems (openSUSE 10.2, Fedora Core 6), improves support for icc-9.X
+compiled code, and brings modest performance improvements in some
+areas, including amd64 floating point, powerpc support, and startup
+responsiveness on all targets.
+
+The fixed bugs are as follows. Note that "n-i-bz" stands for "not in
+bugzilla" -- that is, a bug that was reported to us but never got a
+bugzilla entry. We encourage you to file bugs in bugzilla
+(http://bugs.kde.org/enter_valgrind_bug.cgi) rather than mailing the
+developers (or mailing lists) directly.
+
+129390 ppc?->IR: some kind of VMX prefetch (dstt)
+129968 amd64->IR: 0xF 0xAE 0x0 (fxsave)
+134319 ==129968
+133054 'make install' fails with syntax errors
+118903 ==133054
+132998 startup fails in when running on UML
+134207 pkg-config output contains @VG_PLATFORM@
+134727 valgrind exits with "Value too large for defined data type"
+n-i-bz ppc32/64: support mcrfs
+n-i-bz Cachegrind/Callgrind: Update cache parameter detection
+135012 x86->IR: 0xD7 0x8A 0xE0 0xD0 (xlat)
+125959 ==135012
+126147 x86->IR: 0xF2 0xA5 0xF 0x77 (repne movsw)
+136650 amd64->IR: 0xC2 0x8 0x0
+135421 x86->IR: unhandled Grp5(R) case 6
+n-i-bz Improved documentation of the IR intermediate representation
+n-i-bz jcxz (x86) (users list, 8 Nov)
+n-i-bz ExeContext hashing fix
+n-i-bz fix CFI reading failures ("Dwarf CFI 0:24 0:32 0:48 0:7")
+n-i-bz fix Cachegrind/Callgrind simulation bug
+n-i-bz libmpiwrap.c: fix handling of MPI_LONG_DOUBLE
+n-i-bz make User errors suppressible
+136844 corrupted malloc line when using --gen-suppressions=yes
+138507 ==136844
+n-i-bz Speed up the JIT's register allocator
+n-i-bz Fix confusing leak-checker flag hints
+n-i-bz Support recent autoswamp versions
+n-i-bz ppc32/64 dispatcher speedups
+n-i-bz ppc64 front end rld/rlw improvements
+n-i-bz ppc64 back end imm64 improvements
+136300 support 64K pages on ppc64-linux
+139124 == 136300
+n-i-bz fix ppc insn set tests for gcc >= 4.1
+137493 x86->IR: recent binutils no-ops
+137714 x86->IR: 0x66 0xF 0xF7 0xC6 (maskmovdqu)
+138424 "failed in UME with error 22" (produce a better error msg)
+138856 ==138424
+138627 Enhancement support for prctl ioctls
+138896 Add support for usb ioctls
+136059 ==138896
+139050 ppc32->IR: mfspr 268/269 instructions not handled
+n-i-bz ppc32->IR: lvxl/stvxl
+n-i-bz glibc-2.5 support
+n-i-bz memcheck: provide replacement for mempcpy
+n-i-bz memcheck: replace bcmp in ld.so
+n-i-bz Use 'ifndef' in VEX's Makefile correctly
+n-i-bz Suppressions for MVL 4.0.1 on ppc32-linux
+n-i-bz libmpiwrap.c: Fixes for MPICH
+n-i-bz More robust handling of hinted client mmaps
+139776 Invalid read in unaligned memcpy with Intel compiler v9
+n-i-bz Generate valid XML even for very long fn names
+n-i-bz Don't prompt about suppressions for unshown reachable leaks
+139910 amd64 rcl is not supported
+n-i-bz DWARF CFI reader: handle DW_CFA_undefined
+n-i-bz DWARF CFI reader: handle icc9 generated CFI info better
+n-i-bz fix false uninit-value errs in icc9 generated FP code
+n-i-bz reduce extraneous frames in libmpiwrap.c
+n-i-bz support pselect6 on amd64-linux
+
+(3.2.2: 22 Jan 2007, vex r1729, valgrind r6545).
+
+
+Release 3.2.1 (16 Sept 2006)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.2.1 adds x86/amd64 support for all SSE3 instructions except monitor
+and mwait, further reduces memcheck's false error rate on all
+platforms, adds support for recent binutils (in OpenSUSE 10.2 and
+Fedora Rawhide) and fixes a bunch of bugs in 3.2.0. Some of the fixed
+bugs were causing large programs to segfault with --tool=callgrind and
+--tool=cachegrind, so an upgrade is recommended.
+
+In view of the fact that any 3.3.0 release is unlikely to happen until
+well into 1Q07, we intend to keep the 3.2.X line alive for a while
+yet, and so we tentatively plan a 3.2.2 release sometime in December
+06.
+
+The fixed bugs are as follows. Note that "n-i-bz" stands for "not in
+bugzilla" -- that is, a bug that was reported to us but never got a
+bugzilla entry.
+
+n-i-bz Expanding brk() into last available page asserts
+n-i-bz ppc64-linux stack RZ fast-case snafu
+n-i-bz 'c' in --gen-supps=yes doesn't work
+n-i-bz VG_N_SEGMENTS too low (users, 28 June)
+n-i-bz VG_N_SEGNAMES too low (Stu Robinson)
+106852 x86->IR: fisttp (SSE3)
+117172 FUTEX_WAKE does not use uaddr2
+124039 Lacks support for VKI_[GP]IO_UNIMAP*
+127521 amd64->IR: 0xF0 0x48 0xF 0xC7 (cmpxchg8b)
+128917 amd64->IR: 0x66 0xF 0xF6 0xC4 (psadbw,SSE2)
+129246 JJ: ppc32/ppc64 syscalls, w/ patch
+129358 x86->IR: fisttpl (SSE3)
+129866 cachegrind/callgrind causes executable to die
+130020 Can't stat .so/.exe error while reading symbols
+130388 Valgrind aborts when process calls malloc_trim()
+130638 PATCH: ppc32 missing system calls
+130785 amd64->IR: unhandled instruction "pushfq"
+131481: (HINT_NOP) vex x86->IR: 0xF 0x1F 0x0 0xF
+131298 ==131481
+132146 Programs with long sequences of bswap[l,q]s
+132918 vex amd64->IR: 0xD9 0xF8 (fprem)
+132813 Assertion at priv/guest-x86/toIR.c:652 fails
+133051 'cfsi->len > 0 && cfsi->len < 2000000' failed
+132722 valgrind header files are not standard C
+n-i-bz Livelocks entire machine (users list, Timothy Terriberry)
+n-i-bz Alex Bennee mmap problem (9 Aug)
+n-i-bz BartV: Don't print more lines of a stack-trace than were obtained.
+n-i-bz ppc32 SuSE 10.1 redir
+n-i-bz amd64 padding suppressions
+n-i-bz amd64 insn printing fix.
+n-i-bz ppc cmp reg,reg fix
+n-i-bz x86/amd64 iropt e/rflag reduction rules
+n-i-bz SuSE 10.1 (ppc32) minor fixes
+133678 amd64->IR: 0x48 0xF 0xC5 0xC0 (pextrw?)
+133694 aspacem assertion: aspacem_minAddr <= holeStart
+n-i-bz callgrind: fix warning about malformed creator line
+n-i-bz callgrind: fix annotate script for data produced with
+ --dump-instr=yes
+n-i-bz callgrind: fix failed assertion when toggling
+ instrumentation mode
+n-i-bz callgrind: fix annotate script fix warnings with
+ --collect-jumps=yes
+n-i-bz docs path hardwired (Dennis Lubert)
+
+The following bugs were not fixed, due primarily to lack of developer
+time, and also because bug reporters did not answer requests for
+feedback in time for the release:
+
+129390 ppc?->IR: some kind of VMX prefetch (dstt)
+129968 amd64->IR: 0xF 0xAE 0x0 (fxsave)
+133054 'make install' fails with syntax errors
+n-i-bz Signal race condition (users list, 13 June, Johannes Berg)
+n-i-bz Unrecognised instruction at address 0x70198EC2 (users list,
+ 19 July, Bennee)
+132998 startup fails in when running on UML
+
+The following bug was tentatively fixed on the mainline but the fix
+was considered too risky to push into 3.2.X:
+
+133154 crash when using client requests to register/deregister stack
+
+(3.2.1: 16 Sept 2006, vex r1658, valgrind r6070).
+
+
+Release 3.2.0 (7 June 2006)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.2.0 is a feature release with many significant improvements and the
+usual collection of bug fixes. This release supports X86/Linux,
+AMD64/Linux, PPC32/Linux and PPC64/Linux.
+
+Performance, especially of Memcheck, is improved, Addrcheck has been
+removed, Callgrind has been added, PPC64/Linux support has been added,
+Lackey has been improved, and MPI support has been added. In detail:
+
+- Memcheck has improved speed and reduced memory use. Run times are
+ typically reduced by 15-30%, averaging about 24% for SPEC CPU2000.
+ The other tools have smaller but noticeable speed improvments. We
+ are interested to hear what improvements users get.
+
+ Memcheck uses less memory due to the introduction of a compressed
+ representation for shadow memory. The space overhead has been
+ reduced by a factor of up to four, depending on program behaviour.
+ This means you should be able to run programs that use more memory
+ than before without hitting problems.
+
+- Addrcheck has been removed. It has not worked since version 2.4.0,
+ and the speed and memory improvements to Memcheck make it redundant.
+ If you liked using Addrcheck because it didn't give undefined value
+ errors, you can use the new Memcheck option --undef-value-errors=no
+ to get the same behaviour.
+
+- The number of undefined-value errors incorrectly reported by
+ Memcheck has been reduced (such false reports were already very
+ rare). In particular, efforts have been made to ensure Memcheck
+ works really well with gcc 4.0/4.1-generated code on X86/Linux and
+ AMD64/Linux.
+
+- Josef Weidendorfer's popular Callgrind tool has been added. Folding
+ it in was a logical step given its popularity and usefulness, and
+ makes it easier for us to ensure it works "out of the box" on all
+ supported targets. The associated KDE KCachegrind GUI remains a
+ separate project.
+
+- A new release of the Valkyrie GUI for Memcheck, version 1.2.0,
+ accompanies this release. Improvements over previous releases
+ include improved robustness, many refinements to the user interface,
+ and use of a standard autoconf/automake build system. You can get
+ it from http://www.valgrind.org/downloads/guis.html.
+
+- Valgrind now works on PPC64/Linux. As with the AMD64/Linux port,
+ this supports programs using to 32G of address space. On 64-bit
+ capable PPC64/Linux setups, you get a dual architecture build so
+ that both 32-bit and 64-bit executables can be run. Linux on POWER5
+ is supported, and POWER4 is also believed to work. Both 32-bit and
+ 64-bit DWARF2 is supported. This port is known to work well with
+ both gcc-compiled and xlc/xlf-compiled code.
+
+- Floating point accuracy has been improved for PPC32/Linux.
+ Specifically, the floating point rounding mode is observed on all FP
+ arithmetic operations, and multiply-accumulate instructions are
+ preserved by the compilation pipeline. This means you should get FP
+ results which are bit-for-bit identical to a native run. These
+ improvements are also present in the PPC64/Linux port.
+
+- Lackey, the example tool, has been improved:
+
+ * It has a new option --detailed-counts (off by default) which
+ causes it to print out a count of loads, stores and ALU operations
+ done, and their sizes.
+
+ * It has a new option --trace-mem (off by default) which causes it
+ to print out a trace of all memory accesses performed by a
+ program. It's a good starting point for building Valgrind tools
+ that need to track memory accesses. Read the comments at the top
+ of the file lackey/lk_main.c for details.
+
+ * The original instrumentation (counting numbers of instructions,
+ jumps, etc) is now controlled by a new option --basic-counts. It
+ is on by default.
+
+- MPI support: partial support for debugging distributed applications
+ using the MPI library specification has been added. Valgrind is
+ aware of the memory state changes caused by a subset of the MPI
+ functions, and will carefully check data passed to the (P)MPI_
+ interface.
+
+- A new flag, --error-exitcode=, has been added. This allows changing
+ the exit code in runs where Valgrind reported errors, which is
+ useful when using Valgrind as part of an automated test suite.
+
+- Various segfaults when reading old-style "stabs" debug information
+ have been fixed.
+
+- A simple performance evaluation suite has been added. See
+ perf/README and README_DEVELOPERS for details. There are
+ various bells and whistles.
+
+- New configuration flags:
+ --enable-only32bit
+ --enable-only64bit
+ By default, on 64 bit platforms (ppc64-linux, amd64-linux) the build
+ system will attempt to build a Valgrind which supports both 32-bit
+ and 64-bit executables. This may not be what you want, and you can
+ override the default behaviour using these flags.
+
+Please note that Helgrind is still not working. We have made an
+important step towards making it work again, however, with the
+addition of function wrapping (see below).
+
+Other user-visible changes:
+
+- Valgrind now has the ability to intercept and wrap arbitrary
+ functions. This is a preliminary step towards making Helgrind work
+ again, and was required for MPI support.
+
+- There are some changes to Memcheck's client requests. Some of them
+ have changed names:
+
+ MAKE_NOACCESS --> MAKE_MEM_NOACCESS
+ MAKE_WRITABLE --> MAKE_MEM_UNDEFINED
+ MAKE_READABLE --> MAKE_MEM_DEFINED
+
+ CHECK_WRITABLE --> CHECK_MEM_IS_ADDRESSABLE
+ CHECK_READABLE --> CHECK_MEM_IS_DEFINED
+ CHECK_DEFINED --> CHECK_VALUE_IS_DEFINED
+
+ The reason for the change is that the old names are subtly
+ misleading. The old names will still work, but they are deprecated
+ and may be removed in a future release.
+
+ We also added a new client request:
+
+ MAKE_MEM_DEFINED_IF_ADDRESSABLE(a, len)
+
+ which is like MAKE_MEM_DEFINED but only affects a byte if the byte is
+ already addressable.
+
+- The way client requests are encoded in the instruction stream has
+ changed. Unfortunately, this means 3.2.0 will not honour client
+ requests compiled into binaries using headers from earlier versions
+ of Valgrind. We will try to keep the client request encodings more
+ stable in future.
+
+BUGS FIXED:
+
+108258 NPTL pthread cleanup handlers not called
+117290 valgrind is sigKILL'd on startup
+117295 == 117290
+118703 m_signals.c:1427 Assertion 'tst->status == VgTs_WaitSys'
+118466 add %reg, %reg generates incorrect validity for bit 0
+123210 New: strlen from ld-linux on amd64
+123244 DWARF2 CFI reader: unhandled CFI instruction 0:18
+123248 syscalls in glibc-2.4: openat, fstatat, symlinkat
+123258 socketcall.recvmsg(msg.msg_iov[i] points to uninit
+123535 mremap(new_addr) requires MREMAP_FIXED in 4th arg
+123836 small typo in the doc
+124029 ppc compile failed: `vor' gcc 3.3.5
+124222 Segfault: @@don't know what type ':' is
+124475 ppc32: crash (syscall?) timer_settime()
+124499 amd64->IR: 0xF 0xE 0x48 0x85 (femms)
+124528 FATAL: aspacem assertion failed: segment_is_sane
+124697 vex x86->IR: 0xF 0x70 0xC9 0x0 (pshufw)
+124892 vex x86->IR: 0xF3 0xAE (REPx SCASB)
+126216 == 124892
+124808 ppc32: sys_sched_getaffinity() not handled
+n-i-bz Very long stabs strings crash m_debuginfo
+n-i-bz amd64->IR: 0x66 0xF 0xF5 (pmaddwd)
+125492 ppc32: support a bunch more syscalls
+121617 ppc32/64: coredumping gives assertion failure
+121814 Coregrind return error as exitcode patch
+126517 == 121814
+125607 amd64->IR: 0x66 0xF 0xA3 0x2 (btw etc)
+125651 amd64->IR: 0xF8 0x49 0xFF 0xE3 (clc?)
+126253 x86 movx is wrong
+126451 3.2 SVN doesn't work on ppc32 CPU's without FPU
+126217 increase # threads
+126243 vex x86->IR: popw mem
+126583 amd64->IR: 0x48 0xF 0xA4 0xC2 (shld $1,%rax,%rdx)
+126668 amd64->IR: 0x1C 0xFF (sbb $0xff,%al)
+126696 support for CDROMREADRAW ioctl and CDROMREADTOCENTRY fix
+126722 assertion: segment_is_sane at m_aspacemgr/aspacemgr.c:1624
+126938 bad checking for syscalls linkat, renameat, symlinkat
+
+(3.2.0RC1: 27 May 2006, vex r1626, valgrind r5947).
+(3.2.0: 7 June 2006, vex r1628, valgrind r5957).
+
+
+Release 3.1.1 (15 March 2006)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.1.1 fixes a bunch of bugs reported in 3.1.0. There is no new
+functionality. The fixed bugs are:
+
+(note: "n-i-bz" means "not in bugzilla" -- this bug does not have
+ a bugzilla entry).
+
+n-i-bz ppc32: fsub 3,3,3 in dispatcher doesn't clear NaNs
+n-i-bz ppc32: __NR_{set,get}priority
+117332 x86: missing line info with icc 8.1
+117366 amd64: 0xDD 0x7C fnstsw
+118274 == 117366
+117367 amd64: 0xD9 0xF4 fxtract
+117369 amd64: __NR_getpriority (140)
+117419 ppc32: lfsu f5, -4(r11)
+117419 ppc32: fsqrt
+117936 more stabs problems (segfaults while reading debug info)
+119914 == 117936
+120345 == 117936
+118239 amd64: 0xF 0xAE 0x3F (clflush)
+118939 vm86old system call
+n-i-bz memcheck/tests/mempool reads freed memory
+n-i-bz AshleyP's custom-allocator assertion
+n-i-bz Dirk strict-aliasing stuff
+n-i-bz More space for debugger cmd line (Dan Thaler)
+n-i-bz Clarified leak checker output message
+n-i-bz AshleyP's --gen-suppressions output fix
+n-i-bz cg_annotate's --sort option broken
+n-i-bz OSet 64-bit fastcmp bug
+n-i-bz VG_(getgroups) fix (Shinichi Noda)
+n-i-bz ppc32: allocate from callee-saved FP/VMX regs
+n-i-bz misaligned path word-size bug in mc_main.c
+119297 Incorrect error message for sse code
+120410 x86: prefetchw (0xF 0xD 0x48 0x4)
+120728 TIOCSERGETLSR, TIOCGICOUNT, HDIO_GET_DMA ioctls
+120658 Build fixes for gcc 2.96
+120734 x86: Support for changing EIP in signal handler
+n-i-bz memcheck/tests/zeropage de-looping fix
+n-i-bz x86: fxtract doesn't work reliably
+121662 x86: lock xadd (0xF0 0xF 0xC0 0x2)
+121893 calloc does not always return zeroed memory
+121901 no support for syscall tkill
+n-i-bz Suppression update for Debian unstable
+122067 amd64: fcmovnu (0xDB 0xD9)
+n-i-bz ppc32: broken signal handling in cpu feature detection
+n-i-bz ppc32: rounding mode problems (improved, partial fix only)
+119482 ppc32: mtfsb1
+n-i-bz ppc32: mtocrf/mfocrf
+
+(3.1.1: 15 March 2006, vex r1597, valgrind r5771).
+
+
+Release 3.1.0 (25 November 2005)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.1.0 is a feature release with a number of significant improvements:
+AMD64 support is much improved, PPC32 support is good enough to be
+usable, and the handling of memory management and address space is
+much more robust. In detail:
+
+- AMD64 support is much improved. The 64-bit vs. 32-bit issues in
+ 3.0.X have been resolved, and it should "just work" now in all
+ cases. On AMD64 machines both 64-bit and 32-bit versions of
+ Valgrind are built. The right version will be invoked
+ automatically, even when using --trace-children and mixing execution
+ between 64-bit and 32-bit executables. Also, many more instructions
+ are supported.
+
+- PPC32 support is now good enough to be usable. It should work with
+ all tools, but please let us know if you have problems. Three
+ classes of CPUs are supported: integer only (no FP, no Altivec),
+ which covers embedded PPC uses, integer and FP but no Altivec
+ (G3-ish), and CPUs capable of Altivec too (G4, G5).
+
+- Valgrind's address space management has been overhauled. As a
+ result, Valgrind should be much more robust with programs that use
+ large amounts of memory. There should be many fewer "memory
+ exhausted" messages, and debug symbols should be read correctly on
+ large (eg. 300MB+) executables. On 32-bit machines the full address
+ space available to user programs (usually 3GB or 4GB) can be fully
+ utilised. On 64-bit machines up to 32GB of space is usable; when
+ using Memcheck that means your program can use up to about 14GB.
+
+ A side effect of this change is that Valgrind is no longer protected
+ against wild writes by the client. This feature was nice but relied
+ on the x86 segment registers and so wasn't portable.
+
+- Most users should not notice, but as part of the address space
+ manager change, the way Valgrind is built has been changed. Each
+ tool is now built as a statically linked stand-alone executable,
+ rather than as a shared object that is dynamically linked with the
+ core. The "valgrind" program invokes the appropriate tool depending
+ on the --tool option. This slightly increases the amount of disk
+ space used by Valgrind, but it greatly simplified many things and
+ removed Valgrind's dependence on glibc.
+
+Please note that Addrcheck and Helgrind are still not working. Work
+is underway to reinstate them (or equivalents). We apologise for the
+inconvenience.
+
+Other user-visible changes:
+
+- The --weird-hacks option has been renamed --sim-hints.
+
+- The --time-stamp option no longer gives an absolute date and time.
+ It now prints the time elapsed since the program began.
+
+- It should build with gcc-2.96.
+
+- Valgrind can now run itself (see README_DEVELOPERS for how).
+ This is not much use to you, but it means the developers can now
+ profile Valgrind using Cachegrind. As a result a couple of
+ performance bad cases have been fixed.
+
+- The XML output format has changed slightly. See
+ docs/internals/xml-output.txt.
+
+- Core dumping has been reinstated (it was disabled in 3.0.0 and 3.0.1).
+ If your program crashes while running under Valgrind, a core file with
+ the name "vgcore.<pid>" will be created (if your settings allow core
+ file creation). Note that the floating point information is not all
+ there. If Valgrind itself crashes, the OS will create a normal core
+ file.
+
+The following are some user-visible changes that occurred in earlier
+versions that may not have been announced, or were announced but not
+widely noticed. So we're mentioning them now.
+
+- The --tool flag is optional once again; if you omit it, Memcheck
+ is run by default.
+
+- The --num-callers flag now has a default value of 12. It was
+ previously 4.
+
+- The --xml=yes flag causes Valgrind's output to be produced in XML
+ format. This is designed to make it easy for other programs to
+ consume Valgrind's output. The format is described in the file
+ docs/internals/xml-format.txt.
+
+- The --gen-suppressions flag supports an "all" value that causes every
+ suppression to be printed without asking.
+
+- The --log-file option no longer puts "pid" in the filename, eg. the
+ old name "foo.pid12345" is now "foo.12345".
+
+- There are several graphical front-ends for Valgrind, such as Valkyrie,
+ Alleyoop and Valgui. See http://www.valgrind.org/downloads/guis.html
+ for a list.
+
+BUGS FIXED:
+
+109861 amd64 hangs at startup
+110301 ditto
+111554 valgrind crashes with Cannot allocate memory
+111809 Memcheck tool doesn't start java
+111901 cross-platform run of cachegrind fails on opteron
+113468 (vgPlain_mprotect_range): Assertion 'r != -1' failed.
+ 92071 Reading debugging info uses too much memory
+109744 memcheck loses track of mmap from direct ld-linux.so.2
+110183 tail of page with _end
+ 82301 FV memory layout too rigid
+ 98278 Infinite recursion possible when allocating memory
+108994 Valgrind runs out of memory due to 133x overhead
+115643 valgrind cannot allocate memory
+105974 vg_hashtable.c static hash table
+109323 ppc32: dispatch.S uses Altivec insn, which doesn't work on POWER.
+109345 ptrace_setregs not yet implemented for ppc
+110831 Would like to be able to run against both 32 and 64 bit
+ binaries on AMD64
+110829 == 110831
+111781 compile of valgrind-3.0.0 fails on my linux (gcc 2.X prob)
+112670 Cachegrind: cg_main.c:486 (handleOneStatement ...
+112941 vex x86: 0xD9 0xF4 (fxtract)
+110201 == 112941
+113015 vex amd64->IR: 0xE3 0x14 0x48 0x83 (jrcxz)
+113126 Crash with binaries built with -gstabs+/-ggdb
+104065 == 113126
+115741 == 113126
+113403 Partial SSE3 support on x86
+113541 vex: Grp5(x86) (alt encoding inc/dec) case 1
+113642 valgrind crashes when trying to read debug information
+113810 vex x86->IR: 66 0F F6 (66 + PSADBW == SSE PSADBW)
+113796 read() and write() do not work if buffer is in shared memory
+113851 vex x86->IR: (pmaddwd): 0x66 0xF 0xF5 0xC7
+114366 vex amd64 cannnot handle __asm__( "fninit" )
+114412 vex amd64->IR: 0xF 0xAD 0xC2 0xD3 (128-bit shift, shrdq?)
+114455 vex amd64->IR: 0xF 0xAC 0xD0 0x1 (also shrdq)
+115590: amd64->IR: 0x67 0xE3 0x9 0xEB (address size override)
+115953 valgrind svn r5042 does not build with parallel make (-j3)
+116057 maximum instruction size - VG_MAX_INSTR_SZB too small?
+116483 shmat failes with invalid argument
+102202 valgrind crashes when realloc'ing until out of memory
+109487 == 102202
+110536 == 102202
+112687 == 102202
+111724 vex amd64->IR: 0x41 0xF 0xAB (more BT{,S,R,C} fun n games)
+111748 vex amd64->IR: 0xDD 0xE2 (fucom)
+111785 make fails if CC contains spaces
+111829 vex x86->IR: sbb AL, Ib
+111851 vex x86->IR: 0x9F 0x89 (lahf/sahf)
+112031 iopl on AMD64 and README_MISSING_SYSCALL_OR_IOCTL update
+112152 code generation for Xin_MFence on x86 with SSE0 subarch
+112167 == 112152
+112789 == 112152
+112199 naked ar tool is used in vex makefile
+112501 vex x86->IR: movq (0xF 0x7F 0xC1 0xF) (mmx MOVQ)
+113583 == 112501
+112538 memalign crash
+113190 Broken links in docs/html/
+113230 Valgrind sys_pipe on x86-64 wrongly thinks file descriptors
+ should be 64bit
+113996 vex amd64->IR: fucomp (0xDD 0xE9)
+114196 vex x86->IR: out %eax,(%dx) (0xEF 0xC9 0xC3 0x90)
+114289 Memcheck fails to intercept malloc when used in an uclibc environment
+114756 mbind syscall support
+114757 Valgrind dies with assertion: Assertion 'noLargerThan > 0' failed
+114563 stack tracking module not informed when valgrind switches threads
+114564 clone() and stacks
+114565 == 114564
+115496 glibc crashes trying to use sysinfo page
+116200 enable fsetxattr, fgetxattr, and fremovexattr for amd64
+
+(3.1.0RC1: 20 November 2005, vex r1466, valgrind r5224).
+(3.1.0: 26 November 2005, vex r1471, valgrind r5235).
+
+
+Release 3.0.1 (29 August 2005)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.0.1 fixes a bunch of bugs reported in 3.0.0. There is no new
+functionality. Some of the fixed bugs are critical, so if you
+use/distribute 3.0.0, an upgrade to 3.0.1 is recommended. The fixed
+bugs are:
+
+(note: "n-i-bz" means "not in bugzilla" -- this bug does not have
+ a bugzilla entry).
+
+109313 (== 110505) x86 cmpxchg8b
+n-i-bz x86: track but ignore changes to %eflags.AC (alignment check)
+110102 dis_op2_E_G(amd64)
+110202 x86 sys_waitpid(#286)
+110203 clock_getres(,0)
+110208 execve fail wrong retval
+110274 SSE1 now mandatory for x86
+110388 amd64 0xDD 0xD1
+110464 amd64 0xDC 0x1D FCOMP
+110478 amd64 0xF 0xD PREFETCH
+n-i-bz XML <unique> printing wrong
+n-i-bz Dirk r4359 (amd64 syscalls from trunk)
+110591 amd64 and x86: rdtsc not implemented properly
+n-i-bz Nick r4384 (stub implementations of Addrcheck and Helgrind)
+110652 AMD64 valgrind crashes on cwtd instruction
+110653 AMD64 valgrind crashes on sarb $0x4,foo(%rip) instruction
+110656 PATH=/usr/bin::/bin valgrind foobar stats ./fooba
+110657 Small test fixes
+110671 vex x86->IR: unhandled instruction bytes: 0xF3 0xC3 (rep ret)
+n-i-bz Nick (Cachegrind should not assert when it encounters a client
+ request.)
+110685 amd64->IR: unhandled instruction bytes: 0xE1 0x56 (loope Jb)
+110830 configuring with --host fails to build 32 bit on 64 bit target
+110875 Assertion when execve fails
+n-i-bz Updates to Memcheck manual
+n-i-bz Fixed broken malloc_usable_size()
+110898 opteron instructions missing: btq btsq btrq bsfq
+110954 x86->IR: unhandled instruction bytes: 0xE2 0xF6 (loop Jb)
+n-i-bz Make suppressions work for "???" lines in stacktraces.
+111006 bogus warnings from linuxthreads
+111092 x86: dis_Grp2(Reg): unhandled case(x86)
+111231 sctp_getladdrs() and sctp_getpaddrs() returns uninitialized
+ memory
+111102 (comment #4) Fixed 64-bit unclean "silly arg" message
+n-i-bz vex x86->IR: unhandled instruction bytes: 0x14 0x0
+n-i-bz minor umount/fcntl wrapper fixes
+111090 Internal Error running Massif
+101204 noisy warning
+111513 Illegal opcode for SSE instruction (x86 movups)
+111555 VEX/Makefile: CC is set to gcc
+n-i-bz Fix XML bugs in FAQ
+
+(3.0.1: 29 August 05,
+ vex/branches/VEX_3_0_BRANCH r1367,
+ valgrind/branches/VALGRIND_3_0_BRANCH r4574).
+
+
+
+Release 3.0.0 (3 August 2005)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.0.0 is a major overhaul of Valgrind. The most significant user
+visible change is that Valgrind now supports architectures other than
+x86. The new architectures it supports are AMD64 and PPC32, and the
+infrastructure is present for other architectures to be added later.
+
+AMD64 support works well, but has some shortcomings:
+
+- It generally won't be as solid as the x86 version. For example,
+ support for more obscure instructions and system calls may be missing.
+ We will fix these as they arise.
+
+- Address space may be limited; see the point about
+ position-independent executables below.
+
+- If Valgrind is built on an AMD64 machine, it will only run 64-bit
+ executables. If you want to run 32-bit x86 executables under Valgrind
+ on an AMD64, you will need to build Valgrind on an x86 machine and
+ copy it to the AMD64 machine. And it probably won't work if you do
+ something tricky like exec'ing a 32-bit program from a 64-bit program
+ while using --trace-children=yes. We hope to improve this situation
+ in the future.
+
+The PPC32 support is very basic. It may not work reliably even for
+small programs, but it's a start. Many thanks to Paul Mackerras for
+his great work that enabled this support. We are working to make
+PPC32 usable as soon as possible.
+
+Other user-visible changes:
+
+- Valgrind is no longer built by default as a position-independent
+ executable (PIE), as this caused too many problems.
+
+ Without PIE enabled, AMD64 programs will only be able to access 2GB of
+ address space. We will fix this eventually, but not for the moment.
+
+ Use --enable-pie at configure-time to turn this on.
+
+- Support for programs that use stack-switching has been improved. Use
+ the --max-stackframe flag for simple cases, and the
+ VALGRIND_STACK_REGISTER, VALGRIND_STACK_DEREGISTER and
+ VALGRIND_STACK_CHANGE client requests for trickier cases.
+
+- Support for programs that use self-modifying code has been improved,
+ in particular programs that put temporary code fragments on the stack.
+ This helps for C programs compiled with GCC that use nested functions,
+ and also Ada programs. This is controlled with the --smc-check
+ flag, although the default setting should work in most cases.
+
+- Output can now be printed in XML format. This should make it easier
+ for tools such as GUI front-ends and automated error-processing
+ schemes to use Valgrind output as input. The --xml flag controls this.
+ As part of this change, ELF directory information is read from executables,
+ so absolute source file paths are available if needed.
+
+- Programs that allocate many heap blocks may run faster, due to
+ improvements in certain data structures.
+
+- Addrcheck is currently not working. We hope to get it working again
+ soon. Helgrind is still not working, as was the case for the 2.4.0
+ release.
+
+- The JITter has been completely rewritten, and is now in a separate
+ library, called Vex. This enabled a lot of the user-visible changes,
+ such as new architecture support. The new JIT unfortunately translates
+ more slowly than the old one, so programs may take longer to start.
+ We believe the code quality is produces is about the same, so once
+ started, programs should run at about the same speed. Feedback about
+ this would be useful.
+
+ On the plus side, Vex and hence Memcheck tracks value flow properly
+ through floating point and vector registers, something the 2.X line
+ could not do. That means that Memcheck is much more likely to be
+ usably accurate on vectorised code.
+
+- There is a subtle change to the way exiting of threaded programs
+ is handled. In 3.0, Valgrind's final diagnostic output (leak check,
+ etc) is not printed until the last thread exits. If the last thread
+ to exit was not the original thread which started the program, any
+ other process wait()-ing on this one to exit may conclude it has
+ finished before the diagnostic output is printed. This may not be
+ what you expect. 2.X had a different scheme which avoided this
+ problem, but caused deadlocks under obscure circumstances, so we
+ are trying something different for 3.0.
+
+- Small changes in control log file naming which make it easier to
+ use valgrind for debugging MPI-based programs. The relevant
+ new flags are --log-file-exactly= and --log-file-qualifier=.
+
+- As part of adding AMD64 support, DWARF2 CFI-based stack unwinding
+ support was added. In principle this means Valgrind can produce
+ meaningful backtraces on x86 code compiled with -fomit-frame-pointer
+ providing you also compile your code with -fasynchronous-unwind-tables.
+
+- The documentation build system has been completely redone.
+ The documentation masters are now in XML format, and from that
+ HTML, PostScript and PDF documentation is generated. As a result
+ the manual is now available in book form. Note that the
+ documentation in the source tarballs is pre-built, so you don't need
+ any XML processing tools to build Valgrind from a tarball.
+
+Changes that are not user-visible:
+
+- The code has been massively overhauled in order to modularise it.
+ As a result we hope it is easier to navigate and understand.
+
+- Lots of code has been rewritten.
+
+BUGS FIXED:
+
+110046 sz == 4 assertion failed
+109810 vex amd64->IR: unhandled instruction bytes: 0xA3 0x4C 0x70 0xD7
+109802 Add a plausible_stack_size command-line parameter ?
+109783 unhandled ioctl TIOCMGET (running hw detection tool discover)
+109780 unhandled ioctl BLKSSZGET (running fdisk -l /dev/hda)
+109718 vex x86->IR: unhandled instruction: ffreep
+109429 AMD64 unhandled syscall: 127 (sigpending)
+109401 false positive uninit in strchr from ld-linux.so.2
+109385 "stabs" parse failure
+109378 amd64: unhandled instruction REP NOP
+109376 amd64: unhandled instruction LOOP Jb
+109363 AMD64 unhandled instruction bytes
+109362 AMD64 unhandled syscall: 24 (sched_yield)
+109358 fork() won't work with valgrind-3.0 SVN
+109332 amd64 unhandled instruction: ADC Ev, Gv
+109314 Bogus memcheck report on amd64
+108883 Crash; vg_memory.c:905 (vgPlain_init_shadow_range):
+ Assertion `vgPlain_defined_init_shadow_page()' failed.
+108349 mincore syscall parameter checked incorrectly
+108059 build infrastructure: small update
+107524 epoll_ctl event parameter checked on EPOLL_CTL_DEL
+107123 Vex dies with unhandled instructions: 0xD9 0x31 0xF 0xAE
+106841 auxmap & openGL problems
+106713 SDL_Init causes valgrind to exit
+106352 setcontext and makecontext not handled correctly
+106293 addresses beyond initial client stack allocation
+ not checked in VALGRIND_DO_LEAK_CHECK
+106283 PIE client programs are loaded at address 0
+105831 Assertion `vgPlain_defined_init_shadow_page()' failed.
+105039 long run-times probably due to memory manager
+104797 valgrind needs to be aware of BLKGETSIZE64
+103594 unhandled instruction: FICOM
+103320 Valgrind 2.4.0 fails to compile with gcc 3.4.3 and -O0
+103168 potentially memory leak in coregrind/ume.c
+102039 bad permissions for mapped region at address 0xB7C73680
+101881 weird assertion problem
+101543 Support fadvise64 syscalls
+75247 x86_64/amd64 support (the biggest "bug" we have ever fixed)
+
+(3.0RC1: 27 July 05, vex r1303, valgrind r4283).
+(3.0.0: 3 August 05, vex r1313, valgrind r4316).
+
+
+
+Stable release 2.4.1 (1 August 2005)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+(The notes for this release have been lost. Sorry! It would have
+contained various bug fixes but no new features.)
+
+
+
+Stable release 2.4.0 (March 2005) -- CHANGES RELATIVE TO 2.2.0
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+2.4.0 brings many significant changes and bug fixes. The most
+significant user-visible change is that we no longer supply our own
+pthread implementation. Instead, Valgrind is finally capable of
+running the native thread library, either LinuxThreads or NPTL.
+
+This means our libpthread has gone, along with the bugs associated
+with it. Valgrind now supports the kernel's threading syscalls, and
+lets you use your standard system libpthread. As a result:
+
+* There are many fewer system dependencies and strange library-related
+ bugs. There is a small performance improvement, and a large
+ stability improvement.
+
+* On the downside, Valgrind can no longer report misuses of the POSIX
+ PThreads API. It also means that Helgrind currently does not work.
+ We hope to fix these problems in a future release.
+
+Note that running the native thread libraries does not mean Valgrind
+is able to provide genuine concurrent execution on SMPs. We still
+impose the restriction that only one thread is running at any given
+time.
+
+There are many other significant changes too:
+
+* Memcheck is (once again) the default tool.
+
+* The default stack backtrace is now 12 call frames, rather than 4.
+
+* Suppressions can have up to 25 call frame matches, rather than 4.
+
+* Memcheck and Addrcheck use less memory. Under some circumstances,
+ they no longer allocate shadow memory if there are large regions of
+ memory with the same A/V states - such as an mmaped file.
+
+* The memory-leak detector in Memcheck and Addrcheck has been
+ improved. It now reports more types of memory leak, including
+ leaked cycles. When reporting leaked memory, it can distinguish
+ between directly leaked memory (memory with no references), and
+ indirectly leaked memory (memory only referred to by other leaked
+ memory).
+
+* Memcheck's confusion over the effect of mprotect() has been fixed:
+ previously mprotect could erroneously mark undefined data as
+ defined.
+
+* Signal handling is much improved and should be very close to what
+ you get when running natively.
+
+ One result of this is that Valgrind observes changes to sigcontexts
+ passed to signal handlers. Such modifications will take effect when
+ the signal returns. You will need to run with --single-step=yes to
+ make this useful.
+
+* Valgrind is built in Position Independent Executable (PIE) format if
+ your toolchain supports it. This allows it to take advantage of all
+ the available address space on systems with 4Gbyte user address
+ spaces.
+
+* Valgrind can now run itself (requires PIE support).
+
+* Syscall arguments are now checked for validity. Previously all
+ memory used by syscalls was checked, but now the actual values
+ passed are also checked.
+
+* Syscall wrappers are more robust against bad addresses being passed
+ to syscalls: they will fail with EFAULT rather than killing Valgrind
+ with SIGSEGV.
+
+* Because clone() is directly supported, some non-pthread uses of it
+ will work. Partial sharing (where some resources are shared, and
+ some are not) is not supported.
+
+* open() and readlink() on /proc/self/exe are supported.
+
+BUGS FIXED:
+
+88520 pipe+fork+dup2 kills the main program
+88604 Valgrind Aborts when using $VALGRIND_OPTS and user progra...
+88614 valgrind: vg_libpthread.c:2323 (read): Assertion `read_pt...
+88703 Stabs parser fails to handle ";"
+88886 ioctl wrappers for TIOCMBIS and TIOCMBIC
+89032 valgrind pthread_cond_timedwait fails
+89106 the 'impossible' happened
+89139 Missing sched_setaffinity & sched_getaffinity
+89198 valgrind lacks support for SIOCSPGRP and SIOCGPGRP
+89263 Missing ioctl translations for scsi-generic and CD playing
+89440 tests/deadlock.c line endings
+89481 `impossible' happened: EXEC FAILED
+89663 valgrind 2.2.0 crash on Redhat 7.2
+89792 Report pthread_mutex_lock() deadlocks instead of returnin...
+90111 statvfs64 gives invalid error/warning
+90128 crash+memory fault with stabs generated by gnat for a run...
+90778 VALGRIND_CHECK_DEFINED() not as documented in memcheck.h
+90834 cachegrind crashes at end of program without reporting re...
+91028 valgrind: vg_memory.c:229 (vgPlain_unmap_range): Assertio...
+91162 valgrind crash while debugging drivel 1.2.1
+91199 Unimplemented function
+91325 Signal routing does not propagate the siginfo structure
+91599 Assertion `cv == ((void *)0)'
+91604 rw_lookup clears orig and sends the NULL value to rw_new
+91821 Small problems building valgrind with $top_builddir ne $t...
+91844 signal 11 (SIGSEGV) at get_tcb (libpthread.c:86) in corec...
+92264 UNIMPLEMENTED FUNCTION: pthread_condattr_setpshared
+92331 per-target flags necessitate AM_PROG_CC_C_O
+92420 valgrind doesn't compile with linux 2.6.8.1/9
+92513 Valgrind 2.2.0 generates some warning messages
+92528 vg_symtab2.c:170 (addLoc): Assertion `loc->size > 0' failed.
+93096 unhandled ioctl 0x4B3A and 0x5601
+93117 Tool and core interface versions do not match
+93128 Can't run valgrind --tool=memcheck because of unimplement...
+93174 Valgrind can crash if passed bad args to certain syscalls
+93309 Stack frame in new thread is badly aligned
+93328 Wrong types used with sys_sigprocmask()
+93763 /usr/include/asm/msr.h is missing
+93776 valgrind: vg_memory.c:508 (vgPlain_find_map_space): Asser...
+93810 fcntl() argument checking a bit too strict
+94378 Assertion `tst->sigqueue_head != tst->sigqueue_tail' failed.
+94429 valgrind 2.2.0 segfault with mmap64 in glibc 2.3.3
+94645 Impossible happened: PINSRW mem
+94953 valgrind: the `impossible' happened: SIGSEGV
+95667 Valgrind does not work with any KDE app
+96243 Assertion 'res==0' failed
+96252 stage2 loader of valgrind fails to allocate memory
+96520 All programs crashing at _dl_start (in /lib/ld-2.3.3.so) ...
+96660 ioctl CDROMREADTOCENTRY causes bogus warnings
+96747 After looping in a segfault handler, the impossible happens
+96923 Zero sized arrays crash valgrind trace back with SIGFPE
+96948 valgrind stops with assertion failure regarding mmap2
+96966 valgrind fails when application opens more than 16 sockets
+97398 valgrind: vg_libpthread.c:2667 Assertion failed
+97407 valgrind: vg_mylibc.c:1226 (vgPlain_safe_fd): Assertion `...
+97427 "Warning: invalid file descriptor -1 in syscall close()" ...
+97785 missing backtrace
+97792 build in obj dir fails - autoconf / makefile cleanup
+97880 pthread_mutex_lock fails from shared library (special ker...
+97975 program aborts without ang VG messages
+98129 Failed when open and close file 230000 times using stdio
+98175 Crashes when using valgrind-2.2.0 with a program using al...
+98288 Massif broken
+98303 UNIMPLEMENTED FUNCTION pthread_condattr_setpshared
+98630 failed--compilation missing warnings.pm, fails to make he...
+98756 Cannot valgrind signal-heavy kdrive X server
+98966 valgrinding the JVM fails with a sanity check assertion
+99035 Valgrind crashes while profiling
+99142 loops with message "Signal 11 being dropped from thread 0...
+99195 threaded apps crash on thread start (using QThread::start...
+99348 Assertion `vgPlain_lseek(core_fd, 0, 1) == phdrs[i].p_off...
+99568 False negative due to mishandling of mprotect
+99738 valgrind memcheck crashes on program that uses sigitimer
+99923 0-sized allocations are reported as leaks
+99949 program seg faults after exit()
+100036 "newSuperblock's request for 1048576 bytes failed"
+100116 valgrind: (pthread_cond_init): Assertion `sizeof(* cond) ...
+100486 memcheck reports "valgrind: the `impossible' happened: V...
+100833 second call to "mremap" fails with EINVAL
+101156 (vgPlain_find_map_space): Assertion `(addr & ((1 << 12)-1...
+101173 Assertion `recDepth >= 0 && recDepth < 500' failed
+101291 creating threads in a forked process fails
+101313 valgrind causes different behavior when resizing a window...
+101423 segfault for c++ array of floats
+101562 valgrind massif dies on SIGINT even with signal handler r...
+
+
+Stable release 2.2.0 (31 August 2004) -- CHANGES RELATIVE TO 2.0.0
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+2.2.0 brings nine months worth of improvements and bug fixes. We
+believe it to be a worthy successor to 2.0.0. There are literally
+hundreds of bug fixes and minor improvements. There are also some
+fairly major user-visible changes:
+
+* A complete overhaul of handling of system calls and signals, and
+ their interaction with threads. In general, the accuracy of the
+ system call, thread and signal simulations is much improved:
+
+ - Blocking system calls behave exactly as they do when running
+ natively (not on valgrind). That is, if a syscall blocks only the
+ calling thread when running natively, than it behaves the same on
+ valgrind. No more mysterious hangs because V doesn't know that some
+ syscall or other, should block only the calling thread.
+
+ - Interrupted syscalls should now give more faithful results.
+
+ - Signal contexts in signal handlers are supported.
+
+* Improvements to NPTL support to the extent that V now works
+ properly on NPTL-only setups.
+
+* Greater isolation between Valgrind and the program being run, so
+ the program is less likely to inadvertently kill Valgrind by
+ doing wild writes.
+
+* Massif: a new space profiling tool. Try it! It's cool, and it'll
+ tell you in detail where and when your C/C++ code is allocating heap.
+ Draws pretty .ps pictures of memory use against time. A potentially
+ powerful tool for making sense of your program's space use.
+
+* File descriptor leakage checks. When enabled, Valgrind will print out
+ a list of open file descriptors on exit.
+
+* Improved SSE2/SSE3 support.
+
+* Time-stamped output; use --time-stamp=yes
+
+
+
+Stable release 2.2.0 (31 August 2004) -- CHANGES RELATIVE TO 2.1.2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+2.2.0 is not much different from 2.1.2, released seven weeks ago.
+A number of bugs have been fixed, most notably #85658, which gave
+problems for quite a few people. There have been many internal
+cleanups, but those are not user visible.
+
+The following bugs have been fixed since 2.1.2:
+
+85658 Assert in coregrind/vg_libpthread.c:2326 (open64) !=
+ (void*)0 failed
+ This bug was reported multiple times, and so the following
+ duplicates of it are also fixed: 87620, 85796, 85935, 86065,
+ 86919, 86988, 87917, 88156
+
+80716 Semaphore mapping bug caused by unmap (sem_destroy)
+ (Was fixed prior to 2.1.2)
+
+86987 semctl and shmctl syscalls family is not handled properly
+
+86696 valgrind 2.1.2 + RH AS2.1 + librt
+
+86730 valgrind locks up at end of run with assertion failure
+ in __pthread_unwind
+
+86641 memcheck doesn't work with Mesa OpenGL/ATI on Suse 9.1
+ (also fixes 74298, a duplicate of this)
+
+85947 MMX/SSE unhandled instruction 'sfence'
+
+84978 Wrong error "Conditional jump or move depends on
+ uninitialised value" resulting from "sbbl %reg, %reg"
+
+86254 ssort() fails when signed int return type from comparison is
+ too small to handle result of unsigned int subtraction
+
+87089 memalign( 4, xxx) makes valgrind assert
+
+86407 Add support for low-level parallel port driver ioctls.
+
+70587 Add timestamps to Valgrind output? (wishlist)
+
+84937 vg_libpthread.c:2505 (se_remap): Assertion `res == 0'
+ (fixed prior to 2.1.2)
+
+86317 cannot load libSDL-1.2.so.0 using valgrind
+
+86989 memcpy from mac_replace_strmem.c complains about
+ uninitialized pointers passed when length to copy is zero
+
+85811 gnu pascal symbol causes segmentation fault; ok in 2.0.0
+
+79138 writing to sbrk()'d memory causes segfault
+
+77369 sched deadlock while signal received during pthread_join
+ and the joined thread exited
+
+88115 In signal handler for SIGFPE, siginfo->si_addr is wrong
+ under Valgrind
+
+78765 Massif crashes on app exit if FP exceptions are enabled
+
+Additionally there are the following changes, which are not
+connected to any bug report numbers, AFAICS:
+
+* Fix scary bug causing mis-identification of SSE stores vs
+ loads and so causing memcheck to sometimes give nonsense results
+ on SSE code.
+
+* Add support for the POSIX message queue system calls.
+
+* Fix to allow 32-bit Valgrind to run on AMD64 boxes. Note: this does
+ NOT allow Valgrind to work with 64-bit executables - only with 32-bit
+ executables on an AMD64 box.
+
+* At configure time, only check whether linux/mii.h can be processed
+ so that we don't generate ugly warnings by trying to compile it.
+
+* Add support for POSIX clocks and timers.
+
+
+
+Developer (cvs head) release 2.1.2 (18 July 2004)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+2.1.2 contains four months worth of bug fixes and refinements.
+Although officially a developer release, we believe it to be stable
+enough for widespread day-to-day use. 2.1.2 is pretty good, so try it
+first, although there is a chance it won't work. If so then try 2.0.0
+and tell us what went wrong." 2.1.2 fixes a lot of problems present
+in 2.0.0 and is generally a much better product.
+
+Relative to 2.1.1, a large number of minor problems with 2.1.1 have
+been fixed, and so if you use 2.1.1 you should try 2.1.2. Users of
+the last stable release, 2.0.0, might also want to try this release.
+
+The following bugs, and probably many more, have been fixed. These
+are listed at http://bugs.kde.org. Reporting a bug for valgrind in
+the http://bugs.kde.org is much more likely to get you a fix than
+mailing developers directly, so please continue to keep sending bugs
+there.
+
+76869 Crashes when running any tool under Fedora Core 2 test1
+ This fixes the problem with returning from a signal handler
+ when VDSOs are turned off in FC2.
+
+69508 java 1.4.2 client fails with erroneous "stack size too small".
+ This fix makes more of the pthread stack attribute related
+ functions work properly. Java still doesn't work though.
+
+71906 malloc alignment should be 8, not 4
+ All memory returned by malloc/new etc is now at least
+ 8-byte aligned.
+
+81970 vg_alloc_ThreadState: no free slots available
+ (closed because the workaround is simple: increase
+ VG_N_THREADS, rebuild and try again.)
+
+78514 Conditional jump or move depends on uninitialized value(s)
+ (a slight mishanding of FP code in memcheck)
+
+77952 pThread Support (crash) (due to initialisation-ordering probs)
+ (also 85118)
+
+80942 Addrcheck wasn't doing overlap checking as it should.
+78048 return NULL on malloc/new etc failure, instead of asserting
+73655 operator new() override in user .so files often doesn't get picked up
+83060 Valgrind does not handle native kernel AIO
+69872 Create proper coredumps after fatal signals
+82026 failure with new glibc versions: __libc_* functions are not exported
+70344 UNIMPLEMENTED FUNCTION: tcdrain
+81297 Cancellation of pthread_cond_wait does not require mutex
+82872 Using debug info from additional packages (wishlist)
+83025 Support for ioctls FIGETBSZ and FIBMAP
+83340 Support for ioctl HDIO_GET_IDENTITY
+79714 Support for the semtimedop system call.
+77022 Support for ioctls FBIOGET_VSCREENINFO and FBIOGET_FSCREENINFO
+82098 hp2ps ansification (wishlist)
+83573 Valgrind SIGSEGV on execve
+82999 show which cmdline option was erroneous (wishlist)
+83040 make valgrind VPATH and distcheck-clean (wishlist)
+83998 Assertion `newfd > vgPlain_max_fd' failed (see below)
+82722 Unchecked mmap in as_pad leads to mysterious failures later
+78958 memcheck seg faults while running Mozilla
+85416 Arguments with colon (e.g. --logsocket) ignored
+
+
+Additionally there are the following changes, which are not
+connected to any bug report numbers, AFAICS:
+
+* Rearranged address space layout relative to 2.1.1, so that
+ Valgrind/tools will run out of memory later than currently in many
+ circumstances. This is good news esp. for Calltree. It should
+ be possible for client programs to allocate over 800MB of
+ memory when using memcheck now.
+
+* Improved checking when laying out memory. Should hopefully avoid
+ the random segmentation faults that 2.1.1 sometimes caused.
+
+* Support for Fedora Core 2 and SuSE 9.1. Improvements to NPTL
+ support to the extent that V now works properly on NPTL-only setups.
+
+* Renamed the following options:
+ --logfile-fd --> --log-fd
+ --logfile --> --log-file
+ --logsocket --> --log-socket
+ to be consistent with each other and other options (esp. --input-fd).
+
+* Add support for SIOCGMIIPHY, SIOCGMIIREG and SIOCSMIIREG ioctls and
+ improve the checking of other interface related ioctls.
+
+* Fix building with gcc-3.4.1.
+
+* Remove limit on number of semaphores supported.
+
+* Add support for syscalls: set_tid_address (258), acct (51).
+
+* Support instruction "repne movs" -- not official but seems to occur.
+
+* Implement an emulated soft limit for file descriptors in addition to
+ the current reserved area, which effectively acts as a hard limit. The
+ setrlimit system call now simply updates the emulated limits as best
+ as possible - the hard limit is not allowed to move at all and just
+ returns EPERM if you try and change it. This should stop reductions
+ in the soft limit causing assertions when valgrind tries to allocate
+ descriptors from the reserved area.
+ (This actually came from bug #83998).
+
+* Major overhaul of Cachegrind implementation. First user-visible change
+ is that cachegrind.out files are now typically 90% smaller than they
+ used to be; code annotation times are correspondingly much smaller.
+ Second user-visible change is that hit/miss counts for code that is
+ unloaded at run-time is no longer dumped into a single "discard" pile,
+ but accurately preserved.
+
+* Client requests for telling valgrind about memory pools.
+
+
+
+Developer (cvs head) release 2.1.1 (12 March 2004)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+2.1.1 contains some internal structural changes needed for V's
+long-term future. These don't affect end-users. Most notable
+user-visible changes are:
+
+* Greater isolation between Valgrind and the program being run, so
+ the program is less likely to inadvertently kill Valgrind by
+ doing wild writes.
+
+* Massif: a new space profiling tool. Try it! It's cool, and it'll
+ tell you in detail where and when your C/C++ code is allocating heap.
+ Draws pretty .ps pictures of memory use against time. A potentially
+ powerful tool for making sense of your program's space use.
+
+* Fixes for many bugs, including support for more SSE2/SSE3 instructions,
+ various signal/syscall things, and various problems with debug
+ info readers.
+
+* Support for glibc-2.3.3 based systems.
+
+We are now doing automatic overnight build-and-test runs on a variety
+of distros. As a result, we believe 2.1.1 builds and runs on:
+Red Hat 7.2, 7.3, 8.0, 9, Fedora Core 1, SuSE 8.2, SuSE 9.
+
+
+The following bugs, and probably many more, have been fixed. These
+are listed at http://bugs.kde.org. Reporting a bug for valgrind in
+the http://bugs.kde.org is much more likely to get you a fix than
+mailing developers directly, so please continue to keep sending bugs
+there.
+
+69616 glibc 2.3.2 w/NPTL is massively different than what valgrind expects
+69856 I don't know how to instrument MMXish stuff (Helgrind)
+73892 valgrind segfaults starting with Objective-C debug info
+ (fix for S-type stabs)
+73145 Valgrind complains too much about close(<reserved fd>)
+73902 Shadow memory allocation seems to fail on RedHat 8.0
+68633 VG_N_SEMAPHORES too low (V itself was leaking semaphores)
+75099 impossible to trace multiprocess programs
+76839 the `impossible' happened: disInstr: INT but not 0x80 !
+76762 vg_to_ucode.c:3748 (dis_push_segreg): Assertion `sz == 4' failed.
+76747 cannot include valgrind.h in c++ program
+76223 parsing B(3,10) gave NULL type => impossible happens
+75604 shmdt handling problem
+76416 Problems with gcc 3.4 snap 20040225
+75614 using -gstabs when building your programs the `impossible' happened
+75787 Patch for some CDROM ioctls CDORM_GET_MCN, CDROM_SEND_PACKET,
+75294 gcc 3.4 snapshot's libstdc++ have unsupported instructions.
+ (REP RET)
+73326 vg_symtab2.c:272 (addScopeRange): Assertion `range->size > 0' failed.
+72596 not recognizing __libc_malloc
+69489 Would like to attach ddd to running program
+72781 Cachegrind crashes with kde programs
+73055 Illegal operand at DXTCV11CompressBlockSSE2 (more SSE opcodes)
+73026 Descriptor leak check reports port numbers wrongly
+71705 README_MISSING_SYSCALL_OR_IOCTL out of date
+72643 Improve support for SSE/SSE2 instructions
+72484 valgrind leaves it's own signal mask in place when execing
+72650 Signal Handling always seems to restart system calls
+72006 The mmap system call turns all errors in ENOMEM
+71781 gdb attach is pretty useless
+71180 unhandled instruction bytes: 0xF 0xAE 0x85 0xE8
+69886 writes to zero page cause valgrind to assert on exit
+71791 crash when valgrinding gimp 1.3 (stabs reader problem)
+69783 unhandled syscall: 218
+69782 unhandled instruction bytes: 0x66 0xF 0x2B 0x80
+70385 valgrind fails if the soft file descriptor limit is less
+ than about 828
+69529 "rep; nop" should do a yield
+70827 programs with lots of shared libraries report "mmap failed"
+ for some of them when reading symbols
+71028 glibc's strnlen is optimised enough to confuse valgrind
+
+
+
+
+Unstable (cvs head) release 2.1.0 (15 December 2003)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+For whatever it's worth, 2.1.0 actually seems pretty darn stable to me
+(Julian). It looks eminently usable, and given that it fixes some
+significant bugs, may well be worth using on a day-to-day basis.
+2.1.0 is known to build and pass regression tests on: SuSE 9, SuSE
+8.2, RedHat 8.
+
+2.1.0 most notably includes Jeremy Fitzhardinge's complete overhaul of
+handling of system calls and signals, and their interaction with
+threads. In general, the accuracy of the system call, thread and
+signal simulations is much improved. Specifically:
+
+- Blocking system calls behave exactly as they do when running
+ natively (not on valgrind). That is, if a syscall blocks only the
+ calling thread when running natively, than it behaves the same on
+ valgrind. No more mysterious hangs because V doesn't know that some
+ syscall or other, should block only the calling thread.
+
+- Interrupted syscalls should now give more faithful results.
+
+- Finally, signal contexts in signal handlers are supported. As a
+ result, konqueror on SuSE 9 no longer segfaults when notified of
+ file changes in directories it is watching.
+
+Other changes:
+
+- Robert Walsh's file descriptor leakage checks. When enabled,
+ Valgrind will print out a list of open file descriptors on
+ exit. Along with each file descriptor, Valgrind prints out a stack
+ backtrace of where the file was opened and any details relating to the
+ file descriptor such as the file name or socket details.
+ To use, give: --track-fds=yes
+
+- Implemented a few more SSE/SSE2 instructions.
+
+- Less crud on the stack when you do 'where' inside a GDB attach.
+
+- Fixed the following bugs:
+ 68360: Valgrind does not compile against 2.6.0-testX kernels
+ 68525: CVS head doesn't compile on C90 compilers
+ 68566: pkgconfig support (wishlist)
+ 68588: Assertion `sz == 4' failed in vg_to_ucode.c (disInstr)
+ 69140: valgrind not able to explicitly specify a path to a binary.
+ 69432: helgrind asserts encountering a MutexErr when there are
+ EraserErr suppressions
+
+- Increase the max size of the translation cache from 200k average bbs
+ to 300k average bbs. Programs on the size of OOo (680m17) are
+ thrashing the cache at the smaller size, creating large numbers of
+ retranslations and wasting significant time as a result.
+
+
+
+Stable release 2.0.0 (5 Nov 2003)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+2.0.0 improves SSE/SSE2 support, fixes some minor bugs, and
+improves support for SuSE 9 and the Red Hat "Severn" beta.
+
+- Further improvements to SSE/SSE2 support. The entire test suite of
+ the GNU Scientific Library (gsl-1.4) compiled with Intel Icc 7.1
+ 20030307Z '-g -O -xW' now works. I think this gives pretty good
+ coverage of SSE/SSE2 floating point instructions, or at least the
+ subset emitted by Icc.
+
+- Also added support for the following instructions:
+ MOVNTDQ UCOMISD UNPCKLPS UNPCKHPS SQRTSS
+ PUSH/POP %{FS,GS}, and PUSH %CS (Nb: there is no POP %CS).
+
+- CFI support for GDB version 6. Needed to enable newer GDBs
+ to figure out where they are when using --gdb-attach=yes.
+
+- Fix this:
+ mc_translate.c:1091 (memcheck_instrument): Assertion
+ `u_in->size == 4 || u_in->size == 16' failed.
+
+- Return an error rather than panicing when given a bad socketcall.
+
+- Fix checking of syscall rt_sigtimedwait().
+
+- Implement __NR_clock_gettime (syscall 265). Needed on Red Hat Severn.
+
+- Fixed bug in overlap check in strncpy() -- it was assuming the src was 'n'
+ bytes long, when it could be shorter, which could cause false
+ positives.
+
+- Support use of select() for very large numbers of file descriptors.
+
+- Don't fail silently if the executable is statically linked, or is
+ setuid/setgid. Print an error message instead.
+
+- Support for old DWARF-1 format line number info.
+
+
+
+Snapshot 20031012 (12 October 2003)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Three months worth of bug fixes, roughly. Most significant single
+change is improved SSE/SSE2 support, mostly thanks to Dirk Mueller.
+
+20031012 builds on Red Hat Fedora ("Severn") but doesn't really work
+(curiosly, mozilla runs OK, but a modest "ls -l" bombs). I hope to
+get a working version out soon. It may or may not work ok on the
+forthcoming SuSE 9; I hear positive noises about it but haven't been
+able to verify this myself (not until I get hold of a copy of 9).
+
+A detailed list of changes, in no particular order:
+
+- Describe --gen-suppressions in the FAQ.
+
+- Syscall __NR_waitpid supported.
+
+- Minor MMX bug fix.
+
+- -v prints program's argv[] at startup.
+
+- More glibc-2.3 suppressions.
+
+- Suppressions for stack underrun bug(s) in the c++ support library
+ distributed with Intel Icc 7.0.
+
+- Fix problems reading /proc/self/maps.
+
+- Fix a couple of messages that should have been suppressed by -q,
+ but weren't.
+
+- Make Addrcheck understand "Overlap" suppressions.
+
+- At startup, check if program is statically linked and bail out if so.
+
+- Cachegrind: Auto-detect Intel Pentium-M, also VIA Nehemiah
+
+- Memcheck/addrcheck: minor speed optimisations
+
+- Handle syscall __NR_brk more correctly than before.
+
+- Fixed incorrect allocate/free mismatch errors when using
+ operator new(unsigned, std::nothrow_t const&)
+ operator new[](unsigned, std::nothrow_t const&)
+
+- Support POSIX pthread spinlocks.
+
+- Fixups for clean compilation with gcc-3.3.1.
+
+- Implemented more opcodes:
+ - push %es
+ - push %ds
+ - pop %es
+ - pop %ds
+ - movntq
+ - sfence
+ - pshufw
+ - pavgb
+ - ucomiss
+ - enter
+ - mov imm32, %esp
+ - all "in" and "out" opcodes
+ - inc/dec %esp
+ - A whole bunch of SSE/SSE2 instructions
+
+- Memcheck: don't bomb on SSE/SSE2 code.
+
+
+Snapshot 20030725 (25 July 2003)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Fixes some minor problems in 20030716.
+
+- Fix bugs in overlap checking for strcpy/memcpy etc.
+
+- Do overlap checking with Addrcheck as well as Memcheck.
+
+- Fix this:
+ Memcheck: the `impossible' happened:
+ get_error_name: unexpected type
+
+- Install headers needed to compile new skins.
+
+- Remove leading spaces and colon in the LD_LIBRARY_PATH / LD_PRELOAD
+ passed to non-traced children.
+
+- Fix file descriptor leak in valgrind-listener.
+
+- Fix longstanding bug in which the allocation point of a
+ block resized by realloc was not correctly set. This may
+ have caused confusing error messages.
+
+
+Snapshot 20030716 (16 July 2003)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+20030716 is a snapshot of our current CVS head (development) branch.
+This is the branch which will become valgrind-2.0. It contains
+significant enhancements over the 1.9.X branch.
+
+Despite this being a snapshot of the CVS head, it is believed to be
+quite stable -- at least as stable as 1.9.6 or 1.0.4, if not more so
+-- and therefore suitable for widespread use. Please let us know asap
+if it causes problems for you.
+
+Two reasons for releasing a snapshot now are:
+
+- It's been a while since 1.9.6, and this snapshot fixes
+ various problems that 1.9.6 has with threaded programs
+ on glibc-2.3.X based systems.
+
+- So as to make available improvements in the 2.0 line.
+
+Major changes in 20030716, as compared to 1.9.6:
+
+- More fixes to threading support on glibc-2.3.1 and 2.3.2-based
+ systems (SuSE 8.2, Red Hat 9). If you have had problems
+ with inconsistent/illogical behaviour of errno, h_errno or the DNS
+ resolver functions in threaded programs, 20030716 should improve
+ matters. This snapshot seems stable enough to run OpenOffice.org
+ 1.1rc on Red Hat 7.3, SuSE 8.2 and Red Hat 9, and that's a big
+ threaded app if ever I saw one.
+
+- Automatic generation of suppression records; you no longer
+ need to write them by hand. Use --gen-suppressions=yes.
+
+- strcpy/memcpy/etc check their arguments for overlaps, when
+ running with the Memcheck or Addrcheck skins.
+
+- malloc_usable_size() is now supported.
+
+- new client requests:
+ - VALGRIND_COUNT_ERRORS, VALGRIND_COUNT_LEAKS:
+ useful with regression testing
+ - VALGRIND_NON_SIMD_CALL[0123]: for running arbitrary functions
+ on real CPU (use with caution!)
+
+- The GDB attach mechanism is more flexible. Allow the GDB to
+ be run to be specified by --gdb-path=/path/to/gdb, and specify
+ which file descriptor V will read its input from with
+ --input-fd=<number>.
+
+- Cachegrind gives more accurate results (wasn't tracking instructions in
+ malloc() and friends previously, is now).
+
+- Complete support for the MMX instruction set.
+
+- Partial support for the SSE and SSE2 instruction sets. Work for this
+ is ongoing. About half the SSE/SSE2 instructions are done, so
+ some SSE based programs may work. Currently you need to specify
+ --skin=addrcheck. Basically not suitable for real use yet.
+
+- Significant speedups (10%-20%) for standard memory checking.
+
+- Fix assertion failure in pthread_once().
+
+- Fix this:
+ valgrind: vg_intercept.c:598 (vgAllRoadsLeadToRome_select):
+ Assertion `ms_end >= ms_now' failed.
+
+- Implement pthread_mutexattr_setpshared.
+
+- Understand Pentium 4 branch hints. Also implemented a couple more
+ obscure x86 instructions.
+
+- Lots of other minor bug fixes.
+
+- We have a decent regression test system, for the first time.
+ This doesn't help you directly, but it does make it a lot easier
+ for us to track the quality of the system, especially across
+ multiple linux distributions.
+
+ You can run the regression tests with 'make regtest' after 'make
+ install' completes. On SuSE 8.2 and Red Hat 9 I get this:
+
+ == 84 tests, 0 stderr failures, 0 stdout failures ==
+
+ On Red Hat 8, I get this:
+
+ == 84 tests, 2 stderr failures, 1 stdout failure ==
+ corecheck/tests/res_search (stdout)
+ memcheck/tests/sigaltstack (stderr)
+
+ sigaltstack is probably harmless. res_search doesn't work
+ on R H 8 even running natively, so I'm not too worried.
+
+ On Red Hat 7.3, a glibc-2.2.5 system, I get these harmless failures:
+
+ == 84 tests, 2 stderr failures, 1 stdout failure ==
+ corecheck/tests/pth_atfork1 (stdout)
+ corecheck/tests/pth_atfork1 (stderr)
+ memcheck/tests/sigaltstack (stderr)
+
+ You need to run on a PII system, at least, since some tests
+ contain P6-specific instructions, and the test machine needs
+ access to the internet so that corecheck/tests/res_search
+ (a test that the DNS resolver works) can function.
+
+As ever, thanks for the vast amount of feedback :) and bug reports :(
+We may not answer all messages, but we do at least look at all of
+them, and tend to fix the most frequently reported bugs.
+
+
+
+Version 1.9.6 (7 May 2003 or thereabouts)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Major changes in 1.9.6:
+
+- Improved threading support for glibc >= 2.3.2 (SuSE 8.2,
+ RedHat 9, to name but two ...) It turned out that 1.9.5
+ had problems with threading support on glibc >= 2.3.2,
+ usually manifested by threaded programs deadlocking in system calls,
+ or running unbelievably slowly. Hopefully these are fixed now. 1.9.6
+ is the first valgrind which gives reasonable support for
+ glibc-2.3.2. Also fixed a 2.3.2 problem with pthread_atfork().
+
+- Majorly expanded FAQ.txt. We've added workarounds for all
+ common problems for which a workaround is known.
+
+Minor changes in 1.9.6:
+
+- Fix identification of the main thread's stack. Incorrect
+ identification of it was causing some on-stack addresses to not get
+ identified as such. This only affected the usefulness of some error
+ messages; the correctness of the checks made is unchanged.
+
+- Support for kernels >= 2.5.68.
+
+- Dummy implementations of __libc_current_sigrtmin,
+ __libc_current_sigrtmax and __libc_allocate_rtsig, hopefully
+ good enough to keep alive programs which previously died for lack of
+ them.
+
+- Fix bug in the VALGRIND_DISCARD_TRANSLATIONS client request.
+
+- Fix bug in the DWARF2 debug line info loader, when instructions
+ following each other have source lines far from each other
+ (e.g. with inlined functions).
+
+- Debug info reading: read symbols from both "symtab" and "dynsym"
+ sections, rather than merely from the one that comes last in the
+ file.
+
+- New syscall support: prctl(), creat(), lookup_dcookie().
+
+- When checking calls to accept(), recvfrom(), getsocketopt(),
+ don't complain if buffer values are NULL.
+
+- Try and avoid assertion failures in
+ mash_LD_PRELOAD_and_LD_LIBRARY_PATH.
+
+- Minor bug fixes in cg_annotate.
+
+
+
+Version 1.9.5 (7 April 2003)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+It occurs to me that it would be helpful for valgrind users to record
+in the source distribution the changes in each release. So I now
+attempt to mend my errant ways :-) Changes in this and future releases
+will be documented in the NEWS file in the source distribution.
+
+Major changes in 1.9.5:
+
+- (Critical bug fix): Fix a bug in the FPU simulation. This was
+ causing some floating point conditional tests not to work right.
+ Several people reported this. If you had floating point code which
+ didn't work right on 1.9.1 to 1.9.4, it's worth trying 1.9.5.
+
+- Partial support for Red Hat 9. RH9 uses the new Native Posix
+ Threads Library (NPTL), instead of the older LinuxThreads.
+ This potentially causes problems with V which will take some
+ time to correct. In the meantime we have partially worked around
+ this, and so 1.9.5 works on RH9. Threaded programs still work,
+ but they may deadlock, because some system calls (accept, read,
+ write, etc) which should be nonblocking, in fact do block. This
+ is a known bug which we are looking into.
+
+ If you can, your best bet (unfortunately) is to avoid using
+ 1.9.5 on a Red Hat 9 system, or on any NPTL-based distribution.
+ If your glibc is 2.3.1 or earlier, you're almost certainly OK.
+
+Minor changes in 1.9.5:
+
+- Added some #errors to valgrind.h to ensure people don't include
+ it accidentally in their sources. This is a change from 1.0.X
+ which was never properly documented. The right thing to include
+ is now memcheck.h. Some people reported problems and strange
+ behaviour when (incorrectly) including valgrind.h in code with
+ 1.9.1 -- 1.9.4. This is no longer possible.
+
+- Add some __extension__ bits and pieces so that gcc configured
+ for valgrind-checking compiles even with -Werror. If you
+ don't understand this, ignore it. Of interest to gcc developers
+ only.
+
+- Removed a pointless check which caused problems interworking
+ with Clearcase. V would complain about shared objects whose
+ names did not end ".so", and refuse to run. This is now fixed.
+ In fact it was fixed in 1.9.4 but not documented.
+
+- Fixed a bug causing an assertion failure of "waiters == 1"
+ somewhere in vg_scheduler.c, when running large threaded apps,
+ notably MySQL.
+
+- Add support for the munlock system call (124).
+
+Some comments about future releases:
+
+1.9.5 is, we hope, the most stable Valgrind so far. It pretty much
+supersedes the 1.0.X branch. If you are a valgrind packager, please
+consider making 1.9.5 available to your users. You can regard the
+1.0.X branch as obsolete: 1.9.5 is stable and vastly superior. There
+are no plans at all for further releases of the 1.0.X branch.
+
+If you want a leading-edge valgrind, consider building the cvs head
+(from SourceForge), or getting a snapshot of it. Current cool stuff
+going in includes MMX support (done); SSE/SSE2 support (in progress),
+a significant (10-20%) performance improvement (done), and the usual
+large collection of minor changes. Hopefully we will be able to
+improve our NPTL support, but no promises.
+
--- /dev/null
+
+Release notes for Valgrind
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+If you are building a binary package of Valgrind for distribution,
+please read README_PACKAGERS. It contains some important information.
+
+If you are developing Valgrind, please read README_DEVELOPERS. It contains
+some useful information.
+
+For instructions on how to build/install, see the end of this file.
+
+If you have problems, consult the FAQ to see if there are workarounds.
+
+
+Executive Summary
+~~~~~~~~~~~~~~~~~
+Valgrind is a framework for building dynamic analysis tools. There are
+Valgrind tools that can automatically detect many memory management
+and threading bugs, and profile your programs in detail. You can also
+use Valgrind to build new tools.
+
+The Valgrind distribution currently includes six production-quality
+tools: a memory error detector, two thread error detectors, a cache
+and branch-prediction profiler, a call-graph generating cache abd
+branch-prediction profiler, and a heap profiler. It also includes
+three experimental tools: a heap/stack/global array overrun detector,
+a different kind of heap profiler, and a SimPoint basic block vector
+generator.
+
+Valgrind is closely tied to details of the CPU, operating system and to
+a lesser extent, compiler and basic C libraries. This makes it difficult
+to make it portable. Nonetheless, it is available for the following
+platforms:
+
+- x86/Linux
+- AMD64/Linux
+- PPC32/Linux
+- PPC64/Linux
+- ARM/Linux
+- x86/MacOSX
+- AMD64/MacOSX
+
+Note that AMD64 is just another name for x86-64, and Valgrind runs fine
+on Intel processors. Also note that the core of MacOSX is called
+"Darwin" and this name is used sometimes.
+
+Valgrind is licensed under the GNU General Public License, version 2.
+Read the file COPYING in the source distribution for details.
+
+However: if you contribute code, you need to make it available as GPL
+version 2 or later, and not 2-only.
+
+
+Documentation
+~~~~~~~~~~~~~
+A comprehensive user guide is supplied. Point your browser at
+$PREFIX/share/doc/valgrind/manual.html, where $PREFIX is whatever you
+specified with --prefix= when building.
+
+
+Building and installing it
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+To install from the Subversion repository :
+
+ 0. Check out the code from SVN, following the instructions at
+ http://www.valgrind.org/downloads/repository.html.
+
+ 1. cd into the source directory.
+
+ 2. Run ./autogen.sh to setup the environment (you need the standard
+ autoconf tools to do so).
+
+ 3. Continue with the following instructions...
+
+To install from a tar.bz2 distribution:
+
+ 4. Run ./configure, with some options if you wish. The only interesting
+ one is the usual --prefix=/where/you/want/it/installed.
+
+ 5. Run "make".
+
+ 6. Run "make install", possibly as root if the destination permissions
+ require that.
+
+ 7. See if it works. Try "valgrind ls -l". Either this works, or it
+ bombs out with some complaint. In that case, please let us know
+ (see www.valgrind.org).
+
+Important! Do not move the valgrind installation into a place
+different from that specified by --prefix at build time. This will
+cause things to break in subtle ways, mostly when Valgrind handles
+fork/exec calls.
+
+
+The Valgrind Developers
--- /dev/null
+
+Building and not installing it
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+To run Valgrind without having to install it, run coregrind/valgrind
+with the VALGRIND_LIB environment variable set, where <dir> is the root
+of the source tree (and must be an absolute path). Eg:
+
+ VALGRIND_LIB=~/grind/head4/.in_place ~/grind/head4/coregrind/valgrind
+
+This allows you to compile and run with "make" instead of "make install",
+saving you time.
+
+Or, you can use the 'vg-in-place' script which does that for you.
+
+I recommend compiling with "make --quiet" to further reduce the amount of
+output spewed out during compilation, letting you actually see any errors,
+warnings, etc.
+
+
+Running the regression tests
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+To build and run all the regression tests, run "make [--quiet] regtest".
+
+To run a subset of the regression tests, execute:
+
+ perl tests/vg_regtest <name>
+
+where <name> is a directory (all tests within will be run) or a single
+.vgtest test file, or the name of a program which has a like-named .vgtest
+file. Eg:
+
+ perl tests/vg_regtest memcheck
+ perl tests/vg_regtest memcheck/tests/badfree.vgtest
+ perl tests/vg_regtest memcheck/tests/badfree
+
+
+Running the performance tests
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+To build and run all the performance tests, run "make [--quiet] perf".
+
+To run a subset of the performance suite, execute:
+
+ perl perf/vg_perf <name>
+
+where <name> is a directory (all tests within will be run) or a single
+.vgperf test file, or the name of a program which has a like-named .vgperf
+file. Eg:
+
+ perl perf/vg_perf perf/
+ perl perf/vg_perf perf/bz2.vgperf
+ perl perf/vg_perf perf/bz2
+
+To compare multiple versions of Valgrind, use the --vg= option multiple
+times. For example, if you have two Valgrinds next to each other, one in
+trunk1/ and one in trunk2/, from within either trunk1/ or trunk2/ do this to
+compare them on all the performance tests:
+
+ perl perf/vg_perf --vg=../trunk1 --vg=../trunk2 perf/
+
+
+Debugging Valgrind with GDB
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+To debug the valgrind launcher program (<prefix>/bin/valgrind) just
+run it under gdb in the normal way.
+
+Debugging the main body of the valgrind code (and/or the code for
+a particular tool) requires a bit more trickery but can be achieved
+without too much problem by following these steps:
+
+(1) Set VALGRIND_LAUNCHER to point to the valgrind executable. Eg:
+
+ export VALGRIND_LAUNCHER=/usr/local/bin/valgrind
+
+ or for an uninstalled version in a source directory $DIR:
+
+ export VALGRIND_LAUNCHER=$DIR/coregrind/valgrind
+
+(2) Run gdb on the tool executable. Eg:
+
+ gdb /usr/local/lib/valgrind/ppc32-linux/lackey
+
+ or
+
+ gdb $DIR/.in_place/x86-linux/memcheck
+
+(3) Do "handle SIGSEGV SIGILL nostop noprint" in GDB to prevent GDB from
+ stopping on a SIGSEGV or SIGILL:
+
+ (gdb) handle SIGILL SIGSEGV nostop noprint
+
+(4) Set any breakpoints you want and proceed as normal for gdb. The
+ macro VG_(FUNC) is expanded to vgPlain_FUNC, so If you want to set
+ a breakpoint VG_(do_exec), you could do like this in GDB:
+
+ (gdb) b vgPlain_do_exec
+
+(5) Run the tool with required options:
+
+ (gdb) run pwd
+
+Steps (1)--(3) can be put in a .gdbinit file, but any directory names must
+be fully expanded (ie. not an environment variable).
+
+A different and possibly easier way is as follows:
+
+(1) Run Valgrind as normal, but add the flag --wait-for-gdb=yes. This
+ puts the tool executable into a wait loop soon after it gains
+ control. This delays startup for a few seconds.
+
+(2) In a different shell, do "gdb /proc/<pid>/exe <pid>", where
+ <pid> you read from the output printed by (1). This attaches
+ GDB to the tool executable, which should be in the abovementioned
+ wait loop.
+
+(3) Do "cont" to continue. After the loop finishes spinning, startup
+ will continue as normal. Note that comment (3) above re passing
+ signals applies here too.
+
+
+Self-hosting
+~~~~~~~~~~~~
+To run Valgrind under Valgrind:
+
+(1) Check out 2 trees, "Inner" and "Outer". Inner runs the app
+ directly. Outer runs Inner.
+
+(2) Configure inner with --enable-inner and build/install as
+ usual.
+
+(3) Configure Outer normally and build/install as usual.
+
+(4) Choose a very simple program (date) and try
+
+ outer/.../bin/valgrind --sim-hints=enable-outer --trace-children=yes \
+ --tool=cachegrind -v inner/.../bin/valgrind --tool=none -v prog
+
+If you omit the --trace-children=yes, you'll only monitor Inner's launcher
+program, not its stage2.
+
+The whole thing is fragile, confusing and slow, but it does work well enough
+for you to get some useful performance data. Inner has most of
+its output (ie. those lines beginning with "==<pid>==") prefixed with a '>',
+which helps a lot.
+
+At the time of writing the allocator is not annotated with client requests
+so Memcheck is not as useful as it could be. It also has not been tested
+much, so don't be surprised if you hit problems.
+
+When using self-hosting with an outer Callgrind tool, use '--pop-on-jump'
+(on the outer). Otherwise, Callgrind has much higher memory requirements.
+
+
+Printing out problematic blocks
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If you want to print out a disassembly of a particular block that
+causes a crash, do the following.
+
+Try running with "--vex-guest-chase-thresh=0 --trace-flags=10000000
+--trace-notbelow=999999". This should print one line for each block
+translated, and that includes the address.
+
+Then re-run with 999999 changed to the highest bb number shown.
+This will print the one line per block, and also will print a
+disassembly of the block in which the fault occurred.
--- /dev/null
+
+Dealing with missing system call or ioctl wrappers in Valgrind
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+You're probably reading this because Valgrind bombed out whilst
+running your program, and advised you to read this file. The good
+news is that, in general, it's easy to write the missing syscall or
+ioctl wrappers you need, so that you can continue your debugging. If
+you send the resulting patches to me, then you'll be doing a favour to
+all future Valgrind users too.
+
+Note that an "ioctl" is just a special kind of system call, really; so
+there's not a lot of need to distinguish them (at least conceptually)
+in the discussion that follows.
+
+All this machinery is in coregrind/m_syswrap.
+
+
+What are syscall/ioctl wrappers? What do they do?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Valgrind does what it does, in part, by keeping track of everything your
+program does. When a system call happens, for example a request to read
+part of a file, control passes to the Linux kernel, which fulfills the
+request, and returns control to your program. The problem is that the
+kernel will often change the status of some part of your program's memory
+as a result, and tools (instrumentation plug-ins) may need to know about
+this.
+
+Syscall and ioctl wrappers have two jobs:
+
+1. Tell a tool what's about to happen, before the syscall takes place. A
+ tool could perform checks beforehand, eg. if memory about to be written
+ is actually writeable. This part is useful, but not strictly
+ essential.
+
+2. Tell a tool what just happened, after a syscall takes place. This is
+ so it can update its view of the program's state, eg. that memory has
+ just been written to. This step is essential.
+
+The "happenings" mostly involve reading/writing of memory.
+
+So, let's look at an example of a wrapper for a system call which
+should be familiar to many Unix programmers.
+
+
+The syscall wrapper for time()
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The wrapper for the time system call looks like this:
+
+ PRE(sys_time)
+ {
+ /* time_t time(time_t *t); */
+ PRINT("sys_time ( %p )",ARG1);
+ PRE_REG_READ1(long, "time", int *, t);
+ if (ARG1 != 0) {
+ PRE_MEM_WRITE( "time(t)", ARG1, sizeof(vki_time_t) );
+ }
+ }
+
+ POST(sys_time)
+ {
+ if (ARG1 != 0) {
+ POST_MEM_WRITE( ARG1, sizeof(vki_time_t) );
+ }
+ }
+
+The first thing we do happens before the syscall occurs, in the PRE() function.
+The PRE() function typically starts with invoking to the PRINT() macro. This
+PRINT() macro implements support for the --trace-syscalls command line option.
+Next, the tool is told the return type of the syscall, that the syscall has
+one argument, the type of the syscall argument and that the argument is being
+read from a register:
+
+ PRE_REG_READ1(long, "time", int *, t);
+
+Next, if a non-NULL buffer is passed in as the argument, tell the tool that the
+buffer is about to be written to:
+
+ if (ARG1 != 0) {
+ PRE_MEM_WRITE( "time", ARG1, sizeof(vki_time_t) );
+ }
+
+Finally, the really important bit, after the syscall occurs, in the POST()
+function: if, and only if, the system call was successful, tell the tool that
+the memory was written:
+
+ if (ARG1 != 0) {
+ POST_MEM_WRITE( ARG1, sizeof(vki_time_t) );
+ }
+
+The POST() function won't be called if the syscall failed, so you
+don't need to worry about checking that in the POST() function.
+(Note: this is sometimes a bug; some syscalls do return results when
+they "fail" - for example, nanosleep returns the amount of unslept
+time if interrupted. TODO: add another per-syscall flag for this
+case.)
+
+Note that we use the type 'vki_time_t'. This is a copy of the kernel
+type, with 'vki_' prefixed. Our copies of such types are kept in the
+appropriate vki*.h file(s). We don't include kernel headers or glibc headers
+directly.
+
+
+Writing your own syscall wrappers (see below for ioctl wrappers)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If Valgrind tells you that system call NNN is unimplemented, do the
+following:
+
+1. Find out the name of the system call:
+
+ grep NNN /usr/include/asm/unistd*.h
+
+ This should tell you something like __NR_mysyscallname.
+ Copy this entry to include/vki/vki-scnums-$(VG_PLATFORM).h.
+
+
+2. Do 'man 2 mysyscallname' to get some idea of what the syscall
+ does. Note that the actual kernel interface can differ from this,
+ so you might also want to check a version of the Linux kernel
+ source.
+
+ NOTE: any syscall which has something to do with signals or
+ threads is probably "special", and needs more careful handling.
+ Post something to valgrind-developers if you aren't sure.
+
+
+3. Add a case to the already-huge collection of wrappers in
+ the coregrind/m_syswrap/syswrap-*.c files.
+ For each in-memory parameter which is read or written by
+ the syscall, do one of
+
+ PRE_MEM_READ( ... )
+ PRE_MEM_RASCIIZ( ... )
+ PRE_MEM_WRITE( ... )
+
+ for that parameter. Then do the syscall. Then, if the syscall
+ succeeds, issue suitable POST_MEM_WRITE( ... ) calls.
+ (There's no need for POST_MEM_READ calls.)
+
+ Also, add it to the syscall_table[] array; use one of GENX_, GENXY
+ LINX_, LINXY, PLAX_, PLAXY.
+ GEN* for generic syscalls (in syswrap-generic.c), LIN* for linux
+ specific ones (in syswrap-linux.c) and PLA* for the platform
+ dependant ones (in syswrap-$(PLATFORM)-linux.c).
+ The *XY variant if it requires a PRE() and POST() function, and
+ the *X_ variant if it only requires a PRE()
+ function.
+
+ If you find this difficult, read the wrappers for other syscalls
+ for ideas. A good tip is to look for the wrapper for a syscall
+ which has a similar behaviour to yours, and use it as a
+ starting point.
+
+ If you need structure definitions and/or constants for your syscall,
+ copy them from the kernel headers into include/vki.h and co., with
+ the appropriate vki_*/VKI_* name mangling. Don't #include any
+ kernel headers. And certainly don't #include any glibc headers.
+
+ Test it.
+
+ Note that a common error is to call POST_MEM_WRITE( ... )
+ with 0 (NULL) as the first (address) argument. This usually means
+ your logic is slightly inadequate. It's a sufficiently common bug
+ that there's a built-in check for it, and you'll get a "probably
+ sanity check failure" for the syscall wrapper you just made, if this
+ is the case.
+
+
+4. Once happy, send us the patch. Pretty please.
+
+
+
+
+Writing your own ioctl wrappers
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Is pretty much the same as writing syscall wrappers, except that all
+the action happens within PRE(ioctl) and POST(ioctl).
+
+There's a default case, sometimes it isn't correct and you have to write a
+more specific case to get the right behaviour.
+
+As above, please create a bug report and attach the patch as described
+on http://www.valgrind.org.
+
--- /dev/null
+
+Greetings, packaging person! This information is aimed at people
+building binary distributions of Valgrind.
+
+Thanks for taking the time and effort to make a binary distribution of
+Valgrind. The following notes may save you some trouble.
+
+
+-- Do not ship your Linux distro with a completely stripped
+ /lib/ld.so. At least leave the debugging symbol names on -- line
+ number info isn't necessary. If you don't want to leave symbols on
+ ld.so, alternatively you can have your distro install ld.so's
+ debuginfo package by default, or make ld.so.debuginfo be a
+ requirement of your Valgrind RPM/DEB/whatever.
+
+ Reason for this is that Valgrind's Memcheck tool needs to intercept
+ calls to, and provide replacements for, some symbols in ld.so at
+ startup (most importantly strlen). If it cannot do that, Memcheck
+ shows a large number of false positives due to the highly optimised
+ strlen (etc) routines in ld.so. This has caused some trouble in
+ the past. As of version 3.3.0, on some targets (ppc32-linux,
+ ppc64-linux), Memcheck will simply stop at startup (and print an
+ error message) if such symbols are not present, because it is
+ infeasible to continue.
+
+ It's not like this is going to cost you much space. We only need
+ the symbols for ld.so (a few K at most). Not the debug info and
+ not any debuginfo or extra symbols for any other libraries.
+
+
+-- (Unfortunate but true) When you configure to build with the
+ --prefix=/foo/bar/xyzzy option, the prefix /foo/bar/xyzzy gets
+ baked into valgrind. The consequence is that you _must_ install
+ valgrind at the location specified in the prefix. If you don't,
+ it may appear to work, but will break doing some obscure things,
+ particularly doing fork() and exec().
+
+ So you can't build a relocatable RPM / whatever from Valgrind.
+
+
+-- Don't strip the debug info off lib/valgrind/$platform/vgpreload*.so
+ in the installation tree. Either Valgrind won't work at all, or it
+ will still work if you do, but will generate less helpful error
+ messages. Here's an example:
+
+ Mismatched free() / delete / delete []
+ at 0x40043249: free (vg_clientfuncs.c:171)
+ by 0x4102BB4E: QGArray::~QGArray(void) (tools/qgarray.cpp:149)
+ by 0x4C261C41: PptDoc::~PptDoc(void) (include/qmemarray.h:60)
+ by 0x4C261F0E: PptXml::~PptXml(void) (pptxml.cc:44)
+ Address 0x4BB292A8 is 0 bytes inside a block of size 64 alloc'd
+ at 0x4004318C: __builtin_vec_new (vg_clientfuncs.c:152)
+ by 0x4C21BC15: KLaola::readSBStream(int) const (klaola.cc:314)
+ by 0x4C21C155: KLaola::stream(KLaola::OLENode const *) (klaola.cc:416)
+ by 0x4C21788F: OLEFilter::convert(QCString const &) (olefilter.cc:272)
+
+ This tells you that some memory allocated with new[] was freed with
+ free().
+
+ Mismatched free() / delete / delete []
+ at 0x40043249: (inside vgpreload_memcheck.so)
+ by 0x4102BB4E: QGArray::~QGArray(void) (tools/qgarray.cpp:149)
+ by 0x4C261C41: PptDoc::~PptDoc(void) (include/qmemarray.h:60)
+ by 0x4C261F0E: PptXml::~PptXml(void) (pptxml.cc:44)
+ Address 0x4BB292A8 is 0 bytes inside a block of size 64 alloc'd
+ at 0x4004318C: (inside vgpreload_memcheck.so)
+ by 0x4C21BC15: KLaola::readSBStream(int) const (klaola.cc:314)
+ by 0x4C21C155: KLaola::stream(KLaola::OLENode const *) (klaola.cc:416)
+ by 0x4C21788F: OLEFilter::convert(QCString const &) (olefilter.cc:272)
+
+ This isn't so helpful. Although you can tell there is a mismatch,
+ the names of the allocating and deallocating functions are no longer
+ visible. The same kind of thing occurs in various other messages
+ from valgrind.
+
+
+-- Don't strip symbols from lib/valgrind/* in the installation tree.
+ Doing so will likely cause problems. Removing the line number info is
+ probably OK (at least for some of the files in that directory), although
+ that has not been tested by the Valgrind developers.
+
+
+-- Please test the final installation works by running it on something
+ huge. I suggest checking that it can start and exit successfully
+ both Firefox and OpenOffice.org. I use these as test programs, and I
+ know they fairly thoroughly exercise Valgrind. The command lines to use
+ are:
+
+ valgrind -v --trace-children=yes firefox
+
+ valgrind -v --trace-children=yes soffice
+
+
+If you find any more hints/tips for packaging, please report
+it as a bugreport. See http://www.valgrind.org for details.
--- /dev/null
+
+## AIX clients start off by executing a short code stub which
+## loads the preloads, and then jumps to the real client. The
+## stub reads data belonging to V (by design) and it's easier
+## to hide the resulting errors than mess properly with permissions.
+{
+ VG_(trampoline_stuff_start) hack
+ Memcheck:Addr4
+ fun:vgPlain_trampoline_stuff_start
+}
+
+## Not really a bug in the thread library, just padding
+## problems.
+# Syscall param thread_setmystate(arg1) points to uninitialised byte(s)
+# at 0xD011F36C: _set_pthread+680 (in /usr/lib/libpthreads.a)
+# by 0xD01142E4: _alloc_initial_pthread+804 (in /usr/lib/libpthreads.a)
+# by 0xD01123AC: pthread_init+2880 (in /usr/lib/libpthreads.a)
+# by 0x10000344: call_pthread_init+20 (in /proc/557146/object/a.out)
+# by 0x10000258: __threads_init+64 (in /proc/557146/object/a.out)
+# by 0xD0325278: __modinit+356 (in /usr/lib/threads/libc.a)
+# by 0x10000198: __start+72 (in /proc/557146/object/a.out)
+{
+ AIX-thread_setmystate-padding-kludge-1
+ Memcheck:Param
+ thread_setmystate(arg1)
+ fun:_set_pthread
+ fun:_alloc_initial_pthread
+ fun:pthread_init
+}
+{
+ AIX-thread_setmystate-padding-kludge-1a
+ Memcheck:Param
+ thread_setmystate(arg1)
+ fun:_set_pthread
+ fun:_alloc_initial_pthread
+ fun:__pth_init
+}
+{
+ AIX-thread_setmystate-padding-kludge-2
+ Memcheck:Param
+ thread_setmystate(arg1)
+ fun:_set_pthread
+ fun:_fork_child
+ fun:_atfork_child
+ fun:__fork
+}
+{
+ AIX-thread_setmystate-padding-kludge-3
+ Memcheck:Param
+ thread_setmystate(arg1)
+ fun:_sigsetmask
+ fun:_p_sigaction
+}
+{
+ AIX-thread_setmystate-padding-kludge-4
+ Memcheck:Param
+ thread_setmystate(arg1)
+ fun:_sigsetmask
+ fun:sigthreadmask
+}
+{
+ AIX-thread_setmystate-padding-kludge-5
+ Memcheck:Param
+ thread_setmystate(arg1)
+ fun:_sigsetmask
+ fun:_fork_*
+}
+
+# AIX's libc contains a qsort routine which expertly does
+# memcpy(src, dst, N) for src==dst. This is technically a
+# violation of POSIX and so Memcheck complains.
+{
+ AIX-libc-qsort-bug-1
+ Memcheck:Overlap
+ fun:memcpy
+ fun:qs2
+ fun:qsort
+}
+{
+ AIX-libc-qsort-bug-2
+ Memcheck:Overlap
+ fun:memcpy
+ fun:qs2
+ fun:qs2
+ fun:qsort
+}
+{
+ AIX-libc-qsort-bug-3
+ Memcheck:Overlap
+ fun:memcpy
+ fun:qs2
+ fun:qs2
+ fun:qs2
+}
+
+## Thread library initialisation, cause unknown.
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD030DD30: fseeko64_unlocked (in /usr/lib/libc.a)
+# by 0xD030DFF0: fseeko64 (in /usr/lib/libc.a)
+# by 0xD0453F2C: nlist64 (in /usr/lib/libc.a)
+# by 0xD01267FC: _pth_init_kgetsig (in /usr/lib/libpthread.a)
+# by 0xD01123DC: pthread_init (in /usr/lib/libpthread.a)
+# by 0x10000344: call_pthread_init (in /proc/645084/object/a.out)
+# by 0x10000258: __threads_init (in /proc/645084/object/a.out)
+# by 0xD0325278: __modinit (in /usr/lib/libc.a)
+# by 0x10000198: (below main) (in /proc/645084/object/a.out)
+{
+ AIX-thread-library-init-1
+ Memcheck:Cond
+ fun:fseeko64_unlocked
+ fun:fseeko64
+}
+
+## More of the same (cause again unknown)
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD030E1F0: __ftell (in /usr/lib/libc.a)
+# by 0xD030E334: ftello64 (in /usr/lib/libc.a)
+# by 0xD0454044: nlist64 (in /usr/lib/libc.a)
+# by 0xD01267FC: _pth_init_kgetsig (in /usr/lib/libpthread.a)
+# by 0xD01123DC: pthread_init (in /usr/lib/libpthread.a)
+# by 0x10000344: call_pthread_init (in /proc/448094/object/a.out)
+# by 0x10000258: __threads_init (in /proc/448094/object/a.out)
+# by 0xD0325278: __modinit (in /usr/lib/libc.a)
+# by 0x10000198: (below main) (in /proc/448094/object/a.out)
+{
+ AIX-thread-library-init-2
+ Memcheck:Cond
+ fun:__ftell
+ fun:ftello64
+ fun:nlist64
+}
+
+## Related wierdness (klseek is undocumented, so the wrapper
+## is a guess at best)
+{
+ AIX-libc-klseek-1
+ Memcheck:Param
+ klseek(offset)
+ fun:lseek64
+ fun:fseeko64_unlocked
+ fun:fseeko64
+}
+{
+ AIX-libc-klseek-2
+ Memcheck:Param
+ klseek(whence)
+ fun:lseek64
+ fun:fseeko64_unlocked
+ fun:fseeko64
+}
+
+## Buffer overrun in libc regexp stuff?
+# Invalid read of size 1
+# at 0xD08A2F50: memcpy (mc_replace_strmem.c:437)
+# by 0xD0328B30: match_re (in /usr/lib/libc.a)
+# by 0xD032A464: match_re (in /usr/lib/libc.a)
+# by 0xD032A464: match_re (in /usr/lib/libc.a)
+# by 0xD032A464: match_re (in /usr/lib/libc.a)
+# by 0xD0328AD4: match_re (in /usr/lib/libc.a)
+# by 0xD032A464: match_re (in /usr/lib/libc.a)
+# by 0xD032816C: __regexec_std (in /usr/lib/libc.a)
+# by 0xD0330AA8: regexec (in /usr/lib/libc.a)
+{
+ AIX-regexp-dodgyness-1
+ Memcheck:Addr1
+ fun:memcpy
+ fun:match_re
+ fun:match_re
+ fun:match_re
+}
+
+## Misuse of memcpy
+# Source and destination overlap in memcpy(0x32154ECC, 0x32154EC8, 8)
+# at 0xD13A4F30: memcpy (mc_replace_strmem.c:437)
+# by 0xD03D34BC: __ntree_locate (in /usr/lib/libc.a)
+# by 0xD03D3090: ntree_search (in /usr/lib/libc.a)
+# by 0xD0406E8C: colon_search (in /usr/lib/libc.a)
+# by 0xD03DE068: method_getpw_common (in /usr/lib/libc.a)
+# by 0xD03DEB18: method_getpwuid (in /usr/lib/libc.a)
+# by 0xD03C89DC: _getpwuid_shadow_r (in /usr/lib/libc.a)
+# by 0xD03C62FC: _getpwuid_shadow (in /usr/lib/libc.a)
+{
+ AIX-overlapping-memcpy-1
+ Memcheck:Overlap
+ fun:memcpy
+ fun:__ntree_locate
+ fun:ntree_search
+ fun:colon_search
+}
+{
+ AIX-overlapping-memcpy-2
+ Memcheck:Overlap
+ fun:memcpy
+ fun:__ntree_locate
+ fun:__ntree_locate
+ fun:ntree_search
+}
+
+## No idea what this is caused by
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD03069F8: fflush_unlocked (in /usr/lib/libc.a)
+# by 0xD03077AC: fflush (in /usr/lib/libc.a)
+# by 0xD03D545C: common_close (in /usr/lib/libc.a)
+# by 0xD03D46B8: common_unlock (in /usr/lib/libc.a)
+# by 0xD040712C: colon_search (in /usr/lib/libc.a)
+# by 0xD03DE068: method_getpw_common (in /usr/lib/libc.a)
+# by 0xD03DEB18: method_getpwuid (in /usr/lib/libc.a)
+{
+ AIX-fflush-unlocked-1
+ Memcheck:Cond
+ fun:fflush_unlocked
+ fun:fflush
+ fun:common_close
+ fun:common_unlock
+}
+
+## No idea what this is caused by
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD03EBC30: __method_getentry_v2 (in /usr/lib/libc.a)
+# by 0xD03E887C: does_user_exist (in /usr/lib/libc.a)
+# by 0xD03E9010: getuserattrs (in /usr/lib/libc.a)
+# by 0xD03E4E68: getuserattr (in /usr/lib/libc.a)
+# by 0xD03C8BA4: _getpwuid_shadow_r (in /usr/lib/libc.a)
+# by 0xD03CBE4C: getpwuid (in /usr/lib/libc.a)
+{
+ AIX-__method_getentry_v2-1
+ Memcheck:Cond
+ fun:__method_getentry_v2
+ fun:does_user_exist
+ fun:getuserattrs
+ fun:getuserattr
+}
+{
+ AIX-__method_getentry_v2-2
+ Memcheck:Cond
+ fun:__method_getentry_v2
+ fun:does_user_exist
+ fun:process_module
+ fun:getuserattrs
+}
+
+## No idea what this is caused by
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD03F7120: seekdir64 (in /usr/lib/libc.a)
+# by 0xD041A63C: opendir64 (in /usr/lib/libc.a)
+# by 0xD041961C: getwd (in /usr/lib/libc.a)
+# by 0xD04194B4: getcwd (in /usr/lib/libc.a)
+{
+ AIX-seekdir64
+ Memcheck:Cond
+ fun:seekdir64
+ fun:opendir64
+}
+
+## No idea what this is caused by
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD036C80C: ungetwc (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD0369D94: ungetcc (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD03695EC: _doscan (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD037544C: sscanf (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD1BAD9BC: lapi_atoi (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1BA8DBC: _read_int_env (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1BAB86C: _lapi_init_env_once (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1BAB44C: _lapi_perproc_setup (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD0118E50: pthread_once (in /usr/lib/libpthreads.a(shr_xpg5.o))
+# by 0xD1BA86B8: LAPI__Init (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD0EC7A70: lapi_init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpci_r.o))
+# by 0xD0EC9524: mpci_connect (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpci_r.o))
+{
+ AIX-LAPI-ungetwc-1
+ Memcheck:Cond
+ fun:ungetwc
+ fun:ungetcc
+ fun:_doscan
+ fun:sscanf
+}
+{
+ AIX-LAPI-ungetwc-2
+ Memcheck:Cond
+ fun:ungetwc
+ fun:ungetcc
+ fun:number
+ fun:_doscan
+}
+
+## No idea what this is caused by
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD030CAD0: atoi (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD0E48DAC: _udp_open_socket (in /usr/lib/liblapi_r.a(liblapiudp_r.o))
+# by 0xD0E4B17C: _udp_open (in /usr/lib/liblapi_r.a(liblapiudp_r.o))
+# by 0xD1BAC77C: _lapi_init_function (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1BAE4F0: _lapi_non_pss_init (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1BA883C: LAPI__Init (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD0EC7A70: lapi_init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpci_r.o))
+# by 0xD0EC9524: mpci_connect (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpci_r.o))
+# by 0xD06AA28C: _css_init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD06AB664: _mp_init_msg_passing (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD0647F54: MPI__Init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+{
+ AIX-LAPI-atoi-1
+ Memcheck:Cond
+ fun:atoi
+ fun:_udp_open_socket
+ fun:_udp_open
+ fun:_lapi_init_function
+}
+{
+ AIX-LAPI-atoi-2
+ Memcheck:Value4
+ fun:atoi
+ fun:_udp_open_socket
+ fun:_udp_open
+ fun:_lapi_init_function
+}
+{
+ AIX-LAPI-atoi-3
+ Memcheck:Value8
+ fun:atoi
+ fun:_udp_open_socket
+ fun:_udp_open
+ fun:_lapi_init_function
+}
+
+## MPI stuff. Not sure what's going on here. Is this a
+## legit padding problem? Dunno.
+# Syscall param write(buf) points to uninitialised byte(s)
+# at 0xD0310068: write (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD1CD03B0: pm_SSM_write (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpipoe_r.o))
+# by 0xD1CD5FB0: mp_main (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpipoe_r.o))
+# by 0x100005D8: poe_remote_main (in /proc/872668/object/a.out)
+# by 0xD0325414: mod_init1 (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD0325328: __modinit (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0x10000198: (below main) (in /proc/872668/object/a.out)
+# Address 0x32131422 is 10 bytes inside a block of size 19 alloc'd
+# at 0xD4230514: malloc (vg_replace_malloc.c:168)
+# by 0xD1CD035C: pm_SSM_write (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpipoe_r.o))
+# by 0xD1CD5FB0: mp_main (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpipoe_r.o))
+# by 0x100005D8: poe_remote_main (in /proc/872668/object/a.out)
+# by 0xD0325414: mod_init1 (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD0325328: __modinit (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0x10000198: (below main) (in /proc/872668/object/a.out)
+{
+ AIX-MPI-pm_SSM_write-1
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_write
+ fun:mp_main
+}
+{
+ AIX-MPI-pm_SSM_write-2
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_write
+ fun:_mp_send_child_pid
+}
+{
+ AIX-MPI-pm_SSM_write-3
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_write
+ fun:_mp_finalize_req
+}
+{
+ AIX-MPI-pm_SSM_write-4
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_write
+ fun:pm_atexit
+}
+{
+ AIX-MPI-pm_SSM_write-5
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_write
+ fun:_udp_init
+}
+{
+ AIX-MPI-pm_SSM_write-6
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_write
+ fun:_us_info
+}
+{
+ AIX-MPI-pm_SSM_read-1
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_read
+ fun:pm_atexit
+}
+{
+ AIX-MPI-pm_SSM_read-2
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_read
+ fun:poe_unlock_all
+}
+{
+ AIX-MPI-pm_SSM_read-3
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_read
+ fun:_css_init
+}
+{
+ AIX-MPI-pm_SSM_read-3
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_read
+ fun:pthread_mutex_lock
+}
+{
+ AIX-MPI-pm_SSM_read-4
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_read
+ fun:_mp_Wtime_stop
+}
+{
+ AIX-MPI-pm_SSM_read-5
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pm_SSM_read
+ fun:pthread_mutex_unlock
+}
+
+
+## More MPI stuff
+# Invalid read of size 8
+# at 0xD3EB34D8: read_canopus (in /usr/lib/swclock.o)
+# by 0xD3EB31A0: swclockRead (hps_scri.c:431)
+# by 0xD08B6AD4: HPSOclk_reset (in /usr/lpp/ppe.poe/lib/libppe_r.a(dynamic.o))
+# by 0xD08B6CB4: HPSOclk_init (in /usr/lpp/ppe.poe/lib/libppe_r.a(dynamic.o))
+# by 0xD16BC9F0: _mp_Wtime_init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpipoe_r.o))
+# by 0xD1FEA3A8: _css_init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1FEB664: _mp_init_msg_passing (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1F87F54: MPI__Init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# Address 0x40000000 is not stack'd, malloc'd or (recently) free'd
+{
+ AIX-MPI-read_canopus
+ Memcheck:Addr8
+ fun:read_canopus
+ fun:swclockRead
+ fun:HPSOclk_reset
+ fun:HPSOclk_init
+}
+
+## More MPI stuff (many variants of these)
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD1E8297C: ipcompare (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD033CADC: qs1 (in /usr/lpp/ppe.poe/lib/threads/libc.a(shr.o))
+# by 0xD1E82A38: _derive_up_down_instances (in /usr/lib/liblapi_r.a(liblapi\
+#_r.o))
+# by 0xD1E83484: NAM_monitor_thread (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD0111440: _pthread_body (in /usr/lib/libpthreads.a(shr_xpg5.o))
+{
+ AIX-MPI-ipcompare-1
+ Memcheck:Cond
+ fun:ipcompare
+ fun:qs1
+ fun:_derive_up_down_instances
+ fun:NAM_monitor_thread
+}
+{
+ AIX-MPI-ipcompare-2
+ Memcheck:Cond
+ fun:ipcompare
+ fun:qs1
+ fun:qsort
+ fun:_derive_up_down_instances
+}
+{
+ AIX-MPI-ipcompare-3
+ Memcheck:Cond
+ fun:ipcompare
+ fun:qs1
+ fun:qs1
+ fun:qsort
+}
+{
+ AIX-MPI-ipcompare-4
+ Memcheck:Cond
+ fun:ipcompare
+ fun:qs1
+ fun:qs1
+ fun:qs1
+}
+{
+ AIX-MPI-ipcompare-5
+ Memcheck:Cond
+ fun:ipcompare
+ fun:bsearch_*_1
+ fun:NAM_monitor_thread
+}
+
+## More MPI stuff
+# Conditional jump or move depends on uninitialised value(s)
+# at 0xD1CA2240: barrier_shft_b (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1CE6FAC: _mpi_barrier (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1D11720: _mpi_init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1D733D8: _css_init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1D74644: _mp_init_msg_passing (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1D10F34: MPI__Init (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD33DD5D0: PMPI_Init (libmpiwrap.c:1789)
+# by 0xD33E48F8: before (libmpiwrap.c:186)
+# by 0xD33DD55C: PMPI_Init (libmpiwrap.c:1788)
+{
+ AIX-MPI-barrier_shft_b-1
+ Memcheck:Cond
+ fun:barrier_shft_b
+ fun:_mpi_barrier
+ fun:_mpi_init
+ fun:_css_init
+}
+{
+ AIX-MPI-barrier_shft_b-2
+ Memcheck:Cond
+ fun:barrier_shft_b
+ fun:_mpi_barrier
+ fun:MPI__Finalize
+}
+{
+ AIX-MPI-barrier_shft_b-3
+ Memcheck:Cond
+ fun:barrier_shft_b
+ fun:_mpi_barrier
+ fun:MPI__Barrier
+}
+
+## MPI
+# Invalid read of size 1
+# at 0xD21B8FB8: can_writepkt (in /usr/lib/libhal_r.a(hal_hps.o))
+# by 0xD1E86D7C: _stripe_hal_writepkt_noflip (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1E33BB8: _process_one_contig_item (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1E4E3A8: _Am_xfer (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1E4EB9C: _Dgsp_xfer (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1E49EC0: LAPI__Xfer (in /usr/lib/liblapi_r.a(liblapi_r.o))
+# by 0xD1DCF2FC: mpci_send (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpci_r.o))
+# by 0xD1C90F6C: _mpi_start (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1C90648: _mpi_xisend (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1C89898: MPI__Isend (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD3910FD4: generic_Isend (libmpiwrap.c:1129)
+# by 0xFFFFFFFB: ???
+# Address 0x370A4794 is 0 bytes after a block of size 20 alloc'd
+# at 0xD38DE514: malloc (vg_replace_malloc.c:168)
+# by 0x100004BC: main (mpi_vg_demo2.c:56)
+{
+ AIX-MPI-can_writepkt-1
+ Memcheck:Addr1
+ fun:can_writepkt
+ fun:_stripe_hal_writepkt_noflip
+ fun:_process_one_contig_item
+ fun:_Am_xfer
+}
+{
+ AIX-MPI-can_writepkt-2
+ Memcheck:Addr1
+ obj:*
+ fun:_make_localbuf_copy
+ fun:_Am_xfer
+ fun:_Dgsp_xfer
+}
+
+## MPI
+# Invalid write of size 4
+# at 0xD1D14B18: check_ranks (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# by 0xD1D147C8: MPI__Group_incl (in /usr/lpp/ppe.poe/lib/libmpi_r.a(mpicore_r.o))
+# Address 0x2FF12154 is not stack'd, malloc'd or (recently) free'd
+{
+ AIX-MPI-check_ranks-1
+ Memcheck:Addr4
+ fun:check_ranks
+ fun:MPI__Group_incl
+}
+
+## X, holes in structs?
+{
+ AIX-X11-write-_X11TransSocketWrite
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:_X11TransSocketWrite
+ fun:_X11TransWrite
+}
+
+## Who knows
+{
+ AIX-fread_unlocked-1
+ Memcheck:Cond
+ fun:*memcpy
+ fun:fread_unlocked
+ fun:fread
+}
+{
+ AIX-fread_unlocked-2
+ Memcheck:Value8
+ fun:*memcpy
+ fun:fread_unlocked
+ fun:fread
+}
+{
+ AIX-fread_unlocked-3
+ Memcheck:Value4
+ fun:*memcpy
+ fun:fread_unlocked
+ fun:fread
+}
+{
+ AIX-fread_unlocked-4
+ Memcheck:Cond
+ fun:fread_unlocked
+ fun:fread
+}
+
+## Looks like inlined strcpy etc in module with no symbols; nothing
+# to be done about it.
+{
+ AIX-uconv-1
+ Memcheck:Cond
+ obj:/*/UTF32TBL__64
+ obj:/*/UTF32TBL__64
+ obj:/*/UTF32TBL__64
+}
+{
+ AIX-uconv-2
+ Memcheck:Value8
+ obj:/*/UTF32TBL__64
+ obj:/*/UTF32TBL__64
+ obj:/*/UTF32TBL__64
+}
+{
+ AIX-uconv-3
+ Memcheck:Addr8
+ obj:/*/UTF32TBL__64
+ obj:/*/UTF32TBL__64
+ obj:/*/UTF32TBL__64
+}
+
+
+#####################################################################
+### AIX 64-bit ###
+#####################################################################
+
+{
+ AIX64-uu-sz8
+ Memcheck:Addr8
+ obj:/usr/ccs/bin/usla64
+ obj:/usr/ccs/bin/usla64
+}
+{
+ AIX64-uu-sz4
+ Memcheck:Addr4
+ obj:/usr/ccs/bin/usla64
+}
+{
+ AIX64-uu-sz2
+ Memcheck:Addr2
+ obj:/usr/ccs/bin/usla64
+ obj:/usr/ccs/bin/usla64
+}
+{
+ AIX64-uu-sz1
+ Memcheck:Addr1
+ obj:/usr/ccs/bin/usla64
+ obj:/usr/ccs/bin/usla64
+}
+
+{
+ AIX64-uc-sz8
+ Memcheck:Addr8
+ obj:/usr/ccs/bin/usla64
+ obj:*/libc.a(shr*.o)
+}
+{
+ AIX64-uc-sz4
+ Memcheck:Addr4
+ obj:/usr/ccs/bin/usla64
+ obj:*/libc.a(shr*.o)
+}
+{
+ AIX64-uc-sz2
+ Memcheck:Addr2
+ obj:/usr/ccs/bin/usla64
+ obj:*/libc.a(shr*.o)
+}
+{
+ AIX64-uc-sz1
+ Memcheck:Addr1
+ obj:/usr/ccs/bin/usla64
+ obj:*/libc.a(shr*.o)
+}
+
+{
+ AIX64-?uu-sz8
+ Memcheck:Addr8
+ fun:*
+ obj:/usr/ccs/bin/usla64
+ obj:/usr/ccs/bin/usla64
+}
+{
+ AIX64-?uu-sz4
+ Memcheck:Addr4
+ fun:*
+ obj:/usr/ccs/bin/usla64
+ obj:/usr/ccs/bin/usla64
+}
+
+{
+ AIX64-?uc-sz8
+ Memcheck:Addr8
+ fun:*
+ obj:/usr/ccs/bin/usla64
+ obj:*/libc.a(shr*.o)
+}
+{
+ AIX64-?uc-sz4
+ Memcheck:Addr4
+ fun:*
+ obj:/usr/ccs/bin/usla64
+ obj:*/libc.a(shr*.o)
+}
+{
+ AIX64-?uc-sz2
+ Memcheck:Addr2
+ fun:*
+ obj:/usr/ccs/bin/usla64
+ obj:*/libc.a(shr*.o)
+}
+{
+ AIX64-?uc-sz1
+ Memcheck:Addr1
+ fun:*
+ obj:/usr/ccs/bin/usla64
+ obj:*/libc.a(shr*.o)
+}
+
+{
+ AIX64-usla_exec_init_mods-sz8
+ Memcheck:Addr8
+ fun:usl_exec_init_mods
+}
+
+{
+ AIX64-usla_main-sz8
+ Memcheck:Addr8
+ fun:usla_main
+}
+
+{
+ AIX64-__modfini64-sz8
+ Memcheck:Addr8
+ fun:__modfini64
+}
+
+{
+ AIX64-load-lib?-sz8
+ Memcheck:Addr8
+ fun:load
+ obj:*/lib?.a(shr*.o)
+}
+
+{
+ AIX64-__loadx-libc-sz8
+ Memcheck:Addr8
+ fun:__loadx
+ obj:*/libc.a(shr*.o)
+}
+
+{
+ AIX64-loadquery-libC-sz8
+ Memcheck:Addr8
+ fun:loadquery
+ obj:*/libC.a(shr*.o)
+}
+
+{
+ AIX64-__loadx-pthread_init-sz8
+ Memcheck:Addr8
+ fun:__loadx
+ fun:*pth*_init
+}
+
+{
+ AIX64-unload-libC-sz8
+ Memcheck:Addr8
+ fun:unload
+ obj:*/libC.a(shr*.o)
+}
+
+{
+ AIX64-loadquery-__C_runtime_startup-sz8
+ Memcheck:Addr8
+ fun:loadquery
+ fun:__C_runtime_startup
+}
+
+{
+ AIX64-load-libppe-sz8
+ Memcheck:Addr8
+ fun:load
+ obj:*/libppe*.a(*.o)
+}
+
+#####
+
+{
+ AIX-libodm_tsd_destroy-free
+ Memcheck:Free
+ fun:free
+ fun:libodm_tsd_destroy
+ fun:__odm_initfini_fini
+}
+
+{
+ AIX64-usl-resolve-sz1
+ Memcheck:Addr1
+ obj:*
+ fun:usl_resolve
+ fun:uload
+ fun:load
+}
--- /dev/null
+#!/bin/sh
+
+run ()
+{
+ echo "running: $*"
+ eval $*
+
+ if test $? != 0 ; then
+ echo "error: while running '$*'"
+ exit 1
+ fi
+}
+
+run aclocal
+run autoheader
+run automake -a
+run autoconf
--- /dev/null
+
+##------------------------------------------------------------##
+#
+# The multiple-architecture stuff in this file is pretty
+# cryptic. Read docs/internals/multiple-architectures.txt
+# for at least a partial explanation of what is going on.
+#
+##------------------------------------------------------------##
+
+# Process this file with autoconf to produce a configure script.
+AC_INIT(Valgrind, 3.7.0.SVN, valgrind-users@lists.sourceforge.net)
+AC_CONFIG_SRCDIR(coregrind/m_main.c)
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE([foreign])
+
+AM_MAINTAINER_MODE
+
+#----------------------------------------------------------------------------
+# Checks for various programs.
+#----------------------------------------------------------------------------
+CFLAGS="-Wno-long-long $CFLAGS"
+
+AC_PROG_LN_S
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_CPP
+AC_PROG_CXX
+# AC_PROG_OBJC apparently causes problems on older Linux distros (eg. with
+# autoconf 2.59). If we ever have any Objective-C code in the Valgrind code
+# base (eg. most likely as Darwin-specific tests) we'll need one of the
+# following:
+# - put AC_PROG_OBJC in a Darwin-specific part of this file
+# - Use AC_PROG_OBJC here and up the minimum autoconf version
+# - Use the following, which is apparently equivalent:
+# m4_ifdef([AC_PROG_OBJC],
+# [AC_PROG_OBJC],
+# [AC_CHECK_TOOL([OBJC], [gcc])
+# AC_SUBST([OBJC])
+# AC_SUBST([OBJCFLAGS])
+# ])
+AC_PROG_RANLIB
+# provide a very basic definition for AC_PROG_SED if it's not provided by
+# autoconf (as e.g. in autoconf 2.59).
+m4_ifndef([AC_PROG_SED],
+ [AC_DEFUN([AC_PROG_SED],
+ [AC_ARG_VAR([SED])
+ AC_CHECK_PROGS([SED],[gsed sed])])])
+AC_PROG_SED
+
+# If no AR variable was specified, look up the name of the archiver. Otherwise
+# do not touch the AR variable.
+if test "x$AR" = "x"; then
+ AC_PATH_PROGS([AR], [`echo $LD | $SED 's/ld$/ar/'` "ar"], [ar])
+fi
+AC_ARG_VAR([AR],[Archiver command])
+
+# Check for the compiler support
+if test "${GCC}" != "yes" ; then
+ AC_MSG_ERROR([Valgrind relies on GCC to be compiled])
+fi
+
+# figure out where perl lives
+AC_PATH_PROG(PERL, perl)
+
+# figure out where gdb lives
+AC_PATH_PROG(GDB, gdb, "/no/gdb/was/found/at/configure/time")
+AC_DEFINE_UNQUOTED(GDB_PATH, "$GDB", [path to GDB])
+
+# some older automake's don't have it so try something on our own
+ifdef([AM_PROG_AS],[AM_PROG_AS],
+[
+AS="${CC}"
+AC_SUBST(AS)
+
+ASFLAGS=""
+AC_SUBST(ASFLAGS)
+])
+
+
+# Check if 'diff' supports -u (universal diffs) and use it if possible.
+
+AC_MSG_CHECKING([for diff -u])
+AC_SUBST(DIFF)
+
+# Comparing two identical files results in 0, unless -u isn't supported (as
+# it's not on AIX).
+tmpfile="tmp-xxx-yyy-zzz"
+touch $tmpfile;
+if diff -u $tmpfile $tmpfile ; then
+ AC_MSG_RESULT([yes])
+ DIFF="diff -u"
+else
+ AC_MSG_RESULT([no])
+ DIFF="diff"
+fi
+rm $tmpfile
+
+
+# We don't want gcc < 3.0
+AC_MSG_CHECKING([for a supported version of gcc])
+
+[gcc_version=`${CC} --version | head -n 1 | $SED 's/^[^0-9]*\([0-9.]*\).*$/\1/'`]
+
+case "${gcc_version}" in
+ 2.*)
+ AC_MSG_RESULT([no (${gcc_version})])
+ AC_MSG_ERROR([please use a recent (>= gcc-3.0) version of gcc])
+ ;;
+ *)
+ AC_MSG_RESULT([ok (${gcc_version})])
+ ;;
+esac
+
+#----------------------------------------------------------------------------
+# Arch/OS/platform tests.
+#----------------------------------------------------------------------------
+# We create a number of arch/OS/platform-related variables. We prefix them
+# all with "VGCONF_" which indicates that they are defined at
+# configure-time, and distinguishes them from the VGA_*/VGO_*/VGP_*
+# variables used when compiling C files.
+
+AC_CANONICAL_HOST
+
+AC_MSG_CHECKING([for a supported CPU])
+
+# ARCH_MAX reflects the most that this CPU can do: for example if it
+# is a 64-bit capable PowerPC, then it must be set to ppc64 and not ppc32.
+# Ditto for amd64. It is used for more configuration below, but is not used
+# outside this file.
+case "${host_cpu}" in
+ i?86)
+ AC_MSG_RESULT([ok (${host_cpu})])
+ ARCH_MAX="x86"
+ ;;
+
+ x86_64)
+ AC_MSG_RESULT([ok (${host_cpu})])
+ ARCH_MAX="amd64"
+ ;;
+
+ powerpc64)
+ # This value can only happen on Linux, not on AIX
+ AC_MSG_RESULT([ok (${host_cpu})])
+ ARCH_MAX="ppc64"
+ ;;
+
+ powerpc)
+ # Complexity. 'powerpc' on AIX implies a 64-bit capable CPU.
+ # Whereas in Linux that means only a 32-bit capable CPU.
+ AC_MSG_RESULT([ok (${host_cpu})])
+ case "${host_os}" in
+ aix5.*)
+ ARCH_MAX="ppc64"
+ ;;
+ *)
+ ARCH_MAX="ppc32"
+ ;;
+ esac
+ ;;
+
+ armv7*)
+ AC_MSG_RESULT([ok (${host_cpu})])
+ ARCH_MAX="arm"
+ ;;
+
+ *)
+ AC_MSG_RESULT([no (${host_cpu})])
+ AC_MSG_ERROR([Unsupported host architecture. Sorry])
+ ;;
+esac
+
+#----------------------------------------------------------------------------
+
+# Sometimes it's convenient to subvert the bi-arch build system and
+# just have a single build even though the underlying platform is
+# capable of both. Hence handle --enable-only64bit and
+# --enable-only32bit. Complain if both are issued :-)
+# [Actually, if either of these options are used, I think both get built,
+# but only one gets installed. So if you use an in-place build, both can be
+# used. --njn]
+
+# Check if a 64-bit only build has been requested
+AC_CACHE_CHECK([for a 64-bit only build], vg_cv_only64bit,
+ [AC_ARG_ENABLE(only64bit,
+ [ --enable-only64bit do a 64-bit only build],
+ [vg_cv_only64bit=$enableval],
+ [vg_cv_only64bit=no])])
+
+# Check if a 32-bit only build has been requested
+AC_CACHE_CHECK([for a 32-bit only build], vg_cv_only32bit,
+ [AC_ARG_ENABLE(only32bit,
+ [ --enable-only32bit do a 32-bit only build],
+ [vg_cv_only32bit=$enableval],
+ [vg_cv_only32bit=no])])
+
+# Stay sane
+if test x$vg_cv_only64bit = xyes -a x$vg_cv_only32bit = xyes; then
+ AC_MSG_ERROR(
+ [Nonsensical: both --enable-only64bit and --enable-only32bit.])
+fi
+
+#----------------------------------------------------------------------------
+
+# VGCONF_OS is the primary build OS, eg. "linux". It is passed in to
+# compilation of many C files via -VGO_$(VGCONF_OS) and
+# -VGP_$(VGCONF_ARCH_PRI)_$(VGCONF_OS).
+AC_MSG_CHECKING([for a supported OS])
+AC_SUBST(VGCONF_OS)
+
+DEFAULT_SUPP=""
+
+case "${host_os}" in
+ *linux*)
+ AC_MSG_RESULT([ok (${host_os})])
+ VGCONF_OS="linux"
+
+ # Ok, this is linux. Check the kernel version
+ AC_MSG_CHECKING([for the kernel version])
+
+ kernel=`uname -r`
+
+ case "${kernel}" in
+ 2.6.*)
+ AC_MSG_RESULT([2.6 family (${kernel})])
+ AC_DEFINE([KERNEL_2_6], 1, [Define to 1 if you're using Linux 2.6.x])
+ ;;
+
+ 2.4.*)
+ AC_MSG_RESULT([2.4 family (${kernel})])
+ AC_DEFINE([KERNEL_2_4], 1, [Define to 1 if you're using Linux 2.4.x])
+ ;;
+
+ *)
+ AC_MSG_RESULT([unsupported (${kernel})])
+ AC_MSG_ERROR([Valgrind works on kernels 2.4, 2.6])
+ ;;
+ esac
+
+ ;;
+
+ aix5.1.*)
+ AC_MSG_RESULT([ok (${host_os})])
+ VGCONF_OS="aix5"
+ ;;
+ aix5.2.*)
+ AC_MSG_RESULT([ok (${host_os})])
+ VGCONF_OS="aix5"
+ ;;
+ aix5.3.*)
+ AC_MSG_RESULT([ok (${host_os})])
+ VGCONF_OS="aix5"
+ ;;
+
+ *darwin*)
+ AC_MSG_RESULT([ok (${host_os})])
+ VGCONF_OS="darwin"
+ AC_DEFINE([DARWIN_10_5], 100500, [DARWIN_VERS value for Mac OS X 10.5])
+ AC_DEFINE([DARWIN_10_6], 100600, [DARWIN_VERS value for Mac OS X 10.6])
+ AC_DEFINE([DARWIN_10_7], 100700, [DARWIN_VERS value for Mac OS X 10.7])
+
+ AC_MSG_CHECKING([for the kernel version])
+ kernel=`uname -r`
+
+ # Nb: for Darwin we set DEFAULT_SUPP here. That's because Darwin
+ # has only one relevant version, the OS version. The `uname` check
+ # is a good way to get that version (i.e. "Darwin 9.6.0" is Mac OS
+ # X 10.5.6, and "Darwin 10.x" is Mac OS X 10.6.x Snow Leopard),
+ # and we don't know of an macros similar to __GLIBC__ to get that info.
+ #
+ # XXX: `uname -r` won't do the right thing for cross-compiles, but
+ # that's not a problem yet.
+ case "${kernel}" in
+ 9.*)
+ AC_MSG_RESULT([Darwin 9.x (${kernel}) / Mac OS X 10.5 Leopard])
+ AC_DEFINE([DARWIN_VERS], DARWIN_10_5, [Darwin / Mac OS X version])
+ DEFAULT_SUPP="darwin9.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="darwin9-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ 10.*)
+ AC_MSG_RESULT([Darwin 10.x (${kernel}) / Mac OS X 10.6 Snow Leopard])
+ AC_DEFINE([DARWIN_VERS], DARWIN_10_6, [Darwin / Mac OS X version])
+ DEFAULT_SUPP="darwin10.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ *)
+ AC_MSG_RESULT([unsupported (${kernel})])
+ AC_MSG_ERROR([Valgrind works on Darwin 9.x and 10.x (Mac OS X 10.5 and 10.6)])
+ ;;
+ esac
+ ;;
+
+ *)
+ AC_MSG_RESULT([no (${host_os})])
+ AC_MSG_ERROR([Valgrind is operating system specific. Sorry.])
+ ;;
+esac
+
+#----------------------------------------------------------------------------
+
+# If we are building on a 64 bit platform test to see if the system
+# supports building 32 bit programs and disable 32 bit support if it
+# does not support building 32 bit programs
+
+case "$ARCH_MAX-$VGCONF_OS" in
+ amd64-linux|ppc64-linux)
+ AC_MSG_CHECKING([for 32 bit build support])
+ safe_CFLAGS=$CFLAGS
+ CFLAGS="-m32"
+ AC_TRY_LINK(, [
+ return 0;
+ ],
+ [
+ AC_MSG_RESULT([yes])
+ ], [
+ vg_cv_only64bit="yes"
+ AC_MSG_RESULT([no])
+ ])
+ CFLAGS=$safe_CFLAGS;;
+esac
+
+if test x$vg_cv_only64bit = xyes -a x$vg_cv_only32bit = xyes; then
+ AC_MSG_ERROR(
+ [--enable-only32bit was specified but system does not support 32 bit builds])
+fi
+
+#----------------------------------------------------------------------------
+
+# VGCONF_ARCH_PRI is the arch for the primary build target, eg. "amd64". By
+# default it's the same as ARCH_MAX. But if, say, we do a build on an amd64
+# machine, but --enable-only32bit has been requested, then ARCH_MAX (see
+# above) will be "amd64" since that reflects the most that this cpu can do,
+# but VGCONF_ARCH_PRI will be downgraded to "x86", since that reflects the
+# arch corresponding to the primary build (VGCONF_PLATFORM_PRI_CAPS). It is
+# passed in to compilation of many C files via -VGA_$(VGCONF_ARCH_PRI) and
+# -VGP_$(VGCONF_ARCH_PRI)_$(VGCONF_OS).
+AC_SUBST(VGCONF_ARCH_PRI)
+
+# VGCONF_ARCH_SEC is the arch for the secondary build target, eg. "x86".
+# It is passed in to compilation of many C files via -VGA_$(VGCONF_ARCH_SEC)
+# and -VGP_$(VGCONF_ARCH_SEC)_$(VGCONF_OS), if there is a secondary target.
+# It is empty if there is no secondary target.
+AC_SUBST(VGCONF_ARCH_SEC)
+
+# VGCONF_PLATFORM_PRI_CAPS is the primary build target, eg. "AMD64_LINUX".
+# The entire system, including regression and performance tests, will be
+# built for this target. The "_CAPS" indicates that the name is in capital
+# letters, and it also uses '_' rather than '-' as a separator, because it's
+# used to create various Makefile variables, which are all in caps by
+# convention and cannot contain '-' characters. This is in contrast to
+# VGCONF_ARCH_PRI and VGCONF_OS which are not in caps.
+AC_SUBST(VGCONF_PLATFORM_PRI_CAPS)
+
+# VGCONF_PLATFORM_SEC_CAPS is the secondary build target, if there is one.
+# Valgrind and tools will also be built for this target, but not the
+# regression or performance tests.
+#
+# By default, the primary arch is the same as the "max" arch, as commented
+# above (at the definition of ARCH_MAX). We may choose to downgrade it in
+# the big case statement just below here, in the case where we're building
+# on a 64 bit machine but have been requested only to do a 32 bit build.
+AC_SUBST(VGCONF_PLATFORM_SEC_CAPS)
+
+AC_MSG_CHECKING([for a supported CPU/OS combination])
+
+# NB. The load address for a given platform may be specified in more
+# than one place, in some cases, depending on whether we're doing a biarch,
+# 32-bit only or 64-bit only build. eg see case for amd64-linux below.
+# Be careful to give consistent values in all subcases. Also, all four
+# valt_load_addres_{pri,sec}_{norml,inner} values must always be set,
+# even if it is to "0xUNSET".
+#
+case "$ARCH_MAX-$VGCONF_OS" in
+ x86-linux)
+ VGCONF_ARCH_PRI="x86"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="X86_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
+ amd64-linux)
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ if test x$vg_cv_only64bit = xyes; then
+ VGCONF_ARCH_PRI="amd64"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="AMD64_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ elif test x$vg_cv_only32bit = xyes; then
+ VGCONF_ARCH_PRI="x86"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="X86_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ else
+ VGCONF_ARCH_PRI="amd64"
+ VGCONF_ARCH_SEC="x86"
+ VGCONF_PLATFORM_PRI_CAPS="AMD64_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS="X86_LINUX"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0x38000000"
+ valt_load_address_sec_inner="0x28000000"
+ fi
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
+ ppc32-linux)
+ VGCONF_ARCH_PRI="ppc32"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="PPC32_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
+ ppc64-aix5)
+ valt_load_address_pri_norml="0xUNSET"
+ valt_load_address_pri_inner="0xUNSET"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ if test x$vg_cv_only64bit = xyes; then
+ VGCONF_ARCH_PRI="ppc64"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="PPC64_AIX5"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ elif test x$vg_cv_only32bit = xyes; then
+ VGCONF_ARCH_PRI="ppc32"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="PPC32_AIX5"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ else
+ VGCONF_ARCH_PRI="ppc64"
+ VGCONF_ARCH_SEC="ppc32"
+ VGCONF_PLATFORM_PRI_CAPS="PPC64_AIX5"
+ VGCONF_PLATFORM_SEC_CAPS="PPC32_AIX5"
+ fi
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
+ ppc64-linux)
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ if test x$vg_cv_only64bit = xyes; then
+ VGCONF_ARCH_PRI="ppc64"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="PPC64_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ elif test x$vg_cv_only32bit = xyes; then
+ VGCONF_ARCH_PRI="ppc32"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="PPC32_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ else
+ VGCONF_ARCH_PRI="ppc64"
+ VGCONF_ARCH_SEC="ppc32"
+ VGCONF_PLATFORM_PRI_CAPS="PPC64_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS="PPC32_LINUX"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0x38000000"
+ valt_load_address_sec_inner="0x28000000"
+ fi
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
+ # Darwin gets identified as 32-bit even when it supports 64-bit.
+ # (Not sure why, possibly because 'uname' returns "i386"?) Just about
+ # all Macs support both 32-bit and 64-bit, so we just build both. If
+ # someone has a really old 32-bit only machine they can (hopefully?)
+ # build with --enable-only32bit. See bug 243362.
+ x86-darwin|amd64-darwin)
+ ARCH_MAX="amd64"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ if test x$vg_cv_only64bit = xyes; then
+ VGCONF_ARCH_PRI="amd64"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="AMD64_DARWIN"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x138000000"
+ valt_load_address_pri_inner="0x128000000"
+ elif test x$vg_cv_only32bit = xyes; then
+ VGCONF_ARCH_PRI="x86"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="X86_DARWIN"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ VGCONF_ARCH_PRI_CAPS="x86"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ else
+ VGCONF_ARCH_PRI="amd64"
+ VGCONF_ARCH_SEC="x86"
+ VGCONF_PLATFORM_PRI_CAPS="AMD64_DARWIN"
+ VGCONF_PLATFORM_SEC_CAPS="X86_DARWIN"
+ valt_load_address_pri_norml="0x138000000"
+ valt_load_address_pri_inner="0x128000000"
+ valt_load_address_sec_norml="0x38000000"
+ valt_load_address_sec_inner="0x28000000"
+ fi
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
+ arm-linux)
+ VGCONF_ARCH_PRI="arm"
+ VGCONF_PLATFORM_PRI_CAPS="ARM_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ AC_MSG_RESULT([ok (${host_cpu}-${host_os})])
+ ;;
+ *)
+ VGCONF_ARCH_PRI="unknown"
+ VGCONF_ARCH_SEC="unknown"
+ VGCONF_PLATFORM_PRI_CAPS="UNKNOWN"
+ VGCONF_PLATFORM_SEC_CAPS="UNKNOWN"
+ valt_load_address_pri_norml="0xUNSET"
+ valt_load_address_pri_inner="0xUNSET"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ AC_MSG_RESULT([no (${ARCH_MAX}-${VGCONF_OS})])
+ AC_MSG_ERROR([Valgrind is platform specific. Sorry. Please consider doing a port.])
+ ;;
+esac
+
+#----------------------------------------------------------------------------
+
+# Set up VGCONF_ARCHS_INCLUDE_<arch>. Either one or two of these become
+# defined.
+AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_X86,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN )
+AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_AMD64,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN )
+AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_PPC32,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_AIX5 \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_AIX5 )
+AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_PPC64,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_AIX5 )
+AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_ARM,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX )
+
+# Set up VGCONF_PLATFORMS_INCLUDE_<platform>. Either one or two of these
+# become defined.
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_LINUX)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC32_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC64_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_ARM_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX)
+
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC32_AIX5,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_AIX5 \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_AIX5)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC64_AIX5,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_AIX5)
+
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_DARWIN,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_AMD64_DARWIN,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN)
+
+
+# Similarly, set up VGCONF_OS_IS_<os>. Exactly one of these becomes defined.
+# Relies on the assumption that the primary and secondary targets are
+# for the same OS, so therefore only necessary to test the primary.
+AM_CONDITIONAL(VGCONF_OS_IS_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX )
+AM_CONDITIONAL(VGCONF_OS_IS_AIX5,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_AIX5 \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_AIX5)
+AM_CONDITIONAL(VGCONF_OS_IS_DARWIN,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN)
+
+
+# Sometimes, in the Makefile.am files, it's useful to know whether or not
+# there is a secondary target.
+AM_CONDITIONAL(VGCONF_HAVE_PLATFORM_SEC,
+ test x$VGCONF_PLATFORM_SEC_CAPS != x)
+
+
+#----------------------------------------------------------------------------
+# Inner Valgrind?
+#----------------------------------------------------------------------------
+
+# Check if this should be built as an inner Valgrind, to be run within
+# another Valgrind. Choose the load address accordingly.
+AC_SUBST(VALT_LOAD_ADDRESS_PRI)
+AC_SUBST(VALT_LOAD_ADDRESS_SEC)
+AC_CACHE_CHECK([for use as an inner Valgrind], vg_cv_inner,
+ [AC_ARG_ENABLE(inner,
+ [ --enable-inner enables self-hosting],
+ [vg_cv_inner=$enableval],
+ [vg_cv_inner=no])])
+if test "$vg_cv_inner" = yes; then
+ AC_DEFINE([ENABLE_INNER], 1, [configured to run as an inner Valgrind])
+ VALT_LOAD_ADDRESS_PRI=$valt_load_address_pri_inner
+ VALT_LOAD_ADDRESS_SEC=$valt_load_address_sec_inner
+else
+ VALT_LOAD_ADDRESS_PRI=$valt_load_address_pri_norml
+ VALT_LOAD_ADDRESS_SEC=$valt_load_address_sec_norml
+fi
+
+
+#----------------------------------------------------------------------------
+# Libc and suppressions
+#----------------------------------------------------------------------------
+# This variable will collect the suppression files to be used.
+AC_SUBST(DEFAULT_SUPP)
+
+AC_CHECK_HEADER([features.h])
+
+if test x$ac_cv_header_features_h = xyes; then
+ rm -f conftest.$ac_ext
+ cat <<_ACEOF >conftest.$ac_ext
+#include <features.h>
+#if defined(__GNU_LIBRARY__) && defined(__GLIBC__) && defined(__GLIBC_MINOR__)
+glibc version is: __GLIBC__ __GLIBC_MINOR__
+#endif
+_ACEOF
+ GLIBC_VERSION="`$CPP conftest.$ac_ext | $SED -n 's/^glibc version is: //p' | $SED 's/ /./g'`"
+fi
+
+AC_EGREP_CPP([AIX5_LIBC], [
+#include <standards.h>
+#if defined(_AIXVERSION_510) || defined(_AIXVERSION_520) || defined(_AIXVERSION_530)
+ AIX5_LIBC
+#endif
+],
+GLIBC_VERSION="aix5")
+
+# not really a version check
+AC_EGREP_CPP([DARWIN_LIBC], [
+#include <sys/cdefs.h>
+#if defined(__DARWIN_VERS_1050)
+ DARWIN_LIBC
+#endif
+],
+GLIBC_VERSION="darwin")
+
+AC_MSG_CHECKING([the GLIBC_VERSION version])
+
+case "${GLIBC_VERSION}" in
+ 2.2)
+ AC_MSG_RESULT(2.2 family)
+ AC_DEFINE([GLIBC_2_2], 1, [Define to 1 if you're using glibc 2.2.x])
+ DEFAULT_SUPP="glibc-2.2.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.2-LinuxThreads-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+
+ 2.3)
+ AC_MSG_RESULT(2.3 family)
+ AC_DEFINE([GLIBC_2_3], 1, [Define to 1 if you're using glibc 2.3.x])
+ DEFAULT_SUPP="glibc-2.3.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+
+ 2.4)
+ AC_MSG_RESULT(2.4 family)
+ AC_DEFINE([GLIBC_2_4], 1, [Define to 1 if you're using glibc 2.4.x])
+ DEFAULT_SUPP="glibc-2.4.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+
+ 2.5)
+ AC_MSG_RESULT(2.5 family)
+ AC_DEFINE([GLIBC_2_5], 1, [Define to 1 if you're using glibc 2.5.x])
+ DEFAULT_SUPP="glibc-2.5.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ 2.6)
+ AC_MSG_RESULT(2.6 family)
+ AC_DEFINE([GLIBC_2_6], 1, [Define to 1 if you're using glibc 2.6.x])
+ DEFAULT_SUPP="glibc-2.6.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ 2.7)
+ AC_MSG_RESULT(2.7 family)
+ AC_DEFINE([GLIBC_2_7], 1, [Define to 1 if you're using glibc 2.7.x])
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ 2.8)
+ AC_MSG_RESULT(2.8 family)
+ AC_DEFINE([GLIBC_2_8], 1, [Define to 1 if you're using glibc 2.8.x])
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ 2.9)
+ AC_MSG_RESULT(2.9 family)
+ AC_DEFINE([GLIBC_2_9], 1, [Define to 1 if you're using glibc 2.9.x])
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ 2.10)
+ AC_MSG_RESULT(2.10 family)
+ AC_DEFINE([GLIBC_2_10], 1, [Define to 1 if you're using glibc 2.10.x])
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ 2.11)
+ AC_MSG_RESULT(2.11 family)
+ AC_DEFINE([GLIBC_2_11], 1, [Define to 1 if you're using glibc 2.11.x])
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ 2.12)
+ AC_MSG_RESULT(2.12 family)
+ AC_DEFINE([GLIBC_2_12], 1, [Define to 1 if you're using glibc 2.12.x])
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
+ aix5)
+ AC_MSG_RESULT(AIX 5.1 or 5.2 or 5.3)
+ AC_DEFINE([AIX5_LIBC], 1, [Define to 1 if you're using AIX 5.1 or 5.2 or 5.3])
+ DEFAULT_SUPP="aix5libc.supp ${DEFAULT_SUPP}"
+ ;;
+ darwin)
+ AC_MSG_RESULT(Darwin)
+ AC_DEFINE([DARWIN_LIBC], 1, [Define to 1 if you're using Darwin])
+ # DEFAULT_SUPP set by kernel version check above.
+ ;;
+
+ *)
+ AC_MSG_RESULT([unsupported version ${GLIBC_VERSION}])
+ AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.12])
+ AC_MSG_ERROR([or AIX 5.1 or 5.2 or 5.3 GLIBC_VERSION])
+ AC_MSG_ERROR([or Darwin libc])
+ ;;
+esac
+
+AC_SUBST(GLIBC_VERSION)
+
+
+# Add default suppressions for the X client libraries. Make no
+# attempt to detect whether such libraries are installed on the
+# build machine (or even if any X facilities are present); just
+# add the suppressions antidisirregardless.
+DEFAULT_SUPP="xfree-4.supp ${DEFAULT_SUPP}"
+DEFAULT_SUPP="xfree-3.supp ${DEFAULT_SUPP}"
+
+# Add glibc and X11 suppressions for exp-ptrcheck
+DEFAULT_SUPP="exp-ptrcheck.supp ${DEFAULT_SUPP}"
+
+
+#----------------------------------------------------------------------------
+# Checking for various library functions and other definitions
+#----------------------------------------------------------------------------
+
+# Check for CLOCK_MONOTONIC
+
+AC_MSG_CHECKING([for CLOCK_MONOTONIC])
+
+AC_TRY_COMPILE(
+[
+#include <time.h>
+], [
+ struct timespec t;
+ clock_gettime(CLOCK_MONOTONIC, &t);
+ return 0;
+],
+[
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_CLOCK_MONOTONIC], 1,
+ [Define to 1 if you have the `CLOCK_MONOTONIC' constant.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+# Check for PTHREAD_MUTEX_ADAPTIVE_NP
+
+AC_MSG_CHECKING([for PTHREAD_MUTEX_ADAPTIVE_NP])
+
+AC_TRY_COMPILE(
+[
+#define _GNU_SOURCE
+#include <pthread.h>
+], [
+ return (PTHREAD_MUTEX_ADAPTIVE_NP);
+],
+[
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], 1,
+ [Define to 1 if you have the `PTHREAD_MUTEX_ADAPTIVE_NP' constant.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+# Check for PTHREAD_MUTEX_ERRORCHECK_NP
+
+AC_MSG_CHECKING([for PTHREAD_MUTEX_ERRORCHECK_NP])
+
+AC_TRY_COMPILE(
+[
+#define _GNU_SOURCE
+#include <pthread.h>
+], [
+ return (PTHREAD_MUTEX_ERRORCHECK_NP);
+],
+[
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_PTHREAD_MUTEX_ERRORCHECK_NP], 1,
+ [Define to 1 if you have the `PTHREAD_MUTEX_ERRORCHECK_NP' constant.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+# Check for PTHREAD_MUTEX_RECURSIVE_NP
+
+AC_MSG_CHECKING([for PTHREAD_MUTEX_RECURSIVE_NP])
+
+AC_TRY_COMPILE(
+[
+#define _GNU_SOURCE
+#include <pthread.h>
+], [
+ return (PTHREAD_MUTEX_RECURSIVE_NP);
+],
+[
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE_NP], 1,
+ [Define to 1 if you have the `PTHREAD_MUTEX_RECURSIVE_NP' constant.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+# Check for PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+
+AC_MSG_CHECKING([for PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP])
+
+AC_TRY_COMPILE(
+[
+#define _GNU_SOURCE
+#include <pthread.h>
+], [
+ pthread_mutex_t m = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
+ return 0;
+],
+[
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP], 1,
+ [Define to 1 if you have the `PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP' constant.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+# Check whether pthread_mutex_t has a member called __m_kind.
+
+AC_CHECK_MEMBER([pthread_mutex_t.__m_kind],
+ [AC_DEFINE([HAVE_PTHREAD_MUTEX_T__M_KIND],
+ 1,
+ [Define to 1 if pthread_mutex_t has a member called __m_kind.])
+ ],
+ [],
+ [#include <pthread.h>])
+
+
+# Check whether pthread_mutex_t has a member called __data.__kind.
+
+AC_CHECK_MEMBER([pthread_mutex_t.__data.__kind],
+ [AC_DEFINE([HAVE_PTHREAD_MUTEX_T__DATA__KIND],
+ 1,
+ [Define to 1 if pthread_mutex_t has a member __data.__kind.])
+ ],
+ [],
+ [#include <pthread.h>])
+
+
+# does this compiler support -maltivec and does it have the include file
+# <altivec.h> ?
+
+AC_MSG_CHECKING([for Altivec])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-maltivec"
+
+AC_TRY_COMPILE(
+[
+#include <altivec.h>
+], [
+ vector unsigned int v;
+],
+[
+ac_have_altivec=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAS_ALTIVEC], 1,
+ [Define to 1 if gcc/as can do Altivec.])
+], [
+ac_have_altivec=no
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AM_CONDITIONAL([HAS_ALTIVEC], [test x$ac_have_altivec = xyes])
+
+
+# Check for pthread_create@GLIBC2.0
+AC_MSG_CHECKING([for pthread_create@GLIBC2.0()])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-lpthread"
+AC_TRY_LINK(
+[
+extern int pthread_create_glibc_2_0(void*, const void*,
+ void *(*)(void*), void*);
+__asm__(".symver pthread_create_glibc_2_0, pthread_create@GLIBC_2.0");
+], [
+#ifdef __powerpc__
+/*
+ * Apparently on PowerPC linking this program succeeds and generates an
+ * executable with the undefined symbol pthread_create@GLIBC_2.0.
+ */
+#error This test does not work properly on PowerPC.
+#else
+ pthread_create_glibc_2_0(0, 0, 0, 0);
+#endif
+ return 0;
+],
+[
+ac_have_pthread_create_glibc_2_0=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_PTHREAD_CREATE_GLIBC_2_0], 1,
+ [Define to 1 if you have the `pthread_create@glibc2.0' function.])
+], [
+ac_have_pthread_create_glibc_2_0=no
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AM_CONDITIONAL(HAVE_PTHREAD_CREATE_GLIBC_2_0,
+ test x$ac_have_pthread_create_glibc_2_0 = xyes)
+
+
+# Check for eventfd_t, eventfd() and eventfd_read()
+AC_MSG_CHECKING([for eventfd()])
+
+AC_TRY_LINK(
+[
+#include <sys/eventfd.h>
+], [
+ eventfd_t ev;
+ int fd;
+
+ fd = eventfd(5, 0);
+ eventfd_read(fd, &ev);
+ return 0;
+],
+[
+AC_MSG_RESULT([yes])
+AC_DEFINE([HAVE_EVENTFD], 1,
+ [Define to 1 if you have the `eventfd' function.])
+AC_DEFINE([HAVE_EVENTFD_READ], 1,
+ [Define to 1 if you have the `eventfd_read' function.])
+], [
+AC_MSG_RESULT([no])
+])
+
+
+#----------------------------------------------------------------------------
+# Checking for supported compiler flags.
+#----------------------------------------------------------------------------
+
+# does this compiler support -m32 ?
+AC_MSG_CHECKING([if gcc accepts -m32])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-m32"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+FLAG_M32="-m32"
+AC_MSG_RESULT([yes])
+], [
+FLAG_M32=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(FLAG_M32)
+
+
+# does this compiler support -maix32 ?
+AC_MSG_CHECKING([if gcc accepts -maix32])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-maix32"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+FLAG_MAIX32="-maix32"
+AC_MSG_RESULT([yes])
+], [
+FLAG_MAIX32=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(FLAG_MAIX32)
+
+
+# does this compiler support -m64 ?
+AC_MSG_CHECKING([if gcc accepts -m64])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-m64"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+FLAG_M64="-m64"
+AC_MSG_RESULT([yes])
+], [
+FLAG_M64=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(FLAG_M64)
+
+
+# does this compiler support -maix64 ?
+AC_MSG_CHECKING([if gcc accepts -maix64])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-maix64"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+FLAG_MAIX64="-maix64"
+AC_MSG_RESULT([yes])
+], [
+FLAG_MAIX64=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(FLAG_MAIX64)
+
+
+# does this compiler support -mmmx ?
+AC_MSG_CHECKING([if gcc accepts -mmmx])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-mmmx"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+FLAG_MMMX="-mmmx"
+AC_MSG_RESULT([yes])
+], [
+FLAG_MMMX=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(FLAG_MMMX)
+
+
+# does this compiler support -msse ?
+AC_MSG_CHECKING([if gcc accepts -msse])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-msse"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+FLAG_MSSE="-msse"
+AC_MSG_RESULT([yes])
+], [
+FLAG_MSSE=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(FLAG_MSSE)
+
+
+# does this compiler support -mpreferred-stack-boundary=2 ?
+AC_MSG_CHECKING([if gcc accepts -mpreferred-stack-boundary])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-mpreferred-stack-boundary=2"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+PREFERRED_STACK_BOUNDARY="-mpreferred-stack-boundary=2"
+AC_MSG_RESULT([yes])
+], [
+PREFERRED_STACK_BOUNDARY=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(PREFERRED_STACK_BOUNDARY)
+
+
+# does this compiler support -Wno-pointer-sign ?
+AC_MSG_CHECKING([if gcc accepts -Wno-pointer-sign])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-Wno-pointer-sign"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+no_pointer_sign=yes
+AC_MSG_RESULT([yes])
+], [
+no_pointer_sign=no
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+if test x$no_pointer_sign = xyes; then
+ CFLAGS="$CFLAGS -Wno-pointer-sign"
+fi
+
+
+# does this compiler support -Wno-empty-body ?
+
+AC_MSG_CHECKING([if gcc accepts -Wno-empty-body])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-Wno-empty-body"
+
+AC_TRY_COMPILE(
+[ ],
+[
+ return 0;
+],
+[
+AC_SUBST([FLAG_W_NO_EMPTY_BODY], [-Wno-empty-body])
+AC_MSG_RESULT([yes])
+],
+[
+AC_SUBST([FLAG_W_NO_EMPTY_BODY], [])
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+
+# does this compiler support -Wno-format-zero-length ?
+
+AC_MSG_CHECKING([if gcc accepts -Wno-format-zero-length])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-Wno-format-zero-length"
+
+AC_TRY_COMPILE(
+[ ],
+[
+ return 0;
+],
+[
+AC_SUBST([FLAG_W_NO_FORMAT_ZERO_LENGTH], [-Wno-format-zero-length])
+AC_MSG_RESULT([yes])
+],
+[
+AC_SUBST([FLAG_W_NO_FORMAT_ZERO_LENGTH], [])
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+
+# does this compiler support -Wno-uninitialized ?
+
+AC_MSG_CHECKING([if gcc accepts -Wno-uninitialized])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-Wno-uninitialized"
+
+AC_TRY_COMPILE(
+[ ],
+[
+ return 0;
+],
+[
+AC_SUBST([FLAG_W_NO_UNINITIALIZED], [-Wno-uninitialized])
+AC_MSG_RESULT([yes])
+],
+[
+AC_SUBST([FLAG_W_NO_UNINITIALIZED], [])
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+
+# does this compiler support -Wextra or the older -W ?
+
+AC_MSG_CHECKING([if gcc accepts -Wextra or -W])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-Wextra"
+
+AC_TRY_COMPILE(
+[ ],
+[
+ return 0;
+],
+[
+AC_SUBST([FLAG_W_EXTRA], [-Wextra])
+AC_MSG_RESULT([-Wextra])
+], [
+ CFLAGS="-W"
+ AC_TRY_COMPILE(
+ [ ],
+ [
+ return 0;
+ ],
+ [
+ AC_SUBST([FLAG_W_EXTRA], [-W])
+ AC_MSG_RESULT([-W])
+ ], [
+ AC_SUBST([FLAG_W_EXTRA], [])
+ AC_MSG_RESULT([not supported])
+ ])
+])
+CFLAGS=$safe_CFLAGS
+
+
+# does this compiler support -fno-stack-protector ?
+AC_MSG_CHECKING([if gcc accepts -fno-stack-protector])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-fno-stack-protector"
+
+AC_TRY_COMPILE(, [
+ return 0;
+],
+[
+no_stack_protector=yes
+FLAG_FNO_STACK_PROTECTOR="-fno-stack-protector"
+AC_MSG_RESULT([yes])
+], [
+no_stack_protector=no
+FLAG_FNO_STACK_PROTECTOR=""
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AC_SUBST(FLAG_FNO_STACK_PROTECTOR)
+
+if test x$no_stack_protector = xyes; then
+ CFLAGS="$CFLAGS -fno-stack-protector"
+fi
+
+
+# does this compiler support --param inline-unit-growth=... ?
+
+AC_MSG_CHECKING([if gcc accepts --param inline-unit-growth])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="--param inline-unit-growth=900"
+
+AC_TRY_COMPILE(
+[ ],
+[
+ return 0;
+],
+[
+AC_SUBST([FLAG_UNLIMITED_INLINE_UNIT_GROWTH],
+ ["--param inline-unit-growth=900"])
+AC_MSG_RESULT([yes])
+], [
+AC_SUBST([FLAG_UNLIMITED_INLINE_UNIT_GROWTH], [""])
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+
+# does the linker support -Wl,--build-id=none ? Note, it's
+# important that we test indirectly via whichever C compiler
+# is selected, rather than testing /usr/bin/ld or whatever
+# directly.
+
+AC_MSG_CHECKING([if the linker accepts -Wl,--build-id=none])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-Wl,--build-id=none"
+
+AC_LINK_IFELSE(
+[AC_LANG_PROGRAM([ ], [return 0;])],
+[
+ AC_SUBST([FLAG_NO_BUILD_ID], ["-Wl,--build-id=none"])
+ AC_MSG_RESULT([yes])
+], [
+ AC_SUBST([FLAG_NO_BUILD_ID], [""])
+ AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+
+# does the ppc assembler support "mtocrf" et al?
+AC_MSG_CHECKING([if ppc32/64 as supports mtocrf/mfocrf])
+
+AC_TRY_COMPILE(, [
+__asm__ __volatile__("mtocrf 4,0");
+__asm__ __volatile__("mfocrf 0,4");
+],
+[
+ac_have_as_ppc_mftocrf=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_ppc_mftocrf=no
+AC_MSG_RESULT([no])
+])
+if test x$ac_have_as_ppc_mftocrf = xyes ; then
+ AC_DEFINE(HAVE_AS_PPC_MFTOCRF, 1, [Define to 1 if as supports mtocrf/mfocrf.])
+fi
+
+
+# does the x86/amd64 assembler understand SSE3 instructions?
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_SSE3_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if x86/amd64 assembler speaks SSE3])
+
+AC_TRY_COMPILE(, [
+ do { long long int x;
+ __asm__ __volatile__("fisttpq (%0)" : :"r"(&x) ); }
+ while (0)
+],
+[
+ac_have_as_sse3=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_sse3=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_SSE3_TESTS, test x$ac_have_as_sse3 = xyes)
+
+
+# Ditto for SSSE3 instructions (note extra S)
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_SSSE3_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if x86/amd64 assembler speaks SSSE3])
+
+AC_TRY_COMPILE(, [
+ do { long long int x;
+ __asm__ __volatile__(
+ "pabsb (%0),%%xmm7" : : "r"(&x) : "xmm7" ); }
+ while (0)
+],
+[
+ac_have_as_ssse3=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_ssse3=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_SSSE3_TESTS, test x$ac_have_as_ssse3 = xyes)
+
+
+# Note: we're really checking the assembler-level support, not gcc's ;
+# C-level code might require the flag -mpclmul be passed to gcc (e.g. to
+# compile code which uses wmmintrin.h). Doesn't matter since tests also
+# use inline assembly directly
+AC_MSG_CHECKING([if x86/amd64 assembler supports 'pclmulqdq'])
+AC_TRY_COMPILE(, [
+ do {
+ __asm__ __volatile__(
+ "pclmulqdq \$17,%%xmm6,%%xmm7" : : : "xmm6", "xmm7" ); }
+ while (0)
+],
+[
+ac_have_as_pclmulqdq=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_pclmulqdq=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_PCLMULQDQ_TESTS, test x$ac_have_as_pclmulqdq = xyes)
+
+
+AC_MSG_CHECKING([if x86/amd64 assembler supports 'lzcnt'])
+
+AC_TRY_COMPILE([], [
+ do {
+ __asm__ __volatile__("lzcnt %rax,%rax");
+ } while (0)
+],
+[
+ ac_have_as_lzcnt=yes
+ AC_MSG_RESULT([yes])
+], [
+ ac_have_as_lzcnt=no
+ AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL([BUILD_LZCNT_TESTS], [test x$ac_have_as_lzcnt = xyes])
+
+# XXX JRS 2010 Oct 13: what is this for? For sure, we don't need this
+# when building the tool executables. I think we should get rid of it.
+#
+# Check for TLS support in the compiler and linker
+if test "x${cross_compiling}" = "xno"; then
+# Native compilation: check whether running a program using TLS succeeds.
+# Linking only is not sufficient -- e.g. on Red Hat 7.3 linking TLS programs
+# succeeds but running programs using TLS fails.
+AC_CACHE_CHECK([for TLS support], vg_cv_tls,
+ [AC_ARG_ENABLE(tls, [ --enable-tls platform supports TLS],
+ [vg_cv_tls=$enableval],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[static __thread int foo;]],
+ [[return foo;]])],
+ [vg_cv_tls=yes],
+ [vg_cv_tls=no])])])
+else
+# Cross-compiling: check whether linking a program using TLS succeeds.
+AC_CACHE_CHECK([for TLS support], vg_cv_tls,
+ [AC_ARG_ENABLE(tls, [ --enable-tls platform supports TLS],
+ [vg_cv_tls=$enableval],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[static __thread int foo;]],
+ [[return foo;]])],
+ [vg_cv_tls=yes],
+ [vg_cv_tls=no])])])
+fi
+
+if test "$vg_cv_tls" = yes; then
+AC_DEFINE([HAVE_TLS], 1, [can use __thread to define thread-local variables])
+fi
+
+
+#----------------------------------------------------------------------------
+# Checks for C header files.
+#----------------------------------------------------------------------------
+
+AC_HEADER_STDC
+AC_CHECK_HEADERS([ \
+ asm/unistd.h \
+ endian.h \
+ mqueue.h \
+ sys/endian.h \
+ sys/epoll.h \
+ sys/eventfd.h \
+ sys/klog.h \
+ sys/poll.h \
+ sys/signal.h \
+ sys/signalfd.h \
+ sys/syscall.h \
+ sys/time.h \
+ sys/types.h \
+ ])
+
+#----------------------------------------------------------------------------
+# Checks for typedefs, structures, and compiler characteristics.
+#----------------------------------------------------------------------------
+AC_TYPE_UID_T
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+
+
+#----------------------------------------------------------------------------
+# Checks for library functions.
+#----------------------------------------------------------------------------
+AC_FUNC_MEMCMP
+AC_FUNC_MMAP
+AC_TYPE_SIGNAL
+
+AC_CHECK_LIB([rt], [clock_gettime])
+
+AC_CHECK_FUNCS([ \
+ clock_gettime\
+ epoll_create \
+ epoll_pwait \
+ floor \
+ klogctl \
+ mallinfo \
+ memchr \
+ memset \
+ mkdir \
+ mremap \
+ ppoll \
+ pthread_barrier_init \
+ pthread_condattr_setclock \
+ pthread_mutex_timedlock \
+ pthread_rwlock_timedrdlock \
+ pthread_rwlock_timedwrlock \
+ pthread_spin_lock \
+ pthread_yield \
+ readlinkat \
+ semtimedop \
+ signalfd \
+ sigwaitinfo \
+ strchr \
+ strdup \
+ strpbrk \
+ strrchr \
+ strstr \
+ syscall \
+ timerfd \
+ utimensat \
+ ])
+
+# AC_CHECK_LIB adds any library found to the variable LIBS, and links these
+# libraries with any shared object and/or executable. This is NOT what we
+# want for e.g. vgpreload_core-x86-linux.so
+LIBS=""
+
+AM_CONDITIONAL([HAVE_PTHREAD_BARRIER],
+ [test x$ac_cv_func_pthread_barrier_init = xyes])
+AM_CONDITIONAL([HAVE_PTHREAD_MUTEX_TIMEDLOCK],
+ [test x$ac_cv_func_pthread_mutex_timedlock = xyes])
+AM_CONDITIONAL([HAVE_PTHREAD_SPINLOCK],
+ [test x$ac_cv_func_pthread_spin_lock = xyes])
+
+
+#----------------------------------------------------------------------------
+# MPI checks
+#----------------------------------------------------------------------------
+# Do we have a useable MPI setup on the primary and/or secondary targets?
+# On Linux, by default, assumes mpicc and -m32/-m64
+# On AIX, by default, assumes mpxlc and -q32/-q64
+# Note: this is a kludge in that it assumes the specified mpicc
+# understands -m32/-m64/-q32/-q64 regardless of what is specified using
+# --with-mpicc=.
+MPI_CC="mpicc"
+if test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_AIX5 \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_AIX5 ; then
+ MPI_CC="mpxlc"
+fi
+
+mflag_primary=
+if test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX ; then
+ mflag_primary=$FLAG_M32
+elif test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX ; then
+ mflag_primary=$FLAG_M64
+elif test x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_AIX5 ; then
+ mflag_primary=-q32
+elif test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_AIX5 ; then
+ mflag_primary=-q64
+fi
+
+mflag_secondary=
+if test x$VGCONF_PLATFORM_SEC_CAPS = xX86_LINUX \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX ; then
+ mflag_secondary=$FLAG_M32
+elif test x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_AIX5 ; then
+ mflag_secondary=-q32
+fi
+
+
+AC_ARG_WITH(mpicc,
+ [ --with-mpicc= Specify name of MPI2-ised C compiler],
+ MPI_CC=$withval
+)
+AC_SUBST(MPI_CC)
+
+## See if MPI_CC works for the primary target
+##
+AC_MSG_CHECKING([primary target for usable MPI2-compliant C compiler and mpi.h])
+saved_CC=$CC
+saved_CFLAGS=$CFLAGS
+CC=$MPI_CC
+CFLAGS=$mflag_primary
+AC_TRY_LINK([
+#include <mpi.h>
+#include <stdio.h>
+],[
+ int r = MPI_Init(NULL,NULL);
+ r |= MPI_Type_get_contents( MPI_INT, 0,0,0, NULL,NULL,NULL );
+ return r;
+], [
+ac_have_mpi2_pri=yes
+AC_MSG_RESULT([yes, $MPI_CC])
+], [
+ac_have_mpi2_pri=no
+AC_MSG_RESULT([no])
+])
+CC=$saved_CC
+CFLAGS=$saved_CFLAGS
+AM_CONDITIONAL(BUILD_MPIWRAP_PRI, test x$ac_have_mpi2_pri = xyes)
+
+## See if MPI_CC works for the secondary target. Complication: what if
+## there is no secondary target? We need this to then fail.
+## Kludge this by making MPI_CC something which will surely fail in
+## such a case.
+##
+AC_MSG_CHECKING([secondary target for usable MPI2-compliant C compiler and mpi.h])
+saved_CC=$CC
+saved_CFLAGS=$CFLAGS
+if test x$VGCONF_PLATFORM_SEC_CAPS = x ; then
+ CC="$MPI_CC this will surely fail"
+else
+ CC=$MPI_CC
+fi
+CFLAGS=$mflag_secondary
+AC_TRY_LINK([
+#include <mpi.h>
+#include <stdio.h>
+],[
+ int r = MPI_Init(NULL,NULL);
+ r |= MPI_Type_get_contents( MPI_INT, 0,0,0, NULL,NULL,NULL );
+ return r;
+], [
+ac_have_mpi2_sec=yes
+AC_MSG_RESULT([yes, $MPI_CC])
+], [
+ac_have_mpi2_sec=no
+AC_MSG_RESULT([no])
+])
+CC=$saved_CC
+CFLAGS=$saved_CFLAGS
+AM_CONDITIONAL(BUILD_MPIWRAP_SEC, test x$ac_have_mpi2_sec = xyes)
+
+
+#----------------------------------------------------------------------------
+# Other library checks
+#----------------------------------------------------------------------------
+# There now follow some tests for Boost, and OpenMP. These
+# tests are present because Drd has some regression tests that use
+# these packages. All regression test programs all compiled only
+# for the primary target. And so it is important that the configure
+# checks that follow, use the correct -m32 or -m64 flag for the
+# primary target (called $mflag_primary). Otherwise, we can end up
+# in a situation (eg) where, on amd64-linux, the test for Boost checks
+# for usable 64-bit Boost facilities, but because we are doing a 32-bit
+# only build (meaning, the primary target is x86-linux), the build
+# of the regtest programs that use Boost fails, because they are
+# build as 32-bit (IN THIS EXAMPLE).
+#
+# Hence: ALWAYS USE $mflag_primary FOR CONFIGURE TESTS FOR FACILITIES
+# NEEDED BY THE REGRESSION TEST PROGRAMS.
+
+
+# Check whether the boost library 1.35 or later has been installed.
+# The Boost.Threads library has undergone a major rewrite in version 1.35.0.
+
+AC_MSG_CHECKING([for boost])
+
+AC_LANG(C++)
+safe_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-lboost_thread-mt $mflag_primary"
+
+AC_LINK_IFELSE(
+[
+#include <boost/thread.hpp>
+static void thread_func(void)
+{ }
+int main(int argc, char** argv)
+{
+ boost::thread t(thread_func);
+ return 0;
+}
+],
+[
+ac_have_boost_1_35=yes
+AC_SUBST([BOOST_CFLAGS], [])
+AC_SUBST([BOOST_LIBS], ["${CXXFLAGS}"])
+AC_MSG_RESULT([yes])
+], [
+ac_have_boost_1_35=no
+AC_MSG_RESULT([no])
+])
+
+CXXFLAGS=$safe_CXXFLAGS
+AC_LANG(C)
+
+AM_CONDITIONAL([HAVE_BOOST_1_35], [test x$ac_have_boost_1_35 = xyes])
+
+
+# does this compiler support -fopenmp, does it have the include file
+# <omp.h> and does it have libgomp ?
+
+AC_MSG_CHECKING([for OpenMP])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-fopenmp $mflag_primary"
+
+AC_LINK_IFELSE(
+[
+#include <omp.h>
+int main(int argc, char** argv)
+{
+ omp_set_dynamic(0);
+ return 0;
+}
+],
+[
+ac_have_openmp=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_openmp=no
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AM_CONDITIONAL([HAVE_OPENMP], [test x$ac_have_openmp = xyes])
+
+
+# does this compiler have built-in functions for atomic memory access ?
+AC_MSG_CHECKING([if gcc supports __sync_bool_compare_and_swap])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="$mflag_primary"
+
+AC_TRY_LINK(,
+[
+ int variable = 1;
+ return (__sync_bool_compare_and_swap(&variable, 1, 2)
+ && __sync_add_and_fetch(&variable, 1) ? 1 : 0)
+],
+[
+ ac_have_builtin_atomic=yes
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_BUILTIN_ATOMIC, 1, [Define to 1 if gcc supports __sync_bool_compare_and_swap() a.o.])
+],
+[
+ ac_have_builtin_atomic=no
+ AC_MSG_RESULT([no])
+])
+
+CFLAGS=$safe_CFLAGS
+
+AM_CONDITIONAL([HAVE_BUILTIN_ATOMIC], [test x$ac_have_builtin_atomic = xyes])
+
+
+#----------------------------------------------------------------------------
+# Ok. We're done checking.
+#----------------------------------------------------------------------------
+
+# Nb: VEX/Makefile is generated from Makefile.vex.in.
+AC_CONFIG_FILES([
+ Makefile
+ VEX/Makefile:Makefile.vex.in
+ valgrind.spec
+ valgrind.pc
+ glibc-2.X.supp
+ docs/Makefile
+ tests/Makefile
+ tests/vg_regtest
+ perf/Makefile
+ perf/vg_perf
+ include/Makefile
+ auxprogs/Makefile
+ mpi/Makefile
+ coregrind/Makefile
+ memcheck/Makefile
+ memcheck/tests/Makefile
+ memcheck/tests/amd64/Makefile
+ memcheck/tests/x86/Makefile
+ memcheck/tests/linux/Makefile
+ memcheck/tests/darwin/Makefile
+ memcheck/tests/amd64-linux/Makefile
+ memcheck/tests/x86-linux/Makefile
+ memcheck/tests/ppc32/Makefile
+ memcheck/tests/ppc64/Makefile
+ memcheck/perf/Makefile
+ cachegrind/Makefile
+ cachegrind/tests/Makefile
+ cachegrind/tests/x86/Makefile
+ cachegrind/cg_annotate
+ cachegrind/cg_diff
+ callgrind/Makefile
+ callgrind/callgrind_annotate
+ callgrind/callgrind_control
+ callgrind/tests/Makefile
+ helgrind/Makefile
+ helgrind/tests/Makefile
+ massif/Makefile
+ massif/tests/Makefile
+ massif/perf/Makefile
+ massif/ms_print
+ lackey/Makefile
+ lackey/tests/Makefile
+ none/Makefile
+ none/tests/Makefile
+ none/tests/amd64/Makefile
+ none/tests/ppc32/Makefile
+ none/tests/ppc64/Makefile
+ none/tests/x86/Makefile
+ none/tests/arm/Makefile
+ none/tests/linux/Makefile
+ none/tests/darwin/Makefile
+ none/tests/x86-linux/Makefile
+ exp-ptrcheck/Makefile
+ exp-ptrcheck/tests/Makefile
+ drd/Makefile
+ drd/scripts/download-and-build-splash2
+ drd/tests/Makefile
+ exp-bbv/Makefile
+ exp-bbv/tests/Makefile
+ exp-bbv/tests/x86/Makefile
+ exp-bbv/tests/x86-linux/Makefile
+ exp-bbv/tests/amd64-linux/Makefile
+ exp-bbv/tests/ppc32-linux/Makefile
+ exp-bbv/tests/arm-linux/Makefile
+ exp-dhat/Makefile
+ exp-dhat/tests/Makefile
+])
+AC_CONFIG_FILES([coregrind/link_tool_exe_linux],
+ [chmod +x coregrind/link_tool_exe_linux])
+AC_CONFIG_FILES([coregrind/link_tool_exe_darwin],
+ [chmod +x coregrind/link_tool_exe_darwin])
+AC_CONFIG_FILES([coregrind/link_tool_exe_aix5],
+ [chmod +x coregrind/link_tool_exe_aix5])
+AC_OUTPUT
+
+cat<<EOF
+
+ Maximum build arch: ${ARCH_MAX}
+ Primary build arch: ${VGCONF_ARCH_PRI}
+ Secondary build arch: ${VGCONF_ARCH_SEC}
+ Build OS: ${VGCONF_OS}
+ Primary build target: ${VGCONF_PLATFORM_PRI_CAPS}
+ Secondary build target: ${VGCONF_PLATFORM_SEC_CAPS}
+ Default supp files: ${DEFAULT_SUPP}
+
+EOF
--- /dev/null
+
+# DRD suppressions for Darwin 10.x / Mac OS X 10.6 Snow Leopard
--- /dev/null
+
+# Suppressions for Darwin 10.x / Mac OS X 10.6 Snow Leopard
+
+##----------------------------------------------------------------------##
+# Memcheck
+##----------------------------------------------------------------------##
+
+# afaict this is legit. Might be caused by setenv("VAR=")
+# where the value string is empty (not sure)
+{
+ macos-Cond-7
+ Memcheck:Cond
+ fun:__setenv
+}
+
+# From Jesse Ruderman.
+{
+ Mac OS X 10.6.4. rdar://8145289. "new[]" paired with "delete" in the DesktopServicesPriv framework.
+ Memcheck:Free
+ fun:_ZdlPv
+ fun:_ZN5TChar18RemovePtrReferenceEv
+ }
+
+# From Jesse Ruderman.
+{
+ Mac OS X 10.6.4. rdar://8145318. Uninitialized memory from HIMenuBarView::MeasureAppMenus is used in HIMenuBarView::SetAdjustTextTitleBoundsAtIndex.
+ Memcheck:Cond
+ fun:_ZN13HIMenuBarView31SetAdjustTextTitleBoundsAtIndexEih
+ fun:_ZN13HIMenuBarView15MeasureAppMenusEv
+}
+
+{
+ TFontFeatures::TFontFeatures(CGFont*) (in CoreText.framework)
+ Memcheck:Cond
+ fun:_ZN13TFontFeaturesC2EP6CGFont
+ fun:_ZNK9TBaseFont12CopyFeaturesEv
+}
--- /dev/null
+
+# DRD suppressions for Darwin 9.x / Mac OS X 10.5 Leopard
+
+#
+# Suppression patterns for dyld, the dynamic loader.
+#
+
+{
+ drd-darwin-dyld-register-func-for-add-image
+ drd:MutexErr
+ fun:pthread_mutex_unlock
+ fun:_dyld_register_func_for_add_image
+ fun:__keymgr_initializer
+ fun:libSystem_initializer
+}
+{
+ drd-darwin-dyld-register-func-for-remove-image
+ drd:MutexErr
+ fun:pthread_mutex_unlock
+ fun:_dyld_register_func_for_remove_image
+ fun:__keymgr_initializer
+ fun:libSystem_initializer
+}
+{
+ drd-darwin-dyld-GlobalLockInitialize
+ drd:MutexErr
+ fun:pthread_mutex_init
+ fun:_Z24dyldGlobalLockInitializev
+ fun:_dyld_initializer
+}
+{
+ drd-darwin-dyld-bindLazySymbol
+ drd:ConflictingAccess
+ ...
+ fun:_ZN4dyld14bindLazySymbolEPK11mach_headerPm
+ fun:stub_binding_helper_interface2
+}
+{
+ drd-darwin-dyld-addImage
+ drd:ConflictingAccess
+ fun:_ZN4dyld8addImageEP11ImageLoader
+}
+{
+ dyld-ImageLoader::link
+ drd:ConflictingAccess
+ ...
+ fun:_ZN4dyld18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE
+ fun:_ZN11ImageLoader4linkERKNS_11LinkContextEbbRKNS_10RPathChainE
+ fun:_ZN4dyld4linkEP11ImageLoaderbRKNS0_10RPathChainE
+}
+{
+ drd-darwin-dyld-ImageLoaderMachO::resolveUndefined
+ drd:ConflictingAccess
+ ...
+ fun:_ZN16ImageLoaderMachO16resolveUndefinedERKN11ImageLoader11LinkContextEPK11macho_nlistbPPKS0_
+}
+{
+ drd-darwin-dyld-ImageLoaderMachO::findExportedSymbol
+ drd:ConflictingAccess
+ fun:_ZNK16ImageLoaderMachO18findExportedSymbolEPKcPKvbPPK11ImageLoader
+ fun:_ZNK11ImageLoader41findExportedSymbolInDependentImagesExceptEPKcPPKS_RS4_S4_S4_
+ fun:_ZNK11ImageLoader42findExportedSymbolInImageOrDependentImagesEPKcRKNS_11LinkContextEPPKS_
+ fun:dlsym
+}
+
+
+#
+# Suppression patterns for libc, Darwin's C library.
+#
+
+{
+ drd-darwin-libc-cerror
+ drd:ConflictingAccess
+ ...
+ fun:cerror
+}
+{
+ drd-darwin-libc-rand
+ drd:ConflictingAccess
+ fun:do_rand
+}
+{
+ drd-darwin-libc-vfprintf-1
+ drd:ConflictingAccess
+ fun:vfprintf_l
+}
+{
+ drd-darwin-libc-vfprintf-2
+ drd:ConflictingAccess
+ fun:__vfprintf
+}
+{
+ drd-darwin-libc-localeconv
+ drd:ConflictingAccess
+ fun:localeconv_l
+}
+{
+ drd-darwin-libc-fwrite
+ drd:ConflictingAccess
+ ...
+ fun:fwrite$UNIX2003
+}
+{
+ drd-darwin-cxa-guard-acquire
+ drd:ConflictingAccess
+ obj:*
+ fun:__cxa_current_exception_type
+ fun:__cxa_guard_acquire
+}
+{
+ drd-darwin-cxa-guard-release
+ drd:ConflictingAccess
+ fun:__cxa_guard_release
+}
+{
+ drd-darwin-cxa-finalize
+ drd:MutexErr
+ fun:pthread_mutex_destroy
+ fun:__tcf_115
+ fun:__cxa_finalize
+ fun:exit
+}
+{
+ drd-darwin-atexit-register
+ drd:ConflictingAccess
+ fun:atexit_register
+}
+{
+ drd-darwin-opendir
+ drd:ConflictingAccess
+ fun:telldir$UNIX2003
+ fun:__opendir2$UNIX2003
+ fun:opendir$UNIX2003
+}
+{
+ drd-darwin-readdir
+ drd:ConflictingAccess
+ fun:readdir
+}
+{
+ drd-darwin-closedir
+ drd:ConflictingAccess
+ fun:closedir$UNIX2003
+}
+{
+ drd:darwin-ptrace
+ drd:ConflictingAccess
+ fun:ptrace
+}
+
+
+#
+# Suppression patterns for libpthread, Darwin's POSIX threads implementation.
+#
+
+{
+ drd-darwin-pthread-create-1
+ drd:ConflictingAccess
+ obj:*
+ fun:thread_start
+}
+{
+ drd-darwin-pthread-create-2
+ drd:ConflictingAccess
+ ...
+ fun:pthread_create*
+}
+{
+ drd-darwin-pthread-join-1
+ drd:ConflictingAccess
+ ...
+ fun:pthread_join$UNIX2003
+}
+{
+ drd-darwin-pthread-exit
+ drd:ConflictingAccess
+ ...
+ fun:_pthread_exit
+}
+{
+ drd-darwin-pthread-find-thread
+ drd:ConflictingAccess
+ fun:_pthread_find_thread
+}
+{
+ drd-darwin-pthread-spin-unlock
+ drd:ConflictingAccess
+ fun:spin_unlock
+}
+{
+ drd-darwin-pthread-testcancel
+ drd:ConflictingAccess
+ fun:_pthread_testcancel
+}
+{
+ drd-darwin-pthread-detach
+ drd:ConflictingAccess
+ ...
+ fun:pthread_detach
+}
+{
+ drd-darwin-pthread-detach
+ drd:CondRaceErr
+ ...
+ fun:pthread_detach
+}
+{
+ drd-darwin-pthread-kill
+ drd:ConflictingAccess
+ ...
+ fun:pthread_kill
+}
+{
+ drd-darwin-pthread-free-pthread-onstack
+ drd:ConflictingAccess
+ fun:mig_dealloc_reply_port
+ fun:_pthread_free_pthread_onstack
+}
+{
+ drd-darwin-pthread-mach-thread-np
+ drd:ConflictingAccess
+ ...
+ fun:pthread_mach_thread_np
+}
+{
+ drd-darwin-pthread-key-create
+ drd:ConflictingAccess
+ fun:pthread_key_create
+}
+
+
+#
+# Suppression patterns for libobjc.
+#
+
+# It looks like the implementation of objc_msgSend uses another means than the
+# POSIX threads library for locking. More information about messaging and
+# objc_msgSend can be found here:
+# http://devworld.apple.com/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtHowMessagingWorks.html
+#
+
+{
+ drd-darwin-objc-msgSend
+ drd:ConflictingAccess
+ ...
+ fun:objc_msgSend
+}
+{
+ drd-darwin-objc-msgSend
+ drd:ConflictingAccess
+ ...
+ fun:objc_sync_enter
+}
+
+
+#
+# Suppression patterns for CoreFoundation.framework.
+#
+
+# Suppressions for NSObject methods. For more information about the NSObject
+# class, see also
+# http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html
+{
+ drd-darwin-NSObject-release
+ drd:ConflictingAccess
+ ...
+ fun:-[NSObject release]
+}
+{
+ drd-darwin-NSObject-autorelease-1
+ drd:ConflictingAccess
+ ...
+ fun:-[NSObject(NSObject) autorelease]
+}
+{
+ drd-darwin-NSObject-autorelease-2
+ drd:ConflictingAccess
+ fun:__NSAutoreleaseObject
+}
+{
+ drd-darwin-NSObject-NSDeallocateObject
+ drd:ConflictingAccess
+ fun:_internal_object_dispose
+ fun:NSDeallocateObject
+}
+{
+ drd-darwin-NSObject-retain
+ drd:ConflictingAccess
+ ...
+ fun:-[NSObject retain]
+}
+{
+ drd-darwin-NSObject-retainCount
+ drd:ConflictingAccess
+ ...
+ fun:-[NSObject retainCount]
+}
+{
+ drd-darwin-NSObject-NSDelayedPerforming-1
+ drd:ConflictingAccess
+ ...
+ fun:+[NSObject(NSDelayedPerforming) cancelPreviousPerformRequestsWithTarget:selector:object:]
+}
+{
+ drd-darwin-NSObject-NSDelayedPerforming-2
+ drd:ConflictingAccess
+ ...
+ fun:-[NSObject(NSDelayedPerforming) performSelector:withObject:afterDelay:]
+}
+{
+ drd-darwin-NSObject-NSDelayedPerforming-3
+ drd:ConflictingAccess
+ ...
+ fun:-[NSObject(NSDelayedPerforming) performSelector:withObject:afterDelay:inModes:]
+}
+{
+ drd-darwin-NSObject-NSDelayedPerforming-4
+ drd:ConflictingAccess
+ ...
+ fun:-[NSObject(NSThreadPerformAdditions) performSelector:onThread:withObject:waitUntilDone:modes:]
+}
+{
+ drd-darwin-NSObject-NSDelayedPerforming-5
+ drd:ConflictingAccess
+ ...
+ fun:-[NSObject(NSThreadPerformAdditions) performSelectorOnMainThread:withObject:waitUntilDone:]
+}
+
+# Suppressions for methods of the NSThread class.
+{
+ drd-NSThread-nq
+ drd:ConflictingAccess
+ ...
+ fun:-[NSThread _nq:]
+}
+
+# Suppressions for methods of the NSLock class. See also
+# http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLock_Class/Reference/Reference.html
+{
+ drd-darwin-NSLock-lock
+ drd:ConflictingAccess
+ fun:-[NSLock lock]
+}
+{
+ drd-darwin-NSLock-unlock
+ drd:ConflictingAccess
+ fun:-[NSLock unlock]
+}
+# Suppressions for NSCondition methods.
+{
+ drd-darwin-NSConditionLock-lock
+ drd:ConflictingAccess
+ fun:-[NSCondition lock]
+}
+# Suppressions for NSConditionLock methods.
+{
+ drd-darwin-NSConditionLock-lockWhenCondition:beforeDate:
+ drd:ConflictingAccess
+ fun:-[NSConditionLock lockWhenCondition:beforeDate:]
+}
+
+
+# NSExtraRefCount returns the specified object's reference count, and
+# NSDecrementExtraRefCountWasZero decrements the specified object's reference
+# count.
+# See also http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html
+{
+ drd-darwin-NSExtraRefCount
+ drd:ConflictingAccess
+ ...
+ fun:NSExtraRefCount
+}
+{
+ drd-darwin-NSDecrementExtraRefCountWasZero
+ drd:ConflictingAccess
+ ...
+ fun:NSDecrementExtraRefCountWasZero
+}
+# For more information about key-value observing, see also the NSKeyValueObserving Protocol Reference:
+# http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html
+{
+ drd-darwin-NSKVONotify
+ drd:ConflictingAccess
+ ...
+ fun:NSKVONotify
+}
+{
+ drd-darwin-NSKVONotifyingEnableForInfoAndKey
+ drd:ConflictingAccess
+ ...
+ fun:_NSKVONotifyingEnableForInfoAndKey
+}
+# From the NSRunLoop class reference:
+# Warning: The NSRunLoop class is generally not considered to be thread-safe
+# and its methods should only be called within the context of the current
+# thread. You should never try to call the methods of an NSRunLoop object
+# running in a different thread, as doing so might cause unexpected results.
+# See also the NSRunLoop Class Reference:
+# http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/Reference/Reference.html
+# {
+# drd-darwin-CFRunLoop*
+# drd:ConflictingAccess
+# ...
+# fun:CFRunLoop*
+# }
+# See also the CFBag reference:
+# http://developer.apple.com/documentation/CoreFoundation/Reference/CFBagRef/Reference/reference.html
+# {
+# drd-darwin-CFBag*
+# drd:ConflictingAccess
+# fun:CFBag*
+# }
+
+# Suppression patterns for the memory allocation functions in WTF.
+{
+ drd-WTF::fastCalloc
+ drd:ConflictingAccess
+ ...
+ fun:_ZN3WTF10fastCallocEmm
+}
+{
+ drd-WTF::fastMalloc
+ drd:ConflictingAccess
+ ...
+ fun:_ZN3WTF10fastMallocEm
+}
+{
+ drd-WTF::fastFree
+ drd:ConflictingAccess
+ ...
+ fun:_ZN3WTF8fastFreeEPv
+}
+
+# Suppression patterns for the string manipulation functions in WebCore.
+{
+ drd-WebCore::StringImpl::init
+ drd:ConflictingAccess
+ ...
+ fun:_ZN7WebCore10StringImpl4initEPKcj
+}
+{
+ drd-WebCore::StringImpl::append
+ drd:ConflictingAccess
+ ...
+ fun:_ZN7WebCore10StringImpl6appendEPKtj
+}
+{
+ drd-WebCore::CString::init
+ drd:ConflictingAccess
+ ...
+ fun:_ZN7WebCore7CString4initEPKcj
+}
+
+# Suppression patterns for the text encoding functions in WebCore.
+{
+ drd-WebCore::WebCore::TextCodec::~TextCodec()
+ drd:ConflictingAccess
+ fun:_ZN7WebCore9TextCodecD2Ev
+}
+{
+ drd-WebCore::TextCodecICU::TextCodecICU
+ drd:ConflictingAccess
+ fun:_ZN7WebCore12TextCodecICUC2ERKNS_12TextEncodingE
+}
+{
+ drd-WebCore::TextCodecICU::~TextCodecICU
+ drd:ConflictingAccess
+ fun:_ZN7WebCore12TextCodecICUD0Ev
+}
--- /dev/null
+
+# Suppressions for Darwin 9.x / Mac OS X 10.5 Leopard
+
+##----------------------------------------------------------------------##
+# Memcheck
+##----------------------------------------------------------------------##
+
+{
+ mach_msg_trap-1
+ Memcheck:Param
+ mach_msg(msg.msgh_remote_port)
+ fun:mach_msg_trap
+ obj:/System/Library/Frameworks/CoreFoundation*
+ obj:/System/Library/Frameworks/ApplicationServices*
+}
+
+{
+ mach_msg_trap-2
+ Memcheck:Param
+ mach_msg(msg.msgh_remote_port)
+ fun:mach_msg_trap
+ obj:/System/Library/Frameworks/CoreFoundation*
+ obj:/System/Library/Frameworks/CoreServices*
+}
+
+{
+ mach_msg_trap-3
+ Memcheck:Param
+ mach_msg(msg.msgh_remote_port)
+ fun:mach_msg_trap
+ obj:/System/Library/Frameworks/CoreFoundation*
+ obj:/System/Library/Frameworks/Carbon*
+}
+
+{
+ mach_msg_trap-4
+ Memcheck:Param
+ mach_msg(msg.msgh_remote_port)
+ fun:mach_msg_trap
+ obj:/System/Library/Frameworks/CoreFoundation*
+ obj:/System/Library/Frameworks/CoreFoundation*
+}
+
+{
+ mach_msg_trap-5
+ Memcheck:Param
+ mach_msg(msg.msgh_remote_port)
+ fun:mach_msg_trap
+ obj:/System/Library/Frameworks/CoreFoundation*
+ obj:/System/Library/Frameworks/AppKit*
+}
+
+{
+ macos-Cond-1
+ Memcheck:Cond
+ fun:GetVariationInfoFromName
+ obj:/System/Library/Frameworks/ApplicationServices*
+ obj:/System/Library/Frameworks/ApplicationServices*
+}
+
+{
+ macos-Cond-2
+ Memcheck:Cond
+ fun:*PMMutex*Lock*
+ obj:/System/Library/Frameworks/ApplicationServices*
+ obj:/System/Library/Frameworks/ApplicationServices*
+}
+
+{
+ macos-Cond-3
+ Memcheck:Cond
+ fun:sseCGSBlendXXXX8888
+ obj:/System/Library/Frameworks/ApplicationServices*
+ obj:/System/Library/Frameworks/ApplicationServices*
+}
+
+{
+ macos-Cond-4
+ Memcheck:Cond
+ fun:*CASettingsStorage*RefreshSettings*
+ obj:/System/Library/Frameworks/CoreAudio*
+ obj:/System/Library/Frameworks/CoreAudio*
+}
+
+{
+ macos-Cond-5
+ Memcheck:Cond
+ fun:gle*
+ obj:/System/Library/Frameworks/OpenGL*
+ obj:/System/Library/Frameworks/OpenGL*
+}
+
+{
+ macos-Cond-6
+ Memcheck:Cond
+ fun:pthread_rwlock_init$UNIX2003
+ fun:main
+}
+
+# afaict this is legit. Might be caused by setenv("VAR=")
+# where the value string is empty (not sure)
+{
+ macos-Cond-7
+ Memcheck:Cond
+ fun:__setenv
+ fun:putenv*
+}
+
+{
+ macos-futimes-1
+ Memcheck:Param
+ futimes(tvp[1])
+ fun:futimes
+ obj:/usr/lib/libSystem*
+ obj:/usr/lib/libSystem*
+}
+
+{
+ macos-vsyslog-hole
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:sendto$NOCANCEL$UNIX2003
+ fun:vsyslog
+}
+
+# Still-reachable memory.
+
+# I chopped this one off at libSystem_initializer, there were more frames.
+{
+ darwin-still-reachable-1
+ Memcheck:Leak
+ fun:calloc
+ fun:dwarf2_unwind_dyld_add_image_hook
+ fun:_ZN4dyld19registerAddCallbackEPFvPK11mach_headerlE
+ fun:_dyld_register_func_for_add_image
+ fun:__keymgr_initializer
+ fun:libSystem_initializer
+}
+
+# I chopped this one off at libSystem_initializer, there were more frames.
+{
+ darwin-still-reachable-2
+ Memcheck:Leak
+ fun:malloc
+ fun:get_or_create_key_element
+ fun:_keymgr_get_and_lock_processwide_ptr_2
+ fun:dwarf2_unwind_dyld_add_image_hook
+ fun:_ZN4dyld19registerAddCallbackEPFvPK11mach_headerlE
+ fun:_dyld_register_func_for_add_image
+ fun:__keymgr_initializer
+ fun:libSystem_initializer
+}
+
+{
+ darwin-still-reachable-3
+ Memcheck:Leak
+ fun:malloc
+ fun:__smakebuf
+ fun:__swsetup
+ fun:__sfvwrite
+ fun:puts
+}
+
+# Genuine leaks.
+# See https://bugs.kde.org/show_bug.cgi?id=188572 about this; it's
+# unavoidable due to BSD setenv() semantics.
+{
+ macos-__setenv-leak-see-our-bug-188572
+ Memcheck:Leak
+ fun:malloc_zone_malloc
+ fun:__setenv
+ fun:setenv$UNIX2003
+}
+{
+ macos-localeconv-leak
+ Memcheck:Leak
+ fun:malloc
+ fun:localeconv_l
+ fun:__vfprintf
+ fun:vsnprintf
+}
+
+{
+ macos-TFontFeatures::TFontFeatures(unsigned long)-uninitialised-stack-val
+ Memcheck:Cond
+ fun:_ZN13TFontFeaturesC2Em
+ fun:_ZNK9TBaseFont12CopyFeaturesEv
+}
+
+# Conditional jump or move depends on uninitialised value(s)
+# at 0x4E5CD59: _DPSNextEvent (in /System/Library/Frameworks
+# /AppKit.framework/Versions/C/AppKit)
+# by 0x4E5BF87: -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
+# (in /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit)
+# by 0x4E54F9E: -[NSApplication run] (in /System/Library/Frameworks
+# /AppKit.framework/Versions/C/AppKit)
+# Uninitialised value was created by a stack allocation
+# at 0x4E5C450: _DPSNextEvent (in /System/Library/Frameworks
+# /AppKit.framework/Versions/C/AppKit)
+{
+ macos-_DPSNextEvent-stack-allocated-uninit
+ Memcheck:Cond
+ fun:_DPSNextEvent
+}
+
+
+##----------------------------------------------------------------------##
+# Helgrind
+##----------------------------------------------------------------------##
+
+# These ones were necessary to give no errors on a tiny non-threaded
+# program. I don't know if they're real problems or false positives (njn).
+
+# keymgr seems to deliberately do some bogus actions, and if they are bogus,
+# it passes the error codes back to the caller.
+{
+ __keymgr_initializer lock failed
+ Helgrind:PthAPIerror
+ fun:pthread_mutex_lock
+ fun:_dyld_register_func_for_*_image
+ fun:__keymgr_initializer
+ fun:libSystem_initializer
+}
+{
+ __keymgr_initializer unlock failed
+ Helgrind:PthAPIerror
+ fun:pthread_mutex_unlock
+ fun:_dyld_register_func_for_*_image
+ fun:__keymgr_initializer
+ fun:libSystem_initializer
+}
+{
+ __keymgr_initializer bogus unlock
+ Helgrind:UnlockBogus
+ fun:pthread_mutex_unlock
+ fun:_dyld_register_func_for_*_image
+ fun:__keymgr_initializer
+ fun:libSystem_initializer
+}
+
+# These ones were necessary to give no errors on a tiny threaded program.
+# I don't know if they're real problems or false positives (njn).
+
+#{
+# helgrind-darwinlibc-nuke-everything-in-dyld
+# Helgrind:Race
+# obj:/usr/lib/dyld
+#}
+
+{
+ helgrind-darwinlibc-nuke-everything-in-libSystem.B.dylib
+ Helgrind:Race
+ obj:/usr/lib/libSystem.B.dylib
+}
+
+# This would be better as "fun:\?\?\?" but string matching doesn't seem to
+# allow escaping meta-chars.
+#
+# This is very bad .. not only will it hide races in any
+# un-identified piece of code, the ??? also matches any 3-char
+# function name.
+{
+ helgrind-darwinlibc-nuke-everything-in-???-(unknown-code)
+ Helgrind:Race
+ fun:???
+}
+
+{
+ helgrind-darwinlibc--mythread_wrapper-*thread*start*
+ Helgrind:Race
+ fun:mythread_wrapper
+ fun:*thread*start*
+}
+
+{
+ helgrind-darwinlibc--pthread_create_WRK-pthread_create
+ Helgrind:Race
+ fun:pthread_create_WRK
+ fun:pthread_create
+}
+
+
+# Thread #9: Bug in libpthread: recursive write lock granted on
+# mutex/wrlock which does not support recursion
+# at 0x18696: pthread_cond_wait* (hg_intercepts.c:655)
+# by 0x2300B8: pthread_rwlock_wrlock$UNIX2003 (in /usr/lib/libSystem.B.dylib)
+# by 0x18F41: pthread_rwlock_wrlock* (hg_intercepts.c:1177)
+#
+# no idea what this is about
+#
+{
+ helgrind-darwin9--pthread-rwlock-kludgery
+ Helgrind:Misc
+ fun:pthread_cond_wait*
+ fun:pthread_rwlock_*lock*
+ fun:pthread_rwlock_*lock*
+}
--- /dev/null
+{
+ lib-X11-used-old-pointer-after-realloc-1
+ exp-ptrcheck:Heap
+ fun:strlen
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+{
+ lib-X11-used-old-pointer-after-realloc-2
+ exp-ptrcheck:Heap
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+
+{
+ ld-2.X-invalid-Add32/64-who-knows
+ exp-ptrcheck:Arith
+ obj:/*lib*/ld-2.*so*
+ obj:/*lib*/ld-2.*so*
+}
+
+{
+ ld-2.X possibly applying relocations
+ exp-ptrcheck:SorG
+ obj:/*lib*/ld-2.*so*
+ obj:/*lib*/ld-2.*so*
+}
+
+# I'm pretty sure this is a false positive caused by the sg_ stuff
+{
+ glibc realpath false positive
+ exp-ptrcheck:SorG
+ fun:realpath
+ fun:*
+}
+
+{
+ If I had to guess, inlined or nameless strlen etc in ld.so
+ exp-ptrcheck:Heap
+ obj:/*lib*/ld-2.*so*
+ obj:/*lib*/ld-2.*so*
+}
+
+{
+ I think this is glibc's ultra optimised getenv doing 2 byte reads
+ exp-ptrcheck:SorG
+ fun:getenv
+}
+
+{
+ Occurs on Fedora 7--9?
+ exp-ptrcheck:Heap
+ fun:_dl_fini
+ fun:exit
+ fun:(below main)
+}
+
+
+# Invalid read of size 16
+# at 0x5643A5C: ??? (strcpy.S:94)
+# by 0x50C6A99: XtResolvePathname (in /usr/lib/libXt.so.6.0.0)
+# by 0x50C3856: XtScreenDatabase (in /usr/lib/libXt.so.6.0.0)
+# by 0x50C4386: _XtDisplayInitialize (in /usr/lib/libXt.so.6.0.0)
+{
+ Ubuntu 10.04 x86_64, SSEised strcpy, can't intercept
+ exp-ptrcheck:Heap
+ obj:/*lib*/libc-2.*so*
+ obj:/*lib*/libX*so*
+}
+{
+ Ubuntu 10.04 x86_64, SSEised strcpy, can't intercept - 2
+ exp-ptrcheck:Heap
+ obj:/*lib*/libc-2.*so*
+ obj:/*lib*/libICE*so*
+}
+{
+ Ubuntu 10.04 x86_64, SSEised strcpy, can't intercept - 3
+ exp-ptrcheck:Heap
+ obj:/*lib*/libc-2.*so*
+ obj:/*lib*/libglib*so*
+}
+{
+ Ubuntu 10.04 x86_64, SSEised strcpy, can't intercept - 4
+ exp-ptrcheck:Heap
+ obj:/*lib*/libc-2.*so*
+ obj:/*lib*/libfontconfig*so*
+}
--- /dev/null
+
+## Helgrind really doesn't support LinuxThreads-based threading
+## (which is absolutely ancient by now). But just in case anyone
+## is nuts enough to try it, here are some suppressions.
+
+{
+ helgrind-glibc22-LinuxThreads-1
+ Helgrind:Race
+ obj:/lib*/libpthread-0.10.so*
+}
+{
+ helgrind-glibc22-LinuxThreads-2
+ Helgrind:Race
+ obj:/lib*/ld-2.2.*so*
+ obj:/lib*/ld-2.2.*so*
+}
+{
+ helgrind-glibc22-LinuxThreads-3
+ Helgrind:Race
+ obj:/lib*/libc-2.2.*so*
+ obj:/lib*/libc-2.2.*so*
+}
+{
+ helgrind-glibc22-LinuxThreads-4
+ Helgrind:Race
+ obj:/lib*/ld-2.2.*so*
+ obj:/lib*/libc-2.2.*so*
+}
+{
+ helgrind-glibc22-LinuxThreads-5
+ Helgrind:Race
+ obj:/lib*/libc-2.2.*so*
+ fun:pthread_*
+}
+{
+ helgrind-glibc22-LinuxThreads-6
+ Helgrind:Race
+ fun:pthread_*
+ obj:/lib*/libc-2.2.*so*
+}
+{
+ helgrind-glibc22-LinuxThreads-7
+ Helgrind:Race
+ fun:mythread_wrapper
+ fun:pthread_*
+}
+{
+ helgrind-glibc22-LinuxThreads-8
+ Helgrind:Misc
+ fun:pthread_mutex_lock
+ fun:_IO_*
+}
+{
+ helgrind-glibc22-LinuxThreads-9
+ Helgrind:UnlockForeign
+ fun:pthread_mutex_unlock
+ fun:_IO_*
+}
+{
+ helgrind-glibc22-LinuxThreads-10
+ Helgrind:Misc
+ fun:_Exit
+ obj:/lib*/libpthread-0.10.so*
+}
--- /dev/null
+
+##----------------------------------------------------------------------##
+
+# Errors to suppress by default with glibc 2.2.4 / 2.2.5
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+#-------- For SuSE 8.2 (gcc 3.3, glibc 2.3.2)
+{
+ __GI___stpcpy/*
+ Memcheck:Cond
+ fun:__GI___stpcpy
+ fun:*
+}
+{
+ strlen/__GI__dl_open/dlopen_doit
+ Memcheck:Cond
+ fun:strlen
+ fun:__GI__dl_open
+ fun:dlopen_doit
+}
+{
+ strlen/_dl_signal_cerror/_dl_lookup_symbol_internal/do_dlsym
+ Memcheck:Cond
+ fun:_dl_signal_cerror
+ fun:_dl_lookup_symbol_internal
+ fun:do_dlsym
+}
+
+
+#-------- For R H 8.0
+{
+ elf_dynamic_do_rel.7/_dl_relocate_object_internal/dl_open_worker(Cond)
+ Memcheck:Cond
+ fun:elf_dynamic_do_rel.7
+ fun:_dl_relocate_object_internal
+ fun:dl_open_worker
+}
+
+
+#-------- For R H 7.3 on i686
+{
+ _dl_relocate_object*/*libc-2.2.?.so/_dl_catch_error*(Cond)
+ Memcheck:Cond
+ fun:_dl_relocate_object*
+ obj:*libc-2.2.?.so
+ fun:_dl_catch_error*
+}
+{
+ _dl_relocate_object_internal
+ Memcheck:Cond
+ fun:_dl_relocate_object_internal
+}
+{
+ index/*-2.2.5.so/*-2.2.5.so
+ Memcheck:Cond
+ fun:index
+ obj:*-2.2.5.so
+ obj:*-2.2.5.so
+}
+{
+ Red Hat 7.3 #4
+ Memcheck:Cond
+ fun:strlen
+ fun:dl_main
+ fun:_dl_sysdep_start
+}
+
+#-------- SuSE 8.1 stuff (gcc-3.2, glibc-2.2.5 + SuSE's hacks)
+{
+ __stpcpy/*
+ Memcheck:Cond
+ fun:__stpcpy
+ fun:*
+}
+{
+ strlen/decompose_rpath/_dl_map_object
+ Memcheck:Cond
+ fun:strlen
+ fun:decompose_rpath
+ fun:_dl_map_object
+}
+{
+ strlen/_dl_sym/dlsym_doit
+ Memcheck:Cond
+ fun:strlen
+ fun:_dl_sym
+ fun:dlsym_doit
+}
+{
+ trecurse/__gconv_release_shlib(Addr4)
+ Memcheck:Addr4
+ fun:trecurse
+ fun:__gconv_release_shlib
+}
+{
+ do_release_shlib/trecurse(Addr4)
+ Memcheck:Addr4
+ fun:do_release_shlib
+ fun:trecurse
+}
+
+#-------- R H Limbo (glibc-2.2.90) stuff
+{
+ elf_dynamic_do_rela.8/_dl_relocate_object_internal
+ Memcheck:Cond
+ fun:elf_dynamic_do_rela.8
+ fun:_dl_relocate_object_internal
+}
+
+{
+ __strnlen/_nl_make_l10nflist(Cond)
+ Memcheck:Cond
+ fun:__strnlen
+ fun:_nl_make_l10nflist
+}
+
+{
+ __strnlen/*vfprintf*
+ Memcheck:Cond
+ fun:__strnlen
+ fun:*vfprintf*
+}
+
+{
+ libXaw.so.7.0(Cond)
+ Memcheck:Cond
+ obj:*libXaw.so.7.0
+}
+
+#-------- Suppress errors appearing as a result of calling
+#-------- __libc_freeres()
+
+{
+ __twalk/*(Addr4)
+ Memcheck:Addr4
+ fun:__twalk
+}
+
+{
+ do_release_shlib/__twalk(Addr4)
+ Memcheck:Addr4
+ fun:do_release_shlib
+ fun:__twalk
+}
+
+{
+ __libc_freeres/free_mem/free(Free)
+ Memcheck:Free
+ fun:free
+ fun:free_mem
+ fun:__libc_freeres
+}
+
+# even more glibc suppressions ?
+{
+ libc-2.2.4.so/libc-2.2.4.so/libc-2.2.4.so(Cond)
+ Memcheck:Cond
+ obj:*libc-2.2.?.so
+ obj:*libc-2.2.?.so
+ obj:*libc-2.2.?.so
+}
+{
+ libc-2.2.4.so/libc-2.2.4.so/libc-2.2.4.so(Value4)
+ Memcheck:Value4
+ obj:*libc-2.2.?.so
+ obj:*libc-2.2.?.so
+ obj:*libc-2.2.?.so
+}
+
+##### glibc 2.2.5 stuff perhaps?
+##### suppressions for coolo
+{
+ strchr/dl_open_worker(Cond)
+ Memcheck:Cond
+ fun:strchr
+ fun:dl_open_worker
+}
+{
+ __rawmemchr(Cond)
+ Memcheck:Cond
+ fun:__rawmemchr
+}
+{
+ _IO_vfprintf/__strnlen(Cond)
+ Memcheck:Cond
+ fun:__strnlen
+ fun:_IO_vfprintf
+}
+{
+ __strchrnul/gethostbyname*(Cond)
+ Memcheck:Cond
+ fun:__strchrnul
+ fun:gethostbyname*
+}
+
+
+##----
+{
+ strlen/*dl_map_object*(Cond)
+ Memcheck:Cond
+ fun:strlen
+ fun:*dl_map_object*
+}
+
+{
+ strlen/*dl_open_worker*(Cond)
+ Memcheck:Cond
+ fun:strlen
+ fun:*dl_open_worker*
+}
+
+{
+ *rawmemchr*/*nss*(Cond)
+ Memcheck:Cond
+ fun:*rawmemchr*
+ fun:*nss*
+}
+
+{
+ *strchrnul*/*nss*(Cond)
+ Memcheck:Cond
+ fun:*strchrnul*
+ fun:*nss*
+}
+
+# gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)
+# on Red Hat 7.2 (x86) miscompiles __mpn_construct_double in
+# __mpn_construct_double (../sysdeps/ieee754/dbl-64/mpn2dbl.c:45)
+# (glibc-2.2.4) to read and write below %esp. Hence the following
+# two:
+{
+ __mpn_construct_double/*(Addr4)
+ Memcheck:Addr4
+ fun:__mpn_construct_double
+ fun:*
+}
+{
+ __mpn_construct_double/*(Addr8)
+ Memcheck:Addr8
+ fun:__mpn_construct_double
+ fun:*
+}
+
+# More of the same (gcc bug, I'm pretty sure)
+{
+ __fabs/*(Addr4)
+ Memcheck:Addr4
+ fun:__fabs
+ fun:*
+}
+{
+ __fabs/*(Addr8)
+ Memcheck:Addr8
+ fun:__fabs
+ fun:*
+}
+
+
+# Not sure what this is about ... but anyway
+{
+ pthread_sighandler/*(Addr4)
+ Memcheck:Addr4
+ fun:pthread_sighandler
+ fun:*
+}
+
+
+# More glibc stuff, AFAICS
+
+{
+ __strnlen/__argz_stringify/_nl_make_l10nflist(Cond)
+ Memcheck:Cond
+ fun:__strnlen
+ fun:__argz_stringify
+ fun:_nl_make_l10nflist
+}
+
+#--------------
+{
+ _dl_relocate_object*/dl_open_worker/_dl_catch_error*(Cond)
+ Memcheck:Cond
+ fun:_dl_relocate_object*
+ fun:dl_open_worker
+ fun:_dl_catch_error*
+}
+{
+ _dl_relocate_object/libc-2.2.4.so/_dl_catch_error(Cond)
+ Memcheck:Cond
+ fun:_dl_relocate_object
+ obj:*libc-2.2.?.so
+ fun:_dl_catch_error
+}
+{
+ _dl_relocate_object/dl_main(Cond)
+ Memcheck:Cond
+ fun:_dl_relocate_object
+ fun:dl_main
+}
+{
+ _dl_relocate_object_internal/dl_main(Cond)
+ Memcheck:Cond
+ fun:_dl_relocate_object_internal
+ fun:dl_main
+}
+
+{
+ strrchr/_dl_map_object_from_fd/_dl_map_object(Cond)
+ Memcheck:Cond
+ fun:strrchr
+ fun:_dl_map_object_from_fd
+ fun:_dl_map_object
+}
+
+{
+ _dl_start/ld-2.2.4.so(Cond)
+ Memcheck:Cond
+ fun:_dl_start
+ obj:/lib/ld-2.2.4.so
+}
+
+#-------- glibc 2.2.5/ Debian 3.0
+{
+ _dl_start(Cond)
+ Memcheck:Cond
+ fun:_dl_start
+}
+
+{
+ _dl_start(Cond)
+ Memcheck:Cond
+ fun:_dl_relocate_object
+}
+
+#-------------------
+{
+ socketcall.connect(serv_addr)/connect/*
+ Memcheck:Param
+ socketcall.connect(serv_addr)
+ fun:connect
+ fun:*
+}
+{
+ socketcall.connect(serv_addr)/libc-2.2.4.so/libc-2.2.4.so
+ Memcheck:Param
+ socketcall.connect(serv_addr)
+ obj:*libc-2.2.?.so
+ obj:*libc-2.2.?.so
+}
+
+#----------------------
+{
+ write(buf)/write/libX11.so.6.2/libX11.so.6.2(Param)
+ Memcheck:Param
+ write(buf)
+ fun:write
+ obj:/usr/X11R6/lib/libX11.so.6.2
+ obj:/usr/X11R6/lib/libX11.so.6.2
+}
+{
+ write(buf)/libc-2.2.4.so/libX11.so.6.2/libX11.so.6.2(Param)
+ Memcheck:Param
+ write(buf)
+ obj:*libc-2.2.?.so
+ obj:/usr/X11R6/lib/libX11.so.6.2
+ obj:/usr/X11R6/lib/libX11.so.6.2
+}
+
+#{
+# llseek(result)/lseek64/_IO_file_seek(Param)
+# Param
+# llseek(result)
+# fun:lseek64
+# fun:_IO_file_seek
+#}
+
+{
+ writev(vector[...])/__writev/libX11.so.6.2/libX11.so.6.2
+ Memcheck:Param
+ writev(vector[...])
+ fun:__writev
+ obj:/usr/X11R6/lib/libX11.so.6.2
+ obj:/usr/X11R6/lib/libX11.so.6.2
+}
+
+#----------------
+{
+ __rawmemchr/libXt.so.6.0/libXt.so.6.0
+ Memcheck:Cond
+ fun:__rawmemchr
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+{
+ libc-2.2.4.so/libXt.so.6.0/libXt.so.6.0
+ Memcheck:Cond
+ obj:*libc-2.2.?.so
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+## Bug in PRE(sys_clone), really. Some args are not used.
+{
+ LinuxThread clone use (child_tidptr)
+ Memcheck:Param
+ clone(child_tidptr)
+ fun:clone
+ fun:__pthread_initialize_manager
+ fun:pthread_create@@GLIBC_2.2.5
+}
+
+## LinuxThreads manager writes messages containing undefined bytes
+{
+ LinuxThreads: write/pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:pthread_create@@GLIBC_2.1
+}
+{
+ LinuxThreads: write/pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pthread_create@@GLIBC_2.1
+}
+{
+ LinuxThreads: write/pthread_onexit_process
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pthread_onexit_process
+ fun:exit
+}
+{
+ LinuxThreads: write/pthread_join
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pthread_join
+}
+{
+ LinuxThreads: write/pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pthread_create@@GLIBC_2.2.5
+}
+{
+ LinuxThreads: write/__pthread_initialize_manager/pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:__pthread_initialize_manager
+ fun:pthread_create@@GLIBC_2.2.5
+}
+
+## LinuxThreads leaks the stack and TLS data for the manager thread
+{
+ LinuxThreads: leaks stack of manager thread
+ Memcheck:Leak
+ fun:malloc
+ fun:__pthread_initialize_manager
+ fun:pthread_create@@GLIBC_2.1
+}
+{
+ LinuxThreads: leaks TLS data for manager thread
+ Memcheck:Leak
+ fun:calloc
+ fun:_dl_allocate_tls
+ fun:__pthread_initialize_minimal
+}
+{
+ LinuxThreads: leaks TLS data for manager thread
+ Memcheck:Leak
+ fun:memalign
+ fun:_dl_allocate_tls
+ fun:__pthread_initialize_minimal
+}
+{
+ LinuxThreads: leaks stack of manager thread
+ Memcheck:Leak
+ fun:malloc
+ fun:__pthread_initialize_manager
+ fun:pthread_create@@GLIBC_2.2.5
+}
+{
+ LinuxThreads: leaks TLS data for manager thread
+ Memcheck:Leak
+ fun:calloc
+ fun:allocate_dtv
+ fun:_dl_allocate_tls_storage
+ fun:_dl_allocate_tls
+ fun:__pthread_initialize_minimal
+}
+{
+ LinuxThreads: leaks TLS data for manager thread
+ Memcheck:Leak
+ fun:memalign
+ fun:_dl_allocate_tls_storage
+ fun:_dl_allocate_tls
+ fun:__pthread_initialize_minimal
+}
--- /dev/null
+
+##----------------------------------------------------------------------##
+
+# Errors to suppress by default with glibc 2.3.x
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+{
+ __GI___stpcpy/*
+ Memcheck:Cond
+ fun:__GI___stpcpy
+ fun:*
+}
+{
+ strlen/__GI__dl_open/dlopen_doit
+ Memcheck:Cond
+ fun:strlen
+ fun:__GI__dl_open
+ fun:dlopen_doit
+}
+{
+ strlen/_dl_signal_cerror/_dl_lookup_symbol_internal/do_dlsym
+ Memcheck:Cond
+ fun:_dl_signal_cerror
+ fun:_dl_lookup_symbol_internal
+ fun:do_dlsym
+}
+{
+ strlen/*dl_map_object*(Cond)
+ Memcheck:Cond
+ fun:strlen
+ fun:*dl_map_object*
+}
+
+{
+ strlen/*dl_open_worker*(Cond)
+ Memcheck:Cond
+ fun:strlen
+ fun:*dl_open_worker*
+}
+{
+ strlen/_dl_sym/dlsym_doit
+ Memcheck:Cond
+ fun:strlen
+ fun:_dl_sym
+ fun:dlsym_doit
+}
+{
+ realpath is inefficiently coded
+ Memcheck:Overlap
+ fun:memcpy
+ fun:realpath*
+}
+
+{
+ realpath stupidity part II
+ Memcheck:Overlap
+ fun:strcpy
+ fun:realpath*
+}
+{
+ strlen/decompose_rpath/_dl_map_object
+ Memcheck:Cond
+ fun:strlen
+ fun:decompose_rpath
+ fun:*dl_map_object*
+}
+{
+ stpcpy/_dl_sym*
+ Memcheck:Cond
+ fun:__stpcpy
+ fun:_dl_*
+}
+
+#-------- For R H 8.0
+{
+ elf_dynamic_do_rel.7/_dl_relocate_object_internal/dl_open_worker(Cond)
+ Memcheck:Cond
+ fun:elf_dynamic_do_rel.7
+ fun:_dl_relocate_object_internal
+ fun:dl_open_worker
+}
+{
+ dl_relocate/dl_open_worker
+ Memcheck:Cond
+ fun:_dl_relocate_object_internal
+ fun:dl_open_worker
+}
+{
+ RedHat8-1
+ Memcheck:Cond
+ fun:elf_dynamic_do_rela.8
+ fun:_dl_relocate_object
+ fun:dl_main
+ fun:_dl_sysdep_start
+}
+{
+ RedHat8-2
+ Memcheck:Cond
+ fun:elf_dynamic_do_rel.7
+ fun:_dl_relocate_object
+ fun:dl_main
+ fun:_dl_sysdep_start
+}
+{
+ RedHat8-3
+ Memcheck:Cond
+ fun:elf_dynamic_do_rela.8
+ fun:_dl_relocate_object
+ fun:dl_open_worker
+}
+
+#-------- glibc 2.3.2/ Fedora Core 1
+{
+ dl_relocate/dl_main
+ Memcheck:Cond
+ fun:_dl_relocate_object_internal
+ fun:dl_main
+}
+
+#-------- glibc 2.3.3/ Fedora Core 2
+{
+ dl_relocate_object/dl_main
+ Memcheck:Cond
+ fun:_dl_relocate_object
+ fun:dl_main
+}
+{
+ _dl_relocate_object/dl_open_worker
+ Memcheck:Cond
+ fun:_dl_relocate_object
+ fun:dl_open_worker
+}
+
+#-------- glibc 2.3.4/ Fedora Core 3
+{
+ dl_relocate_object
+ Memcheck:Cond
+ fun:_dl_relocate_object
+}
+
+##----------------------------------------------------------------------##
+## Bugs in helper library supplied with Intel Icc 7.0 (65)
+## in /opt/intel/compiler70/ia32/lib/libcxa.so.3
+{
+ Intel compiler70/ia32/lib/libcxa.so.3 below-esp accesses
+ Memcheck:Addr4
+ obj:/opt/intel/compiler70/ia32/lib/libcxa.so.3
+}
+
+##----------------------------------------------------------------------##
+## SuSE 9 after FV changes (post 2.1.0)
+
+{
+ strlen/_dl_init_paths/dl_main/_dl_sysdep_start(Cond)
+ Memcheck:Cond
+ fun:strlen
+ fun:_dl_init_paths
+ fun:dl_main
+ fun:_dl_sysdep_start
+}
+
+{
+ Ugly strchr error in /lib/ld-2.3.2.so
+ Memcheck:Cond
+ obj:/lib/ld-2.3.2.so
+}
+
+##----------------------------------------------------------------------##
+## SuSE 9.1 with post 2.1.2
+{
+ Ugly strchr error in /lib/ld-2.3.3.so
+ Memcheck:Cond
+ obj:/lib/ld-2.3.3.so
+}
+
+##----------------------------------------------------------------------##
+## SuSE 9.1 with 3.0 branch (x86)
+{
+ Strstr dubiousness in pthread_initialize
+ Memcheck:Cond
+ fun:strstr
+ fun:pthread_initialize
+ obj:/lib/libpthread.so.0
+ obj:/lib/libpthread.so.0
+}
+
+##----------------------------------------------------------------------##
+## glibc-2.3.3 on FC2
+## Assumes that sysctl returns \0-terminated strings in is_smp_system
+#{
+# Unterminated strstr string in is_smp_system() (NPTL)
+# Memcheck:Cond
+# fun:strstr
+# fun:__pthread_initialize_minimal
+# obj:/lib/tls/libpthread*.so*
+# obj:/lib/tls/libpthread*.so*
+#}
+#{
+# Unterminated strstr string in is_smp_system() (LinuxThreads)
+# Memcheck:Cond
+# fun:strstr
+# fun:pthread_initialize
+# obj:/lib/i686/libpthread*.so*
+# obj:/lib/i686/libpthread*.so*
+#}
+#{
+# Unterminated strstr string in is_smp_system() (LinuxThreads)
+# Memcheck:Cond
+# fun:strstr
+# fun:pthread_initialize
+# obj:/lib/libpthread-0.10.so
+# obj:/lib/libpthread-0.10.so
+#}
+
+## Bug in PRE(sys_clone), really. Some args are not used.
+{
+ LinuxThread clone use (parent_tidptr)
+ Memcheck:Param
+ clone(parent_tidptr)
+ fun:clone
+ fun:pthread_create
+}
+{
+ LinuxThread clone use (child_tidptr)
+ Memcheck:Param
+ clone(child_tidptr)
+ fun:clone
+ fun:pthread_create
+}
+{
+ LinuxThread clone use (tlsinfo)
+ Memcheck:Param
+ clone(tlsinfo)
+ fun:clone
+ fun:pthread_create
+}
+{
+ LinuxThread clone use (parent_tidptr)
+ Memcheck:Param
+ clone(parent_tidptr)
+ fun:clone
+ fun:pthread_create@@GLIBC_2.1
+}
+{
+ LinuxThread clone use (child_tidptr)
+ Memcheck:Param
+ clone(child_tidptr)
+ fun:clone
+ fun:pthread_create@@GLIBC_2.1
+}
+{
+ LinuxThread clone use (tlsinfo)
+ Memcheck:Param
+ clone(tlsinfo)
+ fun:clone
+ fun:pthread_create@@GLIBC_2.1
+}
+
+## LinuxThreads manager writes messages containing undefined bytes
+{
+ LinuxThreads: write/pthread_onexit_process
+ Memcheck:Param
+ write(buf)
+ fun:pthread_onexit_process
+ fun:exit
+}
+{
+ LinuxThreads: write/pthread_join
+ Memcheck:Param
+ write(buf)
+ fun:pthread_join
+}
+{
+ LinuxThreads: write/pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:pthread_create@@GLIBC_2.1
+}
+{
+ LinuxThreads: write/pthread_create 2
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pthread_create@@GLIBC_2.1
+ fun:main
+}
+{
+ LinuxThreads: write/__pthread_initialize_manager/pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:__pthread_initialize_manager
+ fun:pthread_create@@GLIBC_2.1
+}
+
+{
+ LinuxThreads: write/pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:pthread_create
+}
+
+## LinuxThreads leaks the stack and TLS data for the manager thread
+{
+ LinuxThreads: leaks stack of manager thread
+ Memcheck:Leak
+ fun:malloc
+ fun:__pthread_initialize_manager
+ fun:pthread_create@@GLIBC_2.1
+}
+{
+ LinuxThreads: leaks TLS data for manager thread
+ Memcheck:Leak
+ fun:calloc
+ fun:_dl_allocate_tls
+ fun:__pthread_initialize_minimal
+}
+{
+ LinuxThreads: leaks TLS data for manager thread
+ Memcheck:Leak
+ fun:memalign
+ fun:_dl_allocate_tls
+ fun:__pthread_initialize_minimal
+}
+
+##----------------------------------------------------------------------##
+## glibc-2.3.4 on FC3
+## Assumes that sysctl returns \0-terminated strings in is_smp_system
+#{
+# Unterminated strstr string in is_smp_system() (NPTL)
+# Memcheck:Cond
+# fun:strstr
+# fun:__pthread_initialize_minimal
+# obj:/lib/tls/libpthread-2.3.4.so
+# obj:/lib/tls/libpthread-2.3.4.so
+#}
+#{
+# Unterminated strstr string in is_smp_system() (NPTL)
+# Memcheck:Cond
+# fun:strstr
+# fun:__pthread_initialize_minimal
+# obj:/lib64/tls/libpthread*.so*
+#}
+
+##----------------------------------------------------------------------##
+## glibc-2.3.5 on FC4
+## Assumes that sysctl returns \0-terminated strings in is_smp_system
+#{
+# Unterminated strstr string in is_smp_system() (NPTL)
+# Memcheck:Cond
+# fun:strstr
+# fun:__pthread_initialize_minimal
+# obj:*/libpthread-2.3.5.so
+# obj:*/libpthread-2.3.5.so
+#}
+
+
+##----------------------------------------------------------------------##
+#
+# I don't know why this is needed, but still:
+{
+ glibc-2.3.x-on-SuSE-10.0-(PPC)-1
+ Memcheck:Cond
+ fun:_dl_start
+ fun:_start
+}
+{
+ glibc-2.3.x-on-SuSE-10.1-(PPC)-1
+ Memcheck:Cond
+ fun:_dl_start_final
+ fun:_dl_start
+ fun:_start
+}
+{
+ glibc-2.3.x-on-SuSE-10.0/10.1-(PPC)-2a
+ Memcheck:Cond
+ fun:index
+ obj:*ld-2.3.*.so
+}
+{
+ glibc-2.3.x-on-SuSE-10.0/10.1-(PPC)-2b
+ Memcheck:Addr4
+ fun:index
+ fun:expand_dynamic_string_token
+}
+{
+ glibc-2.3.5-on-SuSE-10.0/10.1-(PPC)-2c
+ Memcheck:Addr4
+ fun:index
+ obj:*ld-2.3.*.so
+}
+{
+ glibc-2.3.5-on-SuSE-10.0/10.1-(PPC)-3
+ Memcheck:Addr4
+ fun:*wordcopy_fwd_dest_aligned*
+ fun:mem*cpy
+ obj:*lib*2.3.*.so
+}
+{
+ glibc-2.3.5-on-SuSE-10.0/10.1-(PPC)-4
+ Memcheck:Addr4
+ fun:bcmp
+ fun:*rpath*
+ fun:*rpath*
+ fun:*rpath*
+}
+
+##----------------------------------------------------------------------##
+# Hacks pertaining to the fact that our intercept mechanism can't
+# always get hold of strlen early enough, due to idiocy in the low
+# level memory manager.
+
+## HACK to do with strlen not being intercepted early enough
+{
+ strlen-not-intercepted-early-enough-HACK-1
+ Memcheck:Addr4
+ fun:strlen
+ fun:_dl_map_object_from_fd
+ fun:_dl_map_object
+}
+
+{
+ strlen-not-intercepted-early-enough-HACK-2
+ Memcheck:Addr4
+ fun:strlen
+ fun:decompose_rpath
+ fun:cache_rpath
+ fun:_dl_map_object
+}
+
+{
+ strlen-not-intercepted-early-enough-HACK-3
+ Memcheck:Cond
+ fun:strlen
+ fun:_dl_new_object
+ fun:_dl_map_object_from_fd
+ fun:_dl_map_object
+}
+
+{
+ strlen-not-intercepted-early-enough-HACK-4
+ Memcheck:Cond
+ fun:strlen
+ fun:expand_dynamic_string_token
+ fun:_dl_map_object
+}
+
+{
+ strlen-not-intercepted-early-enough-HACK-5
+ Memcheck:Cond
+ fun:strlen
+ fun:fillin_rpath
+ fun:_dl_init_paths
+}
+
+
+## HACK to do with index not being intercepted early enough
+{
+ index-not-intercepted-early-enough-HACK-1
+ Memcheck:Cond
+ fun:index
+ obj:*
+ fun:_dl_map_object
+}
+{
+ index-not-intercepted-early-enough-HACK-2
+ Memcheck:Cond
+ fun:index
+ fun:_dl_map_object
+ obj:*
+ fun:_dl_catch_error
+}
+{
+ index-not-intercepted-early-enough-HACK-3
+ Memcheck:Cond
+ fun:index
+ fun:_dl_map_object
+ obj:*
+ fun:_dl_sysdep_start
+}
+
+{
+ index-not-intercepted-early-enough-HACK-4
+ Memcheck:Cond
+ fun:index
+ fun:expand_dynamic_string_token
+}
+
+
+##----------------------------------------------------------------------##
+## MontaVista 3.1 on ppc32 integer only
+{
+ MontaVista-3.1-ppc32-#1
+ Memcheck:Value4
+ obj:/lib/ld-2.3.2.so
+ obj:/lib/ld-2.3.2.so
+ fun:*dl_map_object*
+ obj:/lib/libc-2.3.2.so
+}
+
+{
+ MontaVista-3.1-ppc32-#2
+ Memcheck:Value4
+ fun:malloc
+ obj:/lib/ld-2.3.2.so
+ obj:/lib/ld-2.3.2.so
+ obj:/lib/libc-2.3.2.so
+}
+
+{
+ MontaVista-3.1-ppc32-#3
+ Memcheck:Value4
+ obj:/lib/ld-2.3.2.so
+ obj:/lib/ld-2.3.2.so
+}
+
+##----------------------------------------------------------------------##
+## Ubuntu something (based on Debian 3.0?) on x86
+
+{
+ Ubuntu-stripped-ld.so
+ Memcheck:Cond
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+}
+
+##----------------------------------------------------------------------##
+# MontaVista Linux 4.0.1 on ppc32
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:pthread_create
+}
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ obj:/lib/libpthread-0.10.so
+ fun:pthread_create
+}
--- /dev/null
+
+# FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of
+# other stuff. They should be removed.
+
+##----------------------------------------------------------------------##
+# Suppressions for the Helgrind tool when using
+# a glibc-2.{3,4,5,6,7,8,9} system
+
+####################################################
+# glibc-2.X specific
+# These are generic cover-alls which catch a lot of stuff
+# in various combinations of ld, libc and libpthread
+#
+# Note this is heavyhanded and not very clever:
+#
+# - suppress anything that has its top frame in ld.so
+# That's fine, since it's mostly dynamic linking stuff,
+# which has various deliberate (harmless) races
+#
+# - suppress anything that has its top frame in libc.so.
+# This really isn't clever, since it could hide some
+# legitimate races. But the problem is, if we don't do
+# this, then loads of errors to do with stdio are reported, because
+# H fails to see glibc's internal locking/unlocking of FILE*s
+# as required by POSIX. A better solution is needed.
+
+#{
+# helgrind-glibc2X-001
+# Helgrind:Race
+# obj:/lib*/ld-2.*so*
+#}
+
+# helgrind-glibc2X-002 was merged into helgrind-glibc2X-001
+
+# helgrind-glibc2X-003 was merged into helgrind-glibc2X-001
+
+{
+ helgrind-glibc2X-004
+ Helgrind:Race
+ obj:/lib*/libc-2.*so*
+}
+
+{
+ helgrind-glibc2X-005
+ Helgrind:Race
+ obj:/lib*/libpthread-2.*so*
+}
+
+# helgrind-glibc2X-006 was merged into helgrind-glibc2X-005
+
+# helgrind-glibc2X-007 was merged into helgrind-glibc2X-001
+
+# helgrind-glibc2X-008 was merged into helgrind-glibc2X-004
+
+# helgrind-glibc2X-009 was merged into helgrind-glibc2X-004
+
+# helgrind-glibc2X-010 was merged into helgrind-glibc2X-001
+
+# helgrind-glibc2X-011 was merged into helgrind-glibc2X-004
+
+# helgrind-glibc2X-012 was merged into helgrind-glibc2X-001
+
+# helgrind-glibc2X-013 was merged into helgrind-glibc2X-001
+
+# helgrind-glibc2X-014 was merged into helgrind-glibc2X-001
+
+# helgrind-glibc2X-015 was merged into helgrind-glibc2X-004
+
+# helgrind-glibc2X-016 was merged into helgrind-glibc2X-004
+
+# These are very ugly. They are needed to suppress errors inside (eg)
+# NPTL's pthread_cond_signal. Why only one stack frame -- at least we
+# should see the wrapper calling the real functions, right?
+# Unfortunately, no: the real functions are handwritten assembly (in
+# the glibc-2.5 sources) and does not create a proper stack frame.
+# Therefore it's only one level of unwinding before we're back out in
+# user code rather than the 2 levels you'd expect.
+{
+ helgrind-glibc2X-101
+ Helgrind:Race
+ obj:/lib*/libpthread-2.*so*
+ fun:pthread_*
+}
+{
+ helgrind-glibc2X-102
+ Helgrind:Race
+ fun:mythread_wrapper
+ obj:/lib*/libpthread-2.*so*
+}
+{
+ helgrind-glibc2X-103
+ Helgrind:Race
+ fun:pthread_cond_*@@GLIBC_2.*
+}
+{
+ helgrind-glibc2X-104
+ Helgrind:Race
+ fun:__lll_mutex_*
+}
+{
+ helgrind-glibc2X-105
+ Helgrind:Race
+ fun:pthread_rwlock_*lock*
+}
+{
+ helgrind-glibc2X-106
+ Helgrind:Race
+ fun:__lll_lock_wait
+}
+{
+ helgrind-glibc2X-107
+ Helgrind:Race
+ obj:/lib*/libpthread-2.*so*
+ fun:sem_*
+}
+{
+ helgrind-glibc2X-108
+ Helgrind:Race
+ fun:clone
+}
+{
+ helgrind-glibc2X-109
+ Helgrind:Race
+ fun:start_thread
+}
+{
+ helgrind-glibc2X-110
+ Helgrind:Race
+ obj:/lib*/libc-2.*so*
+ fun:pthread_*
+}
+{
+ helgrind-glibc2X-111
+ Helgrind:Race
+ fun:__lll_*lock_*
+}
+{
+ helgrind-glibc2X-113
+ Helgrind:Race
+ fun:pthread_barrier_wait*
+}
+
+
+####################################################
+# qt4 specific (GNU mangling)
+#
+{
+ helgrind-qt4---QMutex::lock()-QMutex::lock()
+ Helgrind:Race
+ ...
+ fun:_ZN6QMutex4lockEv
+ fun:_ZN6QMutex4lockEv
+}
+
+{
+ helgrind-qt4---QMutex::unlock()-QMutex::unlock()
+ Helgrind:Race
+ ...
+ fun:_ZN6QMutex6unlockEv
+ fun:_ZN6QMutex6unlockEv
+}
+
+{
+ helgrind-qt4---pthread_setspecific-QThreadPrivate::start(void*)
+ Helgrind:Race
+ fun:pthread_setspecific
+ fun:_ZN14QThreadPrivate5startEPv
+}
+
+
+####################################################
+# Other stuff.
+#
+# pthread_exit apparently calls some kind of unwind
+# mechanism - maybe to remove some number of frames
+# from the thread's stack, so as to get back to the
+# outermost frame for the thread? Anyway..
+
+{
+ helgrind---*Unwind*-...-pthread_exit
+ Helgrind:Race
+ fun:*Unwind*
+ ...
+ fun:pthread_exit
+}
+
+{
+ helgrind---...-*Unwind*-*pthread_unwind*
+ Helgrind:Race
+ ...
+ fun:*Unwind*
+ fun:*pthread_unwind*
+}
+
+{
+ helgrind---...-*Unwind*-*pthread_unwind*
+ Helgrind:Race
+ ...
+ fun:_Unwind*
+ ...
+ fun:_Unwind_Backtrace
+}
+
+
+
+
+####################################################
+# To do with thread stack allocation and deallocation?
+#
+{
+ helgrind---free_stacks-__deallocate_stack
+ Helgrind:Race
+ fun:free_stacks
+ fun:__deallocate_stack
+}
+
+{
+ helgrind---__deallocate_stack-start_thread-clone
+ Helgrind:Race
+ fun:__deallocate_stack
+ fun:start_thread
+ fun:clone
+}
+
+
+####################################################
+# To do with pthread_{set,get}specific
+#
+{
+ helgrind---pthread_setspecific
+ Helgrind:Race
+ fun:pthread_setspecific
+}
+
+{
+ helgrind---pthread_getspecific
+ Helgrind:Race
+ fun:pthread_getspecific
+}
+
+
+####################################################
+# To do with dynamic linking
+#
+# helgrind---ld.so-...-dlsym was merged into helgrind-glibc2X-001
+
+
+####################################################
+# To do with GNU libgomp
+#
+{
+ helgrind---libgomp43-1
+ Helgrind:Race
+ fun:gomp_ordered_sync
+}
+
+{
+ helgrind---libgomp43-1
+ Helgrind:Race
+ fun:gomp_ordered_next
+}
+
+{
+ helgrind---libgomp43-1
+ Helgrind:Race
+ fun:gomp_ordered_last
+}
--- /dev/null
+
+##----------------------------------------------------------------------##
+
+# Errors to suppress by default with glibc 2.4.x
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+##----------------------------------------------------------------------##
+## Suppressions for Fedora Core 5 on ppc32/amd64 (glibc-2.3.90)
+
+{
+ Fedora-Core-5-hack1
+ Memcheck:Cond
+ fun:_dl_start
+ fun:_start
+}
+
+{
+ Fedora-Core-5-hack2
+ Memcheck:Cond
+ obj:/lib*/ld-2.3.90.so
+ obj:/lib*/ld-2.3.90.so
+ obj:/lib*/ld-2.3.90.so
+ obj:/lib*/ld-2.3.90.so
+}
+
+{
+ Fedora-Core-5-hack2a
+ Memcheck:Cond
+ obj:/lib*/ld-2.4*so
+ obj:/lib*/ld-2.4*so
+ obj:/lib*/ld-2.4*so
+ obj:/lib*/ld-2.4*so
+}
+
+{
+ Fedora-Core-5-hack3
+ Memcheck:Cond
+ obj:/lib*/ld-2.3.90.so
+ obj:/lib*/ld-2.3.90.so
+ obj:/lib*/ld-2.3.90.so
+ obj:/lib*/libc-2.3.90.so
+}
+
+{
+ Fedora-Core-5-__strcpy_chk-64bit-hack-TODO-fix-this-properly
+ Memcheck:Addr8
+ fun:__strcpy_chk
+ obj:/usr/lib64/libX11.so.6.2.0
+ obj:/usr/lib64/libX11.so.6.2.0
+}
+
+{
+ Fedora-Core-5-hack3-ld24
+ Memcheck:Cond
+ obj:/lib*/ld-2.4*so*
+ obj:/lib*/ld-2.4*so*
+ obj:/lib*/ld-2.4*so*
+}
+
+{
+ Fedora-Core-5-yet-another-ppc32-hack
+ Memcheck:Addr4
+ fun:_wordcopy_fwd_dest_aligned
+ fun:mempcpy
+ obj:/lib*/libc-2.4*so*
+}
+
+##----------------------------------------------------------------------##
+{
+ glibc-2.3.x-on-SUSE-10.1-(PPC)-1
+ Memcheck:Cond
+ fun:_dl_start_final
+ fun:_dl_start
+ fun:_start
+}
+{
+ glibc-2.3.x-on-SUSE-10.1-(PPC)-2a
+ Memcheck:Cond
+ fun:index
+ obj:*ld-2.3.*.so
+}
+{
+ glibc-2.3.x-on-SuSE-10.1-(PPC)-2b
+ Memcheck:Addr4
+ fun:index
+ fun:expand_dynamic_string_token
+}
+{
+ glibc-2.3.5-on-SuSE-10.1-(PPC)-2c
+ Memcheck:Addr4
+ fun:index
+ obj:*ld-2.3.*.so
+}
+{
+ glibc-2.3.5-on-SuSE-10.1-(PPC)-3
+ Memcheck:Addr4
+ fun:*wordcopy_fwd_dest_aligned*
+ fun:mem*cpy
+ obj:*lib*2.3.*.so
+}
+{
+ index-not-intercepted-early-enough-HACK-4
+ Memcheck:Cond
+ fun:index
+ fun:expand_dynamic_string_token
+}
+
+
+##----------------------------------------------------------------------##
+## Various structure padding things on amd64 SuSE 10.1
+##
+{
+ X11-64bit-padding-1a
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+ fun:X*
+}
+{
+ X11-64bit-padding-1b
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+ fun:_X*
+}
+{
+ X11-64bit-padding-1c
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+}
+{
+ X11-64bit-padding-1d
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/X*/libICE.so*
+ obj:/usr/X*/libICE.so*
+ obj:/usr/X*/libICE.so*
+}
+
+
+{
+ X11-64bit-padding-2a
+ Memcheck:Param
+ writev(vector[...])
+ fun:do_writev
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+}
+{
+ X11-64bit-padding-2b
+ Memcheck:Param
+ writev(vector[...])
+ fun:do_writev
+ fun:writev
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+}
+
+{
+ glibc24-64bit-padding-1a
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:send
+ fun:get_mapping
+ fun:__nscd_get_map_ref
+ fun:nscd*
+}
+{
+ glibc24-64bit-padding-1b
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:__sendto_nocancel
+ obj:/*libc-2.4.so
+ obj:/*libc-2.4.so
+ obj:/*libc-2.4.so
+}
+{
+ glibc24-64bit-padding-1c
+ Memcheck:Param
+ socketcall.send(msg)
+ fun:send
+ fun:__nscd_get_map_ref
+ fun:nscd_get*_r
+ fun:*nscd*
+ obj:/*libc-2.4.so
+}
+
+
+{
+ X11-64bit-padding-3a
+ Memcheck:Param
+ write(buf)
+ obj:/*libpthread-2.4.so*
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+ obj:/usr/X*/libX11.so*
+}
+
+{
+ X11-64bit-padding-4a
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:send
+ obj:/*libc-2.4.so
+ obj:/*libc-2.4.so
+ obj:/*libc-2.4.so
+}
+{
+ X11-64bit-padding-4b
+ Memcheck:Param
+ socketcall.send(msg)
+ fun:send
+ obj:/*libc-2.4.so
+ obj:/*libc-2.4.so
+ obj:/*libc-2.4.so
+}
+
+##----------------------------------------------------------------------##
+# MontaVista Linux 4.0.1 on ppc32
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:pthread_create
+}
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ obj:/lib/libpthread-0.10.so
+ fun:pthread_create
+}
--- /dev/null
+
+##----------------------------------------------------------------------##
+
+# Errors to suppress by default with glibc 2.4.x
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+{
+ dl-hack1
+ Memcheck:Cond
+ fun:_dl_start
+ fun:_start
+}
+
+{
+ dl-hack2
+ Memcheck:Cond
+ obj:/lib*/ld-2.5*.so
+ obj:/lib*/ld-2.5*.so
+ obj:/lib*/ld-2.5*.so
+ obj:/lib*/ld-2.5*.so
+}
+
+{
+ dl-hack3
+ Memcheck:Cond
+ obj:/lib*/ld-2.5*so*
+ obj:/lib*/ld-2.5*so*
+ obj:/lib*/ld-2.5*so*
+}
+
+##----------------------------------------------------------------------##
+{
+ glibc-2.5.x-on-SUSE-10.2-(PPC)-1
+ Memcheck:Cond
+ fun:_dl_start_final
+ fun:_dl_start
+ fun:_start
+}
+{
+ glibc-2.5.x-on-SUSE-10.2-(PPC)-2a
+ Memcheck:Cond
+ fun:index
+ obj:*ld-2.5.*.so
+}
+{
+ glibc-2.5.x-on-SuSE-10.2-(PPC)-2b
+ Memcheck:Addr4
+ fun:index
+ fun:expand_dynamic_string_token
+}
+{
+ glibc-2.5.5-on-SuSE-10.2-(PPC)-2c
+ Memcheck:Addr4
+ fun:index
+ obj:*ld-2.5.*.so
+}
+{
+ glibc-2.3.5-on-SuSE-10.1-(PPC)-3
+ Memcheck:Addr4
+ fun:*wordcopy_fwd_dest_aligned*
+ fun:mem*cpy
+ obj:*lib*2.5.*.so
+}
+
+##----------------------------------------------------------------------##
+## Various structure padding things on SUSE 10.2
+##
+{
+ X11-64bit-padding-1a
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ fun:X*
+}
+{
+ X11-64bit-padding-1b
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ fun:_X*
+}
+{
+ X11-64bit-padding-1c
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+{
+ X11-64bit-padding-1d
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/lib*/libICE.so*
+ obj:/usr/lib*/libICE.so*
+ obj:/usr/lib*/libICE.so*
+}
+{
+ X11-64bit-padding-2a
+ Memcheck:Param
+ writev(vector[...])
+ fun:do_writev
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+{
+ X11-64bit-padding-2b
+ Memcheck:Param
+ writev(vector[...])
+ fun:do_writev
+ fun:writev
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+
+{
+ glibc24-64bit-padding-1a
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:send
+ fun:get_mapping
+ fun:__nscd_get_map_ref
+ fun:nscd*
+}
+{
+ glibc24-64bit-padding-1b
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:__sendto_nocancel
+ obj:/*libc-2.5.so
+ obj:/*libc-2.5.so
+ obj:/*libc-2.5.so
+}
+{
+ glibc24-64bit-padding-1c
+ Memcheck:Param
+ socketcall.send(msg)
+ fun:send
+ fun:__nscd_get_map_ref
+ fun:nscd_get*_r
+ fun:*nscd*
+ obj:/*libc-2.5.so
+}
+
+
+{
+ X11-64bit-padding-3a
+ Memcheck:Param
+ write(buf)
+ obj:/*libpthread-2.4.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+
+{
+ X11-64bit-padding-4a
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:send
+ obj:/*libc-2.5.so
+ obj:/*libc-2.5.so
+ obj:/*libc-2.5.so
+}
+{
+ X11-64bit-padding-4b
+ Memcheck:Param
+ socketcall.send(msg)
+ fun:send
+ obj:/*libc-2.5.so
+ obj:/*libc-2.5.so
+ obj:/*libc-2.5.so
+}
+
+##----------------------------------------------------------------------##
+# MontaVista Linux 4.0.1 on ppc32
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:pthread_create
+}
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ obj:/lib/libpthread-0.10.so
+ fun:pthread_create
+}
--- /dev/null
+
+##----------------------------------------------------------------------##
+
+# Errors to suppress by default with glibc 2.6.x
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+{
+ dl-hack1
+ Memcheck:Cond
+ fun:_dl_start
+ fun:_start
+}
+
+{
+ dl-hack2
+ Memcheck:Cond
+ obj:/lib*/ld-2.6*.so
+ obj:/lib*/ld-2.6*.so
+ obj:/lib*/ld-2.6*.so
+ obj:/lib*/ld-2.6*.so
+}
+
+{
+ dl-hack3-1
+ Memcheck:Cond
+ obj:/lib*/ld-2.6*.so*
+ obj:/lib*/ld-2.6*.so*
+ obj:/lib*/ld-2.6*.so*
+}
+{
+ dl-hack3-2
+ Memcheck:Cond
+ obj:/lib*/ld-2.6*.so*
+ obj:/lib*/ld-2.6*.so*
+ obj:/lib*/libc-2.6*.so*
+}
+
+{
+ dl-hack4-64bit-1
+ Memcheck:Addr8
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/ld-2.6*.so*
+}
+{
+ dl-hack4-64bit-2
+ Memcheck:Addr8
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/libc-2.6*.so*
+}
+{
+ dl-hack4-64bit-3
+ Memcheck:Addr8
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/libdl-2.6*.so*
+}
+
+
+
+##----------------------------------------------------------------------##
+{
+ glibc-2.5.x-on-SUSE-10.2-(PPC)-1
+ Memcheck:Cond
+ fun:_dl_start_final
+ fun:_dl_start
+ fun:_start
+}
+{
+ glibc-2.5.x-on-SUSE-10.2-(PPC)-2a
+ Memcheck:Cond
+ fun:index
+ obj:*ld-2.6.*.so
+}
+{
+ glibc-2.5.x-on-SuSE-10.2-(PPC)-2b
+ Memcheck:Addr4
+ fun:index
+ fun:expand_dynamic_string_token
+}
+{
+ glibc-2.5.5-on-SuSE-10.2-(PPC)-2c
+ Memcheck:Addr4
+ fun:index
+ obj:*ld-2.6.*.so
+}
+{
+ glibc-2.3.5-on-SuSE-10.1-(PPC)-3
+ Memcheck:Addr4
+ fun:*wordcopy_fwd_dest_aligned*
+ fun:mem*cpy
+ obj:*lib*2.6.*.so
+}
+
+{
+ glibc-2.6-on-SUSE-10.3-(x86)
+ Memcheck:Addr4
+ obj:/lib/ld-2.6*.so
+ obj:/lib/ld-2.6*.so
+ obj:/lib/ld-2.6*.so
+}
+
+##----------------------------------------------------------------------##
+## Various structure padding things on SUSE 10.2
+##
+{
+ X11-64bit-padding-1a
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ fun:X*
+}
+{
+ X11-64bit-padding-1b
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ fun:_X*
+}
+{
+ X11-64bit-padding-1c
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+{
+ X11-64bit-padding-1d
+ Memcheck:Param
+ write(buf)
+ fun:__write_nocancel
+ obj:/usr/lib*/libICE.so*
+ obj:/usr/lib*/libICE.so*
+ obj:/usr/lib*/libICE.so*
+}
+{
+ X11-64bit-padding-2a
+ Memcheck:Param
+ writev(vector[...])
+ fun:do_writev
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+{
+ X11-64bit-padding-2b
+ Memcheck:Param
+ writev(vector[...])
+ fun:do_writev
+ fun:writev
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+
+{
+ glibc24-64bit-padding-1a
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:send
+ fun:get_mapping
+ fun:__nscd_get_map_ref
+ fun:nscd*
+}
+{
+ glibc24-64bit-padding-1b
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:__sendto_nocancel
+ obj:/*libc-2.6.so
+ obj:/*libc-2.6.so
+ obj:/*libc-2.6.so
+}
+{
+ glibc24-64bit-padding-1c
+ Memcheck:Param
+ socketcall.send(msg)
+ fun:send
+ fun:__nscd_get_map_ref
+ fun:nscd_get*_r
+ fun:*nscd*
+ obj:/*libc-2.6.so
+}
+
+
+{
+ X11-64bit-padding-3a
+ Memcheck:Param
+ write(buf)
+ obj:/*libpthread-2.4.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+
+{
+ X11-64bit-padding-4a
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:send
+ obj:/*libc-2.6.so
+ obj:/*libc-2.6.so
+ obj:/*libc-2.6.so
+}
+{
+ X11-64bit-padding-4b
+ Memcheck:Param
+ socketcall.send(msg)
+ fun:send
+ obj:/*libc-2.6.so
+ obj:/*libc-2.6.so
+ obj:/*libc-2.6.so
+}
+
+##----------------------------------------------------------------------##
+# MontaVista Linux 4.0.1 on ppc32
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:pthread_create
+}
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ obj:/lib/libpthread-0.10.so
+ fun:pthread_create
+}
+
+##----------------------------------------------------------------------##
+# ppc32 running openSUSE 10.3
+{
+ X11-libXaw8-libXaw8-libXaw8
+ Memcheck:Cond
+ obj:/usr/lib*/libXaw8.so*
+ obj:/usr/lib*/libXaw8.so*
+ obj:/usr/lib*/libXaw8.so*
+}
--- /dev/null
+
+# Errors to suppress by default with glibc 2.7.x
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+{
+ dl-hack3-1
+ Memcheck:Cond
+ obj:/lib*/ld-2.7*.so*
+ obj:/lib*/ld-2.7*.so*
+ obj:/lib*/ld-2.7*.so*
+}
--- /dev/null
+#
+# Suppression patterns for ld, the dynamic loader.
+#
+
+# Suppress all data races triggered by ld.
+{
+ drd-ld
+ drd:ConflictingAccess
+ obj:/lib*/ld-*.so
+}
+
+#
+# Suppression patterns for libc.
+#
+
+# Suppress all data races where the topmost frame is inside libc.so. Although
+# this could hide some real data races, unfortunately this is the only way to
+# not report any false positives on stdio functions. The glibc functions
+# manipulating FILE objects use locking primitives that cannot be intercepted
+# easily. See also the definitions of _IO_lock_lock() etc. in the file
+# nptl/sysdeps/pthread/bits/stdio-lock.h in the glibc source tree.
+{
+ drd-libc-stdio
+ drd:ConflictingAccess
+ obj:/lib*/libc-*
+}
+
+#
+# Suppression patterns for libstdc++, the implementation of the standard C++
+# library included with the gcc compiler.
+#
+# Note: several versions of the libstdc++ library (4.2.2, 4.3.2, 4.4.0, 4.5.0
+# and their predecessors) contain an implementation of the std::string class
+# that triggers conflicting memory accesses. See also
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40518
+#
+
+# {
+# drd-libstdc++-std::string::string()
+# drd:ConflictingAccess
+# fun:_ZNSsC1ERKSs
+# }
+
+{
+ drd-libstdc++-cxa_guard_release
+ drd:CondErr
+ fun:pthread_cond_broadcast@*
+ fun:__cxa_guard_release
+}
+
+
+#
+# Suppression patterns for libpthread.
+#
+
+{
+ drd-libpthread-pthread_create
+ drd:ConflictingAccess
+ ...
+ fun:pthread_create*
+}
+{
+ drd-libpthread-pthread_join
+ drd:ConflictingAccess
+ fun:pthread_join
+ fun:pthread_join
+}
+{
+ drd-libpthread-__deallocate_stack
+ drd:ConflictingAccess
+ ...
+ fun:__deallocate_stack
+}
+{
+ drd-libpthread-__free_stacks
+ drd:ConflictingAccess
+ fun:__free_stacks
+}
+{
+ drd-libpthread-__free_tcb
+ drd:ConflictingAccess
+ ...
+ fun:__free_tcb
+}
+{
+ drd-libpthread-__nptl_deallocate_tsd
+ drd:ConflictingAccess
+ fun:__nptl_deallocate_tsd
+}
+{
+ drd-libpthread-pthread_detach
+ drd:ConflictingAccess
+ fun:pthread_detach
+ fun:pthread_detach
+}
+{
+ drd-libpthread-pthread_once
+ drd:ConflictingAccess
+ fun:pthread_once
+}
+{
+ drd-libpthread-pthread_cancel_init
+ drd:ConflictingAccess
+ fun:pthread_cancel_init
+}
+{
+ drd-libpthread-_Unwind_ForcedUnwind
+ drd:ConflictingAccess
+ ...
+ fun:_Unwind_ForcedUnwind
+}
+{
+ drd-libpthread-_Unwind_GetCFA
+ drd:ConflictingAccess
+ fun:_Unwind_GetCFA
+}
+{
+ drd-libpthread-_Unwind_Resume
+ drd:ConflictingAccess
+ ...
+ fun:_Unwind_Resume
+}
+{
+ drd-libpthread-?
+ drd:ConflictingAccess
+ obj:/lib/libgcc_s.so.1
+}
+{
+ drd-libpthread-nanosleep
+ drd:ConflictingAccess
+ fun:nanosleep
+}
+
+#
+# Suppression patterns for libgomp.
+#
+
+# Unfortunately many statements in libgomp trigger conflicting accesses. It is
+# not clear to me which of these are safe and which ones not. See also
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40362
+{
+ drd-libgomp
+ drd:ConflictingAccess
+ obj:/usr/lib*/libgomp.so*
+}
+
+#
+# Suppression patterns for libX11.
+#
+
+{
+ drd-libX11-XCreateFontSet
+ drd:CondErr
+ fun:pthread_cond_init*
+ fun:_XReply
+ fun:XListFontsWithInfo
+ obj:/usr/lib*/libX11.so*
+ fun:XCreateOC
+ fun:XCreateFontSet
+}
+
+#
+# Suppression patterns for libxcb.
+#
+
+{
+ drd-libxcb-xcb_wait_for_reply
+ drd:CondErr
+ fun:pthread_cond_destroy*
+ fun:xcb_wait_for_reply
+}
+
+#
+# Suppression patterns for libglib.
+#
+
+{
+ drd-libglib-access-g_threads_got_initialized
+ drd:ConflictingAccess
+ ...
+ fun:g_slice_alloc
+ fun:g_ptr_array_sized_new
+}
+{
+ drd-libglib-access-g_threads_got_initialized
+ drd:ConflictingAccess
+ ...
+ fun:_ZN27QEventDispatcherGlibPrivateC1EP13_GMainContext
+ fun:_ZN20QEventDispatcherGlibC1EP7QObject
+ obj:/usr/lib*/libQtCore.so.4.*
+ obj:/usr/lib*/libQtCore.so.4.*
+}
+{
+ drd-libglib-access-g_mem_initialized
+ drd:ConflictingAccess
+ fun:g_malloc0
+}
+{
+ drd-libglib-g_private_get_posix_impl
+ drd:ConflictingAccess
+ fun:g_private_get_posix_impl
+}
+{
+ drd-libglib-g_private_set_posix_impl
+ drd:ConflictingAccess
+ fun:g_private_set_posix_impl
+}
+{
+ drd-libglib-g_get_language_names
+ drd:ConflictingAccess
+ fun:g_slice_free_chain_with_offset
+}
+{
+ drd-libglib-g_main_context_new
+ drd:ConflictingAccess
+ fun:fcntl
+ obj:/usr/lib*/libglib-*.so*
+ fun:g_main_context_new
+}
+
+#
+# Suppression patterns for libQtCore.
+#
+
+{
+ drd-libQtCore-deref-that-calls-QThreadData-destructor
+ drd:ConflictingAccess
+ fun:_ZN11QThreadDataD1Ev
+ obj:/usr/lib*/libQtCore.so.4.*
+}
+{
+ drd-libQtCore-4.0/4.1-Q_GLOBAL_STATIC-connectionList
+ drd:ConflictingAccess
+ obj:/usr/lib*/libQtCore.so.4.*
+ fun:_ZN11QMetaObject8activateEP7QObjectiiPPv
+ fun:_ZN11QMetaObject8activateEP7QObjectPKS_iPPv
+}
+{
+ drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
+ drd:ConflictingAccess
+ fun:_ZN14QReadWriteLock12lockForWriteEv
+ fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
+ fun:_ZN7QObjectD2Ev
+}
+{
+ drd-libQtCore-QObjectPrivate::clearGuards(QObject*)
+ drd:ConflictingAccess
+ fun:_ZN14QReadWriteLock12lockForWriteEv
+ fun:_ZN12QWriteLocker6relockEv
+ fun:_ZN12QWriteLockerC1EP14QReadWriteLock
+ fun:_ZN14QObjectPrivate11clearGuardsEP7QObject
+ fun:_ZN7QObjectD2Ev
+ fun:_ZN24QAbstractEventDispatcherD2Ev
+ fun:_ZN20QEventDispatcherGlibD0Ev
+}
+{
+ drd-libQtCore-QMutexPool::get(void const*)
+ drd:ConflictingAccess
+ fun:_ZN10QMutexPool3getEPKv
+}
+{
+ drd-libQtCore-qt_gettime_is_monotonic()
+ drd:ConflictingAccess
+ fun:_Z23qt_gettime_is_monotonicv
+}
+
+#
+# Suppression patterns for libboost.
+#
+
+# Suppress the races on boost::once_flag::epoch and on
+# boost::detail::this_thread_epoch. See also the source file
+# boost/thread/pthread/once.hpp in the Boost source tree
+# (https://svn.boost.org/trac/boost/browser/trunk/boost/thread/pthread/once.hpp).
+{
+ drd-libboost-boost::call_once<void (*)()>(boost::once_flag&, void (*)())
+ drd:ConflictingAccess
+ ...
+ fun:_ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_
+}
+{
+ drd-libboost-boost::detail::get_once_per_thread_epoch()
+ drd:ConflictingAccess
+ fun:_ZN5boost6detail25get_once_per_thread_epochEv
+}
+# Suppress the race reports on boost::detail::current_thread_tls_key. See also
+# https://svn.boost.org/trac/boost/ticket/3526 for more information about why
+# the access pattern of current_thread_tls_key is safe.
+{
+ drd-libboost-boost::detail::get_current_thread_data()
+ drd:ConflictingAccess
+ ...
+ fun:_ZN5boost6detail23get_current_thread_dataEv
+}
+{
+ drd-libboost-boost::detail::set_current_thread_data(boost::detail::thread_data_base*)
+ drd:ConflictingAccess
+ ...
+ fun:_ZN5boost6detail23set_current_thread_dataEPNS0_16thread_data_baseE
+}
--- /dev/null
+
+##----------------------------------------------------------------------##
+
+# Errors to suppress by default with glibc @GLIBC_VERSION@.x
+
+# IMPORTANT: DO NOT EDIT glibc-2.X.supp, as it is as a generated
+# file. Instead edit glibc-2.X.supp.in.
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+##----------------------------------------------------------------------##
+##--- generic suppressions ---##
+##----------------------------------------------------------------------##
+
+{
+ dl-hack3-cond-0
+ Memcheck:Cond
+ fun:_dl_start
+ fun:_start
+}
+{
+ dl-hack3-cond-1
+ Memcheck:Cond
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+}
+{
+ dl-hack3-cond-2
+ Memcheck:Cond
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/libc-@GLIBC_VERSION@*.so*
+}
+{
+ dl-hack3-cond-3
+ Memcheck:Cond
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/libc-@GLIBC_VERSION@*.so*
+ obj:/lib*/libc-@GLIBC_VERSION@*.so*
+}
+{
+ dl-hack3-cond-4
+ Memcheck:Cond
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/libdl-@GLIBC_VERSION@*.so*
+}
+
+{
+ dl-hack4-64bit-addr-1
+ Memcheck:Addr8
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+}
+{
+ dl-hack4-64bit-addr-2
+ Memcheck:Addr8
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/libc-@GLIBC_VERSION@*.so*
+}
+{
+ dl-hack4-64bit-addr-3
+ Memcheck:Addr8
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so*
+ obj:/lib*/libdl-@GLIBC_VERSION@*.so*
+}
+
+{
+ dl-hack5-32bit-addr-1
+ Memcheck:Addr4
+ obj:/lib*/ld-@GLIBC_VERSION@*.so
+ obj:/lib*/ld-@GLIBC_VERSION@*.so
+ obj:/lib*/ld-@GLIBC_VERSION@*.so
+}
+{
+ dl-hack5-32bit-addr-3
+ Memcheck:Addr4
+ obj:/lib*/ld-@GLIBC_VERSION@*.so
+ obj:/lib*/ld-@GLIBC_VERSION@*.so
+ obj:/lib*/libdl-@GLIBC_VERSION@*.so*
+}
+{
+ dl-hack5-32bit-addr-4
+ Memcheck:Addr4
+ obj:/lib*/ld-@GLIBC_VERSION@*.so
+ obj:/lib*/libdl-@GLIBC_VERSION@*.so*
+ obj:/lib*/ld-@GLIBC_VERSION@*.so
+}
+
+
+##----------------------------------------------------------------------##
+##--- Misc ad-hoc hacks ---##
+##----------------------------------------------------------------------##
+{
+ glibc-2.5.x-on-SUSE-10.2-(PPC)-1
+ Memcheck:Cond
+ fun:_dl_start_final
+ fun:_dl_start
+ fun:_start
+}
+{
+ glibc-2.5.x-on-SUSE-10.2-(PPC)-2a
+ Memcheck:Cond
+ fun:index
+ obj:*ld-@GLIBC_VERSION@.*.so
+}
+{
+ glibc-2.5.x-on-SuSE-10.2-(PPC)-2b
+ Memcheck:Addr4
+ fun:index
+ fun:expand_dynamic_string_token
+}
+{
+ glibc-2.5.5-on-SuSE-10.2-(PPC)-2c
+ Memcheck:Addr4
+ fun:index
+ obj:*ld-@GLIBC_VERSION@.*.so
+}
+{
+ glibc-2.3.5-on-SuSE-10.1-(PPC)-3
+ Memcheck:Addr4
+ fun:*wordcopy_fwd_dest_aligned*
+ fun:mem*cpy
+ obj:*lib*@GLIBC_VERSION@.*.so
+}
+
+{
+ glibc-@GLIBC_VERSION@-on-SUSE-10.3-(x86)
+ Memcheck:Addr4
+ obj:/lib/ld-@GLIBC_VERSION@*.so
+ obj:/lib/ld-@GLIBC_VERSION@*.so
+ obj:/lib/ld-@GLIBC_VERSION@*.so
+}
+
+{
+ glibc24-64bit-padding-1a
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:send
+ fun:get_mapping
+ fun:__nscd_get_map_ref
+ fun:nscd*
+}
+{
+ glibc24-64bit-padding-1b
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:__sendto_nocancel
+ obj:/*libc-@GLIBC_VERSION@.so
+ obj:/*libc-@GLIBC_VERSION@.so
+ obj:/*libc-@GLIBC_VERSION@.so
+}
+{
+ glibc24-64bit-padding-1c
+ Memcheck:Param
+ socketcall.send(msg)
+ fun:send
+ fun:__nscd_get_map_ref
+ fun:nscd_get*_r
+ fun:*nscd*
+ obj:/*libc-@GLIBC_VERSION@.so
+}
+
+
+{
+ X11-64bit-padding-3a
+ Memcheck:Param
+ write(buf)
+ obj:/*libpthread-2.4.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+ obj:/usr/lib*/libX11.so*
+}
+
+{
+ X11-64bit-padding-4a
+ Memcheck:Param
+ socketcall.sendto(msg)
+ fun:send
+ obj:/*libc-@GLIBC_VERSION@.so
+ obj:/*libc-@GLIBC_VERSION@.so
+ obj:/*libc-@GLIBC_VERSION@.so
+}
+{
+ X11-64bit-padding-4b
+ Memcheck:Param
+ socketcall.send(msg)
+ fun:send
+ obj:/*libc-@GLIBC_VERSION@.so
+ obj:/*libc-@GLIBC_VERSION@.so
+ obj:/*libc-@GLIBC_VERSION@.so
+}
+
+##----------------------------------------------------------------------##
+# MontaVista Linux 4.0.1 on ppc32
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ fun:pthread_create
+}
+{
+ MVL-401-linuxthreads-pthread_create
+ Memcheck:Param
+ write(buf)
+ obj:/lib/libpthread-0.10.so
+ fun:pthread_create
+}
+
+##----------------------------------------------------------------------##
+# Ubuntu 10.04 on ARM (Thumb). Not sure why this is necessary.
+{
+ U1004-ARM-_dl_relocate_object
+ Memcheck:Cond
+ fun:_dl_relocate_object
+}
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/valgrind
+arch=@VGCONF_ARCH_PRI@
+os=@VGCONF_OS@
+platform=@VGCONF_ARCH_PRI@-@VGCONF_OS@
+valt_load_address=@VALT_LOAD_ADDRESS@
+
+Name: Valgrind
+Description: A dynamic binary instrumentation framework
+Version: @VERSION@
+Requires:
+Libs: -L${libdir}/valgrind -lcoregrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@ -lvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@ -lgcc
+Cflags: -I${includedir}
+
--- /dev/null
+Summary: Valgrind Memory Debugger
+Name: @PACKAGE@
+Version: @VERSION@
+Release: 1
+Epoch: 1
+License: GPL
+URL: http://www.valgrind.org/
+Group: Development/Debuggers
+Packager: Julian Seward <jseward@acm.org>
+Source: @PACKAGE@-@VERSION@.tar.bz2
+
+Buildroot: %{_tmppath}/%{name}-root
+
+%description
+
+Valgrind is an award-winning instrumentation framework for building dynamic
+analysis tools. There are Valgrind tools that can automatically detect many
+memory management and threading bugs, and profile your programs in detail. You
+can also use Valgrind to build new tools. Valgrind runs on the following
+platforms: x86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux, x86/MacOSX,
+AMD64/MacOSX.
+
+%prep
+%setup -n @PACKAGE@-@VERSION@
+
+%build
+%configure
+make
+
+%install
+make install DESTDIR=$RPM_BUILD_ROOT
+
+%makeinstall
+mkdir docs.installed
+mv $RPM_BUILD_ROOT%{_datadir}/doc/valgrind/* docs.installed/
+
+%files
+%defattr(-,root,root)
+%doc AUTHORS COPYING FAQ.txt NEWS README*
+%doc docs.installed/html/*.html docs.installed/html/images/*.png
+%{_bindir}/*
+%{_includedir}/valgrind
+%{_libdir}/valgrind
+%{_libdir}/pkgconfig/*
+
+%doc
+%defattr(-,root,root)
+%{_mandir}/*/*
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf ${RPM_BUILD_ROOT}
--- /dev/null
+#!/bin/sh
+
+# Figure out an absolute pathname to this file, based on
+# $0 (the name of the file) and $PWD.
+
+dollarzero=$0
+
+if [ "${dollarzero#/}" = "${dollarzero}" ];
+then
+ # Relative name
+ scriptname=$PWD/$dollarzero;
+else
+ # Absolute name
+ scriptname=$dollarzero;
+fi
+
+# echo "Name of this script: " $scriptname
+
+vgbasedir=`dirname $scriptname`
+
+# echo "VG base directory: " $vgbasedir
+
+
+# We set both VALGRIND_LIB and VALGRIND_LIB_INNER to handle normal and
+# 'inner' builds.
+VALGRIND_LIB="$vgbasedir/.in_place" \
+ VALGRIND_LIB_INNER="$vgbasedir/.in_place" \
+ "$vgbasedir/coregrind/valgrind" "$@"
+
--- /dev/null
+
+##----------------------------------------------------------------------##
+
+# Errors to suppress by default with XFree86 3.3.6)
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+##----------------------------------------------------------------------##
+
+{
+ X11-Cond-0
+ Memcheck:Cond
+ obj:*libXt.so.6.0
+ obj:*libXt.so.6.0
+ obj:*libXt.so.6.0
+}
+{
+ X11-Cond-1
+ Memcheck:Cond
+ fun:__rawmemchr
+ obj:*libXt.so.6.0
+ obj:*libXt.so.6.0
+}
+
+
+# Suppressions for XFree86-3.3.X
+
+{
+ X11-Addr4-1
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libX11.so.6.1
+ obj:/usr/X11R6/lib/libX11.so.6.1
+ obj:/usr/X11R6/lib/libX11.so.6.1
+}
+
+{
+ X11-Addr4-2
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libX11.so.6.1
+ obj:/usr/X11R6/lib/libX11.so.6.1
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+{
+ X11-Addr4-3
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+{
+ X11-Addr4-4
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libX11.so.6.1
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+{
+ X11-Addr4-5
+ Memcheck:Addr4
+ fun:__rawmemchr
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+{
+ X11-Addr4-6
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libXmu.so.6.0
+ obj:/usr/X11R6/lib/libXmu.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+{
+ X11-Addr4-7
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1
+}
+
+{
+ X11-Param-1
+ Memcheck:Param
+ write(buf)
+ fun:__libc_write
+ obj:/usr/X11R6/lib/libX11.so.6.1
+ obj:/usr/X11R6/lib/libX11.so.6.1
+}
+
+{
+ X11-Addr4-8
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libX11.so.6.1
+ obj:/usr/X11R6/lib/libXpm.so.4.11
+ obj:/usr/X11R6/lib/libXpm.so.4.11
+}
+
+{
+ X11-Addr4-8
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXawXpm_posing_as_Xaw.so.6.1
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+{
+ X11-Addr4-9
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libXaw.so.6.1
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+{
+ X11-Addr4-10
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libXaw.so.6.1
+ obj:/usr/X11R6/lib/libXaw.so.6.1
+ obj:/usr/X11R6/lib/libXt.so.6.0
+}
+
+{
+ X11-Addr4-11
+ Memcheck:Addr4
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXt.so.6.0
+ obj:/usr/X11R6/lib/libXaw.so.6.1
+}
+
+
+
+##----------------------------------------------------------------------##
--- /dev/null
+
+##----------------------------------------------------------------------##
+
+# Errors to suppress by default with XFree86 4.1.0)
+
+# *** And a bunch of other stuff which is completely unrelated
+# to X. The default suppressions are a bit of a mess and could do
+# with a good tidying up.
+
+# Format of this file is:
+# {
+# name_of_suppression
+# tool_name:supp_kind
+# (optional extra info for some suppression types)
+# caller0 name, or /name/of/so/file.so
+# caller1 name, or ditto
+# (optionally: caller2 name)
+# (optionally: caller3 name)
+# }
+#
+# For Memcheck, the supp_kinds are:
+#
+# Param Value1 Value2 Value4 Value8 Value16 Jump
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
+# Cond (previously known as Value0)
+#
+# and the optional extra info is:
+# if Param: name of system call param
+
+# Resulting from R H 8.0
+{
+ *libc_write/libX11.so.6.2/*X11TransWrite(Param)
+ Memcheck:Param
+ write(buf)
+ fun:*libc_write
+ obj:/usr/*lib*/libX11.so*
+ fun:*X11TransWrite
+}
+
+{
+ libX11.so.6.2/libX11.so.6.2/libX11.so.6.2(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libX11.so*
+ obj:/usr/*lib*/libX11.so*
+ obj:/usr/*lib*/libX11.so*
+}
+
+{
+ libXt.so.6.2/libXt.so.6.2/libXt.so.6.2(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libXt.so*
+ obj:/usr/*lib*/libXt.so*
+ obj:/usr/*lib*/libXt.so*
+}
+
+
+{
+ libXaw.so.7.0/libXaw.so.7.0/libXaw.so.7.0(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libXaw.so*
+ obj:/usr/*lib*/libXaw.so*
+ obj:/usr/*lib*/libXaw.so*
+}
+
+{
+ libXmu.so.6.2/libXmu.so.6.2/libXmu.so.6.2(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libXmu.so*
+ obj:/usr/*lib*/libXmu.so*
+ obj:/usr/*lib*/libXmu.so*
+}
+
+{
+ libXt.so.6.0/libXt.so.6.0/libXaw.so.7.0(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libXt.so*
+ obj:/usr/*lib*/libXt.so*
+ obj:/usr/*lib*/libXaw.so*
+}
+
+{
+ libXaw.so.7.0/libXaw.so.7.0/libXt.so.6.0(Value4)
+ Memcheck:Value4
+ obj:/usr/*lib*/libXaw.so*
+ obj:/usr/*lib*/libXaw.so*
+ obj:/usr/*lib*/libXt.so*
+}
+
+{
+ libXaw.so.7.0/libXaw.so.7.0/libXt.so.6.0(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libXaw.so*
+ obj:/usr/*lib*/libXaw.so*
+ obj:/usr/*lib*/libXt.so*
+}
+
+{
+ libX11.so.6.2/libX11.so.6.2/libXaw.so.7.0(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libX11.so*
+ obj:/usr/*lib*/libX11.so*
+ obj:/usr/*lib*/libXaw.so*
+}
+
+{
+ libX11.so.6.2/libX11.so.6.2/libXaw.so.7.0(Addr4)
+ Memcheck:Addr4
+ obj:/usr/*lib*/libX11.so*
+ obj:/usr/*lib*/libX11.so*
+ obj:/usr/*lib*/libXaw.so*
+}
+
+{
+ libX11.so.6.2/libXaw.so.7.0/libXaw.so.7.0(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libX11.so*
+ obj:/usr/*lib*/libXaw.so*
+ obj:/usr/*lib*/libXaw.so*
+}
+
+{
+ libXpm.so.4.11/libXpm.so.4.11/libXpm.so.4.11
+ Memcheck:Cond
+ obj:/usr/*lib*/libXpm.so.4.11
+ obj:/usr/*lib*/libXpm.so.4.11
+ obj:/usr/*lib*/libXpm.so.4.11
+}
+
+{
+ struct with uninitialized paddings
+ Memcheck:Param
+ writev(vector[...])
+ fun:*_writev
+ fun:_X11TransSocketWritev
+ fun:_X11TransWritev
+ fun:*
+}
+
+{
+ struct with uninitialized paddings - libxcb
+ Memcheck:Param
+ writev(vector[...])
+ obj:/lib*/*.so
+ obj:/usr/lib*/libxcb.so.1.0.0
+ obj:/usr/lib*/libxcb.so.1.0.0
+ fun:xcb_send_request
+ fun:_X*
+}
+
+{
+ struct with uninitialized paddings - libxcb
+ Memcheck:Param
+ writev(vector[...])
+ obj:/lib*/*.so
+ obj:/usr/lib*/libxcb.so.1.0.0
+ obj:/usr/lib*/libxcb.so.1.0.0
+ obj:/usr/lib*/libxcb.so.1.0.0
+ fun:xcb_*
+ fun:_X*
+}
+
+{
+ another struct with uninitialized paddings
+ Memcheck:Param
+ write(buf)
+ obj:*
+ fun:_IceTransSocketWrite
+ fun:_IceTransWrite
+ fun:_IceWrite
+}
+
+{
+ Xorg 6.8.1 uninit _write* padding
+ Memcheck:Param
+ write(buf)
+ fun:*
+ fun:_X11TransWrite
+ obj:/usr/*lib*/libX11.so*
+}
+
+{
+ Xorg 6.8.1 uninit write padding
+ Memcheck:Param
+ write(buf)
+ fun:write
+ fun:_X11TransWrite
+ obj:/usr/*lib*/libX11.so*
+}
+
+{
+ Xorg 6.8.1 ICE uninit __write* padding
+ Memcheck:Param
+ write(buf)
+ obj:*
+ fun:_IceTransWrite
+ fun:_IceWrite
+ fun:IceFlush
+}
+
+{
+ Xorg 6.8.1 writev uninit padding
+ Memcheck:Param
+ writev(vector[...])
+ fun:writev
+ obj:/usr/*lib*/libX11.so*
+ fun:_X11TransWritev
+ fun:_XSend
+}
+
+{
+ Xorg 6.9.0 writev uninit padding
+ Memcheck:Param
+ writev(vector[...])
+ fun:do_writev
+ fun:writev
+ obj:/usr/*lib*/libX11.so*
+ fun:_X11TransWritev
+ fun:_XSend
+}
+
+{
+ X on SUSE11 writev uninit padding
+ Memcheck:Param
+ writev(vector[...])
+ fun:writev
+ obj:/usr/lib*/libxcb.so*
+ obj:/usr/lib*/libxcb.so*
+}
+{
+ X on SUSE11 writev uninit padding 2
+ Memcheck:Param
+ writev(vector[...])
+ obj:/lib*/ld-2.*.so*
+ obj:/usr/lib*/libxcb.so*
+ obj:/usr/lib*/libxcb.so*
+}
+{
+ X on SUSE11 writev uninit padding 3
+ Memcheck:Param
+ writev(vector[...])
+ obj:/lib*/ld-2.*.so*
+ obj:/usr/lib*/libORBit*.so*
+ obj:/usr/lib*/libORBit*.so*
+}
+{
+ X on SUSE11 writev uninit padding 4
+ Memcheck:Param
+ writev(vector[...])
+ obj:/lib*/libc-2.*.so*
+ obj:/usr/lib*/libORBit*.so*
+ obj:/usr/lib*/libORBit*.so*
+}
+
+
+# There's something strange about a % 127 in XftFontOpenInfo
+# (hashing) which gcc turns into a multiply by 33818641 and
+# some other guff instead. I don't understand it enough to
+# know if libXft is broken or if memcheck's value tracking is
+# inadequate here. Anyway, for the moment, suppress it.
+#
+# Use of uninitialised value of size 8
+# at 0x71A59F8: XftFontOpenInfo (in /usr/X11R6/lib64/libXft.so.2.1.2)
+# by 0x71A5F0D: XftFontOpenPattern (in /usr/X11R6/lib64/libXft.so.2.1.2)
+# by 0x65F166E: loadFontConfigFont(QFontPrivate const*, QFontDef const&,
+# QFont::Script) (qfontdatabase_x11.cpp:1942)
+# by 0x65F5DE4: QFontDatabase::findFont(QFont::Script, QFontPrivate const*,
+# QFontDef const&, int) (qfontdatabase.cpp:996)
+{
+ XftFontOpenInfo-umod-127-strangeness
+ Memcheck:Value8
+ obj:/usr/X11*/lib*/libXft.so*
+ obj:/usr/X11*/lib*/libXft.so*
+}
+{
+ XftFontOpenInfo-umod-127-strangeness-a-la-xorg
+ Memcheck:Value8
+ obj:/usr/lib*/libXft.so*
+ obj:/usr/lib*/libXft.so*
+}
+
+{
+ More X padding stuff
+ Memcheck:Param
+ writev(vector[...])
+ fun:*writev*
+ obj:/usr/X11*/lib*/libX11.so*
+ obj:/usr/X11*/lib*/libX11.so*
+}
+
+# Inlined strlen in libX11 on Ubuntu 9.10 amd64, unfortunately.
+# Invalid read of size 4
+# at 0x9B5CCE6: ??? (in /usr/lib/libX11.so.6.2.0)
+# by 0x9B5D011: XGetAtomName (in /usr/lib/libX11.so.6.2.0)
+# by 0x86407C3: gdk_x11_xatom_to_atom_for_display
+# (in /usr/lib/libgdk-x11-2.0.so.0.1800.3)
+# by 0x8636817: ??? (in /usr/lib/libgdk-x11-2.0.so.0.1800.3)
+# Address 0x1a558e1c is 28 bytes inside a block of size 30 alloc'd
+# at 0x4C2552D: malloc (vg_replace_malloc.c:236)
+# by 0x9B642C0: _XUpdateAtomCache (in /usr/lib/libX11.so.6.2.0)
+# by 0x9B647F1: ??? (in /usr/lib/libX11.so.6.2.0)
+# by 0x9B81818: ??? (in /usr/lib/libX11.so.6.2.0)
+{
+ libX11.so.6.2.0/libX11.so.6.2.0(Addr4)
+ Memcheck:Addr4
+ obj:/usr/*lib*/libX11.so*
+ obj:/usr/*lib*/libX11.so*
+}
+
+##----------------------------------------------------------------------##
+# Completely inappropriate place, but ...
+
+{
+ ifort-9.X-on-i686-1
+ Memcheck:Addr4
+ fun:unaligned_bigint
+ fun:hash
+ fun:for__add_to_lf_table
+}
+{
+ ifort-9.X-on-amd64-1
+ Memcheck:Addr8
+ fun:unaligned_bigint
+ fun:hash
+ fun:for__add_to_lf_table
+}
+
+
+# zlib-1.2.x uses uninitialised memory in some tricky way which
+# apparently is harmless (it must amount to a vectorised while-loop,
+# nothing else makes sense). Fools Memcheck though. See the mentioned
+# URL for details.
+{
+ zlib-1.2.x trickyness (1a): See http://www.zlib.net/zlib_faq.html#faq36
+ Memcheck:Cond
+ obj:/*lib*/libz.so.1.2.*
+ ...
+ obj:/*lib*/libz.so.1.2.*
+ fun:deflate
+}
+{
+ zlib-1.2.x trickyness (1b): See http://www.zlib.net/zlib_faq.html#faq36
+ Memcheck:Cond
+ obj:/*lib*/libz.so.1.2.*
+ fun:deflate
+}
+
+{
+ zlib-1.2.x trickyness (2a): See http://www.zlib.net/zlib_faq.html#faq36
+ Memcheck:Value8
+ obj:/*lib*/libz.so.1.2.*
+ ...
+ obj:/*lib*/libz.so.1.2.*
+ fun:deflate
+}
+{
+ zlib-1.2.x trickyness (2b): See http://www.zlib.net/zlib_faq.html#faq36
+ Memcheck:Value8
+ obj:/*lib*/libz.so.1.2.*
+ fun:deflate
+}
+
+{
+ zlib-1.2.x trickyness (3a): See http://www.zlib.net/zlib_faq.html#faq36
+ Memcheck:Value4
+ obj:/*lib*/libz.so.1.2.*
+ ...
+ obj:/*lib*/libz.so.1.2.*
+ fun:deflate
+}
+{
+ zlib-1.2.x trickyness (3b): See http://www.zlib.net/zlib_faq.html#faq36
+ Memcheck:Value4
+ obj:/*lib*/libz.so.1.2.*
+ fun:deflate
+}
+
+
+##----------------------------------------------------------------------##
+
+## More general versions of some of the old X suppressions above
+{
+ Ubuntu804 libXaw.so.7.0/libXaw.so.7.0/libXaw.so.7.0(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libXaw*so*
+ obj:/usr/*lib*/libXaw*so*
+ obj:/usr/*lib*/libXaw*so*
+}
+{
+ Ubuntu804 libXaw.so.7.0/libXaw.so.7.0/libXt(Cond)
+ Memcheck:Cond
+ obj:/usr/*lib*/libXaw*so*
+ obj:/usr/*lib*/libXaw*so*
+ obj:/usr/*lib*/libXt*so*
+}
+
+{
+ Ubuntu804-hack-1
+ Memcheck:Overlap
+ fun:mempcpy
+ fun:_IO_default_xsputn
+ obj:/lib*/libc-2.*so*
+}