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

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