From patchwork Thu Mar 5 19:30:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 38439 Received: (qmail 64509 invoked by alias); 5 Mar 2020 19:30:44 -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 64159 invoked by uid 89); 5 Mar 2020 19:30:33 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_SOFTFAIL autolearn=ham version=3.3.1 spammy=H*RU:sk:barracu, HX-Spam-Relays-External:sk:barracu, H*r:sk:barracu X-HELO: barracuda.ebox.ca Received: from barracuda.ebox.ca (HELO barracuda.ebox.ca) (96.127.255.19) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 05 Mar 2020 19:30:22 +0000 Received: from smtp.ebox.ca (smtp.ebox.ca [96.127.255.82]) by barracuda.ebox.ca with ESMTP id elnEitoSlI55ekmc (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 05 Mar 2020 14:30:12 -0500 (EST) Received: from epycamd.internal.efficios.com (192-222-181-218.qc.cable.ebox.net [192.222.181.218]) by smtp.ebox.ca (Postfix) with ESMTP id E71B8441B21; Thu, 5 Mar 2020 14:30:11 -0500 (EST) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 1/4] gdb/selftest.m4: ensure $development is set Date: Thu, 5 Mar 2020 14:30:08 -0500 Message-Id: <20200305193011.25939-1-simon.marchi@efficios.com> MIME-Version: 1.0 The GDB build in non-development mode (turn development to false in bfd/development.sh if you want to try) is currently broken: CXXLD gdb /home/smarchi/src/binutils-gdb/gdb/disasm-selftests.c:218: error: undefined reference to 'selftests::register_test_foreach_arch(std::__cxx11::basic_string, std::allocator > const&, void (*)(gdbarch*))' /home/smarchi/src/binutils-gdb/gdb/disasm-selftests.c:220: error: undefined reference to 'selftests::register_test_foreach_arch(std::__cxx11::basic_string, std::allocator > const&, void (*)(gdbarch*))' /home/smarchi/src/binutils-gdb/gdb/dwarf2/frame.c:2310: error: undefined reference to 'selftests::register_test_foreach_arch(std::__cxx11::basic_string, std::allocator > const&, void (*)(gdbarch*))' /home/smarchi/src/binutils-gdb/gdb/gdbarch-selftests.c:168: error: undefined reference to 'selftests::register_test_foreach_arch(std::__cxx11::basic_string, std::allocator > const&, void (*)(gdbarch*))' /home/smarchi/src/binutils-gdb/gdbsupport/selftest.cc:96: error: undefined reference to 'selftests::reset()' This is because the gdbsupport configure script doesn't source bfd/development.sh to set the development variable. When $development is unset, GDB_AC_SELFTEST defaults to enabling selftests. I don't think the macro was written with this intention in mind, it just happens to be that way. So gdbsupport thinks selftests are enabled, while gdb thinks they are disabled. gdbsupport compiles in code that calls selftests:: functions, which are normally provided by gdb, but gdb doesn't provide them, hence the undefined references. Since the macro relies on the `development` variable, I propose to modify it such that it errors out if $development does not have an expected value of "true" or "false". This could prevent a future similar problem from happening while refactoring the configure scripts. This catches the current problem in the gdbsupport configure script, which is fixed by sourcing development.sh, as it's done in gdb/configure.ac and gdbserver/configure.ac. gdb/ChangeLog: * selftest.m4 (GDB_AC_SELFTEST): Error out if $development is not "true" or "false". * configure: Re-generate. gdbserver/ChangeLog: * configure: Re-generate. gdbsupport/ChangeLog: * configure.ac: Source bfd/development.sh. * configure: Re-generate. --- gdb/configure | 5 +++++ gdb/selftest.m4 | 4 ++++ gdbserver/configure | 5 +++++ gdbsupport/configure | 8 ++++++++ gdbsupport/configure.ac | 3 +++ 5 files changed, 25 insertions(+) diff --git a/gdb/configure b/gdb/configure index f99cbe40f1..d885b94b8b 100755 --- a/gdb/configure +++ b/gdb/configure @@ -19186,6 +19186,11 @@ $as_echo "#define GDB_DEFAULT_HOST_CHARSET \"UTF-8\"" >>confdefs.h # 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"). + +if test "x$development" != xtrue && test "x$development" != xfalse; then : + as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5 +fi + # Check whether --enable-unit-tests was given. if test "${enable_unit_tests+set}" = set; then : enableval=$enable_unit_tests; case "${enableval}" in diff --git a/gdb/selftest.m4 b/gdb/selftest.m4 index 4969de1cad..a88aa96171 100644 --- a/gdb/selftest.m4 +++ b/gdb/selftest.m4 @@ -27,6 +27,10 @@ AC_DEFUN([GDB_AC_SELFTEST],[ # 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"). + +AS_IF([test "x$development" != xtrue && test "x$development" != xfalse], + [AC_MSG_ERROR([Invalid value for \$development, got "$development", expecting "true" or "false".])]) + AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], [Enable the inclusion of unit tests when compiling GDB]), diff --git a/gdbserver/configure b/gdbserver/configure index be5719eb77..06b25ba2b6 100755 --- a/gdbserver/configure +++ b/gdbserver/configure @@ -6083,6 +6083,11 @@ fi # 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"). + +if test "x$development" != xtrue && test "x$development" != xfalse; then : + as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5 +fi + # Check whether --enable-unit-tests was given. if test "${enable_unit_tests+set}" = set; then : enableval=$enable_unit_tests; case "${enableval}" in diff --git a/gdbsupport/configure b/gdbsupport/configure index a4871f8d5b..8d25380ec8 100755 --- a/gdbsupport/configure +++ b/gdbsupport/configure @@ -3538,6 +3538,9 @@ fi AM_BACKSLASH='\' +# Set the 'development' global. +. $srcdir/../bfd/development.sh + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -10603,6 +10606,11 @@ $as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; } # 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"). + +if test "x$development" != xtrue && test "x$development" != xfalse; then : + as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5 +fi + # Check whether --enable-unit-tests was given. if test "${enable_unit_tests+set}" = set; then : enableval=$enable_unit_tests; case "${enableval}" in diff --git a/gdbsupport/configure.ac b/gdbsupport/configure.ac index 401e16f821..0b2f2415d5 100644 --- a/gdbsupport/configure.ac +++ b/gdbsupport/configure.ac @@ -25,6 +25,9 @@ AC_CONFIG_AUX_DIR(..) AM_INIT_AUTOMAKE AM_SILENT_RULES([yes]) +# Set the 'development' global. +. $srcdir/../bfd/development.sh + AC_PROG_CC AC_PROG_CXX AC_PROG_RANLIB