mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-10 21:47:06 +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
600 lines
11 KiB
Plaintext
600 lines
11 KiB
Plaintext
|
|
##----------------------------------------------------------------------##
|
|
|
|
# Errors to suppress by default with glibc 2.2.4 / 2.2.5
|
|
|
|
# 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)
|
|
|
|
#-------- For SuSE 8.2 (gcc 3.3, glibc 2.3.2)
|
|
{
|
|
__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
|
|
}
|
|
|
|
|
|
#-------- 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
|
|
}
|
|
|
|
|
|
#-------- For R H 7.3 on i686
|
|
{
|
|
_dl_relocate_object*/*libc-2.2.?.so/_dl_catch_error*(Cond)
|
|
Memcheck:Cond
|
|
fun:_dl_relocate_object*
|
|
obj:*libc-2.2.?.so
|
|
fun:_dl_catch_error*
|
|
}
|
|
{
|
|
_dl_relocate_object_internal
|
|
Memcheck:Cond
|
|
fun:_dl_relocate_object_internal
|
|
}
|
|
{
|
|
index/*-2.2.5.so/*-2.2.5.so
|
|
Memcheck:Cond
|
|
fun:index
|
|
obj:*-2.2.5.so
|
|
obj:*-2.2.5.so
|
|
}
|
|
|
|
|
|
#-------- SuSE 8.1 stuff (gcc-3.2, glibc-2.2.5 + SuSE's hacks)
|
|
{
|
|
__stpcpy/*
|
|
Memcheck:Cond
|
|
fun:__stpcpy
|
|
fun:*
|
|
}
|
|
{
|
|
strlen/decompose_rpath/_dl_map_object
|
|
Memcheck:Cond
|
|
fun:strlen
|
|
fun:decompose_rpath
|
|
fun:_dl_map_object
|
|
}
|
|
{
|
|
strlen/_dl_sym/dlsym_doit
|
|
Memcheck:Cond
|
|
fun:strlen
|
|
fun:_dl_sym
|
|
fun:dlsym_doit
|
|
}
|
|
{
|
|
trecurse/__gconv_release_shlib(Addr4)
|
|
Memcheck:Addr4
|
|
fun:trecurse
|
|
fun:__gconv_release_shlib
|
|
}
|
|
{
|
|
do_release_shlib/trecurse(Addr4)
|
|
Memcheck:Addr4
|
|
fun:do_release_shlib
|
|
fun:trecurse
|
|
}
|
|
|
|
#-------- R H Limbo (glibc-2.2.90) stuff
|
|
{
|
|
elf_dynamic_do_rela.8/_dl_relocate_object_internal
|
|
Memcheck:Cond
|
|
fun:elf_dynamic_do_rela.8
|
|
fun:_dl_relocate_object_internal
|
|
}
|
|
|
|
{
|
|
__strnlen/_nl_make_l10nflist(Cond)
|
|
Memcheck:Cond
|
|
fun:__strnlen
|
|
fun:_nl_make_l10nflist
|
|
}
|
|
|
|
{
|
|
__strnlen/*vfprintf*
|
|
Memcheck:Cond
|
|
fun:__strnlen
|
|
fun:*vfprintf*
|
|
}
|
|
|
|
{
|
|
libXaw.so.7.0(Cond)
|
|
Memcheck:Cond
|
|
obj:*libXaw.so.7.0
|
|
}
|
|
|
|
#-------- Suppress errors appearing as a result of calling
|
|
#-------- __libc_freeres()
|
|
|
|
{
|
|
__twalk/*(Addr4)
|
|
Memcheck:Addr4
|
|
fun:__twalk
|
|
}
|
|
|
|
{
|
|
do_release_shlib/__twalk(Addr4)
|
|
Memcheck:Addr4
|
|
fun:do_release_shlib
|
|
fun:__twalk
|
|
}
|
|
|
|
{
|
|
__libc_freeres/free_mem/free(Free)
|
|
Memcheck:Free
|
|
fun:free
|
|
fun:free_mem
|
|
fun:__libc_freeres
|
|
}
|
|
|
|
#-------- Data races
|
|
{
|
|
_dl_lookup_symbol/fixup/_dl_runtime_resolve
|
|
Helgrind:Eraser
|
|
fun:_dl_lookup_symbol
|
|
fun:fixup
|
|
fun:_dl_runtime_resolve
|
|
}
|
|
|
|
{
|
|
_dl_lookup_symbol_internal/fixup/_dl_runtime_resolve
|
|
Helgrind:Eraser
|
|
fun:_dl_lookup_symbol_internal
|
|
fun:fixup
|
|
fun:_dl_runtime_resolve
|
|
}
|
|
|
|
{
|
|
_dl_lookup_versioned_symbol/fixup/_dl_runtime_resolve
|
|
Helgrind:Eraser
|
|
fun:_dl_lookup_versioned_symbol
|
|
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_fini/exit/__libc_start_main
|
|
Helgrind:Eraser
|
|
fun:_dl_fini
|
|
fun:exit
|
|
fun:__libc_start_main
|
|
}
|
|
|
|
{
|
|
_dl_map_object_deps/dl_open_worker/_dl_catch_error/_dl_open
|
|
Helgrind:Eraser
|
|
fun:_dl_map_object_deps
|
|
fun:dl_open_worker
|
|
fun:_dl_catch_error
|
|
fun:_dl_open
|
|
}
|
|
|
|
{
|
|
_dl_map_object_deps_internal/dl_open_worker/_dl_catch_error_internal/_dl_open
|
|
Helgrind:Eraser
|
|
fun:_dl_map_object_deps_internal
|
|
fun:dl_open_worker
|
|
fun:_dl_catch_error_internal
|
|
fun:_dl_open
|
|
}
|
|
|
|
#-------- 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
|
|
}
|
|
|
|
# even more glibc suppressions ?
|
|
{
|
|
libc-2.2.4.so/libc-2.2.4.so/libc-2.2.4.so(Cond)
|
|
Memcheck:Cond
|
|
obj:*libc-2.2.?.so
|
|
obj:*libc-2.2.?.so
|
|
obj:*libc-2.2.?.so
|
|
}
|
|
{
|
|
libc-2.2.4.so/libc-2.2.4.so/libc-2.2.4.so(Value4)
|
|
Memcheck:Value4
|
|
obj:*libc-2.2.?.so
|
|
obj:*libc-2.2.?.so
|
|
obj:*libc-2.2.?.so
|
|
}
|
|
|
|
##### glibc 2.2.5 stuff perhaps?
|
|
##### suppressions for coolo
|
|
{
|
|
strchr/dl_open_worker(Cond)
|
|
Memcheck:Cond
|
|
fun:strchr
|
|
fun:dl_open_worker
|
|
}
|
|
{
|
|
__rawmemchr(Cond)
|
|
Memcheck:Cond
|
|
fun:__rawmemchr
|
|
}
|
|
{
|
|
_IO_vfprintf/__strnlen(Cond)
|
|
Memcheck:Cond
|
|
fun:__strnlen
|
|
fun:_IO_vfprintf
|
|
}
|
|
{
|
|
__strchrnul/gethostbyname*(Cond)
|
|
Memcheck:Cond
|
|
fun:__strchrnul
|
|
fun:gethostbyname*
|
|
}
|
|
|
|
|
|
##----
|
|
{
|
|
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*
|
|
}
|
|
|
|
{
|
|
*rawmemchr*/*nss*(Cond)
|
|
Memcheck:Cond
|
|
fun:*rawmemchr*
|
|
fun:*nss*
|
|
}
|
|
|
|
{
|
|
*strchrnul*/*nss*(Cond)
|
|
Memcheck:Cond
|
|
fun:*strchrnul*
|
|
fun:*nss*
|
|
}
|
|
|
|
# gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)
|
|
# on Red Hat 7.2 (x86) miscompiles __mpn_construct_double in
|
|
# __mpn_construct_double (../sysdeps/ieee754/dbl-64/mpn2dbl.c:45)
|
|
# (glibc-2.2.4) to read and write below %esp. Hence the following
|
|
# two:
|
|
{
|
|
__mpn_construct_double/*(Addr4)
|
|
Memcheck:Addr4
|
|
fun:__mpn_construct_double
|
|
fun:*
|
|
}
|
|
{
|
|
__mpn_construct_double/*(Addr8)
|
|
Memcheck:Addr8
|
|
fun:__mpn_construct_double
|
|
fun:*
|
|
}
|
|
|
|
# More of the same (gcc bug, I'm pretty sure)
|
|
{
|
|
__fabs/*(Addr4)
|
|
Memcheck:Addr4
|
|
fun:__fabs
|
|
fun:*
|
|
}
|
|
{
|
|
__fabs/*(Addr8)
|
|
Memcheck:Addr8
|
|
fun:__fabs
|
|
fun:*
|
|
}
|
|
|
|
|
|
# Not sure what this is about ... but anyway
|
|
{
|
|
pthread_sighandler/*(Addr4)
|
|
Memcheck:Addr4
|
|
fun:pthread_sighandler
|
|
fun:*
|
|
}
|
|
|
|
|
|
# More glibc stuff, AFAICS
|
|
|
|
{
|
|
__strnlen/__argz_stringify/_nl_make_l10nflist(Cond)
|
|
Memcheck:Cond
|
|
fun:__strnlen
|
|
fun:__argz_stringify
|
|
fun:_nl_make_l10nflist
|
|
}
|
|
|
|
#--------------
|
|
{
|
|
_dl_relocate_object*/dl_open_worker/_dl_catch_error*(Cond)
|
|
Memcheck:Cond
|
|
fun:_dl_relocate_object*
|
|
fun:dl_open_worker
|
|
fun:_dl_catch_error*
|
|
}
|
|
{
|
|
_dl_relocate_object/libc-2.2.4.so/_dl_catch_error(Cond)
|
|
Memcheck:Cond
|
|
fun:_dl_relocate_object
|
|
obj:*libc-2.2.?.so
|
|
fun:_dl_catch_error
|
|
}
|
|
{
|
|
_dl_relocate_object/dl_main(Cond)
|
|
Memcheck:Cond
|
|
fun:_dl_relocate_object
|
|
fun:dl_main
|
|
}
|
|
{
|
|
_dl_relocate_object_internal/dl_main(Cond)
|
|
Memcheck:Cond
|
|
fun:_dl_relocate_object_internal
|
|
fun:dl_main
|
|
}
|
|
|
|
{
|
|
strrchr/_dl_map_object_from_fd/_dl_map_object(Cond)
|
|
Memcheck:Cond
|
|
fun:strrchr
|
|
fun:_dl_map_object_from_fd
|
|
fun:_dl_map_object
|
|
}
|
|
|
|
{
|
|
_dl_start/ld-2.2.4.so(Cond)
|
|
Memcheck:Cond
|
|
fun:_dl_start
|
|
obj:/lib/ld-2.2.4.so
|
|
}
|
|
|
|
#-------- glibc 2.2.5/ Debian 3.0
|
|
{
|
|
_dl_start(Cond)
|
|
Memcheck:Cond
|
|
fun:_dl_start
|
|
}
|
|
|
|
{
|
|
_dl_start(Cond)
|
|
Memcheck:Cond
|
|
fun:_dl_relocate_object
|
|
}
|
|
|
|
#-------------------
|
|
{
|
|
socketcall.connect(serv_addr)/connect/*
|
|
Memcheck:Param
|
|
socketcall.connect(serv_addr)
|
|
fun:connect
|
|
fun:*
|
|
}
|
|
{
|
|
socketcall.connect(serv_addr)/libc-2.2.4.so/libc-2.2.4.so
|
|
Memcheck:Param
|
|
socketcall.connect(serv_addr)
|
|
obj:*libc-2.2.?.so
|
|
obj:*libc-2.2.?.so
|
|
}
|
|
|
|
#----------------------
|
|
{
|
|
write(buf)/write/libX11.so.6.2/libX11.so.6.2(Param)
|
|
Memcheck:Param
|
|
write(buf)
|
|
fun:write
|
|
obj:/usr/X11R6/lib/libX11.so.6.2
|
|
obj:/usr/X11R6/lib/libX11.so.6.2
|
|
}
|
|
{
|
|
write(buf)/libc-2.2.4.so/libX11.so.6.2/libX11.so.6.2(Param)
|
|
Memcheck:Param
|
|
write(buf)
|
|
obj:*libc-2.2.?.so
|
|
obj:/usr/X11R6/lib/libX11.so.6.2
|
|
obj:/usr/X11R6/lib/libX11.so.6.2
|
|
}
|
|
|
|
#{
|
|
# llseek(result)/lseek64/_IO_file_seek(Param)
|
|
# Param
|
|
# llseek(result)
|
|
# fun:lseek64
|
|
# fun:_IO_file_seek
|
|
#}
|
|
|
|
{
|
|
writev(vector[...])/__writev/libX11.so.6.2/libX11.so.6.2
|
|
Memcheck:Param
|
|
writev(vector[...])
|
|
fun:__writev
|
|
obj:/usr/X11R6/lib/libX11.so.6.2
|
|
obj:/usr/X11R6/lib/libX11.so.6.2
|
|
}
|
|
|
|
#----------------
|
|
{
|
|
__rawmemchr/libXt.so.6.0/libXt.so.6.0
|
|
Memcheck:Cond
|
|
fun:__rawmemchr
|
|
obj:/usr/X11R6/lib/libXt.so.6.0
|
|
obj:/usr/X11R6/lib/libXt.so.6.0
|
|
}
|
|
{
|
|
libc-2.2.4.so/libXt.so.6.0/libXt.so.6.0
|
|
Memcheck:Cond
|
|
obj:*libc-2.2.?.so
|
|
obj:/usr/X11R6/lib/libXt.so.6.0
|
|
obj:/usr/X11R6/lib/libXt.so.6.0
|
|
}
|
|
|
|
## Bug in PRE(sys_clone), really. Some args are not used.
|
|
{
|
|
LinuxThread clone use (child_tidptr)
|
|
Memcheck:Param
|
|
clone(child_tidptr)
|
|
fun:clone
|
|
fun:__pthread_initialize_manager
|
|
fun:pthread_create@@GLIBC_2.2.5
|
|
}
|
|
|
|
## LinuxThreads manager writes messages containing undefined bytes
|
|
{
|
|
LinuxThreads: write/pthread_create
|
|
Memcheck:Param
|
|
write(buf)
|
|
fun:pthread_create@@GLIBC_2.1
|
|
}
|
|
{
|
|
LinuxThreads: write/pthread_create
|
|
Memcheck:Param
|
|
write(buf)
|
|
fun:write
|
|
fun:pthread_create@@GLIBC_2.1
|
|
}
|
|
{
|
|
LinuxThreads: write/pthread_onexit_process
|
|
Memcheck:Param
|
|
write(buf)
|
|
fun:write
|
|
fun:pthread_onexit_process
|
|
fun:exit
|
|
}
|
|
{
|
|
LinuxThreads: write/pthread_join
|
|
Memcheck:Param
|
|
write(buf)
|
|
fun:write
|
|
fun:pthread_join
|
|
}
|
|
{
|
|
LinuxThreads: write/pthread_create
|
|
Memcheck:Param
|
|
write(buf)
|
|
fun:write
|
|
fun:pthread_create@@GLIBC_2.2.5
|
|
}
|
|
{
|
|
LinuxThreads: write/__pthread_initialize_manager/pthread_create
|
|
Memcheck:Param
|
|
write(buf)
|
|
fun:write
|
|
fun:__pthread_initialize_manager
|
|
fun:pthread_create@@GLIBC_2.2.5
|
|
}
|
|
|
|
## 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
|
|
}
|
|
{
|
|
LinuxThreads: leaks stack of manager thread
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
fun:__pthread_initialize_manager
|
|
fun:pthread_create@@GLIBC_2.2.5
|
|
}
|
|
{
|
|
LinuxThreads: leaks TLS data for manager thread
|
|
Memcheck:Leak
|
|
fun:calloc
|
|
fun:allocate_dtv
|
|
fun:_dl_allocate_tls_storage
|
|
fun:_dl_allocate_tls
|
|
fun:__pthread_initialize_minimal
|
|
}
|
|
{
|
|
LinuxThreads: leaks TLS data for manager thread
|
|
Memcheck:Leak
|
|
fun:memalign
|
|
fun:_dl_allocate_tls_storage
|
|
fun:_dl_allocate_tls
|
|
fun:__pthread_initialize_minimal
|
|
}
|