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

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