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

# Errors to suppress by default with glibc 2.2.4 / 2.2.5

# 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

#-------- For SuSE 8.2 (gcc 3.3, glibc 2.3.2)
{
   __GI___stpcpy/*
   Memcheck:Cond
   fun:__GI___stpcpy
   fun:*
}
{
   strlen/__GI__dl_open/dlopen_doit
   Memcheck:Cond
   fun:strlen
   fun:__GI__dl_open
   fun:dlopen_doit
}
{
   strlen/_dl_signal_cerror/_dl_lookup_symbol_internal/do_dlsym
   Memcheck:Cond
   fun:_dl_signal_cerror
   fun:_dl_lookup_symbol_internal
   fun:do_dlsym
}


#-------- For R H 8.0
{
   elf_dynamic_do_rel.7/_dl_relocate_object_internal/dl_open_worker(Cond)
   Memcheck:Cond
   fun:elf_dynamic_do_rel.7
   fun:_dl_relocate_object_internal
   fun:dl_open_worker
}


#-------- For R H 7.3 on i686
{
   _dl_relocate_object*/*libc-2.2.?.so/_dl_catch_error*(Cond)
   Memcheck:Cond
   fun:_dl_relocate_object*
   obj:*libc-2.2.?.so
   fun:_dl_catch_error*
}
{
   _dl_relocate_object_internal
   Memcheck:Cond
   fun:_dl_relocate_object_internal
}
{
   index/*-2.2.5.so/*-2.2.5.so
   Memcheck:Cond
   fun:index
   obj:*-2.2.5.so
   obj:*-2.2.5.so
}
{
   Red Hat 7.3 #4
   Memcheck:Cond
   fun:strlen
   fun:dl_main
   fun:_dl_sysdep_start
}

#-------- SuSE 8.1 stuff (gcc-3.2, glibc-2.2.5 + SuSE's hacks)
{
   __stpcpy/*
   Memcheck:Cond
   fun:__stpcpy
   fun:*
}
{
   strlen/decompose_rpath/_dl_map_object
   Memcheck:Cond
   fun:strlen
   fun:decompose_rpath
   fun:_dl_map_object
}
{
   strlen/_dl_sym/dlsym_doit
   Memcheck:Cond
   fun:strlen
   fun:_dl_sym
   fun:dlsym_doit
}
{
   trecurse/__gconv_release_shlib(Addr4)
   Memcheck:Addr4
   fun:trecurse
   fun:__gconv_release_shlib
}
{
   do_release_shlib/trecurse(Addr4)
   Memcheck:Addr4
   fun:do_release_shlib
   fun:trecurse
}

#-------- R H Limbo (glibc-2.2.90) stuff
{
   elf_dynamic_do_rela.8/_dl_relocate_object_internal
   Memcheck:Cond
   fun:elf_dynamic_do_rela.8
   fun:_dl_relocate_object_internal
}

{
   __strnlen/_nl_make_l10nflist(Cond)
   Memcheck:Cond
   fun:__strnlen
   fun:_nl_make_l10nflist
}

{
   __strnlen/*vfprintf*
   Memcheck:Cond
   fun:__strnlen
   fun:*vfprintf*
}

{
   libXaw.so.7.0(Cond)
   Memcheck:Cond
   obj:*libXaw.so.7.0
}

#-------- Suppress errors appearing as a result of calling
#-------- __libc_freeres()

{
   __twalk/*(Addr4)
   Memcheck:Addr4
   fun:__twalk
}

{
   do_release_shlib/__twalk(Addr4)
   Memcheck:Addr4
   fun:do_release_shlib
   fun:__twalk
}

{
   __libc_freeres/free_mem/free(Free)
   Memcheck:Free
   fun:free
   fun:free_mem
   fun:__libc_freeres
}

# even more glibc suppressions ?
{
   libc-2.2.4.so/libc-2.2.4.so/libc-2.2.4.so(Cond)
   Memcheck:Cond
   obj:*libc-2.2.?.so
   obj:*libc-2.2.?.so
   obj:*libc-2.2.?.so
}
{
   libc-2.2.4.so/libc-2.2.4.so/libc-2.2.4.so(Value4)
   Memcheck:Value4
   obj:*libc-2.2.?.so
   obj:*libc-2.2.?.so
   obj:*libc-2.2.?.so
}

##### glibc 2.2.5 stuff perhaps?
##### suppressions for coolo
{
   strchr/dl_open_worker(Cond)
   Memcheck:Cond
   fun:strchr
   fun:dl_open_worker
}
{ 
   __rawmemchr(Cond)
   Memcheck:Cond 
   fun:__rawmemchr
} 
{ 
   _IO_vfprintf/__strnlen(Cond)
   Memcheck:Cond 
   fun:__strnlen
   fun:_IO_vfprintf
} 
{ 
   __strchrnul/gethostbyname*(Cond)
   Memcheck:Cond 
   fun:__strchrnul
   fun:gethostbyname*
} 


##----
{
   strlen/*dl_map_object*(Cond)
   Memcheck:Cond
   fun:strlen
   fun:*dl_map_object*
}

{
   strlen/*dl_open_worker*(Cond)
   Memcheck:Cond
   fun:strlen
   fun:*dl_open_worker*
}

{
   *rawmemchr*/*nss*(Cond)
   Memcheck:Cond
   fun:*rawmemchr*
   fun:*nss*
}

