New --enable-threading configure option to control use of threads in GDB/GDBserver

Add the --enable-threading configure option so multithreading can be disabled
at configure time. This is useful for statically-linked builds of
GDB/GDBserver, since the thread library doesn't play well with that setup.

If you try to run a statically-linked GDB built with threading, it will crash
when setting up the number of worker threads.

This new option is also convenient when debugging GDB in a system with lots of
threads, where the thread discovery code in GDB will emit too many messages,
like so:

[New Thread 0xfffff74d3a50 (LWP 2625599)]

If you have X threads, that message will be repeated X times.

The default for --enable-threading is "yes".
This commit is contained in:
Luis Machado 2021-11-26 11:31:18 -03:00
parent 4d3605c8ca
commit 261b07488b
5 changed files with 99 additions and 6 deletions

View File

@ -3,6 +3,17 @@
*** Changes since GDB 11
* Configure changes
--enable-threading
Enable or disable multithreaded symbol loading. This is enabled
by default, but passing --disable-threading or --enable-threading=no
to configure will disable it.
Disabling this can cause a performance penalty when there are a lot of
symbols to load, but is useful for debugging purposes.
* New commands
maint set backtrace-on-fatal-signal on|off

24
gdb/configure vendored
View File

@ -910,6 +910,7 @@ with_python
with_python_libdir
with_guile
enable_source_highlight
enable_threading
with_intel_pt
with_libipt_prefix
with_libipt_type
@ -1597,6 +1598,8 @@ Optional Features:
--disable-rpath do not hardcode runtime library paths
--enable-source-highlight
enable source-highlight for source listings
--enable-threading include support for parallel processing of data
(yes/no)
--enable-werror treat compile warnings as errors
--enable-build-warnings enable build-time compiler warnings if gcc is used
--enable-gdb-build-warnings
@ -14065,6 +14068,22 @@ fi
done
# ----------------------- #
# Check for threading. #
# ----------------------- #
# Check whether --enable-threading was given.
if test "${enable_threading+set}" = set; then :
enableval=$enable_threading; case "$enableval" in
yes) want_threading=yes ;;
no) want_threading=no ;;
*) as_fn_error $? "bad value $enableval for threading" "$LINENO" 5 ;;
esac
else
want_threading=yes
fi
# Check for std::thread. This does not work on some platforms, like
# mingw and DJGPP.
ac_ext=cpp
@ -14762,10 +14781,13 @@ done
LIBS="$save_LIBS"
CXXFLAGS="$save_CXXFLAGS"
fi
if test "$gdb_cv_cxx_std_thread" = "yes"; then
if test "$want_threading" = "yes"; then
if test "$gdb_cv_cxx_std_thread" = "yes"; then
$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h
fi
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'

24
gdbserver/configure vendored
View File

@ -746,6 +746,7 @@ ac_user_opts='
enable_option_checking
enable_maintainer_mode
enable_largefile
enable_threading
with_intel_pt
with_gnu_ld
enable_rpath
@ -1396,6 +1397,8 @@ Optional Features:
enable make rules and dependencies not useful (and
sometimes confusing) to the casual installer
--disable-largefile omit support for large files
--enable-threading include support for parallel processing of data
(yes/no)
--disable-rpath do not hardcode runtime library paths
--enable-unit-tests Enable the inclusion of unit tests when compiling
GDB
@ -7264,6 +7267,22 @@ fi
done
# ----------------------- #
# Check for threading. #
# ----------------------- #
# Check whether --enable-threading was given.
if test "${enable_threading+set}" = set; then :
enableval=$enable_threading; case "$enableval" in
yes) want_threading=yes ;;
no) want_threading=no ;;
*) as_fn_error $? "bad value $enableval for threading" "$LINENO" 5 ;;
esac
else
want_threading=yes
fi
# Check for std::thread. This does not work on some platforms, like
# mingw and DJGPP.
ac_ext=cpp
@ -7961,10 +7980,13 @@ done
LIBS="$save_LIBS"
CXXFLAGS="$save_CXXFLAGS"
fi
if test "$gdb_cv_cxx_std_thread" = "yes"; then
if test "$want_threading" = "yes"; then
if test "$gdb_cv_cxx_std_thread" = "yes"; then
$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h
fi
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'

View File

@ -76,6 +76,19 @@ AC_DEFUN([GDB_AC_COMMON], [
# Define HAVE_KINFO_GETFILE if kinfo_getfile is available.
AC_CHECK_FUNCS(kinfo_getfile)
# ----------------------- #
# Check for threading. #
# ----------------------- #
AC_ARG_ENABLE(threading,
AS_HELP_STRING([--enable-threading], [include support for parallel processing of data (yes/no)]),
[case "$enableval" in
yes) want_threading=yes ;;
no) want_threading=no ;;
*) AC_MSG_ERROR([bad value $enableval for threading]) ;;
esac],
[want_threading=yes])
# Check for std::thread. This does not work on some platforms, like
# mingw and DJGPP.
AC_LANG_PUSH([C++])
@ -101,9 +114,12 @@ AC_DEFUN([GDB_AC_COMMON], [
LIBS="$save_LIBS"
CXXFLAGS="$save_CXXFLAGS"
fi
if test "$gdb_cv_cxx_std_thread" = "yes"; then
AC_DEFINE(CXX_STD_THREAD, 1,
[Define to 1 if std::thread works.])
if test "$want_threading" = "yes"; then
if test "$gdb_cv_cxx_std_thread" = "yes"; then
AC_DEFINE(CXX_STD_THREAD, 1,
[Define to 1 if std::thread works.])
fi
fi
AC_LANG_POP

24
gdbsupport/configure vendored
View File

@ -767,6 +767,7 @@ enable_silent_rules
enable_dependency_tracking
enable_plugins
enable_largefile
enable_threading
with_intel_pt
with_gnu_ld
enable_rpath
@ -1419,6 +1420,8 @@ Optional Features:
speeds up one-time build
--enable-plugins Enable support for plugins
--disable-largefile omit support for large files
--enable-threading include support for parallel processing of data
(yes/no)
--disable-rpath do not hardcode runtime library paths
--enable-unit-tests Enable the inclusion of unit tests when compiling
GDB
@ -8277,6 +8280,22 @@ fi
done
# ----------------------- #
# Check for threading. #
# ----------------------- #
# Check whether --enable-threading was given.
if test "${enable_threading+set}" = set; then :
enableval=$enable_threading; case "$enableval" in
yes) want_threading=yes ;;
no) want_threading=no ;;
*) as_fn_error $? "bad value $enableval for threading" "$LINENO" 5 ;;
esac
else
want_threading=yes
fi
# Check for std::thread. This does not work on some platforms, like
# mingw and DJGPP.
ac_ext=cpp
@ -8974,10 +8993,13 @@ done
LIBS="$save_LIBS"
CXXFLAGS="$save_CXXFLAGS"
fi
if test "$gdb_cv_cxx_std_thread" = "yes"; then
if test "$want_threading" = "yes"; then
if test "$gdb_cv_cxx_std_thread" = "yes"; then
$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h
fi
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'