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

# Errors to suppress by default with glibc 2.3.x

# 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
#     Free Addr1 Addr2 Addr4 Addr8 Addr16
#     Cond (previously known as Value0)
#
# and the optional extra info is:
#     if Param: name of system call param
#     if Free: name of free-ing fn)

{
   __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
}
{
   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*
}
{
   strlen/_dl_sym/dlsym_doit
   Memcheck:Cond
   fun:strlen
   fun:_dl_sym
   fun:dlsym_doit
}
{
   realpath is inefficiently coded
   Memcheck:Overlap
   fun:memcpy
   fun:realpath*
}

{
   realpath stupidity part II
   Memcheck:Overlap
   fun:strcpy
   fun:realpath*
}
{
   strlen/decompose_rpath/_dl_map_object
   Memcheck:Cond
   fun:strlen
   fun:decompose_rpath
   fun:*dl_map_object*
}
{
   stpcpy/_dl_sym*
   Memcheck:Cond
   fun:__stpcpy
   fun:_dl_*
}

#-------- 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
}
{
   dl_relocate/dl_open_worker
   Memcheck:Cond
   fun:_dl_relocate_object_internal
   fun:dl_open_worker
}

#-------- glibc 2.3.2/ Fedora Core 1
{
   dl_relocate/dl_main
   Memcheck:Cond
   fun:_dl_relocate_object_internal
   fun:dl_main
}

#-------- glibc 2.3.3/ Fedora Core 2
{
   dl_relocate_object/dl_main
   Memcheck:Cond
   fun:_dl_relocate_object
   fun:dl_main
}
{
   _dl_relocate_object/dl_open_worker
   Memcheck:Cond
   fun:_dl_relocate_object
   fun:dl_open_worker
}

#-------- glibc 2.3.4/ Fedora Core 3
{
   dl_relocate_object
   Memcheck:Cond
   fun:_dl_relocate_object
}

#-------- Data races
{
   _dl_lookup_symbol_internal/fixup/_dl_runtime_resolve
   Helgrind:Eraser
   fun:_dl_lookup_symbol_internal
   fun:fixup
   fun:_dl_runtime_resolve
}
{
   _dl_lookup_symbol_x/fixup/_dl_runtime_resolve
   Helgrind:Eraser
   fun:_dl_lookup_symbol_x
   fun:fixup
   fun:_dl_runtime_resolve
}
{
   _dl_lookup_versioned_symbol_internal/fixup/_dl_runtime_resolve
   Helgrind:Eraser
   fun:_dl_lookup_versioned_symbol_internal
   fun:fixup
   fun:_dl_runtime_resolve
}
{
   _dl_lookup_versioned_symbol/ld-2.3.2.so/ld-2.3.2.so
   Helgrind:Eraser
   fun:_dl_lookup_versioned_symbol
   obj:/lib/ld-2.3.2.so
   obj:/lib/ld-2.3.2.so
}
{
   _dl_lookup_symbol/ld-2.3.2.so/ld-2.3.2.so
   Helgrind:Eraser
   fun:_dl_lookup_symbol
   obj:/lib/ld-2.3.2.so
   obj:/lib/ld-2.3.2.so
}
{
   _dl_fini
   Helgrind:Eraser
   fun:_dl_fini
}
{
   ld-2.3.2.so/exit/__libc_start_main
   Helgrind:Eraser
   obj:/lib/ld-2.3.2.so
   fun:exit
   fun:__libc_start_main
}

#-------- Threading bugs?
# glibc 'knows' that destroying a locked mutex will unlock it
{
   pthread_error/pthread_mutex_destroy/__closedir
   core:PThread
   fun:pthread_error
   fun:pthread_mutex_destroy
   fun:__closedir
}

{
   pthread_error/pthread_mutex_destroy/_IO_default_finish
   core:PThread
   fun:pthread_error
   fun:pthread_mutex_destroy
   fun:_IO_default_finish*
}

