--- orig/valgrind-3.7.0/configure.in	2011-11-05 12:13:30.000000000 +0100
+++ valgrind-3.7.0/configure.in	2012-08-01 14:23:49.000000000 +0200
@@ -1938,6 +1938,8 @@
    callgrind/callgrind_annotate
    callgrind/callgrind_control
    callgrind/tests/Makefile
+   failgrind/Makefile
+   failgrind/tests/Makefile
    helgrind/Makefile
    helgrind/tests/Makefile
    massif/Makefile
--- orig/valgrind-3.7.0/Makefile.am	2011-10-26 23:24:45.000000000 +0200
+++ valgrind-3.7.0/Makefile.am	2012-07-30 09:37:27.000000000 +0200
@@ -10,6 +10,7 @@
 		lackey \
 		none \
 		helgrind \
+		failgrind \
 		drd
 
 EXP_TOOLS = 	exp-sgcheck \
--- orig/valgrind-3.7.0/failgrind/Makefile.am	1970-01-01 01:00:00.000000000 +0100
+++ valgrind-3.7.0/failgrind/Makefile.am	2012-08-01 14:18:16.000000000 +0200
@@ -0,0 +1,89 @@
+include $(top_srcdir)/Makefile.tool.am
+
+noinst_HEADERS = failgrind.h
+
+noinst_PROGRAMS= failgrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@
+if VGCONF_HAVE_PLATFORM_SEC
+noinst_PROGRAMS += failgrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@
+endif
+
+
+failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_SOURCES = fg_main.c
+failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CPPFLAGS     = \
+	$(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS       = \
+	$(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_DEPENDENCIES = \
+	$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@)
+failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDADD        = \
+        $(TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@)
+failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS      = \
+	$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
+	$(top_builddir)/coregrind/link_tool_exe_@VGCONF_OS@ \
+	@VALT_LOAD_ADDRESS_PRI@ \
+	$(LINK) \
+	$(failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
+	$(failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
+
+if VGCONF_HAVE_PLATFORM_SEC
+failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_SOURCES      = fg_main.c
+failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CPPFLAGS     = \
+	$(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
+failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS       = \
+	$(AM_CFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) -O2
+failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_DEPENDENCIES = \
+	$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_SEC_CAPS@)
+failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDADD        = \
+	$(TOOL_LDADD_@VGCONF_PLATFORM_SEC_CAPS@)
+failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS      = \
+	$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
+failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
+	$(top_builddir)/coregrind/link_tool_exe_@VGCONF_OS@ \
+	@VALT_LOAD_ADDRESS_SEC@ \
+	$(LINK) \
+	$(failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
+	$(failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
+endif
+
+#----------------------------------------------------------------------------
+# vgpreload_failgrind-<platform>.so
+#----------------------------------------------------------------------------
+
+noinst_PROGRAMS += vgpreload_failgrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@.so
+if VGCONF_HAVE_PLATFORM_SEC
+noinst_PROGRAMS += vgpreload_failgrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.so
+endif
+
+if VGCONF_OS_IS_DARWIN
+noinst_DSYMS = $(noinst_PROGRAMS)
+endif
+
+VGPRELOAD_FAILGRIND_SOURCES_COMMON = fg_intercepts.c
+
+vgpreload_failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_SOURCES      = \
+	$(VGPRELOAD_FAILGRIND_SOURCES_COMMON)
+vgpreload_failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CPPFLAGS     = \
+	$(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+vgpreload_failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CFLAGS       = \
+	$(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) $(AM_CFLAGS_PIC)
+vgpreload_failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_DEPENDENCIES = \
+	$(LIBREPLACEMALLOC_@VGCONF_PLATFORM_PRI_CAPS@)
+vgpreload_failgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_LDFLAGS      = \
+	$(PRELOAD_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) \
+	$(LIBREPLACEMALLOC_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
+
+if VGCONF_HAVE_PLATFORM_SEC
+vgpreload_failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_SOURCES      = \
+	$(VGPRELOAD_FAILGRIND_SOURCES_COMMON)
+vgpreload_failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CPPFLAGS     = \
+	$(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
+vgpreload_failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CFLAGS       = \
+	$(AM_CFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) $(AM_CFLAGS_PIC)
+vgpreload_failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_DEPENDENCIES = \
+	$(LIBREPLACEMALLOC_@VGCONF_PLATFORM_SEC_CAPS@)
+vgpreload_failgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_LDFLAGS      = \
+	$(PRELOAD_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) \
+	$(LIBREPLACEMALLOC_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
+endif
+
--- orig/valgrind-3.7.0/failgrind/fg_intercepts.c	1970-01-01 01:00:00.000000000 +0100
+++ valgrind-3.7.0/failgrind/fg_intercepts.c	2012-08-01 16:30:11.000000000 +0200
@@ -0,0 +1,277 @@
+/*--------------------------------------------------------------------*/
+/*-- Failgrind: malloc and syscall failure generator. fg_interceps.c -*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Failgrind, malloc and syscall failure generator,
+   which volontary make fail some functions.
+
+   Copyright (C) 2012 Corentin LABBE
+      corentin.labbe@geomatys.fr
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+#include "../memcheck/memcheck.h"
+
+#include "pub_tool_basics.h"
+#include "pub_tool_tooliface.h"
+#include "pub_tool_libcassert.h"
+#include "pub_tool_libcprint.h"
+#include "pub_tool_debuginfo.h"
+#include "pub_tool_libcbase.h"
+#include "pub_tool_options.h"
+#include "pub_tool_machine.h"
+#include "pub_tool_redir.h"
+
+#include "failgrind.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* for bind */
+#include <sys/types.h>
+#include <sys/socket.h>
+
+/* for fopen */
+#include <stdio.h>
+
+#include <time.h>
+
+/*
+void I_WRAP_SONAME_FNNAME_ZU(NONE,actual) ( void );
+
+void I_WRAP_SONAME_FNNAME_ZU(NONE,actual) ( void )
+{
+	OrigFn fn;
+	VALGRIND_GET_ORIG_FN(fn);
+	VALGRIND_PRINTF("wrapper-pre\n");
+	if (0 == 1)
+		CALL_FN_v_v(fn);
+	else
+		VALGRIND_PRINTF("Do a fault for actual\n");
+	VALGRIND_PRINTF("wrapper-post\n");
+}
+*/
+
+static int random_init;
+#define INIT_RANDOM { if (random_init == 0) {srand(time(NULL)); VALGRIND_PRINTF("RANDOM INIT\n"); random_init = 1;}}
+
+static int fault_percent;
+
+int I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,open) ( const char *pathname, int flags, mode_t mode );
+ssize_t I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,read) ( int fd, void *buf, size_t count );
+ssize_t I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,write) ( int fd, void *buf, size_t count );
+FILE * I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,fopen) ( const char *pathname, const char *mode );
+void * I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,malloc) ( size_t size );
+int I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,socket) ( int domain, int type, int protocol );
+int I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,bind) ( int sockfd, const struct sockaddr *my_addr, socklen_t addrlen );
+
+static const int error_list_for_open[] = {EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE, ENAMETOOLONG, ENFILE, ENODEV, ENOENT, ENOMEM, ENOSPC, ENOTDIR, ENXIO, EOVERFLOW, EPERM, EROFS, ETXTBSY, EWOULDBLOCK};
+static const int error_list_for_fopen[] = {EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE, ENAMETOOLONG, ENFILE, ENODEV, ENOENT, ENOMEM, ENOSPC, ENOTDIR, ENXIO, EOVERFLOW, EPERM, EROFS, ETXTBSY, EWOULDBLOCK};
+static const int error_list_for_malloc[] = {ENOMEM};
+static const int error_list_for_read[] = {EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, EISDIR};
+static const int error_list_for_write[] = {EAGAIN, EBADF, EFAULT, EFBIG, EINTR, EINVAL, EIO, ENOSPC, EPIPE};
+static const int error_list_for_socket[] = {EACCES, EAFNOSUPPORT, EINVAL, EMFILE, ENFILE, ENOBUFS, ENOMEM, EPROTONOSUPPORT};
+static const int error_list_for_bind[] = {EACCES, EADDRINUSE, EBADF, EINVAL, ENOTSOCK, EADDRNOTAVAIL, EFAULT, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EROFS};
+
+/* TODO fopen fread fwrite
+	daemon
+	socket connect accept listen bind poll setsockopt getsockopt
+	fgets fputs
+	getaddrinfo getnameinfo
+	execve
+	ioctl fcntl
+*/
+
+#define FAILGRIND_GET_ERROR(_fg_fnname) _fg_fnname[rand() % (sizeof(_fg_fnname)/sizeof(_fg_fnname[0])) ]
+
+/*============================================================================*/
+/*============================================================================*/
+int I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,open) ( const char *pathname, int flags, mode_t mode )
+{
+	OrigFn fn;
+	int r = 0;
+
+	fault_percent = VALGRIND_GET_PERCENT;
+
+	VALGRIND_GET_ORIG_FN(fn);
+	if (pathname != NULL)
+		VALGRIND_PRINTF("wrapper-pre open %s\n", pathname);
+	else
+		VALGRIND_PRINTF("wrapper-pre open\n");
+	INIT_RANDOM
+
+	if (rand()%100 > fault_percent) {
+		CALL_FN_W_WWW(r, fn, pathname, flags, mode);
+	} else {
+		VALGRIND_PRINTF("Do a fault for open\n");
+		errno = FAILGRIND_GET_ERROR(error_list_for_open);
+		return -1;
+	}
+	VALGRIND_PRINTF("wrapper-post open\n");
+	return r;
+}
+/*============================================================================*/
+/*============================================================================*/
+ssize_t I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,read) ( int fd, void *buf, size_t count )
+{
+	OrigFn fn;
+	ssize_t r = 0;
+	
+	fault_percent = VALGRIND_GET_PERCENT;
+
+	VALGRIND_GET_ORIG_FN(fn);
+	VALGRIND_PRINTF("wrapper-pre read\n");
+	INIT_RANDOM
+
+	if (rand()%100 > fault_percent) {
+		CALL_FN_W_WWW(r, fn, fd, buf, count);
+	} else {
+		VALGRIND_PRINTF("Do a fault for read\n");
+		errno = FAILGRIND_GET_ERROR(error_list_for_read);
+		return -1;
+	}
+	VALGRIND_PRINTF("wrapper-post read\n");
+	return r;
+}
+
+/*============================================================================*/
+/*============================================================================*/
+ssize_t I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,write) ( int fd, void *buf, size_t count )
+{
+	OrigFn fn;
+	ssize_t r = 0;
+	
+	fault_percent = VALGRIND_GET_PERCENT;
+
+	VALGRIND_GET_ORIG_FN(fn);
+	VALGRIND_PRINTF("wrapper-pre write\n");
+	INIT_RANDOM
+
+	if (rand()%100 > fault_percent) {
+		CALL_FN_W_WWW(r, fn, fd, buf, count);
+	} else {
+		VALGRIND_PRINTF("Do a fault for write\n");
+		errno = FAILGRIND_GET_ERROR(error_list_for_write);
+		return -1;
+	}
+	VALGRIND_PRINTF("wrapper-post write\n");
+	return r;
+}
+
+/*============================================================================*/
+/*============================================================================*/
+FILE * I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,fopen) ( const char *pathname, const char *mode )
+{
+	OrigFn fn;
+	FILE *r = 0;
+	
+	fault_percent = VALGRIND_GET_PERCENT;
+
+	VALGRIND_GET_ORIG_FN(fn);
+	if (pathname != NULL)
+		VALGRIND_PRINTF("wrapper-pre open %s\n", pathname);
+	else
+		VALGRIND_PRINTF("wrapper-pre open\n");
+	INIT_RANDOM
+
+	if (rand()%100 > fault_percent) {
+		CALL_FN_W_WW(r, fn, pathname, mode);
+	} else {
+		VALGRIND_PRINTF("Do a fault for fopen\n");
+		errno = FAILGRIND_GET_ERROR(error_list_for_fopen);
+		return NULL;
+	}
+	VALGRIND_PRINTF("wrapper-post fopen\n");
+	return r;
+}
+
+/*============================================================================*/
+/*============================================================================*/
+void * I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,malloc) ( size_t size )
+{
+	OrigFn fn;
+	void * r;
+	
+	fault_percent = VALGRIND_GET_PERCENT;
+
+	VALGRIND_GET_ORIG_FN(fn);
+	VALGRIND_PRINTF("wrapper-pre malloc %d\n", size);
+	INIT_RANDOM
+
+	VALGRIND_PRINTF("wrapper-pre rand %d %d\n", rand()%100, fault_percent);
+
+	if (rand()%100 > fault_percent) {
+		CALL_FN_W_W(r, fn, size);
+	} else {
+		VALGRIND_PRINTF("Do a fault for malloc\n");
+		errno = FAILGRIND_GET_ERROR(error_list_for_malloc);
+		return NULL;
+	}
+	VALGRIND_PRINTF("wrapper-post malloc %p\n", r);
+	return r;
+}
+
+/*============================================================================*/
+/*============================================================================*/
+int I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,socket) ( int domain, int type, int protocol )
+{
+	OrigFn fn;
+	int r;
+	
+	fault_percent = VALGRIND_GET_PERCENT;
+
+	VALGRIND_GET_ORIG_FN(fn);
+	VALGRIND_PRINTF("wrapper-pre socket\n");
+
+	if (rand()%100 > fault_percent) {
+		CALL_FN_W_WWW(r, fn, domain, type, protocol);
+	} else {
+		VALGRIND_PRINTF("Do a fault for socket\n");
+		errno = FAILGRIND_GET_ERROR(error_list_for_socket);
+		return -1;
+	}
+	return r;
+}
+
+/*============================================================================*/
+/*============================================================================*/
+int I_WRAP_SONAME_FNNAME_ZU(VG_Z_LIBC_SONAME,bind) ( int sockfd, const struct sockaddr *my_addr, socklen_t addrlen )
+{
+	OrigFn fn;
+	int r;
+	
+	fault_percent = VALGRIND_GET_PERCENT;
+
+	VALGRIND_GET_ORIG_FN(fn);
+	VALGRIND_PRINTF("wrapper-pre bind\n");
+
+	if (rand()%100 > fault_percent) {
+		CALL_FN_W_WWW(r, fn, sockfd, my_addr, addrlen);
+	} else {
+		VALGRIND_PRINTF("Do a fault for bind\n");
+		errno = FAILGRIND_GET_ERROR(error_list_for_bind);
+		return -1;
+	}
+	return r;
+}
+
--- orig/valgrind-3.7.0/failgrind/fg_main.c	1970-01-01 01:00:00.000000000 +0100
+++ valgrind-3.7.0/failgrind/fg_main.c	2012-08-01 16:13:00.000000000 +0200
@@ -0,0 +1,111 @@
+/*--------------------------------------------------------------------*/
+/*--- Failgrind: malloc and syscall failure generator.   fg_main.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+   This file is part of Failgrind, malloc and syscall failure generator,
+   which volontary make fail some functions.
+
+   Copyright (C) 2012 Corentin LABBE
+      corentin.labbe@geomatys.fr
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307, USA.
+
+   The GNU General Public License is contained in the file COPYING.
+*/
+
+#include "pub_tool_basics.h"
+#include "pub_tool_libcbase.h"
+#include "pub_tool_libcprint.h"
+#include "pub_tool_options.h"
+#include "pub_tool_tooliface.h"
+
+#include "failgrind.h"
+
+static Int clo_percent;
+
+static Bool fg_handle_client_request ( ThreadId tid, UWord* arg, UWord* ret )
+{
+	*ret = clo_percent;
+	return True;
+}
+
+static Bool fg_process_cmd_line_option(Char* arg)
+{
+	if VG_BINT_CLO(arg, "--percent", clo_percent, 0, 100) {}
+	else
+		return False;
+	return True;
+}
+
+static void fg_print_usage(void)
+{
+	VG_(printf)(
+"	--percent=<number>	percent of function call to fail\n"
+	);
+}
+
+static void fg_print_debug_usage(void)
+{
+	VG_(printf)(
+"    (none)\n"
+	);
+}
+
+static void fg_post_clo_init(void)
+{
+}
+
+static
+IRSB* fg_instrument ( VgCallbackClosure* closure,
+                      IRSB* bb,
+                      VexGuestLayout* layout,
+                      VexGuestExtents* vge,
+                      IRType gWordTy, IRType hWordTy )
+{
+    return bb;
+}
+
+static void fg_fini(Int exitcode)
+{
+}
+
+static void fg_pre_clo_init(void)
+{
+   VG_(details_name)            ("Failgrind");
+   VG_(details_version)         (NULL);
+   VG_(details_description)     ("malloc and syscall failure generator");
+   VG_(details_copyright_author)(
+      "Copyright (C) 2012, and GNU GPL'd, by LABBE Corentin.");
+   VG_(details_bug_reports_to)  (VG_BUGS_TO);
+
+   VG_(details_avg_translation_sizeB) ( 275 );
+
+   VG_(basic_tool_funcs)        (fg_post_clo_init,
+                                 fg_instrument,
+                                 fg_fini);
+   VG_(needs_client_requests)     (fg_handle_client_request);
+   VG_(needs_command_line_options)(fg_process_cmd_line_option,
+				fg_print_usage,
+				fg_print_debug_usage);
+
+}
+
+VG_DETERMINE_INTERFACE_VERSION(fg_pre_clo_init)
+
+/*--------------------------------------------------------------------*/
+/*--- end                                                          ---*/
+/*--------------------------------------------------------------------*/
--- orig/valgrind-3.7.0/failgrind/failgrind.h	1970-01-01 01:00:00.000000000 +0100
+++ valgrind-3.7.0/failgrind/failgrind.h	2012-08-01 14:16:05.000000000 +0200
@@ -0,0 +1,9 @@
+#include "valgrind.h"
+
+typedef
+	enum {
+	VG_USERREQ__GET_PERCENT = VG_USERREQ_TOOL_BASE('F','G')
+} Vg_FailGrindClientRequest;
+
+#define VALGRIND_GET_PERCENT (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GET_PERCENT, 0, 0, 0, 0, 0);
+

