From patchwork Mon Sep 17 20:22:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Durigan Junior X-Patchwork-Id: 29425 Received: (qmail 48681 invoked by alias); 17 Sep 2018 20:22:59 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 48672 invoked by uid 89); 17 Sep 2018 20:22:58 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=printf_filtered, informing, PACKAGE, installer X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 17 Sep 2018 20:22:56 +0000 Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EBAEA80F6D for ; Mon, 17 Sep 2018 20:22:54 +0000 (UTC) Received: from psique.yyz.redhat.com (unused-10-15-17-196.yyz.redhat.com [10.15.17.196]) by smtp.corp.redhat.com (Postfix) with ESMTP id E760E309137F; Mon, 17 Sep 2018 20:22:50 +0000 (UTC) From: Sergio Durigan Junior To: GDB Patches Cc: Pedro Alves , Sergio Durigan Junior Subject: [PATCH] Add parameter to allow enabling/disabling selftests via configure Date: Mon, 17 Sep 2018 16:22:42 -0400 Message-Id: <20180917202242.28583-1-sergiodj@redhat.com> In-Reply-To: <20180814054221.13061-1-sergiodj@redhat.com> References: <20180814054221.13061-1-sergiodj@redhat.com> X-IsSubscribed: yes This is a follow-up of: https://sourceware.org/ml/gdb-patches/2018-08/msg00347.html Instead of going throttle and always enabling our selftests (even in non-development builds), this patch is a bit more conservative and introduces a configure option ("--enable-unit-tests") that allows the user to choose whether she wants unit tests in the build or not. Note that the current behaviour is retained: if no option is provided, GDB will have selftests included in a development build, and will *not* have selftests included in a non-development build. The rationale for having this option is still the same: due to the many racy testcases and random failures we see when running the GDB testsuite, it is unfortunately not possible to perform a full test when one is building a downstream package. As the Fedora GDB maintainer and one of the Debian GDB uploaders, I feel like this situation could be improved by, at least, executing our selftests after the package has been built. This patch introduces no regressions to our build. OK? gdb/ChangeLog: 2018-09-17 Sergio Durigan Junior * README (`configure' options): Add documentation for new "--enable-unit-tests" option. * configure: Regenerate. * configure.ac: Add "--enable-unit-tests" option. * maint.c (maintenance_selftest): Update message informing that selftests have been disabled. (maintenance_info_selftests): Likewise. gdb/gdbserver/ChangeLog: 2018-09-17 Sergio Durigan Junior * configure: Regenerate. * configure.ac: Add "--enable-unit-tests" option. * configure.srv: Use "$enable_unittests" instead of "$development" when checking whether unit tests have been enabled. * server.c (captured_main): Update message informing that selftests have been disabled. gdb/testsuite/ChangeLog: 2018-09-17 Sergio Durigan Junior * gdb.gdb/unittest.exp: Update expected message informing that selftests have been disabled. * gdb.server/unittest.exp: Likewise. --- gdb/README | 6 ++++++ gdb/configure | 23 ++++++++++++++++++++++- gdb/configure.ac | 17 ++++++++++++++++- gdb/gdbserver/configure | 23 ++++++++++++++++++++++- gdb/gdbserver/configure.ac | 17 ++++++++++++++++- gdb/gdbserver/configure.srv | 2 +- gdb/gdbserver/server.c | 2 +- gdb/maint.c | 4 ++-- gdb/testsuite/gdb.gdb/unittest.exp | 2 +- gdb/testsuite/gdb.server/unittest.exp | 2 +- 10 files changed, 88 insertions(+), 10 deletions(-) diff --git a/gdb/README b/gdb/README index e43887ffcd..e6fe3b183d 100644 --- a/gdb/README +++ b/gdb/README @@ -524,6 +524,12 @@ prefer; but you may abbreviate option names if you use `--'. after being built, the location of the system-wide init file will be adjusted accordingly. +`--enable-unit-tests[=yes|no]' + Enable (i.e., include) support for unit tests when compiling GDB + and GDBServer. Note that if this option is not passed, GDB will + have selftests if it is a development build, and will *not* have + selftests if it a non-development build. + `configure' accepts other options, for compatibility with configuring other GNU tools recursively; but these are the only options that affect GDB or its supporting libraries. diff --git a/gdb/configure b/gdb/configure index d92a256f1f..18e04c0c50 100755 --- a/gdb/configure +++ b/gdb/configure @@ -895,6 +895,7 @@ enable_sim enable_gdbserver with_babeltrace with_libbabeltrace_prefix +enable_unit_tests ' ac_precious_vars='build_alias host_alias @@ -1559,6 +1560,8 @@ Optional Features: --enable-sim link gdb with simulator --enable-gdbserver automatically build gdbserver (yes/no/auto, default is auto) + --enable-unit-tests Enable the inclusion of unit tests when compiling + GDB Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -17731,7 +17734,25 @@ ac_config_links="$ac_config_links $ac_config_links_1" $as_echo "#define GDB_DEFAULT_HOST_CHARSET \"UTF-8\"" >>confdefs.h -if $development; then +# Check whether we will enable the inclusion of unit tests when +# compiling GDB. +# +# The default value of this option changes depending whether we're on +# development mode (in which case it's "true") or not (in which case +# it's "false"). +# Check whether --enable-unit-tests was given. +if test "${enable_unit_tests+set}" = set; then : + enableval=$enable_unit_tests; case "${enableval}" in + yes) enable_unittests=true ;; + no) enable_unittests=false ;; + *) as_fn_error $? "bad value ${enableval} for enable unit tests option" "$LINENO" 5 ;; +esac +else + enable_unittests=$development +fi + + +if $enable_unittests; then $as_echo "#define GDB_SELF_TEST 1" >>confdefs.h diff --git a/gdb/configure.ac b/gdb/configure.ac index e38604cb65..3ef43a95f4 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -2267,7 +2267,22 @@ dnl At the moment, we just assume it's UTF-8. AC_DEFINE(GDB_DEFAULT_HOST_CHARSET, "UTF-8", [Define to be a string naming the default host character set.]) -if $development; then +# Check whether we will enable the inclusion of unit tests when +# compiling GDB. +# +# The default value of this option changes depending whether we're on +# development mode (in which case it's "true") or not (in which case +# it's "false"). +AC_ARG_ENABLE(unit-tests, +AS_HELP_STRING([--enable-unit-tests], +[Enable the inclusion of unit tests when compiling GDB]), +[case "${enableval}" in + yes) enable_unittests=true ;; + no) enable_unittests=false ;; + *) AC_MSG_ERROR(bad value ${enableval} for enable unit tests option) ;; +esac], [enable_unittests=$development]) + +if $enable_unittests; then AC_DEFINE(GDB_SELF_TEST, 1, [Define if self-testing features should be enabled]) CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) common/selftest.o selftest-arch.o" diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index f5cbbaea78..9915e212d7 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -722,6 +722,7 @@ enable_option_checking enable_maintainer_mode enable_largefile enable_libmcheck +enable_unit_tests with_ust with_ust_include with_ust_lib @@ -1367,6 +1368,8 @@ Optional Features: sometimes confusing) to the casual installer --disable-largefile omit support for large files --enable-libmcheck Try linking with -lmcheck if available + --enable-unit-tests Enable the inclusion of unit tests when compiling + GDB --enable-werror treat compile warnings as errors --enable-build-warnings enable build-time compiler warnings if gcc is used --enable-gdb-build-warnings @@ -5889,7 +5892,25 @@ fi fi -if $development; then +# Check whether we will enable the inclusion of unit tests when +# compiling GDB. +# +# The default value of this option changes depending whether we're on +# development mode (in which case it's "true") or not (in which case +# it's "false"). +# Check whether --enable-unit-tests was given. +if test "${enable_unit_tests+set}" = set; then : + enableval=$enable_unit_tests; case "${enableval}" in + yes) enable_unittests=true ;; + no) enable_unittests=false ;; + *) as_fn_error $? "bad value ${enableval} for enable unit tests option" "$LINENO" 5 ;; +esac +else + enable_unittests=$development +fi + + +if $enable_unittests; then srv_selftest_objs="common/selftest.o" $as_echo "#define GDB_SELF_TEST 1" >>confdefs.h diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index 99bc46221c..3c6ed9143f 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -54,7 +54,22 @@ else fi GDB_AC_LIBMCHECK(${libmcheck_default}) -if $development; then +# Check whether we will enable the inclusion of unit tests when +# compiling GDB. +# +# The default value of this option changes depending whether we're on +# development mode (in which case it's "true") or not (in which case +# it's "false"). +AC_ARG_ENABLE(unit-tests, +AS_HELP_STRING([--enable-unit-tests], +[Enable the inclusion of unit tests when compiling GDB]), +[case "${enableval}" in + yes) enable_unittests=true ;; + no) enable_unittests=false ;; + *) AC_MSG_ERROR(bad value ${enableval} for enable unit tests option) ;; +esac], [enable_unittests=$development]) + +if $enable_unittests; then srv_selftest_objs="common/selftest.o" AC_DEFINE(GDB_SELF_TEST, 1, [Define if self-testing features should be enabled]) diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index 72e6a0d87f..636d830f1a 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -24,7 +24,7 @@ # Default hostio_last_error implementation srv_hostio_err_objs="hostio-errno.o" -if $development; then +if $enable_unittests; then srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o linux-x86-tdesc-selftest.o" srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o" else diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index a491ae0257..f2f0d569ab 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -3790,7 +3790,7 @@ captured_main (int argc, char *argv[]) #if GDB_SELF_TEST selftests::run_tests (selftest_filter); #else - printf (_("Selftests are not available in a non-development build.\n")); + printf (_("Selftests have been disabled for this build.\n")); #endif throw_quit ("Quit"); } diff --git a/gdb/maint.c b/gdb/maint.c index 19db8a850b..01a80f5d73 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -943,7 +943,7 @@ maintenance_selftest (const char *args, int from_tty) selftests::run_tests (args); #else printf_filtered (_("\ -Selftests are not available in a non-development build.\n")); +Selftests have been disabled for this build.\n")); #endif } @@ -957,7 +957,7 @@ maintenance_info_selftests (const char *arg, int from_tty) }); #else printf_filtered (_("\ -Selftests are not available in a non-development build.\n")); +Selftests have been disabled for this build.\n")); #endif } diff --git a/gdb/testsuite/gdb.gdb/unittest.exp b/gdb/testsuite/gdb.gdb/unittest.exp index 1c835850b8..8e3e9a1761 100644 --- a/gdb/testsuite/gdb.gdb/unittest.exp +++ b/gdb/testsuite/gdb.gdb/unittest.exp @@ -24,7 +24,7 @@ gdb_test_multiple $test $test { gdb_assert "$num_ran > 0" $test } - -re "Selftests are not available in a non-development build.\r\n$gdb_prompt $" { + -re "Selftests have been disabled for this build.\r\n$gdb_prompt $" { unsupported $test } } diff --git a/gdb/testsuite/gdb.server/unittest.exp b/gdb/testsuite/gdb.server/unittest.exp index e947ff2c30..b0a7c6ae56 100644 --- a/gdb/testsuite/gdb.server/unittest.exp +++ b/gdb/testsuite/gdb.server/unittest.exp @@ -38,7 +38,7 @@ gdb_expect { gdb_assert "$num_ran > 0" $test } - -re "Selftests are not available in a non-development build.\r\n$" { + -re "Selftests have been disabled for this build.\r\n$" { unsupported $test }