{
   pthread_mutex_unlock/_IO_funlockfile
   core:PThread
   fun:pthread_mutex_unlock
   fun:_IO_funlockfile
}

##----------------------------------------------------------------------##
## Bugs in helper library supplied with Intel Icc 7.0 (65)
## in /opt/intel/compiler70/ia32/lib/libcxa.so.3
{
   Intel compiler70/ia32/lib/libcxa.so.3 below-esp accesses
   Memcheck:Addr4
   obj:/opt/intel/compiler70/ia32/lib/libcxa.so.3
}

##----------------------------------------------------------------------##
## SuSE 9 after FV changes (post 2.1.0)

{
   strlen/_dl_init_paths/dl_main/_dl_sysdep_start(Cond)
   Memcheck:Cond
   fun:strlen
   fun:_dl_init_paths
   fun:dl_main
   fun:_dl_sysdep_start
}

{
   Ugly strchr error in /lib/ld-2.3.2.so
   Memcheck:Cond
   obj:/lib/ld-2.3.2.so
}

##----------------------------------------------------------------------##
## SuSE 9.1 with post 2.1.2
{
   Ugly strchr error in /lib/ld-2.3.3.so
   Memcheck:Cond
   obj:/lib/ld-2.3.3.so
}

##----------------------------------------------------------------------##
## SuSE 9.1 with 3.0 branch (x86)
{
   Strstr dubiousness in pthread_initialize
   Memcheck:Cond
   fun:strstr
   fun:pthread_initialize
   obj:/lib/libpthread.so.0
   obj:/lib/libpthread.so.0
}

##----------------------------------------------------------------------##
## glibc-2.3.3 on FC2
## Assumes that sysctl returns \0-terminated strings in is_smp_system
#{
#   Unterminated strstr string in is_smp_system() (NPTL)
#   Memcheck:Cond
#   fun:strstr
#   fun:__pthread_initialize_minimal
#   obj:/lib/tls/libpthread*.so*
#   obj:/lib/tls/libpthread*.so*
#}
#{
#   Unterminated strstr string in is_smp_system() (LinuxThreads)
#   Memcheck:Cond
#   fun:strstr
#   fun:pthread_initialize
#   obj:/lib/i686/libpthread*.so*
#   obj:/lib/i686/libpthread*.so*
#}
#{
#   Unterminated strstr string in is_smp_system() (LinuxThreads)
#   Memcheck:Cond
#   fun:strstr
#   fun:pthread_initialize
#   obj:/lib/libpthread-0.10.so
#   obj:/lib/libpthread-0.10.so
#}

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

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

{
   LinuxThreads: write/pthread_create
   Memcheck:Param
   write(buf)
   fun:write
   fun:pthread_create
}

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

##----------------------------------------------------------------------##
## glibc-2.3.4 on FC3
## Assumes that sysctl returns \0-terminated strings in is_smp_system
#{
#   Unterminated strstr string in is_smp_system() (NPTL)
#   Memcheck:Cond
#   fun:strstr
#   fun:__pthread_initialize_minimal
#   obj:/lib/tls/libpthread-2.3.4.so
#   obj:/lib/tls/libpthread-2.3.4.so
#}
#{
#   Unterminated strstr string in is_smp_system() (NPTL)
#   Memcheck:Cond
#   fun:strstr
#   fun:__pthread_initialize_minimal
#   obj:/lib64/tls/libpthread*.so*
#}

##----------------------------------------------------------------------##
## glibc-2.3.5 on FC4
## Assumes that sysctl returns \0-terminated strings in is_smp_system
#{
#   Unterminated strstr string in is_smp_system() (NPTL)
#   Memcheck:Cond
#   fun:strstr
#   fun:__pthread_initialize_minimal
#   obj:*/libpthread-2.3.5.so
#   obj:*/libpthread-2.3.5.so
#}


