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

# Errors to suppress by default with glibc @GLIBC_MAJOR@.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_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
}
{
   dl-hack3-cond-2
   Memcheck:Cond
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/libc-@GLIBC_MAJOR@*.so*
}
{
   dl-hack3-cond-3
   Memcheck:Cond
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/libc-@GLIBC_MAJOR@*.so*
   obj:/lib*/libc-@GLIBC_MAJOR@*.so*
}
{
   dl-hack3-cond-4
   Memcheck:Cond
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/libdl-@GLIBC_MAJOR@*.so*
}

{
   dl-hack4-64bit-addr-1
   Memcheck:Addr8
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
}
{
   dl-hack4-64bit-addr-2
   Memcheck:Addr8
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/libc-@GLIBC_MAJOR@*.so*
}
{
   dl-hack4-64bit-addr-3
   Memcheck:Addr8
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.so*
   obj:/lib*/libdl-@GLIBC_MAJOR@*.so*
}

{
   dl-hack5-32bit-addr-1
   Memcheck:Addr4
   obj:/lib*/ld-@GLIBC_MAJOR@*.so
   obj:/lib*/ld-@GLIBC_MAJOR@*.so
   obj:/lib*/ld-@GLIBC_MAJOR@*.so
}
{
   dl-hack5-32bit-addr-3
   Memcheck:Addr4
   obj:/lib*/ld-@GLIBC_MAJOR@*.so
   obj:/lib*/ld-@GLIBC_MAJOR@*.so
   obj:/lib*/libdl-@GLIBC_MAJOR@*.so*
}
{
   dl-hack5-32bit-addr-4
   Memcheck:Addr4
   obj:/lib*/ld-@GLIBC_MAJOR@*.so
   obj:/lib*/libdl-@GLIBC_MAJOR@*.so*
   obj:/lib*/ld-@GLIBC_MAJOR@*.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_MAJOR@.*.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_MAJOR@.*.so
}
{
   glibc-2.3.5-on-SuSE-10.1-(PPC)-3
   Memcheck:Addr4
   fun:*wordcopy_fwd_dest_aligned*
   fun:mem*cpy
   obj:*lib*@GLIBC_MAJOR@.*.so
}

{
   glibc-@GLIBC_MAJOR@-on-SUSE-10.3-(x86)
   Memcheck:Addr4
   obj:/lib/ld-@GLIBC_MAJOR@*.so
   obj:/lib/ld-@GLIBC_MAJOR@*.so
   obj:/lib/ld-@GLIBC_MAJOR@*.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_MAJOR@.so
   obj:/*libc-@GLIBC_MAJOR@.so
   obj:/*libc-@GLIBC_MAJOR@.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_MAJOR@.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_MAJOR@.so
   obj:/*libc-@GLIBC_MAJOR@.so
   obj:/*libc-@GLIBC_MAJOR@.so
}
{
   X11-64bit-padding-4b
   Memcheck:Param
   socketcall.send(msg)
   fun:send
   obj:/*libc-@GLIBC_MAJOR@.so
   obj:/*libc-@GLIBC_MAJOR@.so
   obj:/*libc-@GLIBC_MAJOR@.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
}
