From b9c11b1a8577418ba10ba8156eda6e57c436b32c Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Sat, 9 Nov 2013 22:56:04 +0100 Subject: [PATCH] memcheck: Add a 'make memcheck' target that runs valgrind Checks for memory errors and leaks https://bugzilla.gnome.org/show_bug.cgi?id=711744 --- build/glib-test.supp | 16 ++++++++++++++++ configure.ac | 1 + glib-tap.mk | 18 ++++++++++++++++-- glib.mk | 13 +++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 build/glib-test.supp diff --git a/build/glib-test.supp b/build/glib-test.supp new file mode 100644 index 000000000..90ab4df8d --- /dev/null +++ b/build/glib-test.supp @@ -0,0 +1,16 @@ +{ + glibc-tls-allocation + Memcheck:Leak + fun:calloc + fun:_dl_allocate_tls + fun:pthread_create@@GLIBC_2.2.5 + ... +} + +{ + pthread-exit + Memcheck:Leak + ... + fun:pthread_exit + ... +} diff --git a/configure.ac b/configure.ac index a2839dfd8..3068caa64 100644 --- a/configure.ac +++ b/configure.ac @@ -65,6 +65,7 @@ cflags_set=${CFLAGS+set} AM_INIT_AUTOMAKE([1.11 -Wno-portability no-define no-dist-gzip dist-xz tar-ustar]) AM_MAINTAINER_MODE([enable]) +AM_EXTRA_RECURSIVE_TARGETS([memcheck]) # Support silent build rules. Disable # by either passing --disable-silent-rules to configure or passing V=1 diff --git a/glib-tap.mk b/glib-tap.mk index 6b9d107c0..1722f3c51 100644 --- a/glib-tap.mk +++ b/glib-tap.mk @@ -1,9 +1,9 @@ # GLIB - Library of useful C routines -TESTS_ENVIRONMENT= \ +AM_TESTS_ENVIRONMENT= \ G_TEST_SRCDIR="$(abs_srcdir)" \ G_TEST_BUILDDIR="$(abs_builddir)" \ - G_DEBUG=gc-friendly \ + G_DEBUG="gc-friendly cleanup" \ MALLOC_CHECK_=2 \ MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh @@ -132,3 +132,17 @@ installed_test_meta_DATA = $(installed_testcases:=.test) CLEANFILES += $(installed_test_meta_DATA) endif + +VALGRIND_ARGS = \ + --leak-check=full \ + --show-leak-kinds=all \ + --child-silent-after-fork=yes \ + --suppressions=$(abs_top_srcdir)/build/glib-test.supp \ + --num-callers=18 \ + $(NULL) + +memcheck-local: $(all_test_programs) + $(MAKE) check-am TESTS="$(all_test_programs)" \ + TESTS_ENVIRONMENT="G_DEBUG='gc-friendly cleanup'" \ + LOG_COMPILER="libtool --mode=execute valgrind $(VALGRIND_ARGS) --quiet --log-fd=7" \ + AM_TESTS_FD_REDIRECT="7>&2" diff --git a/glib.mk b/glib.mk index de87d58a1..90ccc57fc 100644 --- a/glib.mk +++ b/glib.mk @@ -168,3 +168,16 @@ installed_test_meta_DATA = $(installed_testcases:=.test) CLEANFILES += $(installed_test_meta_DATA) endif + +VALGRIND_ARGS = \ + --leak-check=full \ + --show-leak-kinds=all \ + --child-silent-after-fork=yes \ + --suppressions=$(abs_top_srcdir)/build/glib-test.supp \ + $(NULL) + +memcheck-local: $(all_test_programs) + $(MAKE) check-am TESTS="$(all_test_programs)" \ + TESTS_ENVIRONMENT="G_DEBUG='gc-friendly cleanup'" \ + LOG_COMPILER="libtool --mode=execute valgrind $(VALGRIND_ARGS) --quiet --log-fd=7" \ + AM_TESTS_FD_REDIRECT="7>&2"