public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/4] gdb/selftest.m4: ensure $development is set
@ 2020-03-05 19:30 Simon Marchi
  2020-03-05 19:30 ` [PATCH 2/4] Move sourcing of development.sh to GDB_AC_COMMON Simon Marchi
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Simon Marchi @ 2020-03-05 19:30 UTC (permalink / raw)
  To: gdb-patches; +Cc: Simon Marchi

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<char, std::char_traits<char>, std::allocator<char> > 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<char, std::char_traits<char>, std::allocator<char> > 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<char, std::char_traits<char>, std::allocator<char> > 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<char, std::char_traits<char>, std::allocator<char> > 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
-- 
2.25.1

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-03-12 18:19 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-05 19:30 [PATCH 1/4] gdb/selftest.m4: ensure $development is set Simon Marchi
2020-03-05 19:30 ` [PATCH 2/4] Move sourcing of development.sh to GDB_AC_COMMON Simon Marchi
2020-03-05 19:30 ` [PATCH 3/4] Don't include selftests objects in build when unit tests are disabled Simon Marchi
2020-03-05 19:30 ` [PATCH 4/4] Move gdb/selftest.m4 to gdbsupport/selftest.m4 Simon Marchi
2020-03-05 19:42 ` [PATCH 1/4] gdb/selftest.m4: ensure $development is set Simon Marchi
2020-03-12 18:07 ` Tom Tromey
2020-03-12 18:19   ` Simon Marchi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).