##----------------------------------------------------------------------##

# 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*
}