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

# Errors to suppress by default with XFree86 4.1.0)

# 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
#     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/X11R6/lib*/libX11.so.6.2
   fun:*X11TransWrite
}

{
   libX11.so.6.2/libX11.so.6.2/libX11.so.6.2(Cond)
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libX11.so.6.2
   obj:/usr/X11R6/lib*/libX11.so.6.2
   obj:/usr/X11R6/lib*/libX11.so.6.2
}

{
   libXt.so.6.2/libXt.so.6.2/libXt.so.6.2(Cond)
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libXt.so.6.0
   obj:/usr/X11R6/lib*/libXt.so.6.0
   obj:/usr/X11R6/lib*/libXt.so.6.0
}


{
   libXaw.so.7.0/libXaw.so.7.0/libXaw.so.7.0(Cond)
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libXaw.so.7.0
   obj:/usr/X11R6/lib*/libXaw.so.7.0
   obj:/usr/X11R6/lib*/libXaw.so.7.0
}

{
   libXmu.so.6.2/libXmu.so.6.2/libXmu.so.6.2(Cond)
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libXmu.so.6.2
   obj:/usr/X11R6/lib*/libXmu.so.6.2
   obj:/usr/X11R6/lib*/libXmu.so.6.2
}

{
   libXt.so.6.0/libXt.so.6.0/libXaw.so.7.0(Cond)
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libXt.so.6.0
   obj:/usr/X11R6/lib*/libXt.so.6.0
   obj:/usr/X11R6/lib*/libXaw.so.7.0
}

{
   libXaw.so.7.0/libXaw.so.7.0/libXt.so.6.0(Value4)
   Memcheck:Value4
   obj:/usr/X11R6/lib*/libXaw.so.7.0
   obj:/usr/X11R6/lib*/libXaw.so.7.0
   obj:/usr/X11R6/lib*/libXt.so.6.0
}

{
   libXaw.so.7.0/libXaw.so.7.0/libXt.so.6.0(Cond)
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libXaw.so.7.0
   obj:/usr/X11R6/lib*/libXaw.so.7.0
   obj:/usr/X11R6/lib*/libXt.so.6.0
}

{
   libX11.so.6.2/libX11.so.6.2/libXaw.so.7.0(Cond)
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libX11.so.6.2
   obj:/usr/X11R6/lib*/libX11.so.6.2
   obj:/usr/X11R6/lib*/libXaw.so.7.0
}

{
   libX11.so.6.2/libXaw.so.7.0/libXaw.so.7.0(Cond)
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libX11.so.6.2
   obj:/usr/X11R6/lib*/libXaw.so.7.0
   obj:/usr/X11R6/lib*/libXaw.so.7.0
}

{
   libXpm.so.4.11/libXpm.so.4.11/libXpm.so.4.11
   Memcheck:Cond
   obj:/usr/X11R6/lib*/libXpm.so.4.11
   obj:/usr/X11R6/lib*/libXpm.so.4.11
   obj:/usr/X11R6/lib*/libXpm.so.4.11
}

{
   struct with uninitialized paddings
   Memcheck:Param
   writev(vector[...])
   fun:*_writev
   fun:_X11TransSocketWritev
   fun:_X11TransWritev
   fun:*
}

{
   another struct with uninitialized paddings
   Memcheck:Param
   write(buf)
   fun:*
   fun:_IceTransSocketWrite
   fun:_IceTransWrite
   fun:_IceWrite
}

{
   Xorg 6.8.1 uninit _write* padding
   Memcheck:Param
   write(buf)
   fun:*
   fun:_X11TransWrite
   obj:/usr/X11R6/lib*/libX11.so.6.2
}

{
   Xorg 6.8.1 uninit write padding
   Memcheck:Param
   write(buf)
   fun:write
   fun:_X11TransWrite
   obj:/usr/X11R6/lib*/libX11.so.6.2
}

{
   Xorg 6.8.1 ICE uninit __write* padding
   Memcheck:Param
   write(buf)
   fun:__write*
   fun:_IceTransWrite
   fun:_IceWrite
   fun:IceFlush
}

{
   Xorg 6.8.1 ICE uninit write padding
   Memcheck:Param
   write(buf)
   fun:write
   fun:_IceTransWrite
   fun:_IceWrite
   fun:IceFlush
}

{
   Xorg 6.8.1 writev uninit padding
   Memcheck:Param
   writev(vector[...])
   fun:writev
   obj:/usr/X11R6/lib*/libX11.so.6.2
   fun:_X11TransWritev
   fun:_XSend
}

{
   Xorg 6.9.0 writev uninit padding
   Memcheck:Param
   writev(vector[...])
   fun:do_writev
   fun:writev
   obj:/usr/X11R6/lib*/libX11.so.6.2
   fun:_X11TransWritev
   fun:_XSend
}

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

{
   More X padding stuff
   Memcheck:Param
   writev(vector[...])
   fun:*writev*
   obj:/usr/X11*/lib*/libX11.so*
   obj:/usr/X11*/lib*/libX11.so*
}

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