{
   *strchrnul*/*nss*(Cond)
   Memcheck:Cond
   fun:*strchrnul*
   fun:*nss*
}

# gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)
# on Red Hat 7.2 (x86) miscompiles __mpn_construct_double in
# __mpn_construct_double (../sysdeps/ieee754/dbl-64/mpn2dbl.c:45)
# (glibc-2.2.4) to read and write below %esp.  Hence the following
# two:
{
   __mpn_construct_double/*(Addr4)
   Memcheck:Addr4
   fun:__mpn_construct_double
   fun:*
}
{
   __mpn_construct_double/*(Addr8)
   Memcheck:Addr8
   fun:__mpn_construct_double
   fun:*
}

# More of the same (gcc bug, I'm pretty sure)
{
   __fabs/*(Addr4)
   Memcheck:Addr4
   fun:__fabs
   fun:*
}
{
   __fabs/*(Addr8)
   Memcheck:Addr8
   fun:__fabs
   fun:*
}


# Not sure what this is about ... but anyway
{
   pthread_sighandler/*(Addr4)
   Memcheck:Addr4
   fun:pthread_sighandler
   fun:*
}


# More glibc stuff, AFAICS

{
   __strnlen/__argz_stringify/_nl_make_l10nflist(Cond)
   Memcheck:Cond
   fun:__strnlen
   fun:__argz_stringify
   fun:_nl_make_l10nflist
}

#--------------
{
   _dl_relocate_object*/dl_open_worker/_dl_catch_error*(Cond)
   Memcheck:Cond
   fun:_dl_relocate_object*
   fun:dl_open_worker
   fun:_dl_catch_error*
}
{
   _dl_relocate_object/libc-2.2.4.so/_dl_catch_error(Cond)
   Memcheck:Cond
   fun:_dl_relocate_object
   obj:*libc-2.2.?.so
   fun:_dl_catch_error
}
{
   _dl_relocate_object/dl_main(Cond)
   Memcheck:Cond
   fun:_dl_relocate_object
   fun:dl_main
}
{
   _dl_relocate_object_internal/dl_main(Cond)
   Memcheck:Cond
   fun:_dl_relocate_object_internal
   fun:dl_main
}

{
   strrchr/_dl_map_object_from_fd/_dl_map_object(Cond)
   Memcheck:Cond
   fun:strrchr
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   _dl_start/ld-2.2.4.so(Cond)
   Memcheck:Cond
   fun:_dl_start
   obj:/lib/ld-2.2.4.so
}

#-------- glibc 2.2.5/ Debian 3.0
{
   _dl_start(Cond)
   Memcheck:Cond
   fun:_dl_start
}

{
   _dl_start(Cond)
   Memcheck:Cond
   fun:_dl_relocate_object
}

