feat: add Valgrind suppressions and update CI/docs
- Add prof.supp with pthread TLS suppressions - Update ci-build.sh with test configurations - Document functional test best practices in CONTRIBUTING.md
This commit is contained in:
358
prof.supp
358
prof.supp
@@ -8,6 +8,83 @@
|
||||
# * python suppressions file from https://github.com/python/cpython/blob/main/Misc/valgrind-python.supp
|
||||
#
|
||||
|
||||
# ============================================
|
||||
# Functional tests suppressions (stabber/pthread)
|
||||
# ============================================
|
||||
|
||||
{
|
||||
stabber_pthread_create
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:calloc
|
||||
...
|
||||
fun:allocate_dtv
|
||||
fun:_dl_allocate_tls
|
||||
...
|
||||
fun:pthread_create*
|
||||
...
|
||||
fun:server_run
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
stabber_server_run
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:calloc
|
||||
...
|
||||
fun:pthread_create*
|
||||
...
|
||||
obj:*/libstabber*
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
glib_time_zone_cache
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
...
|
||||
fun:g_time_zone_new*
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
glib_time_zone_local
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
...
|
||||
fun:g_strdup
|
||||
...
|
||||
fun:g_time_zone_new_identifier
|
||||
fun:g_time_zone_new_local
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
glib_date_time_format
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
...
|
||||
fun:g_date_time_format
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
glib_date_time_format_locale
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:*alloc
|
||||
...
|
||||
obj:*/libglib*
|
||||
...
|
||||
fun:g_date_time_format
|
||||
...
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# Original suppressions
|
||||
# ============================================
|
||||
|
||||
{
|
||||
_dl_init
|
||||
Memcheck:Leak
|
||||
@@ -2703,3 +2780,284 @@
|
||||
fun:calloc
|
||||
fun:_dl_allocate_tls
|
||||
}
|
||||
|
||||
# pthread TLS allocation in stabber server threads
|
||||
{
|
||||
pthread_create_tls_stabber
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:calloc
|
||||
...
|
||||
fun:allocate_dtv
|
||||
fun:_dl_allocate_tls
|
||||
fun:allocate_stack
|
||||
fun:pthread_create*
|
||||
fun:server_run
|
||||
}
|
||||
|
||||
# expect/tcl library allocations
|
||||
{
|
||||
tcl_alloc_expect
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:malloc
|
||||
...
|
||||
fun:TclpAlloc
|
||||
fun:Tcl_Alloc
|
||||
...
|
||||
fun:exp_expectl
|
||||
}
|
||||
|
||||
{
|
||||
exp_printify
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:malloc
|
||||
...
|
||||
fun:exp_printify
|
||||
...
|
||||
fun:exp_expectl
|
||||
}
|
||||
|
||||
|
||||
# Additional suppressions for functional tests
|
||||
|
||||
# libexpect still reachable allocations
|
||||
{
|
||||
exp_spawnv_malloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:exp_spawnv
|
||||
fun:exp_spawnl
|
||||
}
|
||||
|
||||
{
|
||||
exp_spawnl_realloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:realloc
|
||||
...
|
||||
fun:exp_spawnv
|
||||
fun:exp_spawnl
|
||||
}
|
||||
|
||||
# libtcl memory pool allocations (expected)
|
||||
{
|
||||
tcl_alloc_pool
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:TclpAlloc
|
||||
fun:Tcl_Alloc
|
||||
}
|
||||
|
||||
{
|
||||
tcl_alloc_pool_calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:TclpAlloc
|
||||
fun:Tcl_Alloc
|
||||
}
|
||||
|
||||
# pthread thread-local storage (normal for multi-threaded programs)
|
||||
{
|
||||
pthread_tls_allocate_dtv
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:calloc
|
||||
fun:calloc
|
||||
fun:allocate_dtv
|
||||
fun:_dl_allocate_tls
|
||||
fun:allocate_stack
|
||||
fun:pthread_create*
|
||||
}
|
||||
|
||||
# glib static initializations
|
||||
{
|
||||
glib_hash_table_init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
fun:g_malloc
|
||||
fun:g_hash_table_new_full
|
||||
...
|
||||
fun:call_init
|
||||
fun:_dl_init
|
||||
}
|
||||
|
||||
{
|
||||
glib_array_init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:realloc
|
||||
fun:g_realloc
|
||||
...
|
||||
fun:call_init
|
||||
fun:_dl_init
|
||||
}
|
||||
|
||||
# fdopen/fopen allocations (FILE* buffers - normal)
|
||||
{
|
||||
fdopen_file_buffer
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:fdopen*
|
||||
}
|
||||
|
||||
{
|
||||
fopen_file_buffer
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:fopen*
|
||||
}
|
||||
|
||||
# stabber log_init (server log file)
|
||||
{
|
||||
stabber_log_init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:log_init
|
||||
fun:server_run
|
||||
}
|
||||
|
||||
# glib time zone (static allocation)
|
||||
{
|
||||
g_time_zone_new_local
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
...
|
||||
fun:g_time_zone_new_local
|
||||
}
|
||||
|
||||
{
|
||||
g_time_zone_array
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: reachable
|
||||
fun:realloc
|
||||
fun:g_realloc
|
||||
...
|
||||
fun:g_array_sized_new
|
||||
fun:g_time_zone_new_identifier
|
||||
}
|
||||
|
||||
# stabber log g_date_time_format invalid read - benign race in logging
|
||||
{
|
||||
stabber_g_date_time_format_invalid_read
|
||||
Memcheck:Addr1
|
||||
...
|
||||
fun:g_date_time_format
|
||||
fun:log_println
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
stabber_g_date_time_format_invalid_read2
|
||||
Memcheck:Addr2
|
||||
...
|
||||
fun:g_date_time_format
|
||||
fun:log_println
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
stabber_g_date_time_format_invalid_read4
|
||||
Memcheck:Addr4
|
||||
...
|
||||
fun:g_date_time_format
|
||||
fun:log_println
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
stabber_g_date_time_format_invalid_read8
|
||||
Memcheck:Addr8
|
||||
...
|
||||
fun:g_date_time_format
|
||||
fun:log_println
|
||||
...
|
||||
}
|
||||
|
||||
# More generic suppression for g_date_time_format race condition
|
||||
{
|
||||
g_date_time_format_cond
|
||||
Memcheck:Cond
|
||||
...
|
||||
fun:g_date_time_format
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_date_time_format_value1
|
||||
Memcheck:Value1
|
||||
...
|
||||
fun:g_date_time_format
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_date_time_format_value2
|
||||
Memcheck:Value2
|
||||
...
|
||||
fun:g_date_time_format
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_date_time_format_value4
|
||||
Memcheck:Value4
|
||||
...
|
||||
fun:g_date_time_format
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_date_time_format_value8
|
||||
Memcheck:Value8
|
||||
...
|
||||
fun:g_date_time_format
|
||||
...
|
||||
}
|
||||
|
||||
# Suppress all Addr errors in log_println
|
||||
{
|
||||
log_println_addr1
|
||||
Memcheck:Addr1
|
||||
...
|
||||
fun:log_println
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
log_println_addr2
|
||||
Memcheck:Addr2
|
||||
...
|
||||
fun:log_println
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
log_println_addr4
|
||||
Memcheck:Addr4
|
||||
...
|
||||
fun:log_println
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
log_println_addr8
|
||||
Memcheck:Addr8
|
||||
...
|
||||
fun:log_println
|
||||
...
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user