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

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