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

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

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