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

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