libctf: suppress spurious failure of malloc-counting tests under valgrind

The libctf-regression/open-error-free.c test works by interposing malloc
and counting mallocs and frees across libctf operations.  This only
works under suitably-interposable mallocs on systems supporting
dlsym (RTLD_NEXT, ...), so its operation is restricted to glibc
systems for now, but also it interacts badly with valgrind, which
interposes malloc itself.  Detect a running valgrind and skip the test.

Add new facilities allowing libctf lookup tests to declare themselves
unsupported, by printing "UNSUPPORTED: " and then some meaningful
message instead of their normal output.

libctf/
	* configure.ac: Check for <valgrind/valgrind.h>.
	* config.h.in: Regenerate.
	* configure: Likewise.
	* testsuite/lib/ctf-lib.exp (run_lookup_test): Add support for
	UNSUPPORTED tests.
	* testsuite/libctf-regression/open-error-free.c: When running
	under valgrind, this test is unsupported.
This commit is contained in:
Nick Alcock
2024-06-12 11:08:39 +01:00
parent e3cd566075
commit 9f0fb75b8e
5 changed files with 23 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
/* Make sure that, on error, an opened dict is properly freed. */
#define _GNU_SOURCE 1
#include "config.h"
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
@@ -8,6 +9,10 @@
#include <ctf-api.h>
#include <ctf.h>
#ifdef HAVE_VALGRIND_VALGRIND_H
#include <valgrind/valgrind.h>
#endif
static unsigned long long malloc_count;
static unsigned long long free_count;
@@ -111,6 +116,14 @@ int main (void)
ctf_next_t *it = NULL;
unsigned long long frozen_malloc_count, frozen_free_count;
#ifdef HAVE_VALGRIND_VALGRIND_H
if (RUNNING_ON_VALGRIND)
{
printf ("UNSUPPORTED: valgrind interferes with malloc counting\n");
return 0;
}
#endif
if ((fp = ctf_create (&err)) == NULL)
goto open_err;