From: Rémi Bernon rbernon@codeweavers.com
--- dlls/ntdll/heap.c | 2 +- dlls/ntdll/unix/file.c | 6 ++++ dlls/ntdll/unix/process.c | 8 ++++- dlls/ntdll/unix/virtual.c | 6 +++- tools/valgrind.supp | 72 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 tools/valgrind.supp
diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c index f007203fca1..b17868a8629 100644 --- a/dlls/ntdll/heap.c +++ b/dlls/ntdll/heap.c @@ -2163,13 +2163,13 @@ static NTSTATUS heap_resize_block( struct heap *heap, ULONG flags, struct block old_block_size += block_get_size( next ); }
+ valgrind_notify_resize( block + 1, *old_size, size ); if ((next = split_block( heap, flags, block, old_block_size, block_size ))) { block_init_free( next, flags, subheap, old_block_size - block_size ); insert_free_block( heap, flags, subheap, next ); }
- valgrind_notify_resize( block + 1, *old_size, size ); block_set_flags( block, BLOCK_FLAG_USER_MASK & ~BLOCK_FLAG_USER_INFO, BLOCK_USER_FLAGS( flags ) ); block->tail_size = block_get_size( block ) - sizeof(*block) - size; initialize_block( block, *old_size, size, flags ); diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c index 5f3328e5876..4b296d49957 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c @@ -109,6 +109,12 @@ #endif #include <time.h> #include <unistd.h> +#ifdef HAVE_VALGRIND_VALGRIND_H +# include <valgrind/valgrind.h> +#endif +#ifdef HAVE_VALGRIND_MEMCHECK_H +# include <valgrind/memcheck.h> +#endif
#include "ntstatus.h" #define WIN32_NO_STATUS diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c index 243c0d902a4..323f90586cc 100644 --- a/dlls/ntdll/unix/process.c +++ b/dlls/ntdll/unix/process.c @@ -60,6 +60,12 @@ #ifdef HAVE_MACH_MACH_H # include <mach/mach.h> #endif +#ifdef HAVE_VALGRIND_VALGRIND_H +# include <valgrind/valgrind.h> +#endif +#ifdef HAVE_VALGRIND_MEMCHECK_H +# include <valgrind/memcheck.h> +#endif
#include "ntstatus.h" #define WIN32_NO_STATUS @@ -1687,7 +1693,7 @@ NTSTATUS WINAPI NtSetInformationProcess( HANDLE handle, PROCESSINFOCLASS class, if (!ret) { #ifdef VALGRIND_STACK_REGISTER - VALGRIND_STACK_REGISTER( addr, (char *)addr + reserve ); + VALGRIND_DISCARD( VALGRIND_STACK_REGISTER( addr, (char *)addr + reserve ) ); #endif stack->StackBase = addr; } diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index fb9771b34b8..205410dc0c4 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -32,6 +32,7 @@ #include <string.h> #include <stdlib.h> #include <signal.h> +#include <stdint.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> @@ -59,6 +60,9 @@ #ifdef HAVE_VALGRIND_VALGRIND_H # include <valgrind/valgrind.h> #endif +#ifdef HAVE_VALGRIND_MEMCHECK_H +# include <valgrind/memcheck.h> +#endif #if defined(__APPLE__) # include <mach/mach_init.h> # include <mach/mach_vm.h> @@ -3385,7 +3389,7 @@ NTSTATUS virtual_alloc_thread_stack( INITIAL_TEB *stack, ULONG_PTR limit, SIZE_T if (status != STATUS_SUCCESS) goto done;
#ifdef VALGRIND_STACK_REGISTER - VALGRIND_STACK_REGISTER( view->base, (char *)view->base + view->size ); + VALGRIND_DISCARD( VALGRIND_STACK_REGISTER( view->base, (char *)view->base + view->size ) ); #endif
/* setup no access guard page */ diff --git a/tools/valgrind.supp b/tools/valgrind.supp new file mode 100644 index 00000000000..f633b03cc1e --- /dev/null +++ b/tools/valgrind.supp @@ -0,0 +1,72 @@ +{ + mingw_stack_grow + Memcheck:Addr8 + fun:___chkstk_ms +} +{ + mingw_stack_grow + Memcheck:Addr4 + fun:___chkstk_ms +} +{ + KeUserModeCallback_args + Memcheck:Addr8 + fun:memmove + fun:KeUserModeCallback +} +{ + KeUserModeCallback_args + Memcheck:Addr8 + fun:KeUserModeCallback +} +{ + fontconfig_config_leak + Memcheck:Leak + fun:malloc + ... + fun:FcInitLoadOwnConfig +} +{ + dlopen_leak + Memcheck:Leak + fun:malloc + ... + fun:dlopen +} +{ + dlopen_leak + Memcheck:Leak + fun:calloc + ... + fun:dlopen +} +{ + dlopen_leak + Memcheck:Leak + fun:realloc + ... + fun:dlopen +} +{ + exit_handler_leak + Memcheck:Leak + fun:malloc + ... + fun:exit + ... + fun:NtTerminateProcess +} +{ + orc_leak + Memcheck:Leak + fun:calloc + ... + fun:deinterlace_element_init +} +{ + orc_leak + Memcheck:Leak + fun:realloc + ... + fun:deinterlace_element_init +}