aboutsummaryrefslogtreecommitdiff
path: root/libctf
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2020-06-05 18:38:03 +0100
committerNick Alcock <nick.alcock@oracle.com>2020-07-22 18:02:19 +0100
commita9b9870206658564272fe17d2079ed9eb6ffb15f (patch)
tree8c0d078b5ad067def1b1283624ae5200e41cf507 /libctf
parent1f2e8b5b87df91a0b8ff76fab75538dfcc2478f5 (diff)
downloadfsf-binutils-gdb-a9b9870206658564272fe17d2079ed9eb6ffb15f.zip
fsf-binutils-gdb-a9b9870206658564272fe17d2079ed9eb6ffb15f.tar.gz
fsf-binutils-gdb-a9b9870206658564272fe17d2079ed9eb6ffb15f.tar.bz2
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.
Diffstat (limited to 'libctf')
-rw-r--r--libctf/ChangeLog10
-rw-r--r--libctf/Makefile.in1
-rw-r--r--libctf/aclocal.m41
-rw-r--r--libctf/config.h.in3
-rwxr-xr-xlibctf/configure41
-rw-r--r--libctf/configure.ac6
-rw-r--r--libctf/ctf-impl.h5
7 files changed, 65 insertions, 2 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog
index 66e1552..be00e92 100644
--- a/libctf/ChangeLog
+++ b/libctf/ChangeLog
@@ -1,5 +1,15 @@
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+ * 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 <nick.alcock@oracle.com>
+
* ctf-sha1.h: New, inline wrappers around sha1_init_ctx and
sha1_process_bytes.
* ctf-impl.h: Include it.
diff --git a/libctf/Makefile.in b/libctf/Makefile.in
index 328edcd..bc38527 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 8ae4b53..df51584 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 897587e..2ddd512 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 58aaa3a..9f16ae9 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 26b062e..3799a0c 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 9c5f7ba..c2fcc92 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 <assert.h>
+#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. */