[PATCH] Add --enable-valgrind-annotations
Richard Biener
rguenther@suse.de
Tue Mar 18 13:55:00 GMT 2014
This is another patch (well, I've polished it a bit) that was sitting
in my local tree for some time. I've not enabled the ggc-common.c
code (I merely want to get rid of the false possitives).
Queued for 4.10 unless I'm told otherwise.
Richard.
2014-03-18 Richard Biener <rguenther@suse.de>
* configure.ac: Do valgrind header checks unconditionally.
Add --enable-valgrind-annotations.
* system.h: Guard valgrind header inclusion with
ENABLE_VALGRIND_ANNOTATIONS instead of ENABLE_VALGRIND_CHECKING.
* alloc-pool.c (pool_alloc, pool_free): Use
ENABLE_VALGRIND_ANNOTATIONS instead of ENABLE_VALGRIND_CHECKING
to guard possibly dead code.
* config.in: Regenerated.
* configure: Likewise.
Index: gcc/configure.ac
===================================================================
*** gcc/configure.ac (revision 208642)
--- gcc/configure.ac (working copy)
*************** dnl # an if statement. This was the sou
*** 512,538 ****
dnl # in converting to autoconf 2.5x!
AC_CHECK_HEADER(valgrind.h, have_valgrind_h=yes, have_valgrind_h=no)
! if test x$ac_valgrind_checking != x ; then
! # It is certainly possible that there's valgrind but no valgrind.h.
! # GCC relies on making annotations so we must have both.
! AC_MSG_CHECKING(for VALGRIND_DISCARD in <valgrind/memcheck.h>)
! AC_PREPROC_IFELSE([AC_LANG_SOURCE(
! [[#include <valgrind/memcheck.h>
#ifndef VALGRIND_DISCARD
#error VALGRIND_DISCARD not defined
#endif]])],
[gcc_cv_header_valgrind_memcheck_h=yes],
[gcc_cv_header_valgrind_memcheck_h=no])
! AC_MSG_RESULT($gcc_cv_header_valgrind_memcheck_h)
! AC_MSG_CHECKING(for VALGRIND_DISCARD in <memcheck.h>)
! AC_PREPROC_IFELSE([AC_LANG_SOURCE(
! [[#include <memcheck.h>
#ifndef VALGRIND_DISCARD
#error VALGRIND_DISCARD not defined
#endif]])],
[gcc_cv_header_memcheck_h=yes],
[gcc_cv_header_memcheck_h=no])
! AC_MSG_RESULT($gcc_cv_header_memcheck_h)
AM_PATH_PROG_WITH_TEST(valgrind_path, valgrind,
[$ac_dir/$ac_word --version | grep valgrind- >/dev/null 2>&1])
if test "x$valgrind_path" = "x" \
--- 512,547 ----
dnl # in converting to autoconf 2.5x!
AC_CHECK_HEADER(valgrind.h, have_valgrind_h=yes, have_valgrind_h=no)
! # It is certainly possible that there's valgrind but no valgrind.h.
! # GCC relies on making annotations so we must have both.
! AC_MSG_CHECKING(for VALGRIND_DISCARD in <valgrind/memcheck.h>)
! AC_PREPROC_IFELSE([AC_LANG_SOURCE(
! [[#include <valgrind/memcheck.h>
#ifndef VALGRIND_DISCARD
#error VALGRIND_DISCARD not defined
#endif]])],
[gcc_cv_header_valgrind_memcheck_h=yes],
[gcc_cv_header_valgrind_memcheck_h=no])
! AC_MSG_RESULT($gcc_cv_header_valgrind_memcheck_h)
! AC_MSG_CHECKING(for VALGRIND_DISCARD in <memcheck.h>)
! AC_PREPROC_IFELSE([AC_LANG_SOURCE(
! [[#include <memcheck.h>
#ifndef VALGRIND_DISCARD
#error VALGRIND_DISCARD not defined
#endif]])],
[gcc_cv_header_memcheck_h=yes],
[gcc_cv_header_memcheck_h=no])
! AC_MSG_RESULT($gcc_cv_header_memcheck_h)
! if test $gcc_cv_header_valgrind_memcheck_h = yes; then
! AC_DEFINE(HAVE_VALGRIND_MEMCHECK_H, 1,
! [Define if valgrind's valgrind/memcheck.h header is installed.])
! fi
! if test $gcc_cv_header_memcheck_h = yes; then
! AC_DEFINE(HAVE_MEMCHECK_H, 1,
! [Define if valgrind's memcheck.h header is installed.])
! fi
!
! if test x$ac_valgrind_checking != x ; then
AM_PATH_PROG_WITH_TEST(valgrind_path, valgrind,
[$ac_dir/$ac_word --version | grep valgrind- >/dev/null 2>&1])
if test "x$valgrind_path" = "x" \
*************** if test x$ac_valgrind_checking != x ; th
*** 546,559 ****
AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
[Define if you want to run subprograms and generated programs
through valgrind (a memory checker). This is extremely expensive.])
- if test $gcc_cv_header_valgrind_memcheck_h = yes; then
- AC_DEFINE(HAVE_VALGRIND_MEMCHECK_H, 1,
- [Define if valgrind's valgrind/memcheck.h header is installed.])
- fi
- if test $gcc_cv_header_memcheck_h = yes; then
- AC_DEFINE(HAVE_MEMCHECK_H, 1,
- [Define if valgrind's memcheck.h header is installed.])
- fi
fi
AC_SUBST(valgrind_path_defines)
AC_SUBST(valgrind_command)
--- 555,560 ----
*************** gather_stats=`if test $enable_gather_det
*** 592,597 ****
--- 593,613 ----
AC_DEFINE_UNQUOTED(GATHER_STATISTICS, $gather_stats,
[Define to enable detailed memory allocation stats gathering.])
+ AC_ARG_ENABLE(valgrind-annotations,
+ [AS_HELP_STRING([--enable-valgrind-annotations],
+ [enable valgrind runtime interaction])], [],
+ [enable_valgrind_annotations=no])
+ if test x$enable_valgrind_annotations != xno \
+ || test x$ac_valgrind_checking != x; then
+ if (test $have_valgrind_h = no \
+ && test $gcc_cv_header_memcheck_h = no \
+ && test $gcc_cv_header_valgrind_memcheck_h = no); then
+ AC_MSG_ERROR([*** Can't find valgrind/memcheck.h, memcheck.h or valgrind.h])
+ fi
+ AC_DEFINE(ENABLE_VALGRIND_ANNOTATIONS, 1,
+ [Define to get calls to the valgrind runtime enabled.])
+ fi
+
# -------------------------------
# Miscenalleous configure options
# -------------------------------
Index: gcc/system.h
===================================================================
*** gcc/system.h (revision 208642)
--- gcc/system.h (working copy)
*************** helper_const_non_const_cast (const char
*** 1025,1031 ****
#endif
#endif
! #ifdef ENABLE_VALGRIND_CHECKING
# ifdef HAVE_VALGRIND_MEMCHECK_H
# include <valgrind/memcheck.h>
# elif defined HAVE_MEMCHECK_H
--- 1025,1031 ----
#endif
#endif
! #ifdef ENABLE_VALGRIND_ANNOTATIONS
# ifdef HAVE_VALGRIND_MEMCHECK_H
# include <valgrind/memcheck.h>
# elif defined HAVE_MEMCHECK_H
Index: gcc/alloc-pool.c
===================================================================
*** gcc/alloc-pool.c (revision 208642)
--- gcc/alloc-pool.c (working copy)
*************** void *
*** 250,256 ****
pool_alloc (alloc_pool pool)
{
alloc_pool_list header;
! #ifdef ENABLE_VALGRIND_CHECKING
int size;
#endif
--- 250,256 ----
pool_alloc (alloc_pool pool)
{
alloc_pool_list header;
! #ifdef ENABLE_VALGRIND_ANNOTATIONS
int size;
#endif
*************** pool_alloc (alloc_pool pool)
*** 265,271 ****
}
gcc_checking_assert (pool);
! #ifdef ENABLE_VALGRIND_CHECKING
size = pool->elt_size - offsetof (allocation_object, u.data);
#endif
--- 265,271 ----
}
gcc_checking_assert (pool);
! #ifdef ENABLE_VALGRIND_ANNOTATIONS
size = pool->elt_size - offsetof (allocation_object, u.data);
#endif
*************** void
*** 334,340 ****
pool_free (alloc_pool pool, void *ptr)
{
alloc_pool_list header;
! #if defined(ENABLE_VALGRIND_CHECKING) || defined(ENABLE_CHECKING)
int size;
size = pool->elt_size - offsetof (allocation_object, u.data);
#endif
--- 334,340 ----
pool_free (alloc_pool pool, void *ptr)
{
alloc_pool_list header;
! #if defined(ENABLE_VALGRIND_ANNOTATIONS) || defined(ENABLE_CHECKING)
int size;
size = pool->elt_size - offsetof (allocation_object, u.data);
#endif
More information about the Gcc-patches
mailing list