From a9b9870206658564272fe17d2079ed9eb6ffb15f Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Fri, 5 Jun 2020 18:38:03 +0100 Subject: [PATCH] libctf, dedup: add new configure option --enable-libctf-hash-debugging Add a new debugging configure option, --enable-libctf-hash-debugging, off by default, which lets you configure in expensive internal consistency checks and enable the printing of debugging output when LIBCTF_DEBUG=t before type deduplication has happened. In this commit we just add the option and cause it to turn ctf_assert into a real, hard assert for easier debugging. libctf/ * configure.ac: Add --enable-libctf-hash-debugging. * aclocal.m4: Pull in enable.m4, for GCC_ENABLE. * Makefile.in: Regenerated. * configure: Likewise. * config.h.in: Likewise. * ctf-impl.h [ENABLE_LIBCTF_HASH_DEBUGGING] (ctf_assert): Define to assert. --- libctf/ChangeLog | 10 ++++++++++ libctf/Makefile.in | 1 + libctf/aclocal.m4 | 1 + libctf/config.h.in | 3 +++ libctf/configure | 41 +++++++++++++++++++++++++++++++++++++++-- libctf/configure.ac | 6 ++++++ libctf/ctf-impl.h | 5 +++++ 7 files changed, 65 insertions(+), 2 deletions(-) diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 66e15522e09..be00e920160 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,13 @@ +2020-07-22 Nick Alcock + + * configure.ac: Add --enable-libctf-hash-debugging. + * aclocal.m4: Pull in enable.m4, for GCC_ENABLE. + * Makefile.in: Regenerated. + * configure: Likewise. + * config.h.in: Likewise. + * ctf-impl.h [ENABLE_LIBCTF_HASH_DEBUGGING] + (ctf_assert): Define to assert. + 2020-07-22 Nick Alcock * ctf-sha1.h: New, inline wrappers around sha1_init_ctx and diff --git a/libctf/Makefile.in b/libctf/Makefile.in index 328edcd5511..bc385278e09 100644 --- a/libctf/Makefile.in +++ b/libctf/Makefile.in @@ -113,6 +113,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \ $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/gettext-sister.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/override.m4 \ diff --git a/libctf/aclocal.m4 b/libctf/aclocal.m4 index 8ae4b534629..df51584d837 100644 --- a/libctf/aclocal.m4 +++ b/libctf/aclocal.m4 @@ -1230,6 +1230,7 @@ AC_SUBST([am__untar]) m4_include([../bfd/acinclude.m4]) m4_include([../config/acx.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/enable.m4]) m4_include([../config/gettext-sister.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/override.m4]) diff --git a/libctf/config.h.in b/libctf/config.h.in index 897587e5875..2ddd5126088 100644 --- a/libctf/config.h.in +++ b/libctf/config.h.in @@ -3,6 +3,9 @@ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD +/* Enable expensive debugging of CTF deduplication type hashing */ +#undef ENABLE_LIBCTF_HASH_DEBUGGING + /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS diff --git a/libctf/configure b/libctf/configure index 58aaa3a529b..9f16ae92b8d 100755 --- a/libctf/configure +++ b/libctf/configure @@ -642,6 +642,8 @@ SHARED_LIBADD SHARED_LDFLAGS NEED_CTF_QSORT_R_FALSE NEED_CTF_QSORT_R_TRUE +ENABLE_LIBCTF_HASH_DEBUGGING_FALSE +ENABLE_LIBCTF_HASH_DEBUGGING_TRUE zlibinc zlibdir ac_libctf_warn_cflags @@ -796,6 +798,7 @@ enable_werror_always enable_maintainer_mode enable_install_libbfd with_system_zlib +enable_libctf_hash_debugging ' ac_precious_vars='build_alias host_alias @@ -1441,6 +1444,9 @@ Optional Features: enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-install-libbfd controls installation of libbfd and related headers + --enable-libctf-hash-debugging + Enable expensive debugging of CTF deduplication type + hashing [default=no] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -11513,7 +11519,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11516 "configure" +#line 11522 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11619,7 +11625,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11622 "configure" +#line 11628 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12799,6 +12805,33 @@ fi + # Check whether --enable-libctf-hash-debugging was given. +if test "${enable_libctf_hash_debugging+set}" = set; then : + enableval=$enable_libctf_hash_debugging; + case "$enableval" in + yes|no) ;; + *) as_fn_error $? "Argument to enable/disable libctf-hash-debugging must be yes or no" "$LINENO" 5 ;; + esac + +else + enable_libctf_hash_debugging=no +fi + + +if test "${enable_libctf_hash_debugging}" = yes; then + +$as_echo "#define ENABLE_LIBCTF_HASH_DEBUGGING 1" >>confdefs.h + +fi + if test "${enable_libctf_hash_debugging}" = yes; then + ENABLE_LIBCTF_HASH_DEBUGGING_TRUE= + ENABLE_LIBCTF_HASH_DEBUGGING_FALSE='#' +else + ENABLE_LIBCTF_HASH_DEBUGGING_TRUE='#' + ENABLE_LIBCTF_HASH_DEBUGGING_FALSE= +fi + + # Similar to GDB_AC_CHECK_BFD. OLD_CFLAGS=$CFLAGS OLD_LDFLAGS=$LDFLAGS @@ -13495,6 +13528,10 @@ if test -z "${INSTALL_LIBBFD_TRUE}" && test -z "${INSTALL_LIBBFD_FALSE}"; then as_fn_error $? "conditional \"INSTALL_LIBBFD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${ENABLE_LIBCTF_HASH_DEBUGGING_TRUE}" && test -z "${ENABLE_LIBCTF_HASH_DEBUGGING_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_LIBCTF_HASH_DEBUGGING\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${NEED_CTF_QSORT_R_TRUE}" && test -z "${NEED_CTF_QSORT_R_FALSE}"; then as_fn_error $? "conditional \"NEED_CTF_QSORT_R\" was never defined. diff --git a/libctf/configure.ac b/libctf/configure.ac index 26b062e7a54..3799a0cb906 100644 --- a/libctf/configure.ac +++ b/libctf/configure.ac @@ -67,6 +67,12 @@ AC_FUNC_MMAP AC_SEARCH_LIBS(dlopen, dl) AM_ZLIB +GCC_ENABLE([libctf-hash-debugging], [no], [], [Enable expensive debugging of CTF deduplication type hashing]) +if test "${enable_libctf_hash_debugging}" = yes; then + AC_DEFINE(ENABLE_LIBCTF_HASH_DEBUGGING, 1, [Enable expensive debugging of CTF deduplication type hashing]) +fi +AM_CONDITIONAL(ENABLE_LIBCTF_HASH_DEBUGGING, test "${enable_libctf_hash_debugging}" = yes) + # Similar to GDB_AC_CHECK_BFD. OLD_CFLAGS=$CFLAGS OLD_LDFLAGS=$LDFLAGS diff --git a/libctf/ctf-impl.h b/libctf/ctf-impl.h index 9c5f7bac65a..c2fcc92d672 100644 --- a/libctf/ctf-impl.h +++ b/libctf/ctf-impl.h @@ -71,9 +71,14 @@ extern "C" #endif +#if defined (ENABLE_LIBCTF_HASH_DEBUGGING) && !defined (NDEBUG) +#include +#define ctf_assert(fp, expr) (assert (expr), 1) +#else #define ctf_assert(fp, expr) \ _libctf_unlikely_ (ctf_assert_internal (fp, __FILE__, __LINE__, \ #expr, !!(expr))) +#endif /* libctf in-memory state. */ -- 2.30.2