#-------------------
{
   socketcall.connect(serv_addr)/connect/*
   Memcheck:Param
   socketcall.connect(serv_addr)
   fun:connect
   fun:*
}
{
   socketcall.connect(serv_addr)/libc-2.2.4.so/libc-2.2.4.so
   Memcheck:Param
   socketcall.connect(serv_addr)
   obj:*libc-2.2.?.so
   obj:*libc-2.2.?.so
}

#----------------------
{
   write(buf)/write/libX11.so.6.2/libX11.so.6.2(Param)
   Memcheck:Param
   write(buf)
   fun:write
   obj:/usr/X11R6/lib/libX11.so.6.2
   obj:/usr/X11R6/lib/libX11.so.6.2
}
{
   write(buf)/libc-2.2.4.so/libX11.so.6.2/libX11.so.6.2(Param)
   Memcheck:Param
   write(buf)
   obj:*libc-2.2.?.so
   obj:/usr/X11R6/lib/libX11.so.6.2
   obj:/usr/X11R6/lib/libX11.so.6.2
}

#{
#   llseek(result)/lseek64/_IO_file_seek(Param)
#   Param
#   llseek(result)
#   fun:lseek64
#   fun:_IO_file_seek
#}

{
   writev(vector[...])/__writev/libX11.so.6.2/libX11.so.6.2
   Memcheck:Param
   writev(vector[...])
   fun:__writev
   obj:/usr/X11R6/lib/libX11.so.6.2
   obj:/usr/X11R6/lib/libX11.so.6.2
}

#----------------
{
   __rawmemchr/libXt.so.6.0/libXt.so.6.0
   Memcheck:Cond
   fun:__rawmemchr
   obj:/usr/X11R6/lib/libXt.so.6.0
   obj:/usr/X11R6/lib/libXt.so.6.0
}
{
   libc-2.2.4.so/libXt.so.6.0/libXt.so.6.0
   Memcheck:Cond
   obj:*libc-2.2.?.so
   obj:/usr/X11R6/lib/libXt.so.6.0
   obj:/usr/X11R6/lib/libXt.so.6.0
}

## Bug in PRE(sys_clone), really.  Some args are not used.
{
   LinuxThread clone use (child_tidptr)
   Memcheck:Param
   clone(child_tidptr)
   fun:clone
   fun:__pthread_initialize_manager
   fun:pthread_create@@GLIBC_2.2.5
}

## LinuxThreads manager writes messages containing undefined bytes
{
   LinuxThreads: write/pthread_create
   Memcheck:Param
   write(buf)
   fun:pthread_create@@GLIBC_2.1
}
{
   LinuxThreads: write/pthread_create
   Memcheck:Param
   write(buf)
   fun:write
   fun:pthread_create@@GLIBC_2.1
}
{
   LinuxThreads: write/pthread_onexit_process
   Memcheck:Param
   write(buf)
   fun:write
   fun:pthread_onexit_process
   fun:exit
}
{
   LinuxThreads: write/pthread_join
   Memcheck:Param
   write(buf)
   fun:write
   fun:pthread_join
}
{
   LinuxThreads: write/pthread_create
   Memcheck:Param
   write(buf)
   fun:write
   fun:pthread_create@@GLIBC_2.2.5
}
{
   LinuxThreads: write/__pthread_initialize_manager/pthread_create
   Memcheck:Param
   write(buf)
   fun:write
   fun:__pthread_initialize_manager
   fun:pthread_create@@GLIBC_2.2.5
}

## LinuxThreads leaks the stack and TLS data for the manager thread
{
   LinuxThreads: leaks stack of manager thread
   Memcheck:Leak
   fun:malloc
   fun:__pthread_initialize_manager
   fun:pthread_create@@GLIBC_2.1
}
{
   LinuxThreads: leaks TLS data for manager thread
   Memcheck:Leak
   fun:calloc
   fun:_dl_allocate_tls
   fun:__pthread_initialize_minimal
}
{
   LinuxThreads: leaks TLS data for manager thread
   Memcheck:Leak
   fun:memalign
   fun:_dl_allocate_tls
   fun:__pthread_initialize_minimal
}
{
   LinuxThreads: leaks stack of manager thread
   Memcheck:Leak
   fun:malloc
   fun:__pthread_initialize_manager
   fun:pthread_create@@GLIBC_2.2.5
}
{
   LinuxThreads: leaks TLS data for manager thread
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate_tls_storage
   fun:_dl_allocate_tls
   fun:__pthread_initialize_minimal
}
{
   LinuxThreads: leaks TLS data for manager thread
   Memcheck:Leak
   fun:memalign
   fun:_dl_allocate_tls_storage
   fun:_dl_allocate_tls
   fun:__pthread_initialize_minimal
}