##----------------------------------------------------------------------##
# 
# I don't know why this is needed, but still:
{
   glibc-2.3.x-on-SuSE-10.0-(PPC)-1
   Memcheck:Cond
   fun:_dl_start
   fun:_start
}
{
   glibc-2.3.x-on-SuSE-10.1-(PPC)-1
   Memcheck:Cond
   fun:_dl_start_final
   fun:_dl_start
   fun:_start
}
{
   glibc-2.3.x-on-SuSE-10.0/10.1-(PPC)-2a
   Memcheck:Cond
   fun:index
   obj:*ld-2.3.*.so
}
{
   glibc-2.3.x-on-SuSE-10.0/10.1-(PPC)-2b
   Memcheck:Addr4
   fun:index
   fun:expand_dynamic_string_token
}
{
   glibc-2.3.5-on-SuSE-10.0/10.1-(PPC)-2c
   Memcheck:Addr4
   fun:index
   obj:*ld-2.3.*.so
}
{
   glibc-2.3.5-on-SuSE-10.0/10.1-(PPC)-3
   Memcheck:Addr4
   fun:*wordcopy_fwd_dest_aligned*
   fun:mem*cpy
   obj:*lib*2.3.*.so
}
{
   glibc-2.3.5-on-SuSE-10.0/10.1-(PPC)-4
   Memcheck:Addr4
   fun:bcmp
   fun:*rpath*
   fun:*rpath*
   fun:*rpath*
}

##----------------------------------------------------------------------##
# Hacks pertaining to the fact that our intercept mechanism can't
# always get hold of strlen early enough, due to idiocy in the low
# level memory manager.

## HACK to do with strlen not being intercepted early enough
{
   strlen-not-intercepted-early-enough-HACK-1
   Memcheck:Addr4
   fun:strlen
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   strlen-not-intercepted-early-enough-HACK-2
   Memcheck:Addr4
   fun:strlen
   fun:decompose_rpath
   fun:cache_rpath
   fun:_dl_map_object
}

{
   strlen-not-intercepted-early-enough-HACK-3
   Memcheck:Cond
   fun:strlen
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   strlen-not-intercepted-early-enough-HACK-4
   Memcheck:Cond
   fun:strlen
   fun:expand_dynamic_string_token
   fun:_dl_map_object
}

{
   strlen-not-intercepted-early-enough-HACK-5
   Memcheck:Cond
   fun:strlen
   fun:fillin_rpath
   fun:_dl_init_paths
}


## HACK to do with index not being intercepted early enough
{
   index-not-intercepted-early-enough-HACK-1
   Memcheck:Cond
   fun:index
   obj:*
   fun:_dl_map_object
}
{
   index-not-intercepted-early-enough-HACK-2
   Memcheck:Cond
   fun:index
   fun:_dl_map_object
   obj:*
   fun:_dl_catch_error
}
{
   index-not-intercepted-early-enough-HACK-3
   Memcheck:Cond
   fun:index
   fun:_dl_map_object
   obj:*
   fun:_dl_sysdep_start
}

{
   index-not-intercepted-early-enough-HACK-4
   Memcheck:Cond
   fun:index
   fun:expand_dynamic_string_token
}


##----------------------------------------------------------------------##
## MontaVista 3.1 on ppc32 integer only
{
   MontaVista-3.1-ppc32-#1
   Memcheck:Value4
   obj:/lib/ld-2.3.2.so
   obj:/lib/ld-2.3.2.so
   fun:*dl_map_object*
   obj:/lib/libc-2.3.2.so
}

{
   MontaVista-3.1-ppc32-#2
   Memcheck:Value4
   fun:malloc
   obj:/lib/ld-2.3.2.so
   obj:/lib/ld-2.3.2.so
   obj:/lib/libc-2.3.2.so
}

{
   MontaVista-3.1-ppc32-#3
   Memcheck:Value4
   obj:/lib/ld-2.3.2.so
   obj:/lib/ld-2.3.2.so
}

##----------------------------------------------------------------------##
## Ubuntu something (based on Debian 3.0?) on x86

{
   Ubuntu-stripped-ld.so
   Memcheck:Cond
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
}

