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

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

{
   __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
}
{
   RedHat8-1
   Memcheck:Cond
   fun:elf_dynamic_do_rela.8
   fun:_dl_relocate_object
   fun:dl_main
   fun:_dl_sysdep_start
}
{
   RedHat8-2
   Memcheck:Cond
   fun:elf_dynamic_do_rel.7
   fun:_dl_relocate_object
   fun:dl_main
   fun:_dl_sysdep_start
}
{
   RedHat8-3
   Memcheck:Cond
   fun:elf_dynamic_do_rela.8
   fun:_dl_relocate_object
   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
}

##----------------------------------------------------------------------##
## 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_create 2
   Memcheck:Param
   write(buf)
   fun:write
   fun:pthread_create@@GLIBC_2.1
   fun:main
}
{
   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
}

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