mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 10:05:29 +00:00
Memcheck, replacing the 9-bits-per-byte shadow memory representation to a 2-bits-per-byte representation (with possibly a little more on the side) by taking advantage of the fact that extremely few memory bytes are partially defined. For the SPEC2k benchmarks with "test" inputs, this speeds up Memcheck by a (geometric mean) factor of 1.20, and reduces the size of shadow memory by a (geometric mean) factor of 4.26. At the same time, Addrcheck is removed. It hadn't worked for quite some time, and with these improvements in Memcheck its raisons-d'etre have shrivelled so much that it's not worth the effort to keep around. Hooray! Nb: this code hasn't been tested on PPC. If things go wrong, look first in the fast stack-handling functions (eg. mc_new_mem_stack_160, MC_(helperc_MAKE_STACK_UNINIT)). git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5791
586 lines
12 KiB
Plaintext
586 lines
12 KiB
Plaintext
|
|
##----------------------------------------------------------------------##
|
|
|
|
# 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
|
|
}
|
|
|
|
|
|
##----------------------------------------------------------------------##
|
|
# 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
|
|
}
|
|
|