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

# 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
   Addrcheck,Memcheck:Overlap
   fun:memcpy
   fun:realpath*
}

{
   realpath stupidity part II
   Addrcheck,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
   Addrcheck,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
#}


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


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

##----------------------------------------------------------------------##
## 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.5.so
   obj:/lib/ld-2.3.5.so
   obj:/lib/ld-2.3.5.so
   obj:/lib/ld-2.3.5.so
   obj:/lib/ld-2.3.5.so
